《2022年大一上学期C语言期末复习总结和模拟试题带答案3.docx》由会员分享,可在线阅读,更多相关《2022年大一上学期C语言期末复习总结和模拟试题带答案3.docx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选学习资料 - - - - - - - - - 易错点运算 , 而实型变量就不答应进行 求余 C语言中易犯的错误 运算. 对初学 C语言的人来说 , 常常会出一些连自己都不知道错在哪里的错误 . 看着有错的程序 , 不知该如何改起 , 一些 C 编程常常犯的错误 , 写给各位学员以 供参考 . * * * *3. 将字符常量与字符串常量混淆. * * char c; c=a; 1. 书写标识符时 , 忽视了大小写字母 的区分 . 在这里就混淆了字符常量与字符串 常量 , 字符常量是由一对单 main int a=5; 引号括起来的单个字符, 字符串常量是一对双引号括起来的字符序 printf
2、%d,A; 列.C 规定以 作字符串终止标志 , 它 是由系统自动加上的 , 所 编译程序把 a 和 A 认为是两个不同的变量名 , 而显示出错信息 . 以 字 符 串 a 实 际 上 包 含 两 个 字符:a和,而把它赋给一C 认为大写字母和小写字母是两个不同的字符 . 习惯上 , 符号常量个字符变量是不行的 . *名用大写 , 变量名用小写表示, 以增加*可读性 . * 4. 忽视了 = 与= 的区分 . * * 在很多高级语言中, 用= 符号作为关系运算符 等于 . 如在 BASIC程序中可以写2. 忽视了变量的类型, 进行了不合法的运算 . main if a=3 then float
3、 a,b; 但 C语言中 ,= 是赋值运算符 ,= printf%d,a%b; 是关系运算符 . 如: if a=3 a=b; % 是求余运算 , 得到 a/b 的整余数 . 整型变量 a 和 b 可以进行求余前者是进行比较 ,a 是否和 3相等 , 后名师归纳总结 - - - - - - -第 1 页,共 15 页精选学习资料 - - - - - - - - - 者表示假如 a 和3相等 , 把 t=z/100; printf%f,t; b 值赋给 a. 由于习惯问题 , 初学者往往 ; 会犯这样的错误 . *复合语句的花括号后不应再加分号,*否就将会画蛇添足 . * 5. 遗忘加分号 .
4、分号是 C语句中不行缺少的一部分 , 语句末尾必需有分号 . a=1 b=2 编译时 , 编译程序在 a=1 后面没发又如 : if a%3=0; I+; 本是假如 3整除 a, 就 I 加1. 但由于 if a%3=0 后多加了分号, 就 if语句到此终止 , 程序将执行 I+现分号 , 就把下一行 b 语句 , 不论 3是否整除 a,I 都=2也作为上一行语句的一部分, 这就将自动加 1. 会显现语法错误 . 改错时 , 再如 : 有时在被指出有错的一行中未发觉错 误, 就需要看一下上一行是否 for I=0;I5;I+; scanf%d,&x; 漏掉了分号 . printf%d,x; 本
5、意是先后输入 5个数 , 每输入一个 z=x+y; 数后再将它输出 . 由于 for t=z/100; printf%f,t; , 最终一个语句 后多加了一个分号, 使循环体变为 空语句 , 此时只能输入一个数对于复合语句来说并输出它 . 中最终的分号不能忽视不写 * * * * * 7. 输入变量时遗忘加地址运算符&. 6. 多加分号 . int a,b; 对于一个复合语句 , 如: scanf%d%d,a,b; 名师归纳总结 z=x+y; 这是不合法的 .Scanf函数的作用是 :第 2 页,共 15 页- - - - - - -精选学习资料 - - - - - - - - - 依据 a,
6、b 在内存的地址将 a, 输入应如以下形式 : a=3,b=4b 的值存进去 .&a 指 a 在内存中的地 址. * * * *9. 输入字符的格式与要求不一样. * 在用 %c格式输入字符时 , 空格字符8. 输入数据的方式与要求不符. 和 转义字符 都作为有效字符输入 . scanf%d%d,&a,&b; scanf%c%c%c,&c1,&c2,&c3; 输入时 , 不能用逗号作两个数据间的 如输入 a b c 分隔符 , 如下面输入不合法 : 字符 a 送给 c1, 字符 送给 c2, 字符3,4 b 送给 c3, 由于 %c 输入数据时 , 在两个数据之间以一个 只要求读入一个字符 ,
7、 后面不需要用或多个空格间隔 , 也可用回车 空格作为两个字符的间隔 . *键, 跳格键 tab. scanf%d,%d,&a,&b; * * 10. 输入输出的数据类型与所用格式 说明符不一样 . C 规定 : 假如在 格式掌握 字符串中除了格式说明以外仍有其它例如 ,a 已定义为整型 ,b 定义为实型字符 , 就在输入数据时应输入与这些 a=3;b=4.5; 字符相同的字符 . 下面输入是 printf%f%dn,a,b; 合法的 : 编译时不给出出错信息 , 但运行结果 3,4 将与原意不符 . 这种错误特别此时不用逗号而用空格或其它字符是 需要留意 . 不对的 . * *3 4 3:4
8、* 11. 输入数据时 , 妄想规定精度 . 又如 : scanf%7.2f,&a; scanfa=%d,b=%d,&a,&b; 名师归纳总结 这样做是不合法的, 输入数据时不能第 3 页,共 15 页- - - - - - -精选学习资料 - - - - - - - - - 规定精度 . * whileI=10 * * a=a+I; 12.switch 语句中漏写 break 语句 . I+; 例如 : 依据考试成果的等级打印出百 分制数段 . switchgrade case A:printf85100n; case B:printf7084n; case C:printf6069n; c
9、ase D:printf60n; default:printferrorn; 由于漏写了 break 语句,case 只起标号 printf%d,a; 2main int a=0,I; scanf%d,&I; do a=a+I; 的作用 , 而不起判定作用 . I+; 因此 , 当 grade 值为 A 时,printf 函数在执行完第一个语句后接着执 whileI10 时, 二者结果就不同了 . 由于 while 循环是先判定后执行13. 忽视了 while 和 do-while语句在, 而 do-while循环是先执行后判定 . 对细节上的区分 . 于大于 10的数 while 循环一 1
10、main int a=0,I; 次也不执行循环体 , 而 do-while语句就要执行一次循环体 . *scanf%d,&I; *名师归纳总结 - - - - - - -第 4 页,共 15 页精选学习资料 - - - - - - - - - * 这样初始化数组是不对的.C 语言规定14. 定义数组时误用变量 . 只有静态储备 static数组int n; 和外部储备scanf%d,&n; exterm 数组才能初始化 . 应改为 : int an; static int a3=0,1,2; *数组名后用方括号括起来的是常量表 达式 , 可以包括常量和符号常* * 17. 在不应加地址运算符
11、&的位置加量. 即 C不答应对数组的大小作动态定 了地址运算符 . 义. scanf%s,&str; *C 语言编译系统对数组名的处理是: 数*组名代表该数组的起始地址* 15. 在定义数组时, 将定义的 元素个, 且 scanf 函数中的输入项是字符数组数误认为是可使的最大下名, 不必要再加地址符 &.应标值 . 改为 :scanf%s,str; * main * * static int 18. 同时定义了形参和函数中的局部 变量 . int maxx,y int x,y,z; z=xy.x:y; a10=1,2,3,4,5,6,7,8,9,10; printf%d,a10; C语言规定
12、: 定义时用 a10, 表示 a 数 组有 10个元素 . 其下标值由 0 returnz; 开头 , 所以数组元素 a10 是不存在的 . * * 形参应当在函数体外定义, 而局部变 16. 初始化数组时 , 未使用静态储备 . 量应当在函数体内定义 . 应改int a3=0,1,2; 为: int maxx,y 名师归纳总结 - - - - - - -第 5 页,共 15 页精选学习资料 - - - - - - - - - int x,y; A.y.x:y; returnz; 试题一一、单项挑选题 (共 30 分,每题 1 分)C1. 以下不正确的转义字符是 A. 9. 设整型变量 i 的
13、值为 3,就运算 表达式 i i 后表达式的值是()A.0 B.1 C. 2 D.表达式出错 10. 设整型变量 a,b,c 均为 2,表达式 a+b+c+的结果是()A.6 B.9 C.8 D. 表达式出错 11. 如已定义 x 和 y 为 double 类 型,就表达式 x=1,y=x+3/2 的值是 C.074 D.02. 不是 C语言供应的合法关键字是()A.switch B.cher C.case D.default a 3. 正确的标识符是()A.?A.1 B.2 C.2.0 D.2.5 B.a=2 C.a.3 D.a_3 是4. 以下字符中属于键盘符号的12. 设 a=1,b=2
14、,c=3,d=4,就表达式:ab?a:cd?a:d 的结果是() B.n C.t D.b . 以下数据中属于“ 字符串常量”A.4 B.3 C.2 D.1 的 A.ABC B. “ ABC” C.ABC D. A 6.char 型常量在内存中存放的是13. 设 a 为整型变量,不能正确表 达数学关系:10a15的 C语言表达式 是()A.ASCII 码 B.BCD 码 C.A.10a10&a15 D. !(a=15)14. 如有以下定义: char a 、 int A.b=a/2 B.b=6- (a) C.b=a%2 D.b=a3 ?2:2 b 、 float c 、 double d ,就表
15、达8. 在以下一组运算符中,优先级 最高的运算符是()式 a*b+d-c 值的类型为()名师归纳总结 - - - - - - -第 6 页,共 15 页精选学习资料 - - - - - - - - - A.float B.int C.char D.double A.10 B.9 C.8 D.7 15. 表达式“10!=9” 的值是20. 设有定义: char s12= “ string ” ;就 printf ()A.true B. 非零(“%dn” ,strlen (s);的输出是()值 C.0 D.1 16. 循环语句 for (x=0,y=0;A.6 B.7 C.11 D.1(y!=12
16、3)| (x4);x+);的2 21. 合法的数组定义是()A.int 循环执行()A.无限次 B. 不确定次 C.4 次 D.3 次17. 在 C语言中,以下说法中正确 的是()A. 不能使用“do while ” 的循环a= “ string ” ; B.int a5=0 ,1,2,3,4,5 ;C.char a=“ string ” ; D.char a=0 ,B.“ do while ” 的循环必需使用1,2,3,4,5 break 语句退出循环C.“ do while ” 的循环中,当条件为非 0 时将终止循环D.“ do while ” 的循环中,当条件为 0 时将终止循环;18.
17、 设 a,b 为字符型变量,执行scanf (“ a=%c,b=%c” ,&a,&b)后使 a 为A,b 为B,从键盘上的正确输入是()22. 函数调用 strcat (strcpy(str1 ,str2 ),str3 )的功能是()A. 将字符串 str2 复制到字符串 str1 中后再将字符串 str3 连接到字符 串 str1 之后B. 将字符串 str1 复制到字符串 str2 中后再连接到字符串 str3 之后C. 将字符串 str1 复制到字符串 str2 中后再复制到字符串 str3 之后A.AB B. A,D. 将字符串 str2 连接到字符串B C.A=A,str1 中后再将
18、字符串 str1 复制到字符B=B D.a=A,b=B 串 str3 中19. 设 i ,j ,k 均为 int 型变量,执行完下面的 for 循环后, k 的值为()23. 设有如下定义,就正确的表达为()名师归纳总结 for (i=0 ,j=10 ;i=j ;i+ ,jchar x=“ abcdefg ” ;第 7 页,共 15 页) k=i+j ;- - - - - - -精选学习资料 - - - - - - - - - char y= a ,b ,A.8 B.4 C.2 D. 出c,d,e,f ,g ;错A.数组 x 和数组 y 等29. 指出下面正确的输入语句是价B.数组 x 和数组
19、 y 的长度相同()A.scanf (“a=b=%d” ,&a,度C.数组 x 的长度大于数组 y 的长&b); B.scanf (“ a=%d,b=%f” ,&m,&f);度D.数组 x 的长度小于数组 y 的长C.scanf (“%3c” ,c);D.scanf (“ %5.2f ,&f);24. 设有单精度变量 f ,其值为 13.8. 执行语句“n=(int )f )%3;”后, n 的值是()30. 如有以下定义和语句,且 0=i5,就()是对数组元素地址的正确表示名师归纳总结 A.4 B.1 C.4.333333int a=1,2,3,4,5 ,*p,第 8 页,共 15 页i ;
20、 D.4.6 p=a;25. 执行语句“ f=(3.0 ,4.0 ,5.0 ),A.&(2.0 ,1.0 ,0.0 );” 后,单精度变量 f 的值是()(a+i ) B.&p C.aA.3.0 B.5.0 C.2.0+ D.&pi 二、填空( 20 分,每空 1 分) 1. 在内 D.0.0 存中储备“A” 要占用(2 )26. 设 a、b 均为整型变量,以下个字节,储备A 要占用(1 )字节;表达式中不是赋值表达式的是2. 符号常量的定义方法是()A.a=3,4,(#define 符号常量常量);5 B.a=3*2 C.a=a&b D.a=b=4 3. 能表述“20x30 或 x20 &
21、x30)| x-100 );1:0)” 的值为()A.3 B.2 C.1 D.0 4. 结构化程序设计方法规定程序或程序段的结构有三种:次序结构、(分支结构)和(循环28.sizeof (double )的结果值是结构);()- - - - - - -精选学习资料 - - - - - - - - - 5.C 语言共供应了三种用于实现 int a=10,b=4,c=3;循环结构的流程掌握语句,它们是if (ab) a=b ;(while )、(do-while )和(for );if (a0;y)7. 设有定义语句“static int if (y%3= = 0) printf (“ %d” ,
22、a34=1,2 ,3 ” ,就 a11 y); continue ; 3. main ()值为(), a21的值为();8. “ *” 称为(指针运算 int x,y;符)运算符,“&” 称为(地址运算符)运算符;for (y=1,x=1;y=10) break ;在于有无(分号)号;10. 用 把一些语句括起来称为if (x%2= =1) x+=5 ;continue ; (. 复合语句)语句11. 设 a=12、b=24、c=36,对于“ scanf (” a=%d,b=%d,c=%d“ ,&a,&b,&c);” ,输入形式应为(a=12,x-=3; printf (“ %d” ,y)4.
23、 main()b=24,c=36 ) static int a3=9,7,5,12. 表达式“ sqrt(s*(s-a )*(s-b )* (s-c );” 对应的数学式子为()13.C 语言编绎系统在判定一个量 是否为“ 真” 时,以 0 代表“ 假” ,3,1,2,4,6,8 ;int i,j ,s1=0,s2=0; i ,j ,s1=0,s2=0;for (i=0 ;i3 ;i+ )名师归纳总结 以(非 0 )代表“ 真”for (j=0 ;j3 ;j+ );第 9 页,共 15 页三、读程序( 30 分) if (i= =j )s1=s1+aij1. main ()if (i+j= =
24、2 ) s2=s2+aij;- - - - - - -精选学习资料 - - - - - - - - - 参考答案:printf (“ %dn%dn” ,s1,s2); 一、单项挑选题(共30 分,每题5. main ()1 分)static char a= * ,* ,1.C 2. B 3. D 4. A 5. B 6. A 7. C 8. C 9. A 10. *,* ,* ;A 11. C 12. D 13. A 14. int i,j ,k;D 15. D 16. C 17. D 18. D 19. A 20. B 21. D 22. for (i=0 ;i5 ;i+ )A 23. C
25、24. B 25. D 26. D 27. B 28. A 29. B 30. C printf (“n ” ); 二、填空( 20 分,每空 1 分)1.2 ,1 for (j=0 ;ji ;j+ ) printf (“%c” ,);for (k=0;k20 & x30 ) | x-100 4. 分支结构,循环结果(“%c” ,ak ); 6. int fac(int n )static int f=1;5.while do for f=f*n ; return(f ); 6.#include “ stdio.h” # main()include “ string.h”int i;7.a11
26、=0 , a21=0 for (i=1 ;i=5 ;i+ )8.* 指针运算符, &地址运算符 9. 分号;10. 复合语句printf (“ %d!=%dn” ,i ,fac(i ); 四、编写程序( 20 分)1. 编一个程序,输入 X 的值,按11.a=12,b=24,c=36 以下公式运算并输出Y 的值e 的值13. 非 0 2. 编程序按以下公式运算三、读程序( 30 分)(精度为 1e-6)e=1+1/1!+1/2!+1/3 !+ 1/n !1. 结果: 10,4,3 名师归纳总结 - - - - - - -第 10 页,共 15 页精选学习资料 - - - - - - - - -
27、 2. 结果: 8 5 2 C 、本程序文件的第一个函数开头,3.6 Main()到本程序文件的最终一个函数终止 D 、本程序文件的第一个函数开头,4.18 10 到本程序 main 函数终止2、C语言程序的基本单位是 _C_;5.* A、程序行B、语句6.5 !=120 C、函数D、字符四、编写程序( 20 分 1. 3、请选出可用作 C语言用户标识符的一组标识符 _B_;int x,y;A、 void B、 a3_b3 C、For D、2a scanf (“%d” ,&x); define _123 -abc DO if (x=1) y=x ; (x1&x10) y=2*x-1 ; WOR
28、D IF ase sizeof 4、假定 x 和 y 为 double 型,就表达式x=2,y=x+5/2 的值是 _C_ ;else y=3*x-11; A、4.500000 printf (“ x=%d,y=%dn” ,B、4 C、4.000000 x,y);D、2.000000 5、以下可以正确表示字符型常量的是 _D_;bsp ; 2.Main () A、297 B、a float E; C、n D、t 6、在 C语言中,要求运算数必需是整 型的运算符是 _D_;int n ;s=0;E=1;试题二 A、/ B、+ C、*= D、% 7、C 语言中,复合语句的构成是将一 系列语句置于
29、_C_; A、begin 与 end 之间 B、方框号“ ” 之间一、单项挑选题(每道题 2 分,共 50 分)1、一个 C程序的执行是从 _A_; A、本程序的 main 函数开头,到 main 函数终止 B 、本程序的 main 函数开头,到本 程序文件的最终一个函数终止 C、花括号“ ” 之间 D、圆括号“ ” 之间8、有如下程序段,对应正确的数据输 入是 _A_;float x,y; scanf ” %f%f” , &x,&y; printf” a=%f,b=%f” , x,y; 名师归纳总结 - - - - - - -第 11 页,共 15 页精选学习资料 - - - - - - -
30、 - - A、2.04 case 2: printf” %dn” , B、2.04,5.67 k+; ” %dn” , 5.67 case 3: printfC 、A=2.04,B=5.67 k+; ” %dn” , D、2.045.67 case 4: printf9、以下程序段的输出结果是_D_;k+; printf” int a=5678; break; printf” %2dn” , a; default: A、 提 示 出 错 、 无 结 果Full.n” ; B 、 4 B、56 C、78 D、5678 A、 3 10、已知: char ch=A;就以下表达C、3 D、4 式的值是
31、 _B_; ch = ch=A&ch=Z . 4 4 ch+32 : ch; 、14、设 a、b、c、d、m、n 均为 int型 A、A B、a C变量,且 a=5、b=6、c=7、d=8、Z D、z m=2、 n=1 , 就 逻 辑 表 达 式11、以下描述,正确选项 _B_ ;m=ab&n=cd 的值为 _A_;A、表达式 3.91%5是合法的 A、0 B、 1 C、2 B、用 b=89 作为 while 循环的条D、 3 型件是合法的15、设 x、y 和 temp 均为 long intC、逗号表达式是没有值和类型的 D、字符型变量和 int 型变量的操变量,就以下语句:temp=x; x=y; y=temp; 的功能作完全不同 是_D_;12、阅读以下程序:A、把 x 和 y 按从大到小排