C语言期末考试复习参考

本文章是根据我自己期末复习以及题库为大家总结的C语言知识点马虎错误:

1,若定义变量的语句有错误,常见考点有两个:

(1)变量的类型(是int型还是double型,在定义前要想好。以及定义函数时定义的函数类型与返回值的类型要一致,虽然不一致时系统会自动转换,但是我们还是保持一致的好)

(2)在定义用于存放运算结果的变量时,一定要赋初值。一般赋值0以及循环for语句的初值i等等。

2,若scanf语句有错误,常见考点有两个:

(1)格式声明符号要与后面欲赋值的变量的类型一致

例如:double定义后,函数scanf要用%lf输入,否则会有问题,比如结果为0,而输出时用%f或者%lf都可以。相同的float定义的函数则用%f,%lf都可以输出。

(2)变量的前面要有地址符号&

3,若printf语句有错误,常见考点有1个:

格式声明符号要与后面欲输出的变量的类型一致

4,return语句后面可以返回0、常量、变量和表达式的值。小括号也可打可不打

5,数组定义的一般形式(int a[n]),详见p143, 其中的常量表达式不能为变量

6,for语句的格式,三个表达式之间用分号,且分号不可省略,记得不要用逗号,for里面的三个语句的变量一般一致,如果不一致,则判断是有意为之还是输入错误(例如for(i=0;i<10;j++)这里最后明显是i)

以及for语句的括号外打花括号而不是打分号

7,break与continue:

break:是结束本循环(仅仅跳出一层循环),或者结束switch-case语句

continue:是结束本次循环(例如for循环,就是跳过本次的语句2的内容,直接进行语句3)

在改错题中若错误出现在break语句,则通常是将break换为continue;反之,若错误出现在continue,通常是将其换为break 

8,C语言中乘号不能省略,且用*表示乘法运算(c=a*b而不是c=ab,这个特别是在调用<math.h>中的函数的时候容易马虎看走眼错,sqrt(ab)应该是sqrt(a*b))

9,if : if (n&3=0)

//  = 是赋值符号,用于将右边的值赋给左边的变量;

// == 是关系符号,用来判断两个值是否相等 。

改错中if后面表达式中的赋值符号是常见的考点。

10,函数:Sun(a,b)调用带有返回值的函数,应将函数的返回值保存在变量里,而且这个变量应该提前赋初值:

改为:f=0;

           f= fun(a,b);

11,语句结尾的“;”为英文格式

12,if语句编译的程序大于一行时,要使用大括号括起来。即复合语句。如果没有花括号但是又有多行代码,那么判断/循环语句只负责紧跟着的那一代码

13,在你的%5.2e中,“5”代表最小输出宽度为5,即实际位数多于5时,则按实际位数输出,若实际位数少于定义的宽度5时,则补以空格或0。其中的“.2"代表精度为2,即小数位数为2,若实际位数大于2,则截去多余的部分。(目的是为了对齐,以及规范数据的小数点位数)

14,在写代码时容易一气呵成而错误把printf等写到for语句中,记得按需求判断是否需要换行。按Vscode里面输入代码的规范,for,if等范围语句写完以后打{},但是要记得什么时候出括号,

15,c语言乘法的乘号计算的时候不可以省略,比如说a乘以b。应该写成a*b

(而不是ab)

16,if(a=5)是允许的,先执行赋值语句,然后将赋值语句的最后结果作为判断条件。

        例如:If(a=0)执行的就是else语句了

17,函数的实参传递到形参有两种方式,值传递和地址传递

18,关于运算符,表达式,语句:运算对象加运算符构成表达式,表达式加分号构成表达式语句

19,结合顺序:大多数为从左到右,而从右到左的有3个:单目运算符(例如,自加自减),条件运算符,和赋值运算符

20,scanf输入多个数据的时候,分隔符可以是空格,制表符,回车符,但不包括逗号。除非scanf(表达式1表达式2)中的表达式1里面的两个数据是用逗号隔开的。

21,c语言用非0(!0)表示逻辑真,用0表示逻辑假。

22,关系运算符有6个,<,>,<=,>=,==,!=,前面的4种优先级大于后面两种

23,c语言中不支持连续不等式,例如:a>b>c。都是>,优先级相同,从左到右先判断a>b,返回1或者0。随后判断1>c或者0>c。最后返回结果1或0。

要作为判断条件表达a>b>c为(a>b)&&(b>c)。

24,for(表达式1;表达式2;表达式3)循环中有continue时,是提前结束本次循环,即在本次continue后面的语句就不运行了。但是for语句中的表达式3并不跳过

25,函数在定义时数组一定要有数组名,而在声明函数地时候数组名可以省略。

定义: void sort(int *x,int n)   声明:void sort(int [],int );

26,如果自定义函数在主调函数的后面,就需要在函数调用前,加上函数声明,如果背调用的函数出现在主函数之前可以不必声明。

27,在所有函数定义之前,在函数的外部已经做了声明,那么在各个主调函数中不必重复声明。

28,指针在使用之前必须要初始化,把一个具体的地址付给他,否者会报错,因为此时指针可能指向一个重要储存空间。如果不指向任何数据就赋“空值”NULL

29,&是取地址符,*是乘号也是间接访问运算符,他们是互逆的两个运算符,在指针变量名前加间接访问运算符就等价于他所指向的量。

30,二维数组虽然是空间的,但是实际在储存时还是线性储存的,即先储存第一行,随后第二行,都是从左往右。和初始化的展现形式一样a[2][3]={1,2,3,4,5,6}数字4的表达方式 *(a[0]+3)或者*a[1]

31,不能将一个字符串赋给一个数组名,除非初始化的时候。这一点和指针不一样,虽然他们都是地址但是,数组的地址为一个常量,所以不能给常量赋值。

32,同样的,指针是一个地址,不能将一个常数赋给指针,这样是非法的。

33,字符串的输入:用scanf(“%s”,str)

注意点:1,输入参数:字符数组名,不加地址符

               2,遇到回车,空格输入结束,并将输入的字符串以及‘\0’送到数组中

用gets(str)

注意点:1,遇到回车输入结束,并将输入的字符串以及‘\0’送到数组中

34,字符串的输出:

用printf(“%s”,str)或者printf(“%s”,“hello”)

用puts(str)或者puts(“hello”)

puts:输出字符串后自动换行,输出的参数可以是数组名或者是字符串常量,遇到‘\0’结束.

35,在执行函数调用时,实参把值计算出来,拷贝(形参的改变不影响实参变量的值)给相应位置(形参与实参个数相同,类型一致)的形参;函数执行完后,通过return(),可以返回一个结果值(只能返回一个结果,类型与函数定义时一致)。

36,局部变量:

在函数内定义的变量(包括形参)

作用范围: 本函数内部

定义在复合语句内的变量

作用范围: 复合语句内部

37,全局变量:

在函数以外定义的变量,不从属于任一函数。

作用范围:从定义出到源文件结束(包括各种函数)

38,主函数和其他函数之间不可相互调用

38,else与最靠近他的,没有与别的else匹配过的if匹配

39,switch(expression)

        case(constant-expression)

里面的constant-expression与expression必须要用整数。‘I’和‘V’在编译时会将字符值转化为int型的值,而如果用“I”与“V”时,为字符串,字符串最少是2位,最后一个为‘\0’,而字符串无法转化为int型的值,所以字符串自然不行。

40,从39里面知道还是要重视基础,“a”与‘a’前者是字符串,后者是字符。

简单的来说就是,通常情况下单个字符用字符,多个字符组合起来就是字符串了

41,巧妙利用求余与除法来求一个三位数的百位,十位,个位。

例如这个三位数为sum

那么百位:hd=sum/100;

那么十位:td=num/10%10;

那么个位:sd=num%10;

42:c语言中的逗号表达式:

多个表达式可以用逗号分隔开,其中逗号分开的表达式的值分别计算,整个表达式的值是最后一个表达式的值:例如

Int i,j;

i = (10-2, 3*4);//加括号的原因是逗号的计算优先级最低

j = 10-2, 3*4;

//最后结果,i=12而j=8

43,接着补充一个自增与逗号表达式结合的笔试题

main()

int x,y,z;

x=y=1;

z=x++,y++,++y;

printf(“%d,%d,%d”,x,y,z);

由于赋值运算符优先与逗号表达式

所以实际上是这样的:

(z=x++),y++,++y;

答案为:2,3,1

44,for语句循环中,语句二没有限定范围时:

For(i=5 ;i; i--)

For(j=0; j<4; j++);{,,,}

第一句话语句二实际上是表示:i>0

所以第一个for是循环5次,第二个for是循环4次。故一共4*5=20次

45,在c语言浮点数编程常见的错误输出。

#INF:这个值表示“无穷大(infinity的缩写)”,即超出了计算机可以表示的浮点数的最大范围(或者说是超过了float或者double的最大值)

例如:

当用0除以一个整数时便会得到一个

1,#INF/inf值

当用0除以一个负整数时便会得到一个

2,#INF/-inf值

解决方法:

观察程序中的/号,观察是否有除0的,或者除数的表达式为0,以及计算顺序等问题使得除数为0的情况。行办法将0去除即可

46,数组中的鞍点指的是行最大,列最小的数字。鞍点可能不止一个,也可能没有,例如下列数组:133/255/789中

第一行的2个3就是鞍点。

一般是用的一个for循环求行最大,一个for循环求列最小。

47,在计算最大公倍数的时候,有几种算法要了解一下:

辗转相除法:

用除数和余数反复做除法运算,当余数为0时,取当前算式的除数为最大公倍数

例如:1997与615

1997/615=3(余数为3)

615/152=4(余数为7)

152/7=21(余数为5)

7/5=1(余数为2)

5/2=2(余数为1)

2/1=2(余数为0)

所以1997与615的最大公约数为1

更相减损法:

用减数和差反复做减法运算,当减数和差相等时,此数为最大公约数:

例如:98与63

98-63=35

63-35=28

35-28=7

28-7=21

21-7=14

14-7=7

所以得,98与63的最大公约数为7

48,char str [] = “hello”

char str [] = {‘h’,‘e’,‘l’,‘l’,‘o’}

问这两种定义的数组长度是否相同,答案是不相同的

基本上定义并初始化数组有以下几种方式:

char str [] = “hello”

(在数组末尾自动添加‘\0’)

char str [] = {‘h’,‘e’,‘l’,‘l’,‘o’}

(在数组末尾不会自动添加‘\0’)

char str [10] = “hello”

(当赋值数组数小于数组长度时,系统都会自动为其添加上‘\0’,在这里后面的5个位置都是‘\0’)

char str [5] = {‘h’,‘e’,‘l’,‘l’,‘o’}

(此时在数组末尾不会自动添加‘\0’)

char str [10] = {‘h’,‘e’,‘l’,‘l’,‘o’}

(此时由于数组长度大于字符串长度,在数组末尾会自动添加‘\0’)

最后,我是小白一个,有什么不足的地方还请各位大佬指出。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值