1. 首页 > 生活常识

c零基础入门教程 - iT社区 c 入门教程

文章目录C,基础入门1C,初识1.1第一个C,程序1.2注释1.3变量1.4常量1.5关键字1.6标识符命名规定2、数据类型2.1整型2.2sizeof关键字2.3实型,浮点型,2.4字符型2.5转义字符2.6字符串型2.7布尔类型bool2.8数据的输入3、运算符3.1算术运算符3.2赋值运算符3.3比拟运算符4程序流程结构4...。

文章目录

    • C++基础入门
      • 1 C++初识
        • 1.1 第一个C++程序
        • 1.2 注释
        • 1.3 变量
        • 1.4 常量
        • 1.5 关键字
        • 1.6 标识符命名规定
      • 2、数据类型
        • 2.1 整型
        • 2.2 sizeof关键字
        • 2.3 实型(浮点型)
        • 2.4 字符型
        • 2.5 转义字符
        • 2.6 字符串型
        • 2.7 布尔类型bool
        • 2.8 数据的输入
      • 3、运算符
        • 3.1 算术运算符
        • 3.2 赋值运算符
        • 3.3 比拟运算符
      • 4 程序流程结构
        • 4.1 选用结构
          • 4.1.1 if语句
          • 4.1.2 三目运算符
          • 4.1.3 switch语句
        • 4.2 循环结构
          • 4.2.1 while循环语句
          • 4.2.2 do...while循环语句
          • 4.2.3 for循环语句
          • 4.2.4 嵌套循环
        • 4.3 跳转语句
          • 4.3.1 break语句
          • 4.3.2 continue语句
          • 4.3.3 goto语句
      • 5.数组
        • 5.1 概述
        • 5.2 一维数组
          • 5.2.2一维数组数组名
        • 5.3 二维数组
      • 6 函数
        • 6.1 概述
        • 6.2 函数的定义
        • 6.3 值传递
        • 6.5 函数的经常出现方式
        • 6.6 函数的申明
        • 6.7 函数的分文件编写
      • 7 指针
        • 7.1 指针的基本概念
        • 7.2 指针变量的定义和经常使用
        • 7.3 指针所占用内存空间
        • 7.4 空指针和野指针
        • 7.5 const润色指针
        • 7.6 指针和数组
        • 7.7 指针和函数
        • 7.8 案例:应用冒泡升序排序
      • 8 结构体
        • 8.1 结构体基本概念
      • 8.2 结构体的定义和经常使用
        • 8.3 结构体数组
        • 8.4 结构体指针
        • 8.5 结构体嵌套结构体
        • 8.6 结构体做函数参数
        • 8.7 结构体中const经常使用场景

C++基础入门

1 C++初识

1.1 第一个C++程序
include<iostream> using namespace std int incout "hello world" endlsystem"pause"return 0
1.2 注释
  • 单行注释://

  • 多行注释:/ |/

1.3 变量

数据类型 变量名 = 变量初始值;

1.4 常量

(1) 影响:记载程序中无法更改的数据

(2)定义常量的两种方式:

  • #define 宏常量:#define 常量名 常量值( 学说定义在文件上方,一旦修正就会报错)
  • const润色的变量:const 数据类型 常量名=常量值( 学说在变量定义前加关键字const)
1.5 关键字
double\int\long\
1.6 标识符命名规定

(1)标识符不能是关键字

(2)标识符只能由字母、数字、下划线

(3)第一个字符必定是字符或许下划线

(4)标识符中辨别 大致写

2、数据类型

2.1 整型

区别:在于所占内存空间不同

//短整型(-32768~32767)short num1 32769//输入就 一个正数-32768//整型int num2 10//长整型long num3 10//长长整型long long num4 10cout "num1= " num1 endlcout "num2= " num2 endlcout "num3= " num3 endlcout "num4= " num4 endl
2.2 sizeof关键字

影响:应用sizeof关键字统计数据类型所占内存 大致

b sizeofa
2.3 实型(浮点型)

影响:示意小数

两种示意方式:

  • 1、单精度: float;占用空间:4字节;有效数字范围:7位有效数字
  • 2、双精度:double;占用空间:8字节;有效数字范围:15~16位有效数字
float f1 3.14f//不加f会自动double类型的,会多一步转化cout f1 endldouble d1 3.14cout d1 endl//统计float和double所占内存空间cout "float占用的内存空间:" sizeoffloat endlcout "double占用的内存空间:" sizeofdouble endl//迷信计数法float f2 3e2//3*10^2;cout "f2=" f2 endlfloat f3 3e-2//3*0.1^2;cout "f3=" f3 endl
2.4 字符型

影响:显示单个字符,只占用1个字节

语法:char ch=‘a’;

//1、字符型变量创立方式char ch 'a'cout ch endl//2、字符型变量所占内存空间 大致cout "char字符型所占内存:" sizeofch endl//3、字符型变量对应的ASCII编码cout intch endl
2.5 转义字符

影响:示意一些不能显示进去的ASCII字符

  • \n:换行
  • \t:水平制表:\t占用8个字符,如aaa+5个空格;aaaa+4个空格
  • \ \:代表反斜线字符“\”
2.6 字符串型

两种方式:

  • C:char 变量名[ ]=“字符串值”
  • C++:string 变量名= “字符串值”
//C格调char str "hello world"cout str endl//C++格调string ss "hello C++" //须要一个#include<string>头文件cout ss endl
2.7 布尔类型bool

影响:代表真和假的值

bool类型只要两个值,占1个字节 大致

  • true:真(实质是1)//非0的值都代表着真
  • false:假(实质是0)
//1、创立bool类型bool flag truebool flag1 falsecout flag endlcout flag1 endl//2、检查内存空间cout "bool类型所占的内存空间:" sizeofflag endl
2.8 数据的输入

关键字:cin>>变量,从键盘上失掉数据

cout "请输入a的值:" endl cin a

3、运算符

3.1 算术运算符

留意:

  • 两数相除,除数无法以为0
  • 两个小数无法以启动取模运算
3.2 赋值运算符
3.3 比拟运算符

4 程序流程结构

  • 顺序结构:程序依照顺序口头,不出现跳转
  • 选用结构:依据条件能否满足,有选用的口头相应的配置
  • 循环结构:依据条件能否满足,循环屡次口头某段代码
4.1 选用结构
4.1.1 if语句
include<iostream> using namespace std int insystem"color 5F"cout "请输入一个分数:" endlint scorecin score//留意:if条件前面不要加分号if score 600printf"你考上一本大学\n"else ifscore500printf"你考上了二本\n"elseprintf"你 何都没有考上,二战吧\n"return 0

嵌套的if语句:

案例需求:假设上述大于600考上了一本大学,假设分数大于650就可以考上双一流

if score 600printf"你考上一本大学\n"if score 650printf"可以上双一流了\n"else if score 500printf"你考上了二本\n"elseprintf"你 何都没有考上,二战吧\n"
4.1.2 三目运算符
int a 10int b 20int c 0c a b a bcout "c= " c endl//C++中三目运算符前往的是变量,可以继续赋值a b a b 66cout "a= " a endlcout "b= " b endl
4.1.3 switch语句

语法:

switch表白式case 结局1:口头语句;breakcase 结局2:口头语句;breakdefault口头语句;break

示例:给电影打分

cout "请给电影打分:" endlint score 0cin scoreswitch scorecase 3 cout "你打的电影评分是:" score endl breakcase 6 cout "你打的电影评分是:" score endl breakcase 9 cout "你打的电影评分是:" score endl breakcase 4 cout "你打的电影评分是:" score endl breakdefaultcout "你打的是其余分数:" score endl break
4.2 循环结构
4.2.1 while循环语句

语法:while(循环条件){循环语句}

留意:了解循环条件,防止死循环

//在屏幕打印0-9int num 0while num 10cout num endlnum
4.2.2 do…while循环语句

语法:do{循环语句}while{循环条件}与while的区别是先口头一次性循环语句,再判别循环条件

int num 0 docout num endlnumwhile num 10
4.2.3 for循环语句

语法:for(起始表白式;条件表白式;末尾循环体){ 循环语句;}

//在屏幕打印0-9 for int i 0 i 10 icout i endl
4.2.4 嵌套循环

影响:循环中再加一层循环

//在屏幕打印10x10的*阵for int i 0 i 10 ifor int j 0 j 10 jcout cout endl

示例:打印乘法口诀表

include<iostream> using namespace std int insystem"color 5F"for int i 1 i 10 ifor int j 1 j i jcout j " x " i ijcout endlreturn 0
4.3 跳转语句
4.3.1 break语句

影响:完结循环

//在屏幕打印10x5的*阵for int i 0 i 10 ifor int j 0 j 10 jifj5breakcout cout endl
4.3.2 continue语句

影响:在循环语句中,跳过本次循环中余下尚未口头的语句,继续口头下一次性循环

//在屏幕输入10以内偶数for int i 0 i 10 iif i 2 0continuecout i endl
4.3.3 goto语句

影响:goto标志之后,跳转到标志的语句

include<iostream> using namespace std int insystem"color 5F"//口头goto语句cout "1.xxxxx" endlgoto Flagcout "2.xxxxx" endlcout "3.xxxxx" endlcout "4.xxxxx" endlFlagcout "5.xxxxx" endlreturn 0

5.数组

5.1 概述
5.2 一维数组

1、定义方式

  • 数据类型 数组名[数组长度];
  • 数据类型 数据名[数组长度]={值1,值2…};
  • 数据类型 数组名[ ]={值1,值2…};

2、数组特点

放在一块延续的内存空间,数组中每个元素都是相反的数据类型。

int insystem"color 5F"//1、数据类型 数组名[数组长度];int arr5arr0 10arr1 20arr2 30arr3 40arr4 50for int i 0 i 5 icout arri cout endl//2、数据类型 数据名[数组长度]={值1,值2.....};//若初始化没有五个数据,剩下的将会由0填补int arr15 10203040for int i 0 i 5 icout arr1i cout endl//3、数据类型 数组名[ ]={值1,值2.....};int arr3 12345 6589for int i 0 i 9 icout arr3i cout endlreturn 0
5.2.2一维数组数组名

用途:

  • 统计整个数组在内存中的长度
  • 可以失掉数组在内存中的首地址
include<iostream> using namespace std int insystem"color 5F"int arr5 12345 //1、经过数组名统计整个数组占用内存 大致cout "每个数组占用内存空间 大致:"sizeofarr endlcout "每个元素所占用的内存空间 大致:" sizeofarr0 endlcout "数组中元素的个数为:" sizeofarr sizeofarr0 endl//2、经过数组名检查首地址cout "数组首地址为:" intarr endlcout "数组中第一个元素地址:" intarr1 endlreturn 0

练习案例:数组元素逆置

请申明一个5个元素的数组, 并且将元素逆置

#include<iostream> using namespace std; int in() {system("color 5F");int arr[5] = { 1,2,3,4,5 };//1、数组逆置前序列cout << "数组逆置前序列:" << endl;for (int i = 0; i < 5; i++){cout << arr[i] << " ";}cout << endl;//2、成功逆置int start = 0;int end = sizeof(arr) / sizeof(arr[0])-1;while (start < end){int temp = arr[start];arr[start] = arr[end];arr[end] = temp;start++;end--;}cout << "数组逆置之后输入:" << endl;for (int i = 0; i < 5; i++){cout << arr[i] << " ";}cout << endl;return 0; }
5.3 二维数组

1、二维数组的四种定义类型:

  • 数据类型 数组名[行数] [列数];
  • 数据类型 数组名[行数] [列数]={{数据1,数据2},{数据3,数据4}};
  • 数据类型 数组名[行数] [列数]={数据1,数据2,数据3,数据4};
  • 数据类型 数组名[ ] [列数]={数据1,数据2,数据3,数据4};
include<iostream> using namespace std int insystem"color 5F"/*- 数据类型 数组名[行数] [列数];- 数据类型 数组名[行数] [列数]={{数据1,数据2},{数据3,数据4}};- 数据类型 数组名[行数] [列数]={数据1,数据2,数据3,数据4};- 数据类型 数组名[ ] [列数]={数据1,数据2,数据3,数据4};*///1、数据类型 数组名[行数] [列数];int arr23arr00 1arr01 2arr02 3arr10 4arr11 5arr12 6for int i 0 i 2 ifor int j 0 j 3 jcout arrij cout endlcout endl//2、数据类型 数组名[行数] [列数]={{数据1,数据2},{数据3,数据4}};int arr223123456for int i 0 i 2 ifor int j 0 j 3 jcout arrij cout endlcout endl//3、数据类型 数组名[行数] [列数]={数据1,数据2,数据3,数据4};int arr323 123456 for int i 0 i 2 ifor int j 0 j 3 jcout arrij cout endl//4、数据类型 数组名[ ] [列数]={数据1,数据2,数据3,数据4};int arr43 123456 return 0

2、二维数组数组名

int arr23123456//1、检查占用内存空间 大致cout "二维数组占用内存空间为:" sizeofarr endlcout "二维数组第一行占用的内存:" sizeofarr0 endlcout "二维数组第一元素占用的内存:" sizeofarr00 endlcout "二维数组的行数为:" sizeofarr sizeofarr0 endlcout "二维数组的列数为:" sizeofarr0 sizeofarr00 endl//2、检查二维数组的首地址cout " 二维数组首地址: " intarr endlcout " 二维数组第一行元素首地址: " intarr0 endlcout " 二维数组第二行元素首地址: " intarr1 endl

6 函数

6.1 概述
6.2 函数的定义

步骤:

  • 1、前往值类型
  • 2、函数名
  • 3、参数列表
  • 4、函数体语句
  • 5、return表白式
前往值类型 函数名 (参数列表)函数体语句;return 表白式; include<iostream> using namespace std int addint num1 int num2//num1、num2没有真正的数据。 一个方式参数,也叫形参int sum num1 num2return sumint insystem"color 5F"//a、b有 操作的值,叫实参//当函数调用时,实参的值会传递给形参int a bcin a bcout ab adda b endlreturn 0
6.3 值传递
  • 值传递就是函数调用时实参将数值传给形参
  • 值传递:假设形参出现,并不影响实参
include<iostream> using namespace std //值传递 //成功两个数字启动替换的函数//若函数不须要前往值,申明的时刻可以写void void swapint num1 int num2cout "替换前:" endlcout "num1=" num1 endlcout "num2=" num2 endlint temptemp num1num1 num2num2 tempcout "替换后:" endlcout "num1=" num1 endlcout "num2=" num2 endlint insystem"color 5F"int a 10 b 20//当做值传递的时刻,函数的形参出现扭转,不会影响实参swapa breturn 0
6.5 函数的经常出现方式
  • 1、无参无返
  • 2、有参无返
  • 3、无参有返
  • 4、有参有返
include<iostream> using namespace std //1、无参无返 void test01cout "this is 01" endl//2、有参无返 void test02int acout "this is 02 a=" a endl//3、无参有返 int test03cout "this is 03" endlreturn 666//4、有参有返 int test04int acout "this is 04 a=" a endlreturn 888int insystem"color 5F"//无参无返函数调用test01//有参无返函数调用test023//无参有返函数调用int num test03cout "无参有返的num=" num endl//有参有返函数调用cout "有参有返的num=" test0420 endlreturn 0
6.6 函数的申明

影响:提早通知编译器函数的存在,申明可以写屡次,定义只能写一次性。申明是说明存在这个函数,定义是说明这个函数 如何写。

6.7 函数的分文件编写

影响:让代码结构愈加明晰

步骤:

  • 1、创立后缀名为.h的头文件
  • 2、创立后缀名为.cpp的源文件
  • 3、在头文件中写函数的申明
  • 4、在源文件中写函数的定义
//在头文件中写函数的申明 prag once include<iostream> using namespace std //函数申明 void swapint a int b //在源文件中写函数的定义 include"swap.h" //双引号是自定义头文件 void swapint a int bint temp aa bb tempcout "a= " a endlcout "b= " b endl //调用之后直接运转 include<iostream> include"swap.h" using namespace std int insystem"color 5F"int a 10int b 20swapa breturn 0

7 指针

7.1 指针的基本概念

影响:可以经过指针直接访问内存

  • 内存编号从0开局记载,普通用十六进制数字示意
  • 可以应用指针变量保管地址
7.2 指针变量的定义和经常使用

指针定义语法: 数据类型 * 变量名;

include<iostream> using namespace std int insystem"color 5E"//1、定义指针int a 10//指针定义的语法:数据类型 * 指针变量名int p//让指针记载变量a的地址p acout "a的地址为:" p endl//2、经常使用指针//可以经过解援用的方式来找到指针指向的内存//指针前加*代表解援用,找到指针指向的内存中的数据cout "a的值是:" p endlif a pcout "一样" endlelsecout "不一样" endlreturn 0
7.3 指针所占用内存空间

问: 指针也是种数据类型,那么占用 几许内存呢?

答: 在32位操作 体系下:占4个字节空间;在 为操作 体系:占8个字节

include<iostream> using namespace std int insystem"color 5E"int a 10int pp acout "sizeof(int *)=" sizeofint endlcout "sizeof(double *)=" sizeofdouble endlcout "sizeof(char *)=" sizeofchar endlcout "sizeof(float *)=" sizeoffloat endlreturn 0
7.4 空指针和野指针

(1)空指针:指针变量指向内存中编号为0的空间

用途:初始化指针变量

留意:空指针指向的内存是无法以访问的

(2)野指针:指针变量指向合法的内存空间

7.5 const润色指针

const润色指针有三种状况:

  • (1)const润色指针:常量指针

    const int pa
  • (2)const润色常量:指针常量

    int const pa
  • (3)const即润色指针又润色常量

    const int const pa
7.6 指针和数组

影响:应用指针访问数组元素

int arr10 123456789 int p arr//arr就是数组的首地址cout "应用指针指向第一个元素:" p endlp//指针偏移4个字节cout "应用指针指向第二个元素:" p endlforint i2i10icout p p
7.7 指针和函数

影响:应用指针作为函数参数,可以修正实参的值

include<iostream> using namespace std void swapint p1 int p2int temp p1p1 p2p2 tempcout "swap *p1=" p1 endlcout "swap *p2=" p2 endlint insystem"color 5E"//地址传递int a 10int b 20cout "a= " a endlcout "b= " b endlswapa bcout endl "替换后的a,b的值:" endlcout "a= " a endlcout "b= " b endlreturn 0
7.8 案例:应用冒泡升序排序

序列:int arr[10] = { 4,2,3,6,1,8,7,9,5,1 };

include<iostream> using namespace std void bubbleSortint arr int lenfor int i 0 i len ifor int j 0 j leni1 jif arrj arrj 1int temp arrjarrj arrj 1arrj 1 tempint in//system("color 1E");//创立一个数组int arr 4236158791 //求数组的长度int len sizeofarr sizeofarr0//排序前的序列cout "排序前的序列:" endlfor int i 0 i len icout arri cout endl//应用冒泡排序bubbleSortarr lencout "排序后的序列:" endlfor int i 0 i len icout arri cout endlreturn 0

8 结构体

8.1 结构体基本概念

结构体属于用户 自定义的数据类型 ,准许用户存储不同的数据类型。

8.2 结构体的定义和经常使用

语法:struct 结构体名 {结构体成员列表};

结构体创立的方式三种:

  • (1)struct 结构体名 变量名
  • (2)struct 结构体名 变量名={成员1值,成员2值…}
  • (3)定义结构体是顺便创立变量
include<iostream> include<string> using namespace std //创立在校生数据类型:在校生包括(姓名,年龄,分数) struct Student//成员列表//姓名string name//年龄int age//分数int score s3 //3、定义结构体是顺便创立变量int insystem"color 5E"//1、struct 结构体名 变量名struct Student s1s1name "张铁蛋"s1age 23s1score 100cout "姓名:" s1name " 年龄:" s1age " 分数:" s1score endl//2、struct 结构体名 变量名={成员1值,成员2值......}struct Student s2 "徐铁柱"24100 cout "姓名:" s2name " 年龄:" s2age " 分数:" s2score endls3name "憨憨"s3age 23s3score 99cout "姓名:" s3name " 年龄:" s3age " 分数:" s3score endlreturn 0

留意:结构体定义的时刻不能省略struct,创立变量的时刻可以省略

8.3 结构体数组

影响:将自定义的结构体放入到数组中繁难保养

语法:struct 结构体名 数组名[元素个数]={{},{},{}…}

int insystem"color 5E"//创立结构体数组struct Student arr3 "张铁蛋"18100"徐铁住"2399"憨憨"2290arr2name "徐傻傻"forint i0i3icout "姓名:" arriname " 年龄:" arriage " 分数:" arriscore endlreturn 0
8.4 结构体指针

影响:经过指针访问结构体中的成员

  • 应用操作符“->”可以经过结构体指针访问结构体属性
//创立结构体变量struct student s "张三"18100 //经过指针指向结构体变量struct student ps//经过指针访问结构体中的数据pname "铁蛋"cout "姓名:" pname " 年龄:" page " 分数:" pscore endl
8.5 结构体嵌套结构体

影响:结构体的成员可以是另一个结构体

include<iostream> include<string> using namespace std //定义在校生结构体 struct studentint num//学号string nameint age//定义教员结构体 struct teacherint idstring nameint agestruct student stuint insystem"color 5E"//创立教员、在校生teacher ter 2311"王教员"35 20240505"张三"22 cout "教员的编号:" terid endlcout "教员的名字:" tername endlcout "教员的年龄:" terage endlcout "教员的在校生学号:" terstunum endlcout "教员的在校生的名字:" terstuname endlcout "教员的在校生的年龄:" terstuage endlreturn 0
8.6 结构体做函数参数

影响:将结构体作为参数向函数中传递

传递的方式:

  • 值传递
  • 地址传递
include<iostream> include<string> using namespace std //定义在校生结构体 struct studentstring nameint ageint score//值传递 void printStudentstruct student ssage 55cout "子函数1打印的 结局:" endlcout "姓名:" sname " 年龄:" sage " 分数:" sscore endl//地址传递 void printfStudent1struct student scout "子函数2打印的 结局:" endlcout "姓名:" sname " 年龄:" sage " 分数:" sscore endlsname "张铁蛋"sscore 999int insystem"color 5E"student s "张三"2399 printStudentscout " in打印的 结局:" endlcout "姓名:" sname " 年龄:" sage " 分数:" sscore endlcout endlprintfStudent1scout " in打印的 结局:" endlcout "姓名:" sname " 年龄:" sage " 分数:" sscore endlreturn 0
8.7 结构体中const经常使用场景

影响:用const来防止误操作

include<iostream> include<string> using namespace std //定义在校生结构体 struct studentstring nameint ageint score//将函数中的形参改为指针,可以缩小内存空间,而且不会 新的正本 void printStudentconst struct student s//s->age = 55;//参与const之后,一旦有修正的操作就会报错,防止误操作cout "姓名:" sname " 年龄:" sage " 分数:" sscore endlint insystem"color 5E"student s "张三"2399 //只读,无法修正printStudentsreturn 0