《2022年C语言知识点总结代码.docx》由会员分享,可在线阅读,更多相关《2022年C语言知识点总结代码.docx(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C 语言学问点总结C 语言学问点总结1一、常量2二、标识符2三、变量2四、表达式3五、输入输出函数4六、C语言的语句5七、C程序的基本结构5八、挑选结构语句5if表达式 语句 1 else 语句 25条件运算符 表达式 1. 表达式 2 : 表达式 36switch 语句6九、循环结构6for 循环语句6while 循环语句 do while 循环语句6十、数组7十一、 字符串函数7十二、 函数8十三、 指针9十四、 宏定义10十五、 结构体,共用体,枚举类型10十六、 Turbo C 的使用12一、 常量数字常量i.一般数字 :1,35, 2.7ii. 指数形式 :2.45e-2等价于 2.
2、45*10-2留意 e 大小写皆可, e 前面的数字不能省,就算是 1 也不能省,后面的数字肯定要是整数iii. 长整型,单精度浮点型 :3235L, 32.5F 分别表示 3235 是长整型数据,32.5 是单精度浮点型左,如不写上 L, F 就表示 3235 是整型, 32.5 是双精度浮点型, L, F 大小写皆可字符常量i. 一般字符常量 :用单引号把一个字符括起来,如 A,ii. 转义字符常量 :一对单引号括起来并以 “”开头的字符序列,如 n回车、1238 进制 123 对应的字符 , x2316 进制 23 对应的字符 字符串常量用一对双引号把一个字符序列括起来,如“ ABCef
3、 ”, 系统存放字符串常量,每个字符安排一个字节,各字符所占字节紧邻,并且字符串末尾 会给再开一个字节里面放一个 0做为终止标志 ;符号常量定义格式 #define 符号常量名 符号常量值 ,如#define N 20 就定义了符号常量 N,其值为 20,留意符号常量名和符号常量值之间是用空格隔开, 而不是写上 =号, #define和符号常量名之间也有空格的;二、 标识符命名规章以数字,字母,下划线这三类字符组成,但只能以字母或下划线开头 , 而不能也数字开头,另外 不能将关键字做为标识符 ;32 个关键字表在P365 附录 B变量名,函数名,符号常量名全都是标识符三、 变量变量的定义格式类
4、型名 变量名;如 inta;定义了一个整型常量 a;变量名是由人类任凭定义的,符合命名规章的前提下,爱写啥就写啥;所以什么 flag,cc,y1 或者函数名 fun,find等全部是自定的用来做为名字而已,没有更特殊的意义;类型名int 整型, long 长整型: 用于存放整数,只是数值范畴不同float 单精度浮点型double 双精度浮点型:用于存放实数,数值范畴, 精度不同char 字符型:用于存放字符变量赋值,初始化inta=3;定义的同时初始化a=6*9;定义后在程序中进行赋值变量的值只有在赋值操作时才会被转变 ,即将其放在等号左边时才会转变它的值, 或自增自减操作 :a=5,a+,
5、a-,像 a+3 并未转变 a 的值,只是使用了 a 的值而已 .自增自减运算变量+,+变量,变量 -, -变量 使变量的值自增 1 或自减 1等价于 变量=变量+1变量=变量-1+, -放于变量前后成效的区分:当自增自减运算做为表达式的一部分时,+,- 放在变量前面是先自增自减再使用变量的值, 放在变量后面就是先使用变量的值, 再自增自减 ;如 x=3; printf “%d”,+x; 就相当于执行了 +x; printf “%d”,x; 这样的操作 所以打印出 4再如 x=3; printf “%d”,x+; 就相当于执行了 printf “%d”,x; x+; 这样的操作,就打印出 3,
6、当然最终 x 的值仍是 4;四、 表达式运算符和运算对象一个运算符都有如干个运算对象, 如 + 必定要跟两个运算对象才能进行加法运算:3+5;C 语言里称需要跟 n 个运算对象的运算符为n 元运算符;一元运算符有 :. ,(类型名)二元运算符有 :+,-,*,/,% 求余, =,+=,-=,*= ,/=,%=, , =, = = 等于, .=不等于 ,& 且 , |或多元运算符有 : , 运算符的优先级和结合性i. 优先级 :同一个运算对象左右两边如同时有两个运算符, 就这两个运算符优先级高的先进行运算;ii. 结合性 :如同一个运算对象左右两边的两个运算符优先级相同, 就依据结合性判定先进行
7、哪个运算, 自左自右结合性的先算左边的运算符, 自右自左的先算右边的运算符;iii. 各运算符的优先级和结合性见 P365 附录 C强制类型转换格式: 类型名 表达式 ;将后跟的表达式的值的数据类型转换为与圆括号内的类型名一样的类型; 留意类型名肯定要用()括起来;算术表达式i.算术运算符 :+,-,*,/,% 求余ii. 由算术运算符加上运算对象构成算术表达式 ,如 3+3*6-9/2iii. 值:跟我们学校时学的一样,就是表达式的运算结果iv. 整数除以整数结果取整数部分,故1/3 得到的值是 0v. 5%3 结果为 2,想想学校除法,求余得到的是余数不是商;赋值表达式i.赋值运算符 :=
8、,+=,-=, *= ,/=,%=ii. 赋值表达式 :变量=表达式,如 x=3+6,x+=6-9, x+=x*=3+4留意等号左边只能是变量iii. 复合赋值运算符的运算 :以/=为例: x/= 表达式 等价于 x=x/ 表达式iv. 值:=号左边的变量最终的值关系表达式i.关系运算符 : , =, = = 等于, .= 不等于ii. 由关系运算符加上运算对象构成关系表达式 ,如 3=4, 2=aiii. 值:满意相应运算符所指定的关系的值为1,否就为 0规律表达式i.规律运算符 :& 且 , |或 , .非ii. 由规律运算符加上运算对象构成规律表达式 ,如 3&4, x|.yiii. 值
9、:满意相应运算符所指定的关系的值为1,否就为 0iv. 进行 |或 运算时, 如| 左边的表达式值为 1,就不再对右边的表达式进行运算;v. 进行 &且 运算时, 如&左边的表达式值为 0,就不再对右边的表达式进行运算;逗号表达式i. 逗号运算符 : ,ii. 用逗号将各种表达式连续起来构成 逗号表达式 ,如 3+4,a=9,8*aiii. 值:组成逗号表达式的各个表达式中的最终一个的值,如上例为8*a题目: P71117P8 1833五、 输入输出函数scanf“格式掌握串 ”,变量地址表列 ;如 scanf“%d%c%d”,&a,&ch,&b;scanf“%4f”,&x;留意:i. 格式掌
10、握串可掌握截取用户输入的前几个字符给变量,但不能掌握输入几位小数给变量,如不能写成 scanf“%4.2f”,&x;ii. 其次个参数给的是地址 ,即要么是 &+ 变量名或数组元素名的形式,要么就是一个数组名或指针变量名,如int *p,a; p=&a; scanf“%d”,p;iii. 考试时留意看题目给你写好的 scanf的格式1. 如其格式掌握串内各格式符用“, ”隔开如scanf“%d,%c,%d”,&a,&ch,&b; 那输入时也要用逗号隔开,如此例输入时应: 3,+,52. 如是这种格式 scanf“%d %d”,&a,&b; 就输入时应: 3 5;3. 如是这种格式 scanf“
11、%d%c%d”,&a,&ch,&b; 就输入时应 3+5,如写成 3+ 5 就 a=3,ch= 空格, b=任意值 自己上机运行看看结果 printf “格式掌握串 ”,输出项表列 ;如 float x=7.5; printf “%8.2f”,x;此处的意思是将 x 打印出来,且占 8 列,保留两位小数;自己上机运行看看成效;常用格式符汇总:i. %d :输入输出整型数据, %ld :输入输出长整型数据ii. %c:输入输出字符型数据iii. %f :输出单(双)精度浮点型数据,输入单精度型数据;%lf :输入双精度型数据iv. %s:输入输出一个字符串,用 printf 输出字符串时,输出项
12、书写时可为字符串常量,或字符数组名;如printf “%s”,”hello”;或 char str10=”hello”; printf “%s”,str;v. %u :输入输出无符号整型, %o :输入输出八进制数,%x: 输入输出十六进制数getchar;函数调用后返回用户输入的一个字符,故需再定义一个变量来存放这个字符,即使用时应 char c; c=getchar;意思就是接收用户输入的一个字符,并将其赋值给变量 c;putchar字符常量或字符变量名 ;如 char c=A; putcharc;或 putcharA;都会向屏幕输出字符A;六、 C语言的语句表达式语句 :由表达式末尾加上
13、分号构成;函数调用语句 :由函数调用表达式加上分号构成;空语句: ;挑选结构语句 :if 语句 switch 语句循环语句 :for 语句 while 语句 do while 语句复合语句 :用花括号将以上任意语句括起来构成一条复合语句;七、 C程序的基本结构void main声明部分 :用来定义变量和声明自定义函数的原型, 需以“;”结尾,如 int x;执行语句部分 :第六点里介绍的各种语句,如x=3;printf “%d”,x;main 函数外可写自定义函数 ;如int maxreturn 0;八、 挑选结构语句if表达式 语句 1 else 语句 2假如 if 语句的圆括号内的表达式值
14、为非0,就执行语句 1,值为 0 就执行语句 2;i. 表达式可为任意表达式 ,if 语句执行的实质是判定表达式的值是否为0 来打算执行语句 1 仍是语句 2;另外请在此处表达严峻关心,不管是高手仍是菜鸟常常会把判定两个数相等的符号 “ =”写成了一个等号 “=” 成为了赋值运算,这样的写法不会引发编译错误,但结果会与原意大大不同,所以考试前请一再提示自己;ii. 语句 1 和语句 2 都只能是一个语句 , 如要跟多条语句,切记用一对括起来,构成复合语句;也不要任凭在圆括号后加“; ” ,因“ ;” 构成一条空语句,这会使后面跟的语句1 不再属于 if语句的组成部分 ;iii. if 语句的三
15、种结构1. 单边: if 表达式 语句2. 双边: if 表达式 语句 1 else 语句 23. 多层重点把握 :if 表达式 1 语句 1else if表达式 2 语句 2else if表达式 3 语句 3else 语句 n条件运算符 表达式 1. 表达式 2 : 表达式 3如表达式 1 的值非 0,就取表达式 2 的值做为整个表达式的值,否就取表达式 3 的值为整个表达式的值;如34. 1:2该表达式的值为 2switch 语句switch表达式case 表达式 1:语句case 表达式 2:语句case 表达式 n:语句default: 语句语句执行过程:先运算表达式的值,然后判定该值
16、与表达式1 到表达式 n 中的哪个相等,如与表达式 i 的值相等,就执行表达式 i 后的全部语句, 当遇到 break;语句时终止整个 switch 语句的执行 ;表达式 1 到表达式 n 的值都不相等的情形下执行 default 后跟的语句;每个 case后可跟多条语句;九、 循环结构for 循环语句for 表达式 1;表达式 2;表达式 3 循环体语句语句执行过程:1. 运算表达式 12. 判定表达式 2 的值是否为 0,如为 0,语句执行终止,如不为 0,进入步骤 33. 执行循环体语句( 需留意的是循环体语句只能有一个语句, 如要包含多个语句要用一对 括起来,构成一条复合语句,此处也不
17、要任凭加上 “;”,因一个“;”可构成一条空语句,这会使得后面真正的循环体语句不属于 for循环语句的部分 );进入步骤 44. 运算表达式 3,然后重新进入步骤 2while 循环语句 do while 循环语句i. while表达式 循环体语句执行过程:1. 判定表达式的值是否为非0,如是进入步骤 2,否就终止语句执行;2. 执行循环体语句,重新回到步骤 1;ii. do循环体语句while表达式 ; 执行过程:1. 执行循环体语句,进入步骤 22. 判定表达式的值是否为非 0,如是重新回到步骤 1,否就终止语句执行;这里要留意的地方跟 for 语句一样,即循环体语句只能有一个语句,如要包
18、含多个语句要用一对 括起来,构成一条复合语句,此处也不要任凭加上 “;”,因一个“;”可构成一条空语句,这会使得后面真正的循环体语 句不属于 while循环语句的部分,另外 do while循环的 while 表达式 后是要加“;”的;break 语句:放在循环体内实现的功能是终止其所在的那层循环的执行;十、 数组定义格式 :数据类型数组名 整型常量 ;如 int a10; 定义了一个整型数组,数组名为 a,这个数组含有 10 个元素;引用数组元素 : 格式: 数组名 下标切登记标值从 0 开头;下标可为常量,表达式,变量等,如 int i=3 ; a0=5; a3*2=9 ; ai=7 ;初
19、始化:数据类型数组名 整型常量 =数据表列 ; 将数据表列的各个值依次赋值给数组的各个元素;如 int a5=0,1,2,3,4 ;就数组 a 各元素 a0到a4的值分别为 0, 1, 2, 3,4遍历数组元素数组定义后,我们 不能对数组进行整体的操作 ,如 int a10; 不能用 a=3 这样的操作将数组的各元素都赋值为3;而只能一个一个元素的进行赋值,如a0=3;a1=3;a2=3 a9=3; 当然此时我们就可以借助于一个 for 循环来掌握下标的变化从而对数组的各个元素进行赋值fori=0;i y . x : y ; return z ;留意点:1.函数类型是指返回值的类型 ,即要与
20、return 语句后跟的表达式的值的类型一样;如函数类型为 void 就说明该函数无返回值, 即函数体里不能显现 return语句;2.形式参数列表里定义的变量要记得给它们指定类型,而且假如同时要定义多个,应在每个前面都分别指定类型名 ,而不能写成 int x,y;3. 函数体里能写的语句跟 main 函数一样,在开头可定义所需要的变量,后面跟上一堆执行语句;函数调用流程以上面的函数为例,在main 函数进行调用:void main int a,b,c;scanf“%d%”d ,&a,&b;printf“ %d”,maxa,b;或 c=maxa,b;printf“%d”,c 以上两种方法都会在
21、屏幕中打印出 a,b 间的较大值;调用函数的格式 函数名 实际参数列表 ;调用的时候像什么函数类型,形式参数的类型就不要加上去了; maxa,b 中 max就是函数名, 写上变量名 a,b 是实际参数列表, 执行这个调用语句时, 会先把 a,b 的值给相应位置的形式参数即执行了 x=a,y=b 这样的操作, 然后开头执行 max函数的函数体的语句; 当 max函数体里执行到一个 return语句时,就 max函数终止执行, 将 return后的表达式的值返回给 main 函数调用 max函数的那个位置,即如上面 a=3,b=5 就 maxa,breturn 后的表达式的值应当是 5 也就是说执
22、行完 max后把 5 返回到调用 max的位置可看成 printf“%d”, 5 ;或另一种解法的 c=5;十三、指针指针变量的声明 : 类型名 *指针变量名; 通过指针变量拜访它所指向的一般变量的值先将一般变量的地址赋值给指针变量,再通过指针运算符* 得到一般变量的值;int *p,x,y; x=3;p=&x;就 printf “%d”,*p; 会打印出 3 即 x 的值y=*p ;就 y 的值变为 3*p=5 ;就 x 的值变为 5指针变量加上(减去)一个位移的成效如指针变量存入的是数组元素的地址,就其加一减一得到的是那个数组元素下一个或前一个元素的地址 ;int a10; p=&a3;*
23、p 得到的是 a3的值;如 p+;此时 p 存放的是 a4 的地址&a4; *p 得到的就是 a4 的值;或 p-;此时 p 存放的是 a2的地址 &a2 ,*p 得到的就是 a2的值;行指针i. 主要是对于二维数组来说的, 二维数组每行都有自己的地址, 第 0 行地址用 数组名 表示,第 i 行地址为 数组名 +i;而想要得到二维数组里一个元素的地址, 必需先得到其所在行的地址, 然后再由那个地址得到元素的地址,比如说 inta34 ;定义了一个二维数组,该二维数组第 0 行的地址为 a,第 1 行的地址为 a+1,第 2 行的地址为 a+2,想从行的地址得到元素的地址,需在行地址前加上指针
24、运算符“* ”,即*a就是第 0 行首个元素的地址即 a00 的地址,而 a02 的地址就是在a00 的地址基础上加上位移量 2,即*a+2,然后想得到 a02 这个元素的值呢就再加上一个指针运算符“ * ”,即*a+2 ,类似地,想得到 a22 这个元素的值呢就是 *a+2+2ii. 定义行指针变量: 类型名(* 变量名) 数组长度 ;如 int *p4,a34; p=a; 此时就可把 p 当成 a 来用,用法同上所述;判定是否合法拜访数组元素 :如是指针法拜访,判定指针后跟的是否地址; 如是下标法拜访,判定下标有无越界;函数指针:函数名即为函数的地址(指针)i. 函数指针变量的定义: 类型
25、名 * 变量名 形参列表 ;如 int *p;ii. 赋值:指针变量 =函数名; 设有个函数其函数名为 max,就要将该函数的地址给 p 的话只要执行如下语句即可p = max;指针数组: 指针数组的数组元素都是指针变量,是用来存放变量的地址的, 定义格式为 类型名 *变量名 数组长度 ; 如 int * p10;指向指针的指针: 指针变量也是一种变量, 故在内存中也有对应的一个地址, 而要存放指针变量的地址,就要求助于用来存放指针变量的地址的指针变量, 定义格式类型名 *变量名; 如 int *p1; int *p2; int a=3; 可进行赋值p1=&a; p2=&p1;就 a 、*p1
26、 和 *p2 的值都是 3.十四、宏定义无参宏定义 #define标识符值定义后,显现所定义的标识符的地方都将以定义时指定的值来代替;#defineM2+3 mainint x;x=M*M;就 x 的值为 2+3*2+3=11 如想得到的结果是 2+3*2+3 就定义时也写成这样 #define M 2+3留意#define 、标识符、值之间都要用空格隔开,且宏定义结尾不需加分号;带参宏定义#define 标识符 参数表 值#defineSx,yx*y main int a=3,b=4,c=5,d=6;printfa*b=%dn, Sa,b;此时会打印出a*b=12 printfa+b*c+d
27、=%dn , Sa+b,c+d;此时会打印出 a+b*c+d=29,带参宏定义执行时是将 a+b 这样一个表达式代替 x,c+d 这样一个表达式代替 y,所以 Sa+b,c+d进行的是 a+b*c+d 的运算,而不是将 a+b 的值给 x, c+d 的值给 y 然后再做 x*y ,这点跟函数调用传递参数是不一样的 ;自定义类型名 typedef:对已存在的类型名取一个外号;i. 基本格式: typedef原类型名新类型名 ;ii. typedefint INTEGER;就 int a,b;等价于 INTEGER a,b;iii. typedefintNUM10;就 int a10; 等价于 N
28、UM a; a 即为一个有 10个元素的数组的数组名;iv. typedef int * INTEGER;就 int *a,*b; 等价于 INTEGER a,b;十五、结构体,共用体,枚举类型结构体i. 结构体类型的定义及变量的定义struct结构体名 类型 成员 1;类型 成员 2;类型 成员 n; 变量名;如struct studentlongnum; char name10; int score4;st1; 定义类型时同时定义变量struct student st2定;仍有一种structlong num;char name10; int score4;义类型后,用类型名定义变量st3
29、; 不给类型名,直接定义变量ii. 结构体变量所占字节数 :各成员各占字节数之和 ,如以上 st1,st2,st3的字节数皆为 10+20+2*4=38iii. 结构体变量初始化: struct student a=20030001, 张三, 70,75,80,85;iv. 结构体数组定义及初始化:struct student a3=20030001,zhang,89,90,91,92,20030002,liu,68,69,70,71,20030003,li,57,58,59,60 ;v. 结构体变量成员的拜访1. 结构体变量名 . 成员名 如 st1.num2. 使用结构体类型的指针:* 结
30、构体指针名 . 成员或结构体指针名 成员名struct student *st;st=&st1;st-num 或*st.num 共用体i. 共用体类型的定义及变量的定义union共用体名 类型 成员名 1;类型 成员名 n;变量的定义与结构体类似,也有三种方法;union dataint i; char ch; float f;d1; 定义类型时同时定义变量union data d2; 定义类型后,用类型名定义变量unionint i; char ch; float f;d3; 不给类型名,直接定义变量ii. 共用体变量所占字节数 :各成员所占字节数的最大值 ,如上 d1,d2,d3 所占字节
31、数皆为 4.(单精度浮点型变量所占字节数最多为4).iii. 共用体变量成员的拜访1. 共用体变量名 . 成员名 如 d1.i2. 使用共用体类型的指针:* 共用体指针名 . 成员或共用体指针名 成员名union data *dd;dd=&d1;dd-i 或*dd.iiv. 共用体成员的值: 由于共用体各成员共用同一段内存区,故同一时刻只有一个成员的值是正确的; 如 d1.i=5;d1.ch=a;就此时 d1.i 的值就不是 5 了,而是其他值了, d1.ch 的值是 a枚举类型i. 枚举类型的定义:enum 枚举名 枚举元素名 1,枚举元素名 2,枚举元素名 n ;ii. 枚举元素的值:默认
32、值分别为 0、1、n-1 ;枚举元素的值也可在定义时重指定,对于没有指定值的元素,按次序加1如 enum weekdaysun=7,mon=1,tue,wend,thur,fri,sat;就 sun 值为 7,mon值为 1,tue 值为 2,wend 值为 3,thur 值为 4, fri 值为 5,sat 值为 6十六、Turbo C 的使用菜单激活 : F10菜单切换 :左右方向键 在不同菜单间切换, 上下方向键 在同一个菜单不同选项间切换;载入文件 :两种方法 :1.找到源文件所在位置,直接将其拉到Turbo C 快捷方式上; 2.F3运行程序 : ctrl+F9看程序运行结果 :al
33、t+F5 进入编辑状态 :菜单 Edit 储存: F2插入状态切换 : Insert 键【新增自编程序3】统计数组内 小写字母显现次数 mainchar a50=abcdefghijklmnopqrstuvwxyz; int cnt26,i,word,time;fori=0;i26;i+ cnti=0; fori=0;i50;i+ cntai-97+;fori=0;i26;i+;printfn; fori=0;i26;i+word=97+i;printfword=%c=%dtime,word,cnti;printfn;【新增自编程序2】定义一数组 输入 z 个数 并求平均值将程序中的全部字母z
34、 改写成你要输入的数字个数 #include float funint*p,int nfloat avg; int sum=0,i;fori=0;in;i+sum+=pi; avg=1.0*sum/n; return avg;mainint *k,az,average;fork=a;k-az;k+scanf%d,k; funa,z; printfaverage=%fn,funa,z;【新增自编程序1】输入 5 个数 为一个数组,并输出此数组及最大的数;数组长度可随便变更,例:输入6 个数,即把程序中数字5,改成 6 即可! #include #define M 5 mainint aM,i,m
35、ax;fori=0;iM;i+ scanf%d,a+i;fori=0;iM;i+ printfM,ai; printfn;fori=0;imax max=ai;printfmax=%dn,max;【程序 1】题目:有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1. 程序分析:可填在百位、十位、个位的数字都是1、2、3、4;组成全部的排列后再去掉不满意条件的排列;2. 程序源代码: mainint i,j,k; printfn;fori=1;i5;i+ *以下为三重循环 */ forj=1;j5;j+for k=1;k2 sum+;printfIt is the
36、 %dth day.,sum;=【程序 2】题目:输入三个整数 x,y,z,请把这三个数由小到大输出;1. 程序分析:我们想方法把最小的数放到x 上,先将 x 与 y 进行比较,假如xy 就将 x 与 y 的值进行交换, 然后再用 x 与 z 进行比较,假如 xz 就将 x 与 z 的值进行交换,这样能使x 最小;2. 程序源代码: mainint x,y,z,t; scanf%d%d%d,&x,&y,&z; if xyt=x;x=y;y=t; ifxzt=z;z=x;x=t;ifyzt=y;y=z;z=t;printfsmall to big: %d %d %dn,x,y,z;=【程序 3】题目:用 * 号输出字母 C 的图案;1. 程序分析:可先用 * 号在纸上写出字母 C,再分行输出;2. 程序源代码: #include stdio.h mainprintfHello C-world.n; printf *n;printf *n;printf * n; printf