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

智能推荐

JWT(Json Web Token)实现无状态登录_无状态token登录-程序员宅基地

文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录

SDUT OJ逆置正整数-程序员宅基地

文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.

年终奖盲区_年终奖盲区表-程序员宅基地

文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表

matlab 提取struct结构体中某个字段所有变量的值_matlab读取struct类型数据中的值-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值

Android fragment的用法_android reader fragment-程序员宅基地

文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment

FFT of waveIn audio signals-程序员宅基地

文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals

随便推点

Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具_awesomemac-程序员宅基地

文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac

java前端技术---jquery基础详解_简介java中jquery技术-程序员宅基地

文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术

Ant Design Table换滚动条的样式_ant design ::-webkit-scrollbar-corner-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;amp;::-webkit-scrollbar { height: 5px; } &amp;amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner

javaWeb毕设分享 健身俱乐部会员管理系统【源码+论文】-程序员宅基地

文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!

论文开题报告怎么写?_开题报告研究难点-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点

原生JS 与 VUE获取父级、子级、兄弟节点的方法 及一些DOM对象的获取_获取子节点的路径 vue-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue