《国家开放大学《C语言程序设计》综合练习题参考答案.docx》由会员分享,可在线阅读,更多相关《国家开放大学《C语言程序设计》综合练习题参考答案.docx(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、国家开放大学C语言程序设计综合练习题参考答案综合练习1一、单选题(每小题2分,共20分)1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为。a.mainb.namec.MAINd.function2.每个C语言程序文件的编译错误分为( )类。a.2b.4c.3d.13.字符串a+b=12n的长度为( )。a.6b.9c.8d.74.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为( )语句。a.whileb.if c.ford.do5.在下面的do-while循环语句中,其循环体语句被执行的次数为( )。int i=0; do
2、 i+; while(ib | b=5的相反表达式为(a=b & b!=5)。16.执行“typedef int DataType;”语句后,在使用int定义整型变量的地方也可以使用(DataType)来定义整型变量。17.假定一维数组的定义语句为“char* a8;”,则该数组a所占存储空间的字节数为(32)。18.假定二维数组的定义语句为“double aMN;”,则该数组a的列下标的取值范围在0到(N-1)之间。19.存储一个空字符串需要占用(1)个字节。20.strcpy函数用于把一个字符串(拷贝)到另一个字符数组空间中。21.程序的编译单位是一个(程序文件)。22.假定a是一个一维数
3、组,则ai的指针访问方式为((a+i))。 23.执行int *p=malloc(sizeof(int)操作得到的一个动态分配的整型对象为(p)。三、写出下列每个程序运行后的输出结果(每小题6分,共30分)24.#include void main() int x=5; switch(2*x) case 4: printf(%d ,x); break; case 7: printf(%d ,2*x); break; case 10: printf(%d ,3*x); break; default: printf(%s ,default); printf(%dn,4*x); 程序运行结果:15
4、2025.#include void main() int f1,f2,i; f1=1; printf(%d ,f1); for(i=2;i5;i+) f2=3*f1+i; printf(%d ,f2); f1=f2; printf(n); 程序运行结果:1 5 18 5826.#include #define N 8 void main() int aN=12,39,26,41,55,63,72,40; int i, i1=0, i2=0; for(i=0;iN;i+) if(ai%2=1) i1+; else i2+; printf(%d %dn,i1,i2); 程序运行结果:4 427.
5、#include #include void main char s15=5678912340; int i, n=strlen(s) ; for(i=0; in/2; i+) char c=si; si=sn-1-i; sn-1-i=c; printf(%sn,s); 程序运行结果:043219876528.#include int LB(int *a, int n) int i,s=1; for(i=0;ii) if(x%i=0) printf(%d ,i); i+; printf(n); 假定使用SF(70)调用该函数,则输出的所有整数依次为_。参考答案:2 5 7 10 14 35 3
6、0.void QC(struct IntNode* f) /f为一个单链表的表头指针 while(f) printf(%d ,f-data); f=f-next; 假定结构类型IntNode的定义为: struct IntNode int data; struct IntNode *next; 该函数的功能为:参考答案:遍历并输出由表头指针f所指向的单链表中每个结点的data域的值。五、按题目要求编写程序(每小题6分,共12分)31.编写一个程序,首先从键盘上输入10个整数到一维数组a10中,然后按照下标从大到小的次序输出数组a10中的所有元素值。假定数组a10和循环变量i均在主函数中定义。参
7、考答案:#includevoid main()int a10,I;printf(“从键盘输入10个整数:n”);for(i=0;i=0;i-) printf(“%d”,ai);printf(“n”);32.编写一个程序,已知6a50,10b30,求出满足不定方程3a+2b=120的全部整数组解。如(20,30)就是其中的一组解。参考答案:#includevoid main()int a,b;for(a=6;a=50;a+) for(b=10;by的值为(0)。17.假定二维数组的定义为“int a45;”,则该数组所含元素的个数为回答(20)。18.执行“typedef int ABC20;”
8、语句把ABC定义为具有20个整型元素的(数组)类型。19.strcat()函数用于(连接)两个字符串。20.假定p所指对象的值为30,p+1所指对象的值为24,则*p+的值为(30)。21.若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为((char )p)。22.NULL是一个符号常量,通常作为空指针值,它对应的值为(0)。23.假定要动态分配一个类型为struct Worker的对象,并由r指针指向这个对象,则使用的表达式为(struct Worker r)=malloc(sizeof(struct Worker)。三、写出下列每个程序运行后的输出结果(每小题6分,共30分)2
9、4.#include void main() int i,s=0; for(i=1;i7;i+) s+=i*i; printf(“s=%dn”,s); 程序运行结果:s=9125.#include #define N 6 void main() int i,aN=2,5,8,10,15,20; for(i=0; iN; i+) if(ai%4=0) printf(%d ,ai); printf(n); 程序运行结果:8 2026. #include #include void main() int i; unsigned int len; char* a5=stud,work,cadre,so
10、ldier,zan123; len=strlen(a0); for(i=1; ilen) len=strlen(ai); printf(%dn,len); 程序运行结果:727.#include void main() int a,b; for(a=2,b=3; b30;) printf(%d %d ,a,b); a=a+b; b=a+b; 程序运行结果:2 3 5 8 13 2128.#include void LE(int* a, int* b) int x=*a; *a=*b; *b=x; void main() int x=5, y=8; printf(%d %d ,x,y); LE(
11、&x,&y); printf(%d %dn,x,y); 程序运行结果:5 8 8 5四、写出下列每个函数的功能(每小题6分,共12分)29.#include int SG(int x) /x为大于等于2的整数 int a=(int)sqrt(x); /sqrt(x)取x的平方根 int i=2; while(i=a) if(x%i=0) break; i+; if(idata; f=f-next; while(f) if(f-datax) x=f-data; f=f-next; return x; 假定struct IntNode的类型定义为: struct IntNode int data;
12、 struct IntNode* next; 函数功能:参考答案:求出由f所指向的单链表中所有结点的最大值。五、按题目要求编写程序或函数(每小题6分,共12分)31.编写一个程序,输出35以内(含35)的、能够被4或者7整除的所有整数。参考答案:#includevoid main()int i;for(i=4;i=35;i+) if(i%4=0|i%7=0) printf(“%d”,i);printf(“n”);32.编写一个递归函数“int FF(int a, int n)”,求出数组a中所有n个元素之积并返回。参考答案:#includeint FF(int a,int n)if(n=1)
13、return a0;elsereturn a0*FF(a+1,n-1);main()int n=5,s,a5=1,2,3,4,5;s=FF(a,n);printf(%dn,s);综合练习3一、单选题(每小题2分,共20分)1.由C语言源程序文件编译而成的目标文件的默认扩展名为( )。a.objb.exec.cppd.c2.设x和y均为逻辑值,则x | y为假的条件是( )。a.它们均为假b.它们均为真c.其中一个为真d.其中一个为假3.枚举类型中的每个枚举常量的值都是一个( )。a.字符b.整数c.浮点数d.记录4.循环语句“for(i=0; i5)的相反表达式为((x!=0 | y=5) 或
14、:(x | y=5))。16.若x=5,y=10,则x!=y的逻辑值为(1)。17.假定二维数组的定义为“int a36;”,则该数组所占存储空间的字节数为(72)。18.使用“typedef char BBMN;”语句定义(BB)为含有M行N列的二维字符数组类型。19.字符串a:xxk数据的长度为(11)。20.假定p所指对象的值为20,p+1所指对象的值为30,则*+p的值为(30)。21.假定一个数据对象为int*类型,则指向该对象的指针类型为(int)。22.假定一个结构类型的定义为 “struct Aint a,b; A* c;”,则该类型的长度为(12)。23.假定要访问一个结构对
15、象x中的数据成员a,则表示方式为(x.a)。三、写出下列每个程序运行后的输出结果(每小题6分,共30分)24.#include void main() int i, s=0; for(i=1;i+) if(s20) break; if(i%2) s+=i; printf(s=%dn,s); 程序运行结果:s=2525.#include void main() int a9=36,25,48,24,55,40,18,30,20; int i, b1, b2; b1=b2=a0; for(i=1; ib1) b1=ai; if(aib2) b2=ai; printf(%d %dn,b1,b2);
16、程序运行结果:55 1826.#include void SB(char ch) switch(ch) case A: case a: printf(WW ); break; case B: case b: printf(GG ); break; default: printf(BB ); break; void main() char a1=a,a2=B,a3=f; SB(a1);SB(a2);SB(a3); printf(n); 程序运行结果:WW GG BB27.#include #define M 6 void main() int i,x; int aM=10,15,22,37,46
17、,58; for(i=0; iM/2; i+) x=ai; ai=aM-1-i; aM-1-i=x; printf(%d %dn,a2,a4); 程序运行结果:37 1528.#include struct Worker char name15; int age; float pay; ; void main() struct Worker x=wanghua,34,4250; struct Worker y, *p; y=x; p=&x; printf(%d %7.2fn, y.age+p-age, p-pay+300); 程序运行结果:68 4550.00四、写出下列每个函数的功能(每小题
18、6分,共12分)29.int FH() int x,y=0; scanf(%d,&x); while(x!=-1) y+=x; scanf(%d,&x); return y; 函数功能:参考答案:求出从键盘上输入的一批整数的总和,以-1作为结束数据输入的标志。30.int FF(struct IntNode *f) /f为指向一个单链表的表头指针 int n=0; if(!f) return 0; while(f) n+; f=f-next; return n; 假定struct IntNode的类型定义为: struct IntNode int data; struct IntNode* n
19、ext; ; 函数功能:参考答案:求出并返回由f所指向的单链表中所有结点的个数。五、按题目要求编写程序或函数(每小题6分,共12分)31.编写一个程序,利用while循环,计算并打印输出1+12+13+1n的值,其中正整数n值由键盘输入。假定求和变量用sum表示,计数变量用i表示,sum、i和n均定义为全局变量,sum和i的初值分别被赋予0和1。参考答案:#include int n,i=1;double sum=0;void main() scanf(“%d”,&n); while(i=n) sum+=(double)1/i+; printf(“sum=%1fn”,sum);32.根据函数原
20、型“void DD(int a, int n, int MM)”编写函数定义,利用双重循环查找并打印输出数组an中任何两个元素的值等于MM值的元素值。假定ai+aj等于MM,则输出格式为:(ai,aj)。参考答案:void DD(int a,int n,int MM) int i,j;for(i=0;in;i+) for(j=i+1;jn;j+) if(ai+aj=MM) printf(“%d,%dn”,ai,aj);综合练习4一、单选题(每小题2分,共20分)1.由C语言目标文件连接而成的可执行文件的缺省扩展名为( )。a.exeb.objc.cd.cpp2.设有两条语句为“int a=10
21、; a+=a*a;”,则执行结束后,a的值为( )。a.100b.10c.20d.1103.带有随机函数调用的表达式rand()%50的值在( )区间内。a.150 b.149c.049 d.0504.for循环语句“for(i=0; in; i+=2) S;”中循环体S语句被执行的次数为( )。a.(n+1)/2 b.n-1c.n/2+1d.n/2-15.在下列的字符数组定义中,存在语法错误的是( )。a.char a15=1,2;b.char a20=abcdefg;c.char a10=5;d.char a=x+y=55.;6.若有一个函数原型为“double *function()”,
22、则它的返回值类型为( )。a.函数指针型b.实数型c.实数指针型d.数组型7.在C语言中,所有预处理命令都是以( )符号开头的。a.#b.&c.*d.8.假定整数指针p所指数据单元的值为30,p+1所指数据单元的值为40,则执行*p+后,p所指数据单元的值为( )。a.10b.40c.70d.309.若要使p指向二维整型数组a1020,则p的类型为( )。a.int *b.int *c.int *20d.int(*)2010.表示文件结束符的符号常量为( )a.feofb.eofc.Eofd.EOF二、填空题(每小题2分,共26分)11.一个函数定义由(函数头)和函数体两部分组成。12.执行“
23、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.假定二维数组的定义为“char aMN;”,则该数组所含元素的个数为(M N)。19.存储字符a需要占用存储器的(1)个字节空间。20.用于存储一个长度为n的字符串,需要的字符数组的长度至少为(n+1)。21.假
24、定p所指对象的值为30,p+1所指对象的值为46,则执行表达式(*p)+后,p所指对象的值为(31)。22.假定p是一个指向整数对象的指针,则用(p)表示该整数对象。23.假定一个结构类型的定义为“struct Bint a5; char* b;”,则该类型的理论长度为(24)。三、写出下列每个程序运行后的输出结果(每小题6分,共30分)24. #include void main() int i, s1=0, s2=0; for(i=0;i=10;i+) if(i%2) s1+=i; else s2+=i; printf(%d %dn,s1,s2); 程序运行结果:25 3025.#incl
25、ude const int M=20; void main() int i=2; while(1) if(iM/2) break; if(M%i=0) printf(%d ,i); i+; printf(n); 程序运行结果:2 4 5 1026.#include int a7=4,5,6,15,20,12,9; void main() int i,s1,s2; s1=s2=0; for(i=0; i7; i+) switch(ai%2) case 0: s2+=ai;break; case 1: s1+=ai;break; printf(%d %dn,s1,s2); 程序运行结果:29 4227.#include void main() int a33=3,15,7,9,11,10,6,8,20; int i,*p=&a00; for(i=0;i10) printf(%d ,*p); p+; printf(n); 程序运行结果:15 11 2028.#include #include struct Worker char name15; int age; float pay; void main() struct Worker x; char *t=liouti