【文档说明】国家开放大学C语言程序设计综合测试题参考答案.docx,共(36)页,55.999 KB,由小喜鸽上传
转载请保留链接:https://www.ichengzhen.cn/view-156405.html
以下为本文档部分文字说明:
国家开放大学《C语言程序设计》综合测试题参考答案综合测试1一、单选题(每小题2分,共20分)1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为()。a.functionb.namec.maind.MAIN2.每个C语言程序文件的编译错误分为()
类。a.2b.4c.1d.33.字符串"a+b=12\n"的长度为()。a.7b.9c.6d.84.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为()语
句。a.forb.whilec.ifd.do5.在下面的do-while循环语句中,其循环体语句被执行的次数为()。inti=0;doi++;while(i<10);a.4b.3c.10d.56.将两个字符串连
接起来组成一个字符串时,选用的函数为()。a.strcap()b.strcmp()c.strlen()d.strcat()7.若用数组名作为函数调用的实参,传递给形参的是()。a.数组的首地址b.数组元素的个数c.数组中全部元素的值d.数组中第一个
元素的值8.假定a为一个整数类型的数组名,整数类型的长度为4,则元素a[4]的地址比a数组的首地址大()个字节。a.16b.32c.4d.89.假定s被定义为指针类型char*的变量,初始指向的字符串为"Helloworld!",若要使变量p指向s所指向
的字符串,则p应定义为()。a.char*p;p=*s;b.char*p;p=&s;c.char*p=&s;d.char*p=s;10.从一个数据文件中读入以换行符结束的一行字符串的函数为()。a.fgetc()b.fget
s()c.getc()d.gets()二、填空题(每小题2分,共26分)11.C语言中的每条简单语句以(分号)作为结束符。12.C程序中的所有预处理命令均以(#)字符开头。13.当不需要函数返回任何值时,则应使用(void)标识符来定义函数类型。14.十进制数25表示
成符合C语言规则的十六进制数为(0x19)。15.假定不允许使用逻辑非操作符,则逻辑表达式a>b||b==5的相反表达式为(a<=b&&b!=5)。16.执行“typedefintDataType;”语句后,在使用int定
义整型变量的地方也可以使用(DataType)来定义整型变量。17.假定一维数组的定义语句为“char*a[8];”,则该数组a所占存储空间的字节数为(32)。18.假定二维数组的定义语句为“doublea[M][N];”
,则该数组a的列下标的取值范围在0到(N-1)之间。19.存储一个空字符串需要占用(1)个字节。20.strcpy函数用于把一个字符串(拷贝)到另一个字符数组空间中。21.程序的编译单位是一个(程序文件)。22.假定a是一个一维数组,则a[i]的指针访问方式为((a+i))。23.执行
int*p=malloc(sizeof(int))操作得到的一个动态分配的整型对象为(p)。三、写出下列每个程序运行后的输出结果(每小题6分,共30分)24.#include<stdio.h>voidmain(){intx=5;switch(
2*x){case4:printf("%d",x);break;case7:printf("%d",2*x);break;case10:printf("%d",3*x);break;default:printf("%s"
,"default");}printf("%d\n",4*x);}运行结果:152025.#include<stdio.h>voidmain(){intf1,f2,i;f1=1;printf("%d",f1);for(i
=2;i<5;i++){f2=3*f1+i;printf("%d",f2);f1=f2;}printf("\n");}运行结果:15185826.#include<stdio.h>#defineN8voidmain(){inta[N]={12,39,26,41,55,63,72,40
};inti,i1=0,i2=0;for(i=0;i<N;i++)if(a[i]%2==1)i1++;elsei2++;printf("%d%d\n",i1,i2);}运行结果:4427.#includ
e<stdio.h>#include<string.h>voidmain(){chars[15]="5678912340";inti,n=strlen(s);for(i=0;i<n/2;i++){charc=s[i];s[i]=s[n-1-i];s[
n-1-i]=c;}printf("%s\n",s);}运行结果:043219876528.#include<stdio.h>intLB(int*a,intn){inti,s=1;for(i=0;i<n;i++)s*=*a++;returns;
}voidmain(){inta[]={1,2,3,4,2,2,5,8};intb=LB(a,4)+LB(a+3,4);printf("b=%d\n",b);}运行结果:b=104四、根据下列每个函数回答相应问题(每小题6分,共12分)29.voidSF(intx){
//n为大于等于0的整数inti=2;while(x>i){if(x%i==0)printf("%d",i);i++;}printf("\n");}假定使用SF(70)调用该函数,则输出的所有整数依次为(257101435)。30.voidQC(structIntNode*f){
//f为一个单链表的表头指针while(f){printf("%d",f->data);f=f->next;}}假定结构类型IntNode的定义为:structIntNode{intdata;structIntNode*next;};该函数的功能为:(遍历并输出由表头指针f所
指向的单链表中每个结点的data域的值。)五、按题目要求编写程序(每小题6分,共12分)31.编写一个程序,首先从键盘上输入10个整数到一维数组a[10]中,然后按照下标从大到小的次序输出数组a[10]中的所有元素值。假定数组a[10]和循环变量i均在主函数中定义。参考答案:#incl
ude<stdio.h>voidmain(){inta[10],i;printf("从键盘输入10个整数:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=9;i>=0;i--)printf("%d",a[i]);printf("\n");}32.编
写一个程序,已知6≤a≤50,10≤b≤30,求出满足不定方程3a+2b=120的全部整数组解。如(20,30)就是其中的一组解。参考答案:#include<stdio.h>voidmain(){inta,b;for(a=6;a<=50;a++)for(b=10
;b<=30;b++)if(3*a+2*b==120)printf("(%d,%d)\n",a,b);}综合测试2一、单选题(每小题2分,共20分)1.C语言源程序文件的缺省扩展名为()。a.Cb.exec.cppd.obj2.设x和y均为逻
辑值,则x&&y为真的条件是x和y()。a.均为真b.其中一个为真c.均为假d.其中一个为假3.在下列的符号常量定义中,正确的定义格式为()。a.constintM220b.#defineM310c.#defineM1d.constcharmark4.for
循环语句能够被改写为()语句。a.switchb.whilec.复合d.if5.在下面的一维数组定义中,错误的定义格式为()。a.inta[5];b.inta[]={1,2,3};c.inta[];d.inta[10]={
0};6.下面的函数原型声明中存在语法错误的是()。a.voidAA(inta,intb);b.voidAA(int,int);c.voidAA(inta;intb;);d.voidAA(inta,int);7.假定a为一个数组名,则下面存在错误的表达式
为()。a.*ab.a[i]c.*a++d.*(a+1)8.假定有定义为“inta[10],x,*pa=a;”,若要把数组a中下标为3的元素值赋给x,则不正确的赋值为()。a.x=a[3]b.x=*(a+3)c.x=pa[3]d.x=*pa
+39.char类型的长度为________个字节。a.2b.4c.1d.310.向一个二进制文件中写入信息的函数为()。a.fgets()b.fread()c.fwrite()d.fputs()二、填空题(每小题2分
,共26分)11.C语言中的每条复合语句以(})作为结束符。12.在#include命令中所包含的文件,可以是头文件,也可以是(程序)文件。13.十进制数56对应的八进制数为(070)。14.假定x=5,则表达式12+x++的值为(17)。15
.增量表达式++y表示成赋值表达式为(y=y+1)。16.若x=5,y=6,则x>y的值为(0)。17.假定二维数组的定义为“inta[4][5];”,则该数组所含元素的个数为(20)。18.执行“typedef
intABC[20];”语句把ABC定义为具有20个整型元素的(数组)类型。19.strcat()函数用于(连接)两个字符串。20.假定p所指对象的值为30,p+1所指对象的值为24,则*p++的值为(30)。21.若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为((ch
ar)p)。22.NULL是一个符号常量,通常作为空指针值,它对应的值为(0)。23.假定要动态分配一个类型为structWorker的对象,并由r指针指向这个对象,则使用的表达式为(structWorkerr)=malloc(sizeof(structWorker)
)。三、写出下列每个程序运行后的输出结果(每小题6分,共30分)24.#include<stdio.h>voidmain(){inti,s=0;for(i=1;i<7;i++)s+=i*i;printf(“s=%d\n”,s);}输出结果:s=9125.#in
clude<stdio.h>#defineN6voidmain(){inti,a[N]={2,5,8,10,15,20};for(i=0;i<N;i++)if(a[i]%4==0)printf("%d",a[i]);printf("\n");}
输出结果:82026.#include<stdio.h>#include<string.h>voidmain(){inti;unsignedintlen;char*a[5]={"stud","work","cadre","soldier","zan123"};len=strlen(a[0
]);for(i=1;i<5;i++)if(strlen(a[i])>len)len=strlen(a[i]);printf("%d\n",len);}输出结果:727.#include<stdio.h>voidmain(){inta,b;for(a=2,b=
3;b<30;){printf("%d%d",a,b);a=a+b;b=a+b;}}输出结果:2358132128.#include<stdio.h>voidLE(int*a,int*b){intx=
*a;*a=*b;*b=x;}voidmain(){intx=5,y=8;printf("%d%d",x,y);LE(&x,&y);printf("%d%d\n",x,y);}输出结果:5885四、写出下列每个函数的功能(每小
题6分,共12分)29.#include<math.h>intSG(intx){//x为大于等于2的整数inta=(int)sqrt(x);//sqrt(x)取x的平方根inti=2;while(i<=a){if(x%i==0)break
;i++;}if(i<=a)return0;elsereturn1;}函数功能:判断x是否为一个素数,若是则返回1,否则返回0。30.intFindMax(structIntNode*f)//f为一个单链表的表
头指针{intx;if(!f){printf("单链表为空\n"),exit(1);}x=f->data;f=f->next;while(f){if(f->data>x)x=f->data;f=f->next;}returnx;}假定structIn
tNode的类型定义为:structIntNode{intdata;structIntNode*next;};函数功能:求出由f所指向的单链表中所有结点的最大值。五、按题目要求编写程序或函数(每小题6分,共12分)31.编写一个程序,输出35以内(含35)的、能够被4或者7整
除的所有整数。参考答案:#include<stdio.h>Voidmain(){inti;for(i=1;i<=35;i++)if(i%4==0||i%7==0)printf(“%d”,i);printf(“\n”);}32.编写一个递归函数“intFF(inta[],intn)”,求出数组a
中所有n个元素之积并返回。参考答案:intFF(inta[],intn){if(n<=0){printf(“n值非法\n”),exit(1);}If(n=1)returna[n-1];elsereturna[n-1]*FF(a,n-1);}综合测试3一、单选题(每小题2
分,共20分)1.由C语言源程序文件编译而成的目标文件的默认扩展名为()。a.exeb.cppc.cd.obj2.设x和y均为逻辑值,则x||y为假的条件是()。a.它们均为假b.其中一个为假c.其中一个为
真d.它们均为真3.枚举类型中的每个枚举常量的值都是一个()。a.字符b.整数c.浮点数d.记录4.循环语句“for(i=0;i<=n;i++)S;”中循环体S被执行的次数为()。a.nb.n+1c.n-1d.15.假定有定义为“inta[4][
5]={{1,3,5},{2,8}};”,则a[1][1]的值为()。a.3b.8c.5d.26.在下面的选项中,不能作为函数值返回类型的是()。a.intb.longc.newd.void7.假定x的值为4,y
的值为6,则表达式x++*++y的值为()。a.24b.35c.30d.288.用calloc函数创建具有10个整型元素的动态存储空间的正确调用是()。a.calloc(sizeof(int),10,)b.calloc(10,sizeo
f(int))c.calloc(10)d.calloc(10,sizeof(char))9.假定有定义“intb[10],*pb;”,则不正确的赋值为()。a.pb=b+4b.pb=bc.pb=&b[0]d.pb=b[5]10
.标准输入设备的文件流标识符是()。a.stderrb.stdioc.stdind.stdout二、填空题(每小题2分,共26分)11.执行“printf("%c",'A'+3);”语句后得到的输出结果为(D)。12.shortint类型的长度为(2)。13
.用类型关键字表示十进制常数3.26f的类型为(float)。14.假定y=5,则表达式--y*3的值为(12)。15.逻辑表达式(x==0&&y>5)的相反表达式为((x!=0||y<=5)或:(x||y<=5))。1
6.若x=5,y=10,则x!=y的逻辑值为(1)。17.假定二维数组的定义为“inta[3][6];”,则该数组所占存储空间的字节数为(72)。18.使用“typedefcharBB[M][N];”语句定义(BB)为含有M行N列的二维字符数组类型。19.字符串"a:\\xxk\\数据"
的长度为(11)。20.假定p所指对象的值为20,p+1所指对象的值为30,则*++p的值为(30)。21.假定一个数据对象为int*类型,则指向该对象的指针类型为(int)。22.假定一个结构类型的定义为“struct
A{inta,b;A*c;};”,则该类型的长度为(12)。23.假定要访问一个结构对象x中的数据成员a,则表示方式为(x.a)。三、写出下列每个程序运行后的输出结果(每小题6分,共30分)24.#incl
ude<stdio.h>voidmain(){inti,s=0;for(i=1;;i++){if(s>20)break;if(i%2)s+=i;}printf("s=%d\n",s);}输出结果:s=2525.#include<stdio.h>void
main(){inta[9]={36,25,48,24,55,40,18,30,20};inti,b1,b2;b1=b2=a[0];for(i=1;i<9;i++){if(a[i]>b1)b1=a[i];if(a[i]<b2)b2=a[i];}printf("%d%d\n",b1,b2);}
输出结果:551826.#include<stdio.h>voidSB(charch){switch(ch){case'A':case'a':printf("WW");break;case'B':case'b':printf("GG");bre
ak;default:printf("BB");break;}}voidmain(){chara1='a',a2='B',a3='f';SB(a1);SB(a2);SB(a3);printf("\n");}输出结果:WWGGBB27.#include<stdi
o.h>#defineM6voidmain(){inti,x;inta[M]={10,15,22,37,46,58};for(i=0;i<M/2;i++){x=a[i];a[i]=a[M-1-i];a[M-1-i]=x;}printf("%d%d\n",a[2],a[4]);}输出结果
:371528.#include<stdio.h>structWorker{charname[15];intage;floatpay;};voidmain(){structWorkerx={"wanghua",34,4250};structWorkery,*p;y=x
;p=&x;printf("%d%7.2f\n",y.age+p->age,p->pay+300);}输出结果:684550.00四、写出下列每个函数的功能(每小题6分,共12分)29.intFH(){intx,
y=0;scanf("%d",&x);while(x!=-1){y+=x;scanf("%d",&x);}returny;}函数功能:求出从键盘上输入的一批整数的总和,以-1作为结束数据输入的标志。30.intFF(structIntNode*f)//f为指向一个单链表的表
头指针{intn=0;if(!f)return0;while(f){n++;f=f->next;}returnn;}假定structIntNode的类型定义为:structIntNode{intdata;structIntNode*next;};函数功能:求出并返回由f所指向的单链表中所
有结点的个数。五、按题目要求编写程序或函数(每小题6分,共12分)31.编写一个程序,利用while循环,计算并打印输出1+12+13+⋯+1𝑛的值,其中正整数n值由键盘输入。假定求和变量用sum表示,计数变量用
i表示,sum、i和n均定义为全局变量,sum和i的初值分别被赋予0和1。参考答案:#include<stdio.h>intn,i=1;doublesum=0;voidmain(){scanf(“%d”,&n)
;while(i<=n)sum+=(double)1/i++;printf(“sum=%1f\n”,sum);}32.根据函数原型“voidDD(inta[],intn,intMM)”编写函数定义,利用双重循环查找并打印输出数组a[n]中任何两个元素的值等于MM值的元素值。
假定a[i]+a[j]等于MM,则输出格式为:(a[i],a[j])。参考答案:voidDD(inta[],intn,intMM){intI,j;for(i=0;i<n;i++)for(j=i+1;j<n;j++)if(a[i]+a[j]==MM)printf(“%d,%d\n”,a
[i],a[j]);}综合测试4一、单选题(每小题2分,共20分)1.由C语言目标文件连接而成的可执行文件的缺省扩展名为()。a.objb.cppc.exed.c2.设有两条语句为“inta=10;a+=a*a;”,则执行结束后,a的值
为()。a.110b.20c.100d.103.带有随机函数调用的表达式rand()%50的值在()区间内。a.0~49b.0~50c.1~50d.1~494.for循环语句“for(i=0;i<n;i+=2)S;”中循环体S语句
被执行的次数为()。a.n/2+1b.n-1c.(n+1)/2d.n/2-15.在下列的字符数组定义中,存在语法错误的是()。a.chara[20]="abcdefg";b.chara[]="x+y=55.";c.chara[10]='5';d.chara[15]={'1','
2'};6.若有一个函数原型为“double*function()”,则它的返回值类型为()。a.函数指针型b.数组型c.实数型d.实数指针型7.在C语言中,所有预处理命令都是以()符号开头的。a.#b.&c.@d.*8.假定整数指针p所指数据单元的值为30,p+1所指数据单元的值为
40,则执行*p++后,p所指数据单元的值为()。a.40b.30c.10d.709.若要使p指向二维整型数组a[10][20],则p的类型为()。a.int(*)[20]b.int**c.int*d.int*[20]10.表示文件结束符的
符号常量为()a.feofb.EOFc.eofd.Eof二、填空题(每小题2分,共26分)11.一个函数定义由(函数头)和函数体两部分组成。12.执行“printf("%c",'F'-3);”语句后得到的输出结果为(C)。13.
int类型的长度为(4)。14.表达式(float)25/4的值为(6.25)。15.若x=5,y=10,则x<=y的逻辑值为(1)。16.作为语句标号使用的case和default只能用于(switch
)语句的定义体中。17.在程序中执行到(return)语句时,将结束所在函数的执行过程,返回到调用该函数的位置。18.假定二维数组的定义为“chara[M][N];”,则该数组所含元素的个数为(MN)。19.存储字符'a'需要占用存储器的(1)个字节空间。20.用于存储一个长度为n的字符串,需
要的字符数组的长度至少为(n+1)。21.假定p所指对象的值为30,p+1所指对象的值为46,则执行表达式(*p)++后,p所指对象的值为(31)反馈22.假定p是一个指向整数对象的指针,则用(p)表示该整数对象。23.假定
一个结构类型的定义为“structB{inta[5];char*b;};”,则该类型的理论长度为(24)。三、写出下列每个程序运行后的输出结果(每小题6分,共30分)24.#include<stdio.h>voidmain(){inti,s1=0,s2=0
;for(i=0;i<=10;i++)if(i%2)s1+=i;elses2+=i;printf("%d%d\n",s1,s2);}输出结果:253025.#include<stdio.h>constintM=20;void
main(){inti=2;while(1){if(i>M/2)break;if(M%i==0)printf("%d",i);i++;}printf("\n");}输出结果:2451026.#include<stdio.h>inta[
7]={4,5,6,15,20,12,9};voidmain(){inti,s1,s2;s1=s2=0;for(i=0;i<7;i++){switch(a[i]%2){case0:s2+=a[i];break;case1:s1+=a[i];break;}}printf("%d%d\n",s1,s2
);}输出结果:294227.#include<stdio.h>voidmain(){inta[3][3]={{3,15,7},{9,11,10},{6,8,20}};inti,*p=&a[0][0];for(i=0;i
<9;i++){if(*p>10)printf("%d",*p);p++;}printf("\n");}输出结果:15112028.#include<stdio.h>#include<string.h>structWorker{charname[1
5];intage;floatpay;};voidmain(){structWorkerx;char*t="liouting";intd=38;floatf=2400;strcpy(x.name,t);x.age=d;x.pay=f;x.age++
;x.pay*=2;printf("%s%d%6.2f\n",x.name,x.age,x.pay);}输出结果:liouting394800.00四、写出下列每个函数的功能(每小题6分,共12分)29.#include<stdio.h>intSA(inta,intb
){if(a>b)return1;elseif(a==b)return0;elsereturn-1;}函数功能:比较两个整数a和b的大小,若a>b则返回1,若a==b则返回0,若a<b则返回-1。30.voidOutput(structIntN
ode*f)//f为单链表的表头指针{if(!f)return;while(f){printf("%d",f->data);f=f->next;}printf("\n");}假定structIntNode的类型定义为:structIntNode{intdata;
structIntNode*next;};函数功能:遍历并输出由f所指向的单链表中每个结点的值。五、按题目要求编写程序或函数(每小题6分,共12分)31.编写一个程序,计算1+3+32+...+310的值并输出,假定分别用i,p,s作为循环变量、累乘变量和累加变量的标
识符。参考答案:#include<stdio.h>voidmain(){inti;intp=1;ints=1;ior(i=1;i<=10;i++){p*=3;s+=p;}printf(%d\n”,s);}32.根据函数原型“intFF(inta[],intn
)”,编写函数定义,计算并返回数组a[n]中所有元素之和。参考答案:intFF(inta[],intn){inti,sum=0;for(i=0;i<n;i++)sum+=a[i];returnsum;}综合测试5一、单选题(每小题2分,共20分)1.程序运行中需要从键盘上输入多于一个数据时,各
数据之间默认使用()符号作为分隔符。a.逗号或分号b.空格或回车c.空格或逗号d.逗号或回车2.逻辑表达式(x>0&&x<=10)的相反表达式为()。a.x<=0||x>10b.x<=0&&x>10c.x>0&&x>10d.
x<=0||x<=103.当处理一个问题时的循环次数已知时,最好采用()循环来解决。a.whileb.do-whilec.switchd.for4.假定i的初值为0,则在循环语句“while(i<n){s+=i*i;i++;}”中,其循
环体被执行的总次数为()。a.n-1b.n/2c.n+1d.n5.假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素a[1][2]的值为()。a.4b.8c.2d.66.在下列选项中,不正确的函数原型格式为()。a.intFun
ction(a);b.intFunction(inta);c.intFunction(inta);d.voidint(double*a);7.假定p是一个指向double类型的数据指针,则p+1所指向的数据的地址比p所指向的数据的地址大()个字
节。a.8b.2c.4d.18.假定有一条定义语句为“intm=7,*p;”,则给p赋值的正确表达式为()。a.*p=&mb.p=&mc.p=md.p=*m9.假定指针变量p的定义语句为“int*p=malloc(sizeof(int));”,要释放p所指向的动态存储空间,应调用的函数为()。
a.delete(p)b.free(*p)c.free(&p)d.free(p)10.C语言中的系统函数fopen()是()一个数据文件的函数。a.关闭b.读取c.打开d.写入二、填空题(每小题2分,共26分)11.用于输出表达式值的标准输出函数的函数名是(printf)。12.每个
C语言程序文件在编译时可能出现有致命性错误,其对应的标识符为(error)。13.已知'A'~'Z'的ASCII码为65~90,当执行“intx='C'+6;”语句后x的值为(73)。14.表达式(int)24.6
的值为(24)。15.假定不允许使用逻辑非操作符,则关系表达式x+y>5的相反表达式为(x+y<=5)。16.假定x=15,则执行“a=(x?10:20);”语句后a的值为(10)。17.假定一维数组a的定义语句为“c
har*a[M];”,则该数组所占存储空间的字节数为(4M)。18.存储字符串"a"需要至少占用存储空间中的(2)个字节。19.strlen()函数用于计算一个字符串的(长度)。20.在C语言中,一个函数定义由函数头和(函数体)这两个部分组
成。21.假定p所指对象的值为25,p+1所指对象的值为52,则执行表达式*(p++)后,p所指对象的值为(52)。22.假定p是一个变量,则用(&p)表示该变量的地址。23.把间接访问表达式p->name改写成对应的直接访问表达式为((p).name)。三、写出下列每个程序运行后的输出
结果(每小题6分,共30分)24.#include<stdio.h>voidmain(){intn=6,y=1;while(n--)y+=3+n;printf("y=%d\n",y);}输出结果:y=3425.#include<stdio.h>voidmain(){inti,s=0;for(
i=1;i<10;i++)if(i%3==0||i%4==0)s+=i;printf("s=%d\n",s);}输出结果:s=3026.#include<stdio.h>voidmain(){chara
[]="abcfkgamd";inti1=0,i2=0,i=0;while(a[i]){if(a[i]<'e')i1++;elsei2++;i++;}printf("%d%d\n",i1,i2);}输出结果:5427.#include<
stdio.h>voidmain(){inta[9]={2,4,8,12,16,20,24,28,32};int*p=a;do{printf("%d",*p);p+=3;}while(p<a+9);printf("\n");}输出结果:2122428.#include<stdio.h>stru
ctWorker{charname[15];intage;doublepay;};voidmain(){structWorkera[4]={{"abc",20,2400},{"defa",50,3600},{"ghin",40,2500},{"jklt",36,3200}};inti,s=0;fo
r(i=0;i<4;i++)s+=a[i].age;printf("s=%5.2Lf\n",(double)s/4);}输出结果:s=36.50四、写出下列每个函数的功能(每小题6分,共12分)29.intSC(
inta,intb,intc){if(a>=b&&a>=c)returna;if(b>=a&&b>=c)returnb;returnc;}函数的功能:求出a,b,c三个数中的最大值并返回。30.int*LI(intn){int*a=malloc(n*sizeof(int));inti;for(i=
0;i<n;i++)scanf("%d",a+i);returna;}函数的功能:首先建立一个动态整型数组a[n],接着从键盘上输入n个整数到a[n]中,最后返回数组a[n]的首地址。五、按题目要求编写函数(每小题6分,共12分)31.编写一个函数,函数原型为“intfun4(char*a)”,请
采用while循环求出由字符指针a所指向的字符串中包含的十进制数字的个数,并把这个值作为函数值返回。参考答案:intfun4(char*a){intn=0;while(*a){if(*a>=”0”&&*a<=”9”)n++;a++;}returnn;}
32.编写一个主函数,计算并输出表达式1+22+32+...+n2的值,假定正整数n的值由键盘输入。参考答案:#include<stdio.h>voidmain(){intn,i,s=0scanf(“%d”,&n);for(i=1;i<=n;i++)s+=i*I;printf(“s=%d\n”,s
);}综合测试6一、单选题(每小题2分,共20分)1.C语言程序中的基本功能模块为()。a.语句b.函数c.标识符d.表达式2.逻辑表达式(x>0||y==5)的相反表达式为()。a.x>0||y!=5b.x<=0||y!=5c.x>0&&y=
=5d.x<=0&&y!=53.循环体至少被执行一次的循环语句为()。a.任一种循环b.forc.do-whiled.while4.假定n的值为5,则表达式n++的值为()。a.4b.7c.5d.65.假定一个二维数组a的定义为“inta[3][4]={{3,4
},{2,8,6}};”,则元素a[2][0]的值为()。a.4b.2c.0d.66.假定一个函数原型为“char*func(intn)”,则该函数的返回值类型为()。a.int*b.char*c.chard.int7.假定a为一个数组名,
则元素a[i]的指针访问方式为()。a.*a+ib.a+ic.*(a+i)d.&a+i8.假定有语句为“int*p=calloc(n+1,sizeof(int));”,则p所指向的动态数组中所包含的元素个数为()。a.n-1b.nc.n+1d.4*n9.十进制数65表示成符合C语言规
定的八进制数为()。a.0101b.065c.081d.10110.若要以读和写两种操作方式打开一个二进制文件,当文件不存在时返回打开失败信息,则选用的打开方式字符串为()。a."wb+"b."rb+"c."r
+"d."ab+"二、填空题(每小题2分,共26分)11.在一个C语言程序文件中,若要包含另外一个头文件或程序文件,则应使用的预处理命令为(#include)。12.用于从键盘上为变量输入值的标准输入函数的函数名为(scanf
)。13.假定一个枚举类型的定义为“enumRA{ab,ac,ad,ae};”,则ac的值为(1)。14.double类型的长度为(8)。15.执行“intx=45,y=16;printf("%d",x/y);”语句序列后得到的输出结果为(2)。16.把表达式x=x+y转换成复合赋值表达式为(x
+=y)。17.假定x的值为5,则执行“a=(!x?10:20);”语句后a的值为(20)。18.假定一维字符指针数组a的定义为“char*a[8];”,则该数组占用的存储空间的字节数为(32)。19.假定二维数组的定义为“doublea[M
][N];”,则数组元素的行下标取值范围在(0~M-1)之间。20.空字符串的长度为(0)。21.在所有函数定义之外定义的变量,若没有被初始化则系统隐含对它所赋的初值为(0)。22.若p指向x,则(p)与x的
表示是等价的。23.直接访问表达式(*fp).score所对应的间接访问表达式为(fp->score)。三、写出下列每个程序运行后的输出结果(每小题6分,共30分)24.#include<stdio.h>voidmain(){inti,j,k=0;for(i=
0;i<5;i++)for(j=i;j<5;j++)k++;;printf("%d\n",k);}输出结果:1525.#include<stdio.h>voidmain(){intx=28;inti=2;while(i<x){if(x%i==0){printf("%d",i);x/=i;}i
++;}printf("%d\n",x);}输出结果:27226.#include<stdio.h>voidmain(){inta[8]={76,63,54,95,40,75,90,82};inti,s=0;
for(i=0;i<8;i++)if(a[i]>=70&&a[i]<=85)s+=a[i];printf("s=%d\n",s);}输出结果:s=23327.#include<stdio.h>intWF(intx,inty){x=
x+y;y+=x;returnx+y;}voidmain(){intx=5,y=8;printf("%d\n",WF(x,y));}输出结果:3428.#include<stdio.h>intLA(int*a,intn){inti,s=0;for(i=0;i<
n;i++)s+=a[i];returns;}voidmain(){inta[5]={4,2,3,6,5};intb=LA(a,5)+LA(a+2,3);printf("b=%d\n",b);}输出结果:b=34四、写出下列每个函数的功能(每小题6分,共
12分)29.intWC(inta[],intn,intk){inti,c=0;for(i=0;i<n;i++)if(a[i]>=k)c++;returnc;}函数功能:统计并返回一维整型数组a[n]中大于等于k的值的个数。3
0.voidQA(structWorkera[],intn){inti;for(i=0;i<n;i++)scanf("%s%d%f",a[i].name,&a[i].age,&a[i].pay);}假定结构类型structWorker的定义如下:structWork
er{charname[15];intage;floatpay;};函数功能:从键盘上为具有structWorker结构类型的数组a[n]输入n个记录。五、按题目要求编写函数(每小题6分,共12分)31.根据函数原型“doubleMean(doublea[M][N],intm,int
n)”,编写函数定义,要求返回二维数组a[m][n]中所有元素的平均值。假定在计算过程中采用变量v存放累加值和最后的平均值。参考答案:doubleMean(doublea[M][N],intm,intn){inti,j;doublev=0.0;for(i=0
;i<m;i++)for(j=0;j<n;j++)v+=a[i][j];v/=m*n;returnv;}32.根据函数原型“intMM(inta[],intm)”,编写函数定义,计算并返回数组a[m]中元素最大值和最小值之差。参考答案:in
tMM(inta[],intm){inti,x1,x2;x1=x2=a[0];for(i=1;i<m;i++{if(a[i]>x1)x1=a[i];if(a[i]<x2)x2=a[i];}returnx1-x2;}