《东大《C语言及程序设计》.docx》由会员分享,可在线阅读,更多相关《东大《C语言及程序设计》.docx(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、简答题东 北 大 学 继 续 教 育 学 院C 语言程序设计 X 复习题课程名称:C 语言程序设计 X42/ 321.、分析下面程序的执行过程,给出输出结果。main( )intx=2,y=3,z=4,a=0; a = xz?y:z; printf(d,a);答:3。a = x50)printf(d,b);if(a40)printf(d,a);if(a30)printf(d,a); 答:335555a=55,a 大于 50 于是执行printf(d,b),输出b 的值,b 的值为 33,; 接着 a 大于 40,输出a 的值,a 的值为 55;最后 a 大于 30,输出a 的值,a 的值为
2、 55; 故输出为 335555二、编程题1、编写程序,由键盘输入两个整数a、b,求两数的平方和并输出。答:#include int main(viod)int a, b, s;printf(Please input a,b:n); scanf(%d%d, &a, &b);s = a*a + b*b;printf(The result is %dn, s); return 0;2、从键盘输入十个整数,统计其中正数、负数和零的个数,并在屏幕上输出。答:void main()int a, i, p=0,n=0,z=0; printf(Please input number); for(i=0;i0
3、) p+; else if(a0) n+; else z+;printf(正数: %5d, 负数: %5d, 零: %5dn, p, n, z);3、从键盘读入三条边,判断能否组成三角形,若可以组成三角形,则输出此三角形的面积。答:#include #include void main()float a, b, c, s, area; printf(输入三角形的三边 : ); scanf(%f%f%f, &a,&b,&c);if( (b+c) a & (a+c) b & (a+b) c)s = (a+b+c) / 2.0;area = sqrt(s*(s-a)*(s-b)*(s-c); pri
4、ntf(三角形面积为: %.2fn, area);else printf(这三边不能构成三角形n);4、编写函数fun(),将十进制正整数转换成 k 进制数,并按位输出。答:#include fun()int i, m, n, k;printf(请输入十进制正整数: ); scanf(%d, &n);printf(请输入进制数: );scanf(%d, &k);for(;) i=n%k; m=n/k;if ( i k ) printf(%dn, k);break;k=i; printf(%d, m);5、初始化一个 4*5 的矩阵,求其中最大元素和最小元素所在的行号,对调最大最小元素,输出行号
5、、列号、对调后的矩阵。答:#include main()int str45=2,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20;int i, j, max, min, a, b, c, d, temp; max=str00;min=str00; for(i=0;i4; i+) for(j=0; j max) max=strij; a=i;b=j;for(j=0; j5; j+) if (strij min) min=strij; c=i;d=j;strab=min;strcd=max; for(i=0;i4;i+for(j=0;j5;j+) p
6、rintf(%d , strij); printf(n);c 语言及程序设计复习题 B一、简答题1、说明算法可以采用哪几种控制结构组合。答:算法的控制结构给出了算法的基本框架,不仅决定了算法中各操作的执行顺序,也直接反映了算法的设计是否符合结构化原则。一个算法一般可以用顺序、选择、循环三种基本控制结构,通过顺序或嵌套组合而成。2、c 语言程序的基本单位是什么?它的结构又如何? 答:函数是c 语言程序的基本模块单元。任何函数(包括主函数main()都是由函数说明和函数体两部分组成。其一般结构如下:函数类型 函数名(函数参数表) 说明语句部分; 执行语句部分;3、分析下面程序的执行过程,给出输出结
7、果。main( )intx=2,y=3,z=4,a=0; a = xz?y:z; printf(d,a);答:3。a = x50)printf(d,b);if(a40)printf(d,a);if(a30)printf(d,a); 答:335555a=55,a 大于 50 于是执行printf(d,b),输出b 的值,b 的值为 33,; 接着 a 大于 40,输出a 的值,a 的值为 55;最后 a 大于 30,输出a 的值,a 的值为 55; 故输出为 3355555、分析下面程序的执行过程,若键盘输入为5,给出输出结果。main( )intx=1,a=0,b=0; switch(x)ca
8、se 0:b+; case 1:a+; case 2:a+; b+;printf(a=d, b=%d,a,b);答:a=2,b=16、分析下面程序的执行过程,给出结果说明break 和 continue 的区别。main( )int a=1,b; for(b=l;b10;b+)if(b 8)break; a+;printf(dn,a);答:47、分析下面程序的执行过程,给出输出结果。main( )int a=10; if(a+10)print(dn,+a); elseprint(dn,a-);答:108、分析下面程序的执行过程,给出输出结果。main( )int i=0,s=0; doif(i
9、%2)i+; continue; i+;s+=iwhile(i7) print(dn,s);答:16二、编程题1、输入正整数n,输出n 行 n 列的空心四边形图案。以下是n=4 的图案*答:#include int main()int i,j,n; printf(请输入 n);scanf(%d,&n); for(i=1; i=n; i+)for(j=1; j=n; j+)if(i=1 | j=1 | i=n | j=n) printf(*);elseprintf( );printf(n);return 0;2、有一个分数序列:2/1,3/2,5/3,8/5,13/8,.编程求此序列的前 20
10、项之和。答:#include intmain()inta,b,c,i; doublesum=0; a=2,b=1;for(i=0;i20;i+) sum+=1.0*a/b; c=b;b=a; a=a+c;printf(%.2lfn,sum); return0;3、从键盘上输入一个百分制成绩S,按下列原则输出其等级:若成绩大于或等于90,则等级为A;若成绩大于等于 80,小于 90,则等级为 B;若成绩大于等于 70,小于 80,则等级为C;若成绩大于等于 60,小于 70,则等级为D;若成绩小于 60,则等级为E。答:#include void main()int data; char gra
11、de;printf(Please enter the score:);scanf(%d”, &data); switch(data/10) case 10:case 9 : grade=A; break; case 8: grade=B; break; case 7: grade=C; break; case 6: grade=D; break; default: grade=E;printf(the grade is %c”,grade);C 语言及程序设计复习题 B一、简答题1、说明算法可以采用哪几种控制结构组合。1、算法的控制结构给出了算法的基本框架,不仅决定了算法中各操作的执行顺序,也
12、直接反映了算法的设计是否符合结构化原则。一个算法一般可以用顺序、选择、循环三种基本控制结构,通过顺序或嵌套组合而成。2、c 语言程序的基本单位是什么?它的结构又如何?2、函数是c 语言程序的基本模块单元。任何函数(包括主函数main()都是由函数说明和函数体两部分组成。其一般结构如下: 函数类型函数名(函数参数表)说明语句部分;执行语句部分;二、编程题1、编写程序,输出从公元 2010 元至 2100 年所有闰年的年号。每输出 3 个年号换一行。【 参 考 答 案 】 #include “stdio.h”main()int year,I=0;printf(“n 从 2010 年至公元 2100
13、 年中闰年有:n”); for(year=2010;year=2100;)if(year%4= =0&year%100!=0)|year%400= =0)printf(“t%d”,year); i+;if(i%3= =0) printf(“n”);year+;2、输出所有水仙花数。所谓水仙花数是指一个三位数,其各位数字立方和等于该本身。例如:153 是一个水仙花数,因为 153=13+53+33。【参考答案】#include main()int i,j,z,n; for(n=100;n1000;n+)i=n/100; j=n/10-i*10; z=n%10;if(i*100+j*10+z=i*
14、i*i+j*j*j+z*z*z)printf(“%5d”,n);printf(“n”);getch();3、编写函数fun,其功能是判断一个数是否为素数的函数,素数时返回1,否则返回 0。【参考答案】/*是素数返回 1,否则返回 0*/ int sushuis(int m) int m;int i=2,t; for(;i=m;i+)if(m%i=0&im) break; if(m-i=0) t=1;else t=0; return t;4、从 10 个元素的数组中找到最小值,然后与数组的第一个元素对调。【参考答案】#include main()int a10=1,22,4,96,88,17,5
15、,39,-7,-2;int i,j,temp,min=0; printf(“n”); for(i=0;i=9;i+)printf(“%d ”,ai); printf(“n”); for(i=0;i=9;i+)if(aiamin) min=i;temp=a0; a0=amin;amin=temp;for(i=0;i=9;i+) printf(“%d ”,ai);printf(“n”); getch();5、 m 个人的成绩存放在整型数组 score 中,请编写函数 fun,它的功能是:将低于平均分的人数作为函数值返回主函数,并将低于平均分的分数存放在主函数定义的数组below 中。5、【参考答案
16、】#include stdio.hint fun(int score,int m,int below)/*计算 score 数组中m 个元素的均值,并把小于平均值的元素逐个存放在below 数组中/int i,k0,aver0; for(i0;im;i)averscorei;/* 计算总分*/ aver/m;/* 计算平均分 */ for(i0;im;i)/*逐个判断分数值 */if(scoreiaver)/* 如低于平均分 */belowkscorei; /* 存放到以below 为首地址的数组中 */ k;/* 统计低于平均分的人数 */return k;/* 返回人数 */main()i
17、nt i,n,below9;int score955,44,66,77,88,99,89,78,67; nfun(score,9,below); /* 调用函数,低于平均分的人数赋给n */ printf(nbelow the average are:);for(i0;i50)printf(d,a);if(a40)printf(d,a);if(a30)printf(d,a);3、如果a 的输入值是 58,通过执行三个判断语句,在每一个判断中,如果满足判断条件的话,就输出a, 因为三次判断,条件都满足,所以三都次输出a,因此输出结果为 585858。4、分析下面程序的执行过程,给出输出结果。ma
18、in( )int x=3; doprintf(d,x-);while(!x);4、本题 x 赋初值为 3,当执行 printf(%d,x-);时,由于X-的作用是先运算x,再将 x 的值减 l,所以,printf 输出的 x 值为 3,等输出后,x 的值减 1 变为 2,继续执行,判断条件!x 为假,循环只被执行一次。5、下面程序中循环几次?每次循环时i,j 的变化如何? main( )inti,j; for(j=0,i=0;i=0 & c=97、分析下面程序的执行过程,给出结果说明break 和 continue 的区别。main( )int a=1,b; for(b=l;b=8)break
19、; if(a2=1)a+=5;continue; a-=3;)printf(dn,b);7、结果为4。break 和 continue 的区别是:continue 语句只结束本次循环,而不是终止整个循环的执行; 而 break 语句则是结束整个循环过程,不再判断执行的条件是否成立。8、分析下面程序的执行过程,给出输出结果。f(int b,int m,int n)int i,s=0; for(i=m;ib)if(ac) t=a; else t=c;else if(bc) t=b; else t=c; printf(%dn,t);2、编写程序,计算n!(n=1-20),(即求 1!+2!+3!+4
20、!+5!+20!)2、【参考答案】main()int n,i=1;long sum=0,s=1; scanf(%d,&n); while(i=n)s=s*i;sum=sum+s;i+;printf(sum=%ldn,sum);3、编写函数fun,其功能是判断一个数是否为素数的函数,素数时返回1,否则返回 0。3、【参考答案】/*是素数返回 1,否则返回 0*/ int sushuis(int m) int m;int i=2,t; for(;i=m;i+)if(m%i=0&im) break; if(m-i=0) t=1;else t=0; return t;C 语言及程序设计复习题 B二、简
21、答题1、说明算法可以采用哪几种控制结构组合。1、算法的控制结构给出了算法的基本框架,不仅决定了算法中各操作的执行顺序,也直接反映了算法的设计是否符合结构化原则。一个算法一般可以用顺序、选择、循环三种基本控制结构,通过顺序或嵌套组合而成。2、c 语言程序的基本单位是什么?它的结构又如何?2、函数是c 语言程序的基本模块单元。任何函数(包括主函数main()都是由函数说明和函数体两部分组成。其一般结构如下: 函数类型函数名(函数参数表)说明语句部分;执行语句部分;二、编程题1、编写程序,输出从公元 2010 元至 2100 年所有闰年的年号。每输出 3 个年号换一行。1、【参考答案】#includ
22、e “stdio.h” main()int year,I=0;printf(“n 从 2010 年至公元 2100 年中闰年有:n”); for(year=2010;year=2100;)if(year%4= =0&year%100!=0)|year%400= =0)printf(“t%d”,year); i+;if(i%3= =0) printf(“n”);year+;2、输出所有水仙花数。所谓水仙花数是指一个三位数,其各位数字立方和等于该本身。例如:153 是一个水仙花数,因为 153=13+53+33。2、【参考答案】#include main()int i,j,z,n; for(n=1
23、00;n1000;n+)i=n/100; j=n/10-i*10; z=n%10;if(i*100+j*10+z=i*i*i+j*j*j+z*z*z)printf(“%5d”,n);printf(“n”); getch();5、编写函数fun,其功能是判断一个数是否为素数的函数,素数时返回1,否则返回 0。3、【参考答案】/*是素数返回 1,否则返回 0*/ int sushuis(int m) int m;int i=2,t; for(;i=m;i+)if(m%i=0&im) break; if(m-i=0) t=1;else t=0; return t;4、从 10 个元素的数组中找到最小
24、值,然后与数组的第一个元素对调。4、【参考答案】#include main()int a10=1,22,4,96,88,17,5,39,-7,-2;int i,j,temp,min=0; printf(“n”); for(i=0;i=9;i+)printf(“%d ”,ai); printf(“n”); for(i=0;i=9;i+)if(aiamin) min=i;temp=a0;a0=amin; amin=temp;for(i=0;i=9;i+) printf(“%d ”,ai);printf(“n”); getch();5、 m 个人的成绩存放在整型数组 score 中,请编写函数 fu
25、n,它的功能是:将低于平均分的人数作为函数值返回主函数,并将低于平均分的分数存放在主函数定义的数组below 中。5、【参考答案】#include stdio.hint fun(int score,int m,int below)/*计算 score 数组中m 个元素的均值,并把小于平均值的元素逐个存放在below 数组中/int i,k0,aver0; for(i0;im;i)averscorei;/* 计算总分*/ aver/m;/* 计算平均分 */ for(i0;im;i)/*逐个判断分数值 */if(scoreiaver)/* 如低于平均分 */belowkscorei; /* 存放
26、到以below 为首地址的数组中 */ k;/* 统计低于平均分的人数 */return k;/* 返回人数 */main()int i,n,below9;int score955,44,66,77,88,99,89,78,67; nfun(score,9,below); /* 调用函数,低于平均分的人数赋给n */ printf(nbelow the average are:);for(i0;in;i)printf(%4d,belowi); /* 输出below 数组中n 个值 */第一部分(填空题):1. 按照 C 语言规定的用户标识符命名规则,不能出现在标识符中的是()。A.大写字母B.
27、连接符C.数字字符D.下划线答案:B2. 下面关于计算机正确的是( )。A.计算机由硬件系统和软件系统两部分构成B.只要有硬件系统,计算机就能工作C.计算机只能处理文本信息D.计算机只能处理计算问题答案:A3. ( )是c 语言提供的合法的数据类型关键字。A.Int B.long C.Char D.integer 答案:B4. 面向过程的高级语言包括( )。A.C,JAVAB.C,BASICC.C+.NET,ASPD.C,VB答案:B5. 软件按功能可以分为: 应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是( )。A.编译程序B. 操作系统C.教务管理系统D.汇编程序答案:C
28、6. 以下选项中关于C 语言常量的叙述错误的是()。A.所谓常量,是指在程序运行过程中,其值不能被改变的量B.常量分为整型常量、实型常量、字符常量和字符串常量C.常量可分为数值型常量和非数值型常量D.经常被使用的变量可以定义成常量答案:D7. 下面描述中正确的是()。A.C 语言提供了专门的输入/输出语句B.C 语言调用输入/输出函数时需要使用include 命令包含头文件C.C 语言可以直接使用输入/输出函数D.输入/输出函数所在的头文件是stdlib.h 答案:B8. 假设有char 型变量c1,c2,执行下面程序段: c1=gatchar();c2=gatchar(); printf(“
29、c1=%c,c2=%cn”,c1,c2);如果c1 和 c2 的值分别为字符a 和 b,则从键盘正确的输入方式是()。A. abB.abB. C.abD.ab 答案:A9. 下面描述中正确的是()。A. printf()函数的输出列表项只允许是变量B. printf()函数的输出列表项可以是常量、变量以及表达式C.printf()函数输出列表项也可以是另一个printf()函数D.printf()函数的输出列表项之间用空格分隔答案:B10. 假设有:int a,b; scanf(%d,%d,&a,&b);为了得到a 和 b 分别为 10 和 20,从键盘正确输入数据的是()。 A.1020B.
30、1020C.10,20D.10,20,答案:C11. 下面说法正确的是()。A.表达式计算时要考虑运算符的优先级和结合性B.表达式计算需要考虑运算符的优先级C.表达式计算时需要考虑运算符的结合性D.括号()可以改变运算符的优先级答案:A12. 下面说法正确的是()。A.负数参与“/”和“%”运算时,其结果与C89 或C99 的标准有关B.C 语言的“/”和“%”运算可以写成 5/0 或 5%0 的形式C.赋值运算要求他的左操作数可以是变量、常量或另一个表达式D.表达式(x=ab)&(y=cd)是错误的写法答案:A13. 假设有下面程序段:int a;float b; b=a=4.5; 下面错误
31、的描述是()。A.变量a 的值是 4B.变量b 的是 4.0C. 赋值表达式a=4.5 的结果值是 4D.变量b 的值是 4.5 答案:D14. 假设 a,b,c,x,y 均为int 型,下面说法正确的是()。 A.表达式“a+=2”等价于表达式“a=a+2”B.表达式“a*=b+c”等价于表达式“a=a*b+c” C.表达式“y=x+”等价于表达式“x+,y=x” D.表达式“y=x+”等价于表达式“y=x,x+” 答案:D15. 逻辑运算符两侧运算对象的数据( )。A.只能是 0 或 1B.只能是 0 或非 0 正数 C.只能是整型或字符型数据D.可以是任何类型的数据答案:D16. siz
32、eof(float)是()。A.一个双精度型表达式B.一个整型表达式 C.一个函数调用D.一个不合法的表达式答案:B17. 结构化程序的实现由( )组成程序逻辑。A. 顺序结构B. 分支结构C. 循环结构D. 顺序结构、分支结构和循环结构答案:D18. 假设变量a 为整型量,语句if (a!=0);和语句if(a);相比较,正确答案( )。A. 两者作用不同B. 两者作用等价C. 两者作用相反D. if(a)语法错答案:B19. 为了避免在嵌套的条件语句if-else 中产生二义性,C 语言规定:else 子句总是与()。A. 缩排位置相同的if 配对B. 其之前最近且不带else 的 if
33、配对C. 其之前最近的if 配对D. 第一个if 配对答案:B20. 阅读下面程序:该程序( )。#include stdio.hmain()int x=-10, y=5, z=0; if (x=y+z)printf(*n ); elseprintf($n);A. 有语法错不能通过编译B. 输出*C. 可以通过编译但不能通过连接D. 输出$ 答案:B21. 下面说法错误的是()。A. 当条件满足时重复执行某一段程序(代码)就是循环B.循环体只有一条语句时,可以不写成复合语句形式C.while 语句、for 语句可以相互转换D.do.while 语句可以实现前判断结构答案:D22. 下面说法错误
34、的是()。A. break 语句可退出循环体而执行该循环语句后面的语句B. break 语句可以出现在switch 语句和循环语句中C. continue 语句只能出现在循环结构中D. goto 语句即可以从函数体跳出,也可以跳入函数体中答案:D23. 以下不是无限循环的是( )。A. for(y=6,x=1;xy;x+=2,y-=2) ;B. for( ; ; );C. while(-5) x+; 答案:A24. 对以下说明语句的正确理解是(int a10=6,7,8,9,10;D. for(i=20;)。; i-) sum+=i;A. 将 5 个初值依次赋给a1至 a5B. B. 将 5
35、个初值依次赋给a0至a4C. 将 5 个初值依次赋给a6至 a10D. 因为数组与初值的个数不相同,所以此语句不正确答案:B25. 判断字符串a 和 b 是否相等,应当使用()。A. a=bB. a=bC. strcpy(a,b)D. strcmp(a,b)答案:D26.在c 语言的函数调用过程中,如果函数funA 调用了函数funB,函数funB 有调用了函数funA,则( )。A. 称为函数的直接递归B. 称为函数的间接递归C. 称为函数的递归定义D. c 语言不允许这样的递归形式答案:B27.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是()。A p=q;B *p=*q;C a=*q;Dq=a;答案:D27.若有定义:int a23;,则以下对a 数组元素地址的正确表示为( )。A. *(a+1)B. *(a1+2)C. a1+3D. a00答案:A29. 以下对C 语言中共用体类型数据的叙述正确的是()。A. 可以对共用体变量名直接赋值B. 共用体类型定义中不能出现结构体类型的成员C. 一个共用体变量中不能同时存放其所有成员D. 一个共用体变量中可以同时存放其所有成员答案:A30.若用fopen 打开一个新的二进制文件,要求文件既能读又能写,则应选用的文件方式字符串是()。A.wb+