[新]C语言期末复习,经典练习题+知识点总结+模拟考题 三位一体,完胜c语言!!!!考期必备神器 下载本文

?

例2: 一定要记住,?

例3: 在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。? 10)018的数值是非法的,八进制是没有8的,逢8进1。 ?

11)%符号两边要求是整数。不是整数就错了。?

12) 三种取整丢小数的情况:? 1、int a =1.6;? 2、(int)a; ? 3、 ? ?

第二章?

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 函数的考查:?

char a = getchar() 是没有参数的,从键盘得到你输入的一个字符给变量a。-

putchar(‘y’)把字符y输出到屏幕中。? 4)如何实现两个变量x ,y中数值的互换(要求背下来)?

不可以把 x=y ,y=x; 要用中间变量 t=x;x=y;y=t。?

5)如何实现保留三位小数,第四位四舍五入的程序,(要求背下来)?

这个有推广的意义,注意 x = (int)x 这样是把小数部分去掉。? ?

第三章?

特别要注意:c语言中是用非0表示逻辑真的,用0表示逻辑假的。? 1)关系表达式:? 表达式的数值只能为1(表示为真),或0(表示假)?

当关系的表达是为真的时候得到1。如 9>8这个是真的,所以表达式的数值就是1;?

17 / 30

2)逻辑表达式:? 只能为1(表示为真),或0(表示假)? a) 共有&& || ! 三种逻辑运算符号。? b) !>&&>|| 优先的级别。?

c) 注意短路现象。考试比较喜欢考到。? d) 要表示 x 是比0大,比10小的方法。0

else 是与最接近的if且没有else的相组合的。?

4)条件表达式:?

表达式1 ?表达式2 :表达式3?

注意是当非0时候是表达式2的数值,当为0是就是表达式2的数值。? 考试口诀:真前假后。? 5)switch语句:?

a)一定要注意 有break 和没有break的差别,书上(34页)的两个例子,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了swiche语句。?

b)switch只可以和break一起用,不可以和continue用。? ?

第四章?

1)三种循环结构:?

a)for() ; while(); do- while()三种。? b)for循环当中必须是两个分号,千万不要忘记。?

c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。-

d) do-while()循环的最后一个while();的分号一定不能够丢。(当心上机改错)? 2) break 和 continue的差别? 记忆方法:?

break:是打破的意思,(破了整个循环)所以看见break就退出真个一层循环。? continue:是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。?

3)嵌套循环?

就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一般记住两层是处理二维数组的。? 4) while((c=getchar())!=’\\n’) 和 while(c=getchar() !=’\\n’)的差别? 先看a = 3 != 2 和(a=3)!=2 的区别:? (!=号的级别高于=号 所以第一个先计算 3!=2) 第一个a的数值是得到的1;第二个a的数值是3。?

考试注意点: 括号在这里的重要性。? ?

第五章?

函数:是具有一定功能的一个程序块;? 1) 函数的参数,返回数值(示意图):? main()? {?

int a = 5,b=6,c;? c = add(a,b);? printf(“%d”,c);? }? ?

调用函数? a,b是实参?

整个函数得到一个数值就是? Add函数的返回数值。? int add ( int x, int y)? {? int z;? z=x+y;? return z;? }?

被调用函数?

x,y是形式参数? 函数返回数值是整型? ?

z就是这个add函数计算后得到的结果,就是函数返回给主程序的返回数值。- 程序是在从上往下顺序执行,当碰到了函数add后,把a,b的数值穿给调用函数,程序暂时中断等待返回数值。当得到了返回数值后,再顺序的往下执行?

2)一定要注意参数之间的传递? 实参和形参之间 传数值,和传地址的差别。

18 / 30

(考试的重点)? 传数值的话,形参的变化不会改变实参的变化。?

传地址的话,形参的变化就会有可能改变实参的变化。?

3)函数声明的考查:?

一定要有:函数名,函数的返回类型,函数的参数类型。?

不一定要有:形参的名称。? ?

第六章?

指针变量的本质是用来放地址,而一般的变量是放数值的。?

int *p 中 *p和p的差别:?

*p可以当做变量来用;*的作用是取后面地址p里面的数值?

p是当作地址来使用。?

*p++ 和 (*p)++的之间的差别:改错题目中很重要?

*p++是 地址会变化。?

(*p)++ 是数值会要变化。 ? 三名主义:(考试的重点)?

数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。(考了很多次)?

函数名:表示该函数的入口地址。?

字符串常量名:表示第一个字符的地址。? ?

第七章?

1一维数组的重要概念:? 对a[10]这个数组的讨论。?

1、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。?

2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。?

3、a是一维数组名,所以它是列指针,也就是说a+1是跳一列。 ? 对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都是跳一列。? 5、注意a和a[0] 、a[1]、a[2]是不同的,它们的基类型是不同的。前者是一行元素,后三者是一列元素。? 二维数组做题目的技巧:?

如果有a[3][3]={1,2,3,4,5,6,7,8,9}这样的题目。?

步骤一:把他们写成: 第一列 第二列 第三列 ?

a[0]à 1 2 3 ->第一行? a[1]à 4 5 6 —>第二行? a[2]à 7 8 9 ->第三行?

步骤二:这样作题目间很简单: ? *(a[0]+1)我们就知道是第一行的第一个元素往后面跳一列,那么这里就是a[0][1]元素,所以是1。?

*(a[1]+2)我们就知道是第二行的第一个元素往后面跳二列。那么这里就是a[1][2]元素,所以是6。?

一定记住:只要是二维数组的题目,一定是写成如上的格式,再去做题目,这样会比较简单。?

数组的初始化,一维和二维的,一维可以不写,二维第二个一定要写?

int a[]={1,2} 合法。 int a[][4]={2,3,4}合法。 但int a[4][]={2,3,4}非法。? 二维数组中的行指针? int a[1][2]; ?

其中a现在就是一个行指针,a+1跳一行数组元素。 搭配(*)p[2]指针?

a[0],a[1]现在就是一个列指针。a[0]+1 跳一个数组元素。搭配*p[2]指针数组使用? 还有记住脱衣服法则:?

a[2] 变成 *(a+2) a[2][3]变成 *(a+2)[3]再可以变成 *(*(a+2)+3)- 这个思想很重要!? 学习

模拟试题:::: 一、 选择题

1、字符串\的长度是:( ).

19 / 30

A、3 B、11 C、7 D、5

2、设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的 数据类型为()。 A、double B、不确定 C、int D、float

3、下列语句的结果是()。 main() { int j; j=3;

printf(\ printf(\}

A、3,3 B、4,4 C、3,4 D、4,3

4、逻辑表达式!(2-1)&&x||0的值是( ) A、1 B、0 C、3 D、2

5、int a=1,b=2,c=3; if(a>b)a=b; if(a>c)a=c; 则a的值为()。 A、3 B、2 C、1

D、不一定

6、执行语句 for(i=1;i++<4;); 后变量 i 的值是()。 A、3 B、5 C、4 D、不定

7、以下正确的描述是( ).

A、只能用continue语句来终止本次循环 B、switch语句中不能出现continue语句 C、在循环中break语句不能独立出现 D、goto语句只能用于退出多层循环

8、下面合法的语句定义是( ). A、char a[ ]={'0','1','2','3','4','5'}; B、int a[ ]=\

C、int a[5]={0,1,2,3,4,5}; D、char a=\9、char a[10];不能将字符串\存储在数组中的是()。

A、int i;for(i=0;i<3;i++)a[i]=i+97;a[i]=0; B、a=\

C、strcpy(a,\

D、a[0]=0;strcat(a,\

10、在C语言中,一维数组的定义方式为:类型说明符 数组名()。 A、[整型常量]或[整型表达式] B、[正整型常量表达式] C、[整型表达式] D、[常量表达式] 11、在定义全局变量和局部静态变量的同时赋值,变量的初始化在( )时确定的. A、运行 B、编辑 C、编译 D、调试

12、关于建立函数的目的,以下正确的说法是()。

A、提高程序的可读性 B、减少程序文件所占内存 C、减少程序的篇幅

D、提高程序的执行效率 13、以下函数调用语句中实参的个数是()。 func((e1,e2),(e3,e4,e5)); A、3 B、5

C、语法错误 D、2

14、设有宏定义#define SUB(x,y) (x)*y,且a=3,b=4,则 SUB(a++,b++) 的值为( ). A、13 B、16 C、20 D、12

15、变量p为指针变量,若p=&a,下列写法不正确的是()。 A、*(p++)==a++

20 / 30

B、&*p==&a C、(*p)++==a++ D、*&a==a

16、下列程序正确的运行结果为( ). #include main() {

union u

{char *name; int age; int income; } s;

s.name=\s.age=28;

s.income=1000;

printf(\}

A、8 B、28 C、1000 D、不确定

17、定义my_file 为文件型指针变量,使用fopen只读方式打开一个已存在的二进制文件,以下正

确的调用形式为( ).

A、my_file=fopen(\B、my_file=fopen(\C、my_file=fopen(\D、my_file=fopen(\

答案:CABBC BAABB CADDA CC 二、 判断 1、若i =3,则printf(\输出的值为 -4。2、格式字符%x用来以八进制形式输出整数. 3、设u=1,v=2,w=3,则逻辑表达式u||v-w&&v+w的值为0.

4、已知a=4,b=2,c=3,d=5,表达式a>b?a:c

int a[3][3]={{3,5},{8,9},{12,35}},i,sum=0;