-1-天津工业大学信息与通信工程学院05-06-2学期《C语言程序设计》期末试卷(A卷)学号班级姓名大题号一二三四总分得分核分人一、单选题(每题2分,共42分)本大题得分阅卷人签字1.下列字符串中不是正确的C语言标识符的是:A.longintB.AverageC.Day5D.π2.四个运算符.,+优先级由高到低的顺序是:A..,+B.+,.C..+,D.,+.3.表达式((int)3.7+8.5)%3的值是:A.0B.1C.2D.这是一个错误的表达式,不会有值-2-4.已知inti=1,j;经过j=(i++,i++||i++);语句之后,j的值是:A.1B.2C.3D.45.已知inta=5;经过语句a+=a*=a-=a;语句之后,a的值是:A.0B.5C.15D.206.程序段如下:chark=1;while(k0)k=k+1;则以下说法正确的是:A.while循环执行32767次B.while循环执行255次C.while循环执行127次D.while循环是死循环7.关于return语句,下列说法中不正确的是:A.函数的返回值是通过return语句获得的B.void函数的函数体内最后一条语句也可以是return语句C.return语句后面可以是常量、变量名或表达式,只要有确定的值即可D.函数的返回值也可以通过函数体内的一条给函数名赋值的语句得到8.按照C语言的规定,下列说法不正确的是:A.实参可以是常量、变量或表达式,在传递给形参时,要求实参必须有确定的值B.形参不可以是常量C.实参的个数应该与形参一样多D.形参的值能传递给实参9.关于C语言的控制语句,下列说法错误的是:A.循环体可以是一个循环语句-3-B.break能结束一个函数的调用C.else必定与它上面最近的没有配对的if相配对,且这个if与else之间只可以有一条语句相隔D.continue语句不能使用在goto构成的循环中10.下一函数的作用是:voidfun(chara[],charb[]){char*p=a,*q=b;for(;(*p=*q)!='\0';p++,q++);}A.将字符串b复制到aB.将字符串a复制到bC.将字符串b连接到a中的字符串后面D.将字符串a连接到b中的字符串后面11.#includestdio.hlongf(intn){if(n==0||n==1)return1;elsereturnn*f(n-1);}main(){printf(%ld\n,f(5));getch();}上一程序的输出结果是:A.120B.15C.5D.2512.#defineM(a,b)a*bmain(){printf(%d,M(1+2,3+4));getch();}-4-上一程序的输出结果是:A.3B.7C.11D.2113.intf(char*a){char*p=a;for(;;)if(*p++=='\0')break;returnp-a-1;}这一函数的功能是:A.求出指针a所指向的字符串的长度B.求出指针a所指向的字符串的长度-1C.求出指针a所指向的字符串的第一个字符的ASCII码D.求出指针a所指向的字符串的末尾一个字符的ASCII码14.main(){charc[20]=ABCD;puts(c+2);}上一程序的输出结果是:A.CDB.6C.ABCDABD.ABCDCC15.(提示:'A'的ASCII码是65。)main(){charc1='A',c2='B';printf(%c%c%d%d\n,c1,c2,c1,c2);}上一程序的输出结果是:A.AB6566-5-B.AB6566C.ABABD.6566656616.已知charc;执行scanf(%c,&c);语句之后,判别“c是英文字母”的C语言错误表达式是(提示:'A'的ASCII码是65,'a'的ASCII码是97。):A.c='A'&&c='Z'||c='a'&&c='z'B.(c='A'&&c='Z')||(c='a'&&c='z')C.c=A&&c=Z||c=a&&c=zD.c=65&&c=65+25||c=97&&c=97+2517.求一个正整数k的千位数的错误的C语言表达式是:A.k/1000%10B.k%10000/1000C.k/10/10/10%10D.k%10/100018.已知inta[10][20];请找出下列表达式中特殊的一个:A.&a[3][0]B.a[3]C.a+3D.a[3][0]19.已知inta=20;int*p=&a;则下列说法错误的是:A.*p或a的值都是20B.p或&a都是变量a的地址C.&p是指针变量p的地址D.*a是&a中存放的值,也可以说成是a中存放的值20.voidf(int*p1,int*p2,int*p3){*p3=*p1*p2?*p1:*p2;}main()-6-{inta=5,b=10,c;f(&a,&b,&c);printf(%d\n,c);getch();}这个程序的输出结果是:A.5B.10C.15D.2021.main(){intn;charc;scanf(%d,&n);if(n=60);if(n80)c='B';elsec='A';elsec='C';printf(%c,c);getch();}运行这一程序,下列说法错误的是:A.输入65,则输出BB.输入85,则输出AC.输入45,则输出CD.程序语法有错误,编译通不过,谈不上运行-7-二、填空题(每空3分,共30分)本大题得分阅卷人签字1.摄氏温度C与华氏温度F的换算关系式是:C=(5/9)*(F-32)C语言中,若已知floatF=100,C;则求C的表达式是_________________。2.#includestdio.hmain(){FILE*fp;chari;fp=fopen(aaa.txt,w);for(i='A';i='Z';i++)fputc(i,fp);fclose(fp);getch();}上一程序的功能是:________________________________________。3.欲求1+1/2+1/3+1/4+...+1/100的值,其算法的NS图为:4.满足数学上“x在开区间(0,1)”的C语言表达式是_____________。-8-5.下一程序的运行结果是______________________________________。main(){inti,j;for(i=0;i10;i++)for(j=0;j10;j++)if(j==i*3){printf(%d,,i);break;}}6.下面的程序的功能是_______________________________________。main(){longn=10,i,k=1;doubles=0;for(i=0;i=n;i++){if(i!=0)k=k*i;s=s+1.0/k;}printf(%f\n,s);getch();}7.#defineN4main(){inta[N][N]={0},i,j;for(i=0;iN;i++)for(j=0;jN;j++)if(j=i)a[i][j]=1;for(i=0;iN;printf(\n),i++)for(j=0;jN;j++)printf(%4d,a[i][j]);getch();}上面程序的输出结果是:————————————————————————————————————-9-————————————8.TuoboC容许函数值类型缺省定义,此时该函数值隐含的类型是____________。9.阅读理解下面的计票程序,在题后填空(本题2个空,共6分)。#includestdio.hstructxp{charxm[20];/*姓名*/intps;/*票数*/};main(){structxpx[4];/*x[0]不使用,存放3位候选人的姓名、票数*/inti,k;strcpy(x[1].xm,张三);strcpy(x[2].xm,李四);strcpy(x[3].xm,王五);x[1].ps=x[2].ps=x[3].ps=0;/*存放3人姓名、初始票数*/printf(计票开始,输入候选人代号(张三:1,李四:2,王五:3)\n);for(;;){scanf(%d,&k);if(k!=1&&k!=2&&k!=3)break;else{x[k].ps++;printf(%s:%d票\n,x[k].xm,x[k].ps);}}printf(\n\n计票结束,结果为:\n);for(i=1;i=3;i++)printf(%s:%d票\n,x[i].xm,x[i].ps);getch();}问题一:若要计票结束,只要输入_______________________数字。问题二;若某个人的得票数超过________票,计票数会出错。-10-三、改错题(每题含3处错误,同一行上的错误算一处。请将每题修改不超过两处,每处3分,每题满分6分,共18分。若某题修改3处或更多处,则超出修改部分修改正确不加分、误修改1处倒扣3分。必须在原程序上修改,不得将原程序涂抹掉后,在另一处写一个完整的修改后的程序。)本大题得分阅卷人签字1、输入一个学生的百分制整型分数,要求计算机屏幕输出相应的分数等级,等级规定为:80~100分:A级,60~79分:B级,其它分数:C级。下面是处理程序,请修改正确。(提示:本题含3处逻辑错误。)main(){inta;doscanf(%d,&a);while(a=0&&a=100);a=a/10;switch(a){case10:case9:case8:printf(A);case7:case6:printf(B);default:printf(C);}getch();}2.下面是一个完整的、正确的使用梯形法求f(x)=x在[0,1]区间上的积分程序。现求f(x)=x2+3x-1+sin(x)在[1,2]区间上的积分,请修改程序。(提示:原程序无错误,只需、必须修改两处才能得到符合题意的程序。)#includemath.h#includestdio.h#defineN100doublef(doublex){returnx;}-11-doublefun(doublea,doubleb){inti;doubles=0;doubled=(b-a)/N;for(i=1;iN;i++)s+=f(a+d*i);return(s*2+f(a)+f(b))*d/2;}main(){printf(%f,fun(0,1));getch();}3.下面是一个求解一元二次方程的程序,请将程序修改正确。(提示:本题含有3处雷同的语法错误。)#includestdio.hmain(){floata,b,c,d,p,q;doscanf(%f%f%f,&a,&b,&c);while(a==0);d=b*b-4*a*c;p=-b/(2a);if(d==0)printf(x1=x2=%f\n,p);elseif(d0){q=sqrt(d)/(2a);printf(x1=%fx2=%f\n,p+q,p-q);}else{q=sqrt(-d)/(2a);printf(x1=%f%+fi\n,p,q);printf(x2=%f%+fi\n,p,-q);}getch();}-12-四、编程题(共10分。提示:本大题的4个小题为一个有机整体,但也可以只完成部分小题。)本大题得分阅卷人签字1.函数原型为voidf1(inta[],intn),功能要求:键盘输入a数组的前n个元素。(2分)2.函数原型为voidf2(inta[],intn),功能要求:屏幕输出a数组的前n个元素。(2分)-13-3.函数原型为floatf3(inta[],intn),功能要求:返回a数组前n个元素的平均值。(2分)4.利用上述3个函数,编一个主函数,函数原型为voidmain(void),添加必要