1、暨南大学20202021学年第1学期C语言程序设计考试试卷(B卷)考试范围:C语言程序设计;满分:100分;考试时间:120分钟院/系:_专业:_姓名:_ 考号:_题号一二三四总分得分注意事项:1答题前填写好自己的姓名、班级、考号等信息2请将答案正确填写在答题卡上第I卷(选择题)评卷人得分一、选择题(共20题,每题2分,共40分。下列每小题的四个选项中,有一项是最符合题意的,错选、多选或未选均无分)1以下选项中,能表示逻辑值“假”的是()。A1B0.000001C0D100.02为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是指向结点的指针域):则在下面结构体定义中
2、划线处应填入的选项是()。struct link char data; _;node;Alink*nextBlink nextCstruct link*next Dstruct link next 3有以下程序段struct st int x; int *y;*pt;int a=1,2,b=3,4;struct st c=10,a,20,b;pt=c;以下选项中表达式的值为11的是()。A+pt-xBpt-xC*pt-yD(pt+)-x4设有如下语句:typedef struct Date int year; int month; int day; DATE;则以下叙述中错误的是()。ADAT
3、E是用户定义的结构体变量Bstruct Date是用户定义的结构体类型CDATE是用户说明的新结构体类型名Dstruct是结构体类型的关键字5有以下程序:#include #define N 8void fun(int *x,int i) *x=*(x+i);main() int a=1,2,3,4,5,6,7,8,i; fun(a,2); for(i=0;iN/2;i+) printf(%d,a); printf(n);程序运行后的输出结果是()。A1,3,1,3,B2,2,3,4,C3,2,3,4,D1,2,3,4,6有以下程序:#includeint fun(int n) static
4、int t=1; int i=1; for(;i=n;i+)t*=i; return t;main() int t=1,i; for(i=2;i4;i+) t+=fun(i); printf(%dn,t);程序的运行结果是()。A8B11C15D47有以下程序:#include void fun(int p) int d=2; p=d+; printf(%d,p);main() int a=1; fun(a); printf(%dn,a);程序运行后的输出结果是()。A32B12C21D228若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是()。A
5、sqrt(fabs(pow(n,x)+exp(x) Bsqrt(fabs(pow(n,x)+pow(x,e) Csqrt(abs(nx+ex) Dsqrt(fabs(pow(x,n)+exp(x) 9有以下程序:#includemain() FILE*fp; int i,a=1,2,3,4,5,6; fp=fopen(d2.dat,w+); for(i=0;i6;i+) fprintf(fp,%dn, a); rewind(fp); for(i=0;i6;i+) fscanf(fp,%d, &a); fclose(fp); for(i=0;i6;i+) printf(%d, a);程序运行后的
6、结果是()。A4,5,6,1,2,3,B1,2,3,3,2,1,C1,2,3,4,5,6,D6,5,4,3,2,1,10要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,以下正确的程序段是()。Awhile(ch=getchar()!=N) printf(%c,ch);Bwhile(ch=getchar() =N) printf(%c,ch);Cwhile(ch=getchar()=N) printf(%c,ch);Dwhile(ch=getchar()=N) printf(%c,ch);11设有说明:FILE fp; char filename =paper;对于
7、fp=fopen(filename,rb+);语句,下面说法正确的是()。A打开名为filename的文件读写B打开名为paper的文件读写C打开名为filename的文件只读D打开名为paper的文件只读12以下不属于C语言位运算符的是()。A!B|CD13以下不能输出小写字母a的选项是()。Aprintf(%cn,a);Bprintf(%cn,A+32);Cputchar(97);Dputchar(a);14若有说明语句:char c=72;则变量c中存放的是()。A2个字符B1个字符C3个字符D说明语句不合法15C语言程序中,运算对象必须是整型数的运算符是()。A&B/C%D*16以下选
8、项中,合法的C语言常量是()。A1.234BC+C2.0D2Kb17以下叙述中错误的是()。A非零的数值型常量有正值和负值的区分B常量是在程序运行过程中值不能被改变的量C定义符号常量必须用类型名来设定常量的类型D用符号名表示的常量叫符号常量18以下C语言用户标示符中,不合法的是()。A_1BAaBcCa_bDa-b19有以下程序#include main() int a=0,b=0; /*给a赋值a=10; b=20;给b赋值*/ printf(a+b=%dn,a+b);/*输出计算结果*/程序运行后的输出结果是()。Aa+b=0Ba+b=30Ca+b=10D出错20设有定义:char s;i
9、nt i=0;以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是()。Agets(s);Bwhile(s=getchar()!=n);s= 0;Cscanf(%s,s);Ddoscanf(%c,&s);while(s!=n); s=0;第II卷(非选择题)评卷人得分二、填空题(共3题,每题8分,共24分)21下面create函数的功能是建立一个带头结点的单向链表,新产生的结点总是插入在链表的末尾。单向链表的头指针作为函数值返回。#include #define LEN sizeof(struct student)struct student long num;int s
10、core;struct student *next;struct student *creat() struct student *head=NULL,*tail;long num;int a;tail=( )malloc(LEN);do scanf(%ld,%d,&num,&a);if(num!=0) if(head=NULL) head=tail;else tail=tail-next;tail-num=num; tail-score=a;tail-next=( )malloc(LEN);else tail-next=NULL;while(num!=0); ;22给定程序中,函数fun的功
11、能是:找出100至x(x999)之间各位上的数字之和为15的所有整数然后输出;符合条件的整数个数作为函数值返回。例如,当x值为500时,各位数字之和为15的整数有:159、168、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492,共有26个。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序如下:#include int fun(int
12、x) int n, s1, s2, s3, t; /*found*/ n=_; t=100; /*found*/ while(t999|x0) printf(Please input(0x=999): ); scanf(%d,&x); printf(nThe result is: %dn,fun(x);23请根据以下各小题的要求设计C应用程序(包括界面和代码)。请补充fun函数,该函数的功能是:计算NN维矩阵元素的方差,结果由函数返回。维数在主函数中输入。例如:的计算结果是14.414。求方差的公式为:其中注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若
13、干表达式或语句。试题程序如下:#include #include #define N 20/*found*/double fun(_,int n) int i,j; double s=0.0; double f=0.0; double aver=0.0; double sd=0.0; for(i=0;in;i+) for(j=0;jn;j+) s+=a; /*found*/ aver=_; for(i=0;in;i+) for(j=0;jn;j+) f+=(a-aver)*(a-aver); f/=(n*n); /*found*/ sd=_; return sd;main() int a; i
14、nt n; int i,j; double s; printf(*Input the dimension of array n*n); scanf(%d,&n); printf(*The array*n); for(i=0;in;i+) for(j=0;jn;j+) a=rand()%50; while (a=0) a=rand()%60; printf(%4d,a); printf(nn); s=fun(a,n); printf(*THE RESULT*n); printf(%4.3fn,s);评卷人得分三、改错题(共1题,每题16分,共16分)24下列给定程序中,函数fun的功能是:从s所
15、指字符串中,找出t所指字符串的个数作为函数值返回。例如,当s所指字符串中的内容为“abcdabfab”,t所指字符串的内容为“ab”,则函数返回整数3。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序如下:#include #include #include #include int fun(char s, char t) int n; char p,r; n=0; while(*s) p=s; r=t; while(*r) /*found*/ if(*r=*p)r+; p+ else break; /*found*/ if(
16、r=0) n+; s+; return n;void main() char s,t; int m; system(CLS); printf(nPlease enter strings:); scanf(%s,s); printf(nPlease enter substrings:); scanf(%s,t); m=fun(s,t); printf(nThe result is:m=%dn, m);评卷人得分四、设计题(共1题,每题20分,共20分)25题目:企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,
17、(1) 高于10万元的部分,可提成7.5%;(2) 20万到40万之间时,高于20万元的部分,可提成5%;(3) 40万到60万之间时高于40万元的部分,可提成3%;(4) 60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数?【标准答案】第I卷(选择题)一、选择题(共20题,每题2分,共40分。下列每小题的四个选项中,有一项是最符合题意的,错选、多选或未选均无分)1C2C3A 4A 5C6C7C8A 9D10A11B12A13AD14B15C16A17C18D19A20C第II卷(非选择题)二、填空
18、题(共3题,每题8分,共24分)21 (struct student *) (struct list *) return(head)220xt+23int as/(n*n) sqrt(f) 三、改错题(共1题,每题16分,共16分)24(1)错误:if(*r=*p)r+;p+正确:if(*r=*p)r+;p+;(2)错误:if(r=0) 正确:if(*r=0) 四、设计题(共1题,每题20分,共20分)25#includeint main()double a,b;printf(当月利润n);scanf(%lf,&a);if(a200000&a400000&a600000&a1000000)b=100000*0.1+(a-100000)*0.075;else if(a100000&a=200000)b=100000*0.281+400000*0.015+(b-1000000)*0.01;printf(奖金为%.5lf元,b);return 0;13