必须清楚
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)一般形式:










