c++超详细基础教程(快速入门)_c++菜鸟教程-程序员宅基地

技术标签: c++  c++基础  开发语言  

作者:那些年丶我们逃过的课

博客主页:那些年丶我们逃过的课的博客_程序员宅基地-c++题目,c++学习记录,c++小游戏领域博主

码云gitee:我的码云 - Gitee.com

期待你的关注,如果觉得还可以的话,可以点赞评论支持一下,每个评论我都会回访的

目录:

  1. 教程简介
  2. c++初步了解
    1. c++简介
    2. 我的第一个程序
    3. 标准库
    4. 编译器及编译环境
    5. 注释
  3. c++数据类型
    1. 数据类型
    2. 数据类型占用空间大小
    3. 变量
    4. 常量
  4. 运算符
    1. 算数运算符
    2. 关系运算符
    3. 逻辑运算符
    4. 位运算符
  5. 头文件
  6. 输入输出流
  7. 分支语句
    1. if-else语句
    2. switch语句
  8. 循环
    1. for循环
    2. while循环
    3. do-while循环
    4. 嵌套循环
    5. 循环控制语句
  9. 数组
  10. 字符串
    1. cstring
    2. string
  11. 函数
  12. 总结

1.教程简介

本文是 那些年丶我们逃过的课 根据各种教程总结的c++基础教程,可以让新手小白快速入门。

新人博主,如文章有何问题,请大佬指出

总结不易,如果觉得还行的话,请不要吝惜你的点赞,谢谢各位大佬了

本教程适用人群:c++的初学者,帮助他们快速入门。

本文大量参考于:C++ 教程 | 菜鸟教程 (runoob.com)新手跟着这里面学习也是很方便的


2.c++初步了解

2.1c++简介

[C++](C++_百度百科 (baidu.com))是一种计算机高级程序设计语言,由C语言扩展升级而产生 ,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。

C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。

C++拥有计算机运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

总的来说,c++是c语言的升级版,更加实用和简便。

在众多编程语言中,c++不是最简单的,但是确实数一数二的非常实用的,里面包含的各种库提供了丰富的功能。

2.2我的第一个程序

#include <iostream>
using namespace std;
int main()
{
    cout << "Hello, world!" << endl;	//程序从这里开始执行
    return 0;
}
效果:

在这里插入图片描述

press any key to exit… 点击任意键退出

在这里插入图片描述

  • using namespace std; 使用 std 命名空间。
  • int main()是主函数,程序从这里开始执行。
  • cout << “Hello World”;会在屏幕上显示消息 “Hello World”。
  • return 0;终止 main( )函数,并向调用进程返回值 0。
  • //或 ∗ ∗ * * 可以注释文本,详见2.5注释

2.3标准库

标准的 C++ 由三个重要部分组成:

  • 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。
  • C++ 标准库,提供了大量的函数,用于操作文件、字符串等。
  • 标准模板库(STL),提供了大量的方法,用于操作数据结构等。

2.4编译器及编译环境

目前主流的编译器有:**MSVC、GCC、Cygwin、MinGW、Visual Studio、Dev-c++**等等

可以选择免费的编译器,也可以为了实用性,实用付费的编译器。

编译环境新手不需要做过多了解。

需要详细了解的可以参考:

  1. 【c/c++】C/C++的编译器|编译环境(非常全面的比较)_StudyWinter的博客-程序员宅基地_c++编译环境
  2. C++编译环境_na.na的博客-程序员宅基地

2.5注释

  1. 单行注释://+注释内容
  2. 多行注释: ∗ * +注释内容+ ∗ *

注释内容可以被你看见但是系统不会运行注释内容


3.c++数据类型

3.1数据类型

类型 关键字
布尔型 bool
字符型 char
整型 int
浮点型 float
双浮点型 double
无类型 void
宽字符型 wchar_t

宽字符型新手不需要学习。

一些基本类型可以使用一个或多个类型修饰符进行修饰:

  • signed 符号型
  • unsigned 无符号型
  • short 短型
  • long 长型

例如: long int、unsigned long int等

3.2数据类型占用空间大小

类型 范围
char 1 个字节 -128 到 127 或者 0 到 255
unsigned char 1 个字节 0 到 255
signed char 1 个字节 -128 到 127
int 4 个字节 -2147483648 到 2147483647
unsigned int 4 个字节 0 到 4294967295
signed int 4 个字节 -2147483648 到 2147483647
short int 2 个字节 -32768 到 32767
unsigned short int 2 个字节 0 到 65,535
signed short int 2 个字节 -32768 到 32767
long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
signed long int 8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int 8 个字节 0 到 18,446,744,073,709,551,615
float 4 个字节 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字)
double 8 个字节 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字)
long double 16 个字节 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。
wchar_t 2 或 4 个字节 1 个宽字符

3.3变量

变量其实只不过是程序可操作的存储区的名称。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。

变量的名称可以由字母、数字和下划线字符组成,并且不能是关键字。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C++ 是大小写敏感的。

tip:关键字:各种数据类型、函数名等等(大小写不一样就不算关键字了)

变量声明:

在这里插入图片描述

3.4常量

一下可进行了解,不必深究:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

常量声明:

在 C++ 中,有两种简单的定义常量的方式:

  • 使用 #define 预处理器。
  • 使用 const 关键字。
  1. #define + 常数名 + 常数
  2. const + 数据类型 +常量名 = 常数

4.运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符,新手需要了解如下运算符:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符(只需了解,以后要讲)

4.1算数运算符

运算符 描述 实例
+ 把两个操作数相加 A + B 将得到 30
- 从第一个操作数中减去第二个操作数 A - B 将得到 -10
* 把两个操作数相乘 A * B 将得到 200
/ 分子除以分母 B / A 将得到 2
% 取模运算符,整除后的余数 B % A 将得到 0
++ 自增运算符,整数值增加 1 A++ 将得到 11
自减运算符,整数值减少 1 A-- 将得到 9

4.2关系运算符

运算符 描述 实例
== 检查两个操作数的值是否相等,如果相等则条件为真。 (A == B) 不为真。
!= 检查两个操作数的值是否相等,如果不相等则条件为真。 (A != B) 为真。
> 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 (A > B) 不为真。
< 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 (A < B) 为真。
>= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 (A >= B) 不为真。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 (A <= B) 为真。

4.3逻辑运算符

运算符 描述 实例
&& 称为逻辑与运算符。如果两个操作数都 true,则条件为 true。 (A && B) 为 false。
|| 称为逻辑或运算符。如果两个操作数中有任意一个 true,则条件为 true。 (A || B) 为 true。
! 称为逻辑非运算符。用来逆转操作数的逻辑状态,如果条件为 true 则逻辑非运算符将使其为 false。 !(A && B) 为 true。

4.4位运算符(只做了解)

运算符 描述 实例
& 按位与操作,按二进制位进行"与"运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1; (A & B) 将得到 12,即为 0000 1100
| 按位或运算符,按二进制位进行"或"运算。运算规则:`0 0=0; 0
^ 异或运算符,按二进制位进行"异或"运算。运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0; (A ^ B) 将得到 49,即为 0011 0001
~ 取反运算符,按二进制位进行"取反"运算。运算规则:~1=-2; ~0=-1; (~A ) 将得到 -61,即为 1100 0011,一个有符号二进制数的补码形式。
<< 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。 A << 2 将得到 240,即为 1111 0000
>> 二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。 A >> 2 将得到 15,即为 0000 1111

5.头文件

头文件引用方法:
#include<头文件名>

详细的头文件介绍及作用见:C++头文件的作用以及用法_陌千浔的博客-程序员宅基地_c++头文件


6.输入输出流

使用输入输出流(cin、cout)需要引用iostream头文件

istream:常用于接收从键盘输入的数据;
ostream:常用于将数据输出到屏幕上;
ifstream:用于读取文件中的数据;
ofstream:用于向文件中写入数据;
iostream:继承自 istream 和 ostream 类,因为该类的功能兼两者于一身,既能用于输入,也能用于输出;
fstream:兼 ifstream 和 ofstream 类功能于一身,既能读取文件中的数据,又能向文件中写入数据。
————————————————
原文链接:https://blog.csdn.net/ccc369639963/article/details/122905471

#include<iostream>
using namespace std;
int main(){
    int a;
    cout<<"输入:";
    cin>>a;
    cout<<"输出:";
    cout<<a;
    return 0;
}

实现效果:

定义一个整型a,键盘输入a,再在屏幕上打印出a

在这里插入图片描述


7.分支语句

分支语句分为种:

  1. if-else
  2. switch

7.1if-else语句

在这里插入图片描述

if语句1:
if(条件1)
{
    执行语句1
}
else
{
    执行语句2
}
if语句2:
if(条件1)
{
    执行语句1
}
else if(条件2)
{
    执行语句2
}
else
{
    执行语句3
}

tip:else if可以无限添加,分成你想要的分支

7.2switch语句

switch(一个变量)
{
    case 条件1:执行语句1;break;//加break是为了执行完这一种情况后不会再执行下面的语句
    case 条件2:执行语句2;break;
    case 条件3:执行语句3;break;
    default:执行语句4;	//如果上面条件都不满足,就执行语句4
}

8.循环

有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。

在这里插入图片描述

图片引用自:C++ 循环 | 菜鸟教程 (runoob.com)

循环类型基本有4种:

  1. for循环
  2. while循环
  3. do-while循环
  4. 嵌套循环
循环类型 描述
while 循环 当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。
for 循环 多次执行一个语句序列,简化管理循环变量的代码。
do-while 循环 除了它是在循环主体结尾测试条件外,其他与 while 语句类似。
嵌套循环 您可以在 while、for 或 do…while 循环内使用一个或多个循环。

循环控制语句:

控制语句 描述
break 语句 终止 loopswitch 语句,程序流将继续执行紧接着 loop 或 switch 的下一条语句。
continue 语句 引起循环跳过主体的剩余部分,立即重新开始测试条件。
goto 语句 将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。

8.1for循环

for(设置变量;循环条件;每次循环后执行语句2)
{
    执行语句1;
}
#include<iostream>
using namespace std;
int main(){
    for(int i=1;i<=5;i++)//i从1开始循环,每次循环后i加1,直到i大于5结束
    {
        cout<<i<<endl;//每次循环输出i,endl为换行
    }
    return 0;
}

在这里插入图片描述

tip:死循环: f o r ( ; ; ) for(;;) for(;;)

8.2while循环

while(条件)//如果满足条件,则执行,如果不满足,则退出循环
{
    执行语句;
}
#include<iostream>
using namespace std;
int main(){
    int i=1;
    while(i<=5)//如果i小于等于5,则执行,如果不满足,则退出循环
    {
        cout<<i<<endl;
        i++;
    }
    return 0;
}

在这里插入图片描述

tip:死循环:while(1)

8.3do-while循环

do{//先执行语句
    执行语句;
}while(循环条件);//如果满足条件,继续执行
#include<iostream>
using namespace std;
int main(){
    int i=1;
    do{
        cout<<i<<endl;
        i++;
    }while(i<=5);
    return 0;
}

在这里插入图片描述

8.4嵌套循环

for循环嵌套:
for(设置变量;循环条件;每次循环后执行语句)
{
    for(设置变量;循环条件;每次循环后执行语句)
    {
        执行语句;
    }
    执行语句;
}
while循环嵌套:
while(条件)
{
    while(条件)
    {
        执行语句;
    }
    执行语句;
}
do-while循环嵌套:
do{
    执行语句;
    do
    {
        执行语句;
    }while(条件);
}while(条件);

8.5循环控制语句

控制语句 描述
break 语句 终止 当层循环switch 语句,程序流将继续执行紧接着 loop 或 switch 的下一条语句。
continue 语句 引起循环跳过主体的剩余部分,立即重新开始测试条件。
goto 语句 将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。

tip:break只能结束当层循环,也就是只能结束掉一个for或一个while(do-while),嵌套循环需要break多次,每次一层


9.数组

数组定义:
变量类型 数组名称[数组大小]

注意:定义数组要多定义一些,比如int a[5],你不能操作a[5],因为这样定义只定义了a[0]到a[4]共5个

初始化数组:
int a[5]={1,2,3,4,5}

如果[ ]内不填数字,则后面{ }初始化中有多n个就会默认定义a[n+1]

#include <iostream>
using namespace std;
 
int main ()
{
   int n[10];
    // 初始化数组元素       
   for (int i=0;i<10;i++)
   {
      n[i]=i+100; // 设置i为i+100
   }
   // 输出数组中每个元素的值                     
   for (int j=0;j<10;j++)
   {
      cout<<j<<" "<<n[j]<<endl;
   }
   return 0;
}

在这里插入图片描述


10.字符串

字符串有两种定义方式:

  1. 数组定义cstring
  2. c++标准库中的string

详解见:C++ 字符串 | 菜鸟教程 (runoob.com)

10.1cstring

定义:

char a[6] = {'h', 'e', 'l', 'l', 'O','\0'};

\0为字符串结尾,系统检测到后会认为字符串到此结束

也可以这么写:

char b[] = "hello";
#include<iostream>
using namespace std;
int main(){
    char a[6] = {'h', 'e', 'l', 'l', 'O','\0'};
    char b[] = "hello";
    cout<<a<<endl<<b;
    return 0;
}

在这里插入图片描述

在引用cstring头文件来操作数组:

#include<cstring>
序号 函数 & 目的
1 strcpy(s1, s2); 复制字符串 s2 到字符串 s1。
2 strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。连接字符串也可以用 + 号,例如: string str1 = "runoob"; string str2 = "google"; string str = str1 + str2;
3 strlen(s1); 返回字符串 s1 的长度。
4 strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
5 strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
6 strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

10.2string

使用string要先引用string头文件

#include <iostream>
#include <string>
 
using namespace std;
 
int main ()
{
   string str1 = "runoob";
   string str2 = "google";
   string str3;
   int  len ;
 
   // 复制 str1 到 str3
   str3 = str1;
   cout << "str3 : " << str3 << endl;
 
   // 连接 str1 和 str2
   str3 = str1 + str2;
   cout << "str1 + str2 : " << str3 << endl;
 
   // 连接后,str3 的总长度
   len = str3.size();
   cout << "str3.size() :  " << len << endl;
 
   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

str3 : runoob
str1 + str2 : runoobgoogle
str3.size() :  12

11.函数

函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

内容较丰富,详解可见:C++函数详解_问号小朋友的博客-程序员宅基地_c++函数,这篇博客总结得比较好,建议看看

#include <iostream>
using namespace std;
 
// 函数声明
int max(int num1, int num2);
 
int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
   int ret;
 
   // 调用函数来获取最大值
   ret = max(a, b);
 
   cout << "Max value is : " << ret << endl;
 
   return 0;
}
 
// 函数返回两个数中较大的那个数
int max(int num1, int num2) 
{
   // 局部变量声明
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

在这里插入图片描述


12.总结

本教程到此结束了,如果觉得还行的,请留下你的三连,谢谢支持!

本文大量参考于:C++ 教程 | 菜鸟教程 (runoob.com)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/james_sky_/article/details/124664934

智能推荐

中国农业科学院培训中心职业技能等级证书及培训证书_中国农业科学院培训中心证书-程序员宅基地

文章浏览阅读916次。从事农业技术指导、技术咨询、技术培训、技术开发和信息服务的人员。农业技术指导员是直接为农民提供技术支持的职业,他们是田间的知识分子,也是实际的劳作人员,因为他们长时间在野外工作,需要采集农业技术信息,进行分类、加工处理,把农业科技、农产品供求和生产资料等有关信息发送给农户,根据需。从事农业技术、试验、示范、推广、培训、科技管理等工作的农业技术人员技术职务名称的一种,农业系统的职称证书,类似于工程师、教授职称,高级农艺师属于副高职称,具有学历、身份、能力、技术的象征;第二大理由:技术专业化技术指导必备。_中国农业科学院培训中心证书

android 强制开启wifi,强制Android使用无网络的Wifi网络-程序员宅基地

文章浏览阅读2.2k次。我正在构建一个需要通过无线网络进行通信的Android应用程序.问题在于,即使WiFi连接,当WiFi网络上没有连接互联网时,Android会选择使用蜂窝/移动数据.我已经阅读了许多关于这个问题的帖子,其中很多都涉及生根的设备,但这是不可能的生产应用程序(生根设备不是一个选择).其他解决方案(像我的代码如下)建议使用bindProcessToNetwork(),它完美地在我的Sony Z2上工作,..._bindprocesstonetwork 4g wifi

升讯威微信营销系统开发实践:(5) Github 源码:微信接口的 .NET 封装_升讯威周报系统2.0-程序员宅基地

文章浏览阅读582次。已上传 Github。微信公众号开发接口的 .NET 封装。包括:分组接口、消息群发接口、客服接口、资源接口、二维码接口、短网址接口、标签接口、用户接口,以及微信支付接口和 JS API 等。_升讯威周报系统2.0

MySQL数据库中删除数据有哪些方法_数据库怎么删除数据-程序员宅基地

文章浏览阅读1k次。在项目中遇到一个事情,我们同步所有监控主机的切片数据,大概1千台服务器的样子,每天的数据有十几万,刚开始数据查询还挺快,数据量越多查询效率就越慢。在同步数据的时候binlog也是比较大的,一段时间就把数据的存储耗尽了。于是就采取了,将这个数据放在另外的一个schema,并保留一段时间的数据。忽然间想到了truncate后自增主键id又从1开始了,小编又被自己的菜蠢哭了。这样数据就迁移完成,虽然耗时,但也是比较快的,几分钟内可是搞完,在可接受范围内,问题又来了。于是在网上查了查做个对比。_数据库怎么删除数据

【iOS】ViewController的生命周期_viewcontroller 进到下个页面和回到上个页面,生命周期-程序员宅基地

文章浏览阅读766次。ViewController是iOS中一种常见的类,也是MVC中的C控制器。_viewcontroller 进到下个页面和回到上个页面,生命周期

使用SigNoz搭建可观测系统_signoz 部署安装教程-程序员宅基地

文章浏览阅读340次。SigNoz是一个开源的应用程序性能监控工具,可以帮助你监控你的应用程序并排除故障,它可以进行链路追踪、基础设施监控以及日志管理,可以说是Datalog的开源版本。具体的能力如下:监控应用程序指标,如延迟、每秒请求、错误率等监测基础设施指标,如CPU利用率或内存使用情况追踪跨服务的用户请求对指标设置警报通过查找导致问题的确切痕迹,找到问题的根本原因查看单个请求追踪的详细火焰图。_signoz 部署安装教程

随便推点

Java8新特性 - Stream - 09 - Stream的sort()方法详解_java stream sort-程序员宅基地

文章浏览阅读5k次。java8新特性 Stream 的sort()排序方法详解_java stream sort

java字符类的英文表示_Java中判断字符串是中文或者英文的工具类分享-程序员宅基地

文章浏览阅读79次。直接上代码:import java.util.regex.Matcher;import java.util.regex.Pattern;/** * * * ClassName ShowChineseInUnicodeBlock * * * Description 提供判断字符串是中文或者是英文的一种思路 * * * @author wangxu wangx89@126..._jdk中表示英文符号的类

Linux根文件系统的制作-程序员宅基地

文章浏览阅读58次。1. 根文件系统文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点。 注:对于我们应用开发来说,购买开发板的时候,厂家会提供好现成的根文件系统和BootLoader等,如果需要,我们可以改变其中..._x86根文件系统制作mksquashfs

JS 浮点数计算-程序员宅基地

文章浏览阅读62次。一、从String中解析浮点数parseFloat(string)语法说明parseFloat是个全局函数,不属于任何对象.parseFloat将它的字符串参数解析成为浮点数并返回.如果在解析过程中遇到了正负号(+或-),数字(0-9),小数点,或者科学记数法中的指数(e或E)以外的字符,则它会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数.同时参数字符串首位的空白符会..._js 负数和浮点数 怎么计算

在PyQt5的Qlistwidget的Item中设置图片_pyqt 5 listwidget 设置图标-程序员宅基地

文章浏览阅读8k次,点赞2次,收藏6次。效果图如下: 方法一(手撸代码):实例化item时:item = QtWidgets.QListWidgetItem(QtGui.QIcon('C:\\Users\Administrator\Desktop\xxx.jpg'),'新建项目')在listWidget中设置item图片的大小:self.listWidget.setIconSize(QSize(25, ..._pyqt 5 listwidget 设置图标

DFT - 对芯片测试的理解(二) 详解_dft 运行逻辑-程序员宅基地

文章浏览阅读8.8k次,点赞9次,收藏109次。Tool自动插DFT point,会把DFF 变成 scan-FF ,但组合逻辑深处,Tool就做不到了,因此有 DPPM(测试良率)和coverage(覆盖率)来评价DFT的质量。当Tool进行DFT后,如果coverage不够的话,就要手动插入 测试点,即 UDTP(user defined test point),它们用于增加DFT的coverage,在组合逻辑深度插入测试点。因此,采用“改造”原本芯片中就存在的DFF,增加MUX选择的方式,来增加测试点,实现观测芯片内部关键点的功能。_dft 运行逻辑