发布于2022年10月15日2年前 必须清楚 1.程序结构是3种:顺序结构、循环结构(三种循环结构)、选择结构(if和switch)。 2.读程序都要从main()入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。 3.计算机的数据在电脑中保存是以二进制的形式,数据存放的位置就是它的地址。 4.bit是位,是指为0或者为1,byte是指字节,一个字节=八个位。 5.常考概念: (1)编译预处理不是c语言的一部分,不占运行时间。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。 (2)每个C语言程序中main函数是有且只有一个。 (3)在函数中不可以再定义函数,但可以调用函数(嵌套调用、递归调用)。 (4)算法是一定要有输出的,他可以没有输入。 (5)break可用于循环结构和switch语句。 (6)逗号运算符的级别最低。 第一章 1.合法的用户标识符考查: (1)合法的要求是由字母、数字、下划线组成,有其它元素就错了。 (2)并且第一个必须为字母或者是下划线,第一个为数字就错了。 (3)关键字不可以作为用户标识符号。main define scanf printf都不是关键字。 (4)迷惑你的地方:If是可以作为用户标识符,因为If中的第一个字母大写了,所以不是关键字。 2.字符数据的合法形式: ‘1’是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。 ASCII数值 ‘0’ 48 ‘a’ 97 ‘A’ 65 3.整型一般是两个字节,字符型是一个字节,双精度一般是四个字节。 4.转义字符的考查: (1)在程序中int a=0x6d,是把一个十六进制的数给变量a,注意这里的0x必须存在。 (2)在程序中int a=06d,是一个八进制的形式。 (3)在转义字符中,“\x6d”才是合法的,0不能写,并且x是小写。“、141”是合法的,0是不能写的。“\108”是非法的,因为不可以出现8。 5.算数运算符的优先级别: 同级别的有的是从左到右,有的是从右到左。 6.强制类型转换 一定是(int)a不是int (a),注意类型上一定有括号的。注意(int)(a+b)和(int)a+b的区别。前者是把a+b转型,后者是把a转型再+b。 7.表达式的考查: (1)赋值表达式:a=b=5;常量不可以赋值;自加自减表达式,如a=5,++a(是为6),a++(为5); ++在前先加后用,++在后先用后加。 (2)逗号表达式:优先级别最低,表达式的数值逗号最右边的那个表达式的数值。(2,3,4)的表达式的数值就是4。 第二章 1.printf函数的格式考查: %d 整型 %c 字符 %f 单精度 %ld long int %lf double 2.scanf函数格式的考查: 注意该函数的第二个部分是&a这样的地址,不是a; scanf("%d%d%*d%d",&a,&b,&c); //跳过输入的第三个数据 3.putchar,getchar函数的考查: 4.实现两个变量x,y中数值互换 不可以把x=y,y=x;要用中间变量t=x,x=y,y=t。 5.如何实现保留三位小数,第四位四舍五入的程序。 注意x=(int)x这样是把小数部分去掉。 第三章 1.关系表达式 (1)表达式的数值只能为1(表示为真)或0(表示假) (2)当关系的表达式为真的时候得到1。如9>8这个是真的,所以表达式的数值就是1。 2.逻辑表达式 只能为1(表示为真)或0(表示假) (1)三种逻辑运算符号:&& || ! (2)优先的级别:!>&&> || (3)表示x是比0大,比10小的方法:(0<x)&&(x<10) 注:0<x<10是错的。 3.if语句 else是与最接近的if且没有else的相组合的。 4.条件表达式: 表达式1?表达式2 表达式3 注意是当非0时候是表达式2的数值,当为0时就是表达式3的数值。 5.switch语句: (1)注意有break和没有break的区别,没有break时,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了switch语句。 (2)switch只可以和break一起用,不可以和continue用。 第四章 1.三种循环结构 (1)for():循环中必须是两个分号 (2)while() (3)do while()循环的最后一个while();的分号一定不能丢 注意:循环一定要有结束的条件,否则成了死循环。 2.break和continue的区别 (1)break:(破了整个循环)退出一层循环; (2)continue:(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,调到循环开始,然后判断循环条件,进行新一轮的循环。 3.嵌套循环 第五章 函数 函数:具有一定功能的一个程序块。 1.函数的参数、返回数值 main() { int a=5,b=6,c; c=add(a,b); printf("%d",c);} 调用函数a,b是实参,整个函数得到一个数值就是add函数返回数值。 2.一定要注意参数之间的传递 实参和形参之间传数值和传地址的差别:传数值的话,形参的变化不会改变实参的变化;传地址的话,形参的变化就会有可能改变地址的变化。 3.函数声明的考查: 一定要有:函数名、函数的返回类型、函数的参数类型; 不一定要有:形参的名称。 函数声明与函数定义不同: 函数定义必须有:函数名、函数的返回类型、函数的参数类型、形参的名称。 第六章 指针 1.指针变量的本质是用来放地址,而一般的变量是放数值的。 2.int p中p和p的区别: *p可以当做变量来用;*的作用是取后面地址p里面的数值p是当做地址来用的。 3.*p++和(*p)++之间的区别: 前者是地址会变化,后者是数值会变化。 4.三名主义: (1)数组名:表示第一个元素的地址。数组名不可以自加,它是地址常量名。 (2)函数名:表示该函数的入口地址。 (3)字符串常量名:表示第一个字符的地址。 第七章 数组 一维数组 1.a[10] (1)a表示数组名,是第一个元素的地址,也就是a[10]的地址。 (2)a是地址常量,所以只要出现a++,或者a=a+2赋值的都是错误的。 (3)a是一维数组名,所以它是列指针,也就是说a+1是跳一列。 二维数组 2.a[3][3] (1)a表示数组名,是第一个元素的地址,也就是a[10]的地址。 (2)a是地址常量,所以只要出现a++,或者a=a+2赋值的都是错误的。 (3)a是二维数组名,所以它是行指针,也就是说a+1是跳一行。 (4)a[0]、a[1]、a[2]也都是地址常量,不可以对他进行赋值操作,同时它们都是列指针,a[0]+1、a[1]+1、a[2]+1都是跳一列。 注意:a和a[0]、a[1]、a[2]是不同的,它们的基类型是不同的。前者是一行元素,后三者是一列元素。 如a3[3][3]={1,2,3,4,5,6,7,8,9} (1)(a[0]+1):第一行的第一个元素往后面跳一列,即为a[0][1]元素,所以是2; (2)(a[1]+2):即为a[1][2]为6。 二维数组写成以上形式会比较简单。 3.数组的初始化 一维的可以不写,二维第二个一定要写。 例:int a[]={1,2}合法;int a[][4]={2,3,4}合法;int a[4][]={2,3,4}不合法。 第八章 结构体 1.什么是结构体? 结构体是一种工具,用这个工具用户可以定义自己的数据类型。同时,结构体属于一种构造数据类型。 2.结构体与数组的比较: (1)都由多个元素组成; (2)各个元素在内存中的存储空间是连续的; (3)数组中各个元素的数据类型相同,而结构体中各个元素的数据类型可以不相同。 3.结构体的定义和使用 (1)一般形式:
创建帐户或登录后发表意见