1、C语言程序设计一、单项选择题:在每小题列出的四个选项中只有一个选项是符合题目规定的,请将对的选项前的字母填在题后的括号内。错选、多选或未选均无分。1. 若有代数式:,则不对的的C语言表达式为 【 C 】 A. a/b/c*e*3 B. 3*a*e/b/c C. 3*a*e/b*c D. a*e/c/b*32. 通常使用后缀表白数的各种进制,以下叙述不对的的是 【 D 】A. 后缀B:二进制 B. 后缀H:十六进制C. 后缀D:十进制 D. 后缀A:八进制3. 设float x,由键盘输入:12.45, 能对的读入数据的输入语句是 【A 】Ascanf(%5f,&x) B. scanf(%5d,
2、&x)Cscanf(%f,x); D. scanf(%s,&x)4. 完毕C源程序编辑后,到生成执行文献,C语言解决系统必须执行的环节依次为: 【 B 】 A. 连接、编译 B. 编译、连接 C. 连接、运营 D. 运营5. 以下关于运算符优先级的描述中,对的的是 【 A 】A.!(逻辑非)算术运算关系运算&(逻辑与)(逻辑或)赋值运算B. &(逻辑与)算术运算关系运算(逻辑或)赋值运算C. 关系运算算术运算&(逻辑与)(逻辑或)赋值运算D. 赋值运算算术运算关系运算&(逻辑与)(逻辑或)6. 下面函数调用语句具有实参的个数为 【 B 】func(exp1,exp2),(exp3,exp4,e
3、xp5); A. 1 B. 2 C. 4 D. 54. 和十进制数255相等的二进制数是 【 D 】 A. 1101110 B.11111110 C. 10000000 D.11111111 D.111111117. 一个C程序的执行是从 【 A 】 A. 本程序的main函数开始,到main函数结束 B. 本程序文献的第一个函数开始,到本程序文献的最后一个函数结束 C. 本程序的main函数开始,到本程序文献的最后一个函数结束 D. 本程序文献的第一个函数开始,到本程序main函数结束8. 已知字母A的ASCII码为十进制的65,则下面程序的输出是 【 A 】main() char ch1,
4、ch2; ch1=A+5-3; ch2=A+6-3; printf(%d,%cn,ch1,ch2); A. 67,D B. B,C C. C,D D.不拟定的值9. C语言规定,函数返回值的类型是由 【 D 】 A. return语句中的表达式类型所决定 B. 调用该函数时的主调函数类型所决定 C. 调用该函数时系统临时决定 D. 在定义该函数时所指定的函数类型所决定1016位二进制所表达的无符号整数,其相应的十进制数范围是 【 D 】A.065536B.165536C.165535D.06553511. 下列说法中对的的是 【C 】 A在执行C程序时不是从main()函数开始 BC程序书写格
5、式限制严格,一行内必须写一个语句 CC程序书写格式比较自由,一个语句可以分写在多行上 DC程序书写格式严格,规定一行内必须写一个语句,并要有行号12. 若有定义int alO;,则对a数组元素的对的引用是 【C 】 AalO Ba(10) Ca1010 Da10.013. 下面函数调用语句具有实参的个数为 【B 】func(a+b,(x,y), exp(exp1,exp2),(exp3,exp4,exp5); A. 7 B. 3 C. 4 D. 514. 下列叙述中对的的是 【 A】 A指令由操作数和操作码两部分组成 B常用参数xxMB表达计算机的速度 C计算机的一个字长总是等于两个字节 D计
6、算机语言是完毕某一任务的指令集15在计算机系统中,可执行程序是 【C】 A源代码 B汇编语言代码 C机器语言代码 DASCIl码16. 下列说法中错误的是 【 C 】A. 程序的执行总是从主函数开始。 B. 主函数可以调用任何非主函数的其它函数C. 程序可以从任何非主函数开始执行 D. 任何非主函数可以调用其它任何非主函数 二、填空题:请在每小题的空格中填上对的答案。错填、不填均无分。1. 微解决器是微型计算机的核心芯片,是将计算机中的运算器和控制器集成在一个很小的硅片上制成的集成电路,通常用英文字母简写为 CPU 。2. 程序三种最基本的结构是顺序结构、 选择结构 、 循环结构 。3. 在C
7、语言中,一个函数一般由两个部分组成,他们是 函数名 和 函数体 。4. 设int x=3,y=5; 则执行printf(“%dn”,x&y);后输出 1 。5. 以下程序是求100以内能被5和被7同时整除的所有数之和。 main() int i=0,s=0; while(i2y5的值为 1 。7.若函数调用语句为f(a,b,f(a+b,a-b,b);,则函数f的参数个数是_3_。8.设int x=7,y=3,则表达式x%y+x/y的值是_3_。9. 十进制数127用8位二进制数补码表达时,应为_81H _H。10. 任何一个数组的数组元素具有相同的名字和 数据类型 。三、改错题:每小题只有一个
8、错误或不妥,请指出,并将其改正。1. 下面程序的功能是求数组中最大元素的下标。 main( ) int s100,i,k; for(i=0;i100;i+) scanf(%d,si); for(i=0,k=0;isk) k=i; printf(k=%dn,k); 错误: scanf(%d,si) 改正: scanf(%d,&si) 2. 下面程序的功能是计算30个数的平均值。void main( ) int n=30,i=1,t; float sum=0; while(i30) scanf(%d,&t);sum=sum+t; i+; aver=sum/n; printf(aver=%5.1fn
9、,aver);错误: while(i30) 改正: while(i=30) 3.下面add函数的功能是求两个参数的和,并将和值返回调用函数。void add(float a,float b)float c;c=a+b;return c;错误: void add(float a,float b) 改正: float add(float a,float b) 4下面的程序是要打印出1到10的十个整数值。main( ) int n=1; while(n10)printf(“%d”,n);n+;错误: while(n10) 改正: while(n=10) 5. 下面程序的功能是计算圆的面积。main(
10、 ) float r;float s;printf(Enter a value of radius:n);scanf(%f,&r);s=3.14*r*r;printf(The area of circle is %d n,s);错误: printf(s=%d n,s) 改正: printf(s=%f n,s) 6. 程序功能:输入的学生成绩假如不在0100之间,则显示犯错信息。main( ) int s;scanf(%d,&s);if(0=s=100)printf(Input score is=%d n,s);elseprintf(Input score is wrong! );错误: if(
11、0=s=0&s =100) 7. 以下程序是计算s=1*2*3*4*5的值main( ) int k,s=1;for(k=1;k5;k+)s=s*k;printf(“s=%dn”,s);错误: for(k=1;k5;k+) 改正: for(k=1;k6;k+)或for(k=1;knum2) x=numl;numl=num2;num2=x; printf(%d,%dn,num1,num2); )程序运营时输入:51,32 程序运营结果为: 32,51 2. main() int a,b,c; printf (请输入3个整数:); scanf (%d,%d,%d,&a,&b,&c); if(ab)
12、 if(bc) printf(max=%dn,c); else printf(max=%dn,b); else if(ac) printf(max=%dn,c); else printf(max=%dn,a); 程序运营时输入的3个数为: 31,62,49 程序运营结果为: max=62 3. main() int x,i; for(i=1;i=5;i+) scanf(%d ,&x);if(x%2= =0) printf(x=%dn,x); 程序运营时输入的5个数为:13 14 15 16 17程序运营结果为: x=14 x=16 4. #includevoid main( ) int i,j
13、,m,n; i=3; j=5; m=+i; n=j+; printf(“%d,%d,%d,%d”,i,j,m,n); 程序运营结果为: 4,6,4,5 5. #includevoid main( ) int x=1,total=0,y;while(x=10) y=x*x; printf(“%d”,y); total+=y; x +;printf(“n total is %dn”,total); 程序运营结果为: 1 4 9 16 25 36 49 64 81 100 total is 385 6. #includevoid main( ) int a5,s,i;for(i=0,s=0;i5;i
14、+)scanf(“%d”,&ai); s=s+ai s=s/5;for(i=0,s=0;is)printf(“%6d”,ai); 程序运营时输入的5个数为: 55 60 65 70 75 程序运营结果为: 70 75 7. main() int x,y;x=y=1;y=+x;printf(x=%d,y=%dn,x,y);程序运营结果为: 2, 2 8. main() int x=10; while(x7) x- printf(%d, ,x); 程序运营结果是: 9 8 7 9. main() int x,y;x=y=1;y=+x;printf(x=%d,y=%dn,x,y);程序运营结果为:
15、2,2 10. main() int x=11; while(x8) x- printf(%d, ,x); 程序运营结果是: 10.,9,8 五、程序设计题:根据题意,将下列程序补充完整。1. 给一个百分制成绩,规定输出等级A、B、C、D、E。90分以上为A,8090分为B,7079分为C,6069分为D,60分以下为E。main() float score; char grade; printf (请输入学生成绩:); scanf (%f,&score); while( ) printf (n输入有误,请重新输入:); scanf ( ); switch(int)( ) case 10: c
16、ase 9: grade=A;break; case 8: grade=B;break; case 7: grade=C;break; case 6: grade=D;break; ; printf(成绩是%5.1f,相应的等级是%cn,score,grade); 答:score100|score80H时,执行3700H开始的程序。请找犯错误,并改正之。CJNE A, #80H, NEXTTEN: LJMP 2800HNEXT:JNC TEN LJMP 3700H错误: JNC TEN 改正: JC TEN 2. 下面程序是用查表法将存放在R0寄存器的BCD码转换为ASCII码。MAIN: M
17、OV A,R0 MOV DPTR,#TAB MOVX A,A+DPTRMOV R0,ARETTAB : DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H 错误: OVX A,A+DPTR 改正: MOVC A,A+DPTR 3. MCS51单片机读内部ROM时使用的是“MOV”指令,读外部RAM时使用的是“MOVX”指令。错误: 内部ROM改正:内部RAM4. 采用下面指令将外部RAM2023H单元中的数据送入A。 MOV DPTR,2023H MOVX A,DPTR错误:MOV A,2023H 改正:MOV A,2023H四、程序阅读题:请阅读下列程
18、序,写出程序运营结果。1. 执行下列程序段后,(A)= 8AH ,(CY)= 1 。 CLR C MOV A,#C5H RLC A2. 下面的指令执行后,(R1)= 48H ,(A)= OAAH 。 MOV R1,48H MOV 48H,51 CJNE R1,51H,00H JNC NEXT1 MOV A, #0FFH SJMP NEXT2NEXT1:MOV A, #0AAHNEXT2:SJMP NEXT23. 已知(2023H)=3FH,(2023H)=06H,(2023H)=5BH,(2023H)=4FH,片内RAM中(20H)=01H,下面的指令执行后,(30H)= 0A4H 。 MOV
19、 A,20H INC A MOV DPTR,2023H MOVC A,A+DPTR CPL A MOV 30H,A 4. 已知(40H)=11H,(41H)=22H,(R0)=40H,(R1)=41H试问,下面的指令执行后, (A)=11H , (40H)=11H , (41H)=11H , (42H)=11H MOV A,R0 MOV R1,A MOV 42H,R1五、程序设计题:根据题意,将下列程序补充完整。1. 将以表格形式存放在从TABLE开始的内部单元中的8个单字节正数求平均值。MOV R0,#TABLE MOV R2,#8 MOV A,#0 LOOP1: A,R0 ;求和 R0 D
20、JNZ MOV B,#8 ;求平均值RET 答: ADD ; INC ; R2, LOOP1 ; DIV AB ; ; 2. 编程将片内RAM30H单元开始的个字节数据传送到片外RAM3000H开始的单元中去。STRAT:MOV R0,#30H MOV R7,#0FH MOV DPTR,#3000H LOOP: DJNZ R7,LOOP RET答: MOV A,R; ; MOVX DPTR,A ; INC R0 ; INC DPTR ;42. 片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中。 START: ;数据块首地址送R0 MOV R7,#09H ;比较次数送 MOV A,R0 ;取数送LOOP: