国家开放大学《C语言程序设计》综合测试题参考答案.docx
《国家开放大学《C语言程序设计》综合测试题参考答案.docx》由会员分享,可在线阅读,更多相关《国家开放大学《C语言程序设计》综合测试题参考答案.docx(36页珍藏版)》请在冰点文库上搜索。
国家开放大学《C语言程序设计》综合测试题参考答案
综合测试1
一、单选题(每小题2分,共20分)
1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为()。
a.function
b.name
c.main
d.MAIN
2.每个C语言程序文件的编译错误分为()类。
a.2
b.4
c.1
d.3
3.字符串"a+b=12\n"的长度为()。
a.7
b.9
c.6
d.8
4.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为()语句。
a.for
b.while
c.if
d.do
5.在下面的do-while循环语句中,其循环体语句被执行的次数为()。
inti=0;doi++;while(i<10);
a.4
b.3
c.10
d.5
6.将两个字符串连接起来组成一个字符串时,选用的函数为()。
a.strcap()
b.strcmp()
c.strlen()
d.strcat()
7.若用数组名作为函数调用的实参,传递给形参的是()。
a.数组的首地址
b.数组元素的个数
c.数组中全部元素的值
d.数组中第一个元素的值
8.假定a为一个整数类型的数组名,整数类型的长度为4,则元素a[4]的地址比a数组的首地址大()个字节。
a.16
b.32
c.4
d.8
9.假定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.fgets()
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
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);
}
运行结果:
1520
25.#include
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");
}
运行结果:
151858
26.#include
#defineN8
voidmain(){
inta[N]={12,39,26,41,55,63,72,40};
inti,i1=0,i2=0;
for(i=0;iif(a[i]%2==1)i1++;elsei2++;
printf("%d%d\n",i1,i2);
}
运行结果:
44
27.#include
#include
voidmain(){
chars[15]="5678912340";
inti,n=strlen(s);
for(i=0;icharc=s[i];
s[i]=s[n-1-i];
s[n-1-i]=c;
}
printf("%s\n",s);
}
运行结果:
0432198765
28.#include
intLB(int*a,intn){
inti,s=1;
for(i=0;ireturns;
}
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均在主函数中定义。
参考答案:
#include
void main()
{
int a[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
void main()
{
int a,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.C
b.exe
c.cpp
d.obj
2.设x和y均为逻辑值,则x&&y为真的条件是x和y()。
a.均为真
b.其中一个为真
c.均为假
d.其中一个为假
3.在下列的符号常量定义中,正确的定义格式为()。
a.constintM220
b.#defineM310
c.#defineM1
d.constcharmark
4.for循环语句能够被改写为()语句。
a.switch
b.while
c.复合
d.if
5.在下面的一维数组定义中,错误的定义格式为()。
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.*a
b.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+3
9.char类型的长度为________个字节。
a.2
b.4
c.1
d.3
10.向一个二进制文件中写入信息的函数为()。
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.执行“typedefintABC[20];”语句把ABC定义为具有20个整型元素的(数组)类型。
19.strcat()函数用于(连接)两个字符串。
20.假定p所指对象的值为30,p+1所指对象的值为24,则*p++的值为(30)。
21.若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为((char)p)。
22.NULL是一个符号常量,通常作为空指针值,它对应的值为(0)。
23.假定要动态分配一个类型为structWorker的对象,并由r指针指向这个对象,则使用的表达式为(structWorkerr)=malloc(sizeof(structWorker))。
三、写出下列每个程序运行后的输出结果(每小题6分,共30分)
24.#include
voidmain(){
inti,s=0;
for(i=1;i<7;i++)s+=i*i;
printf(“s=%d\n”,s);
}
输出结果:
s=91
25.#include
#defineN6
voidmain()
{
inti,a[N]={2,5,8,10,15,20};
for(i=0;iif(a[i]%4==0)printf("%d",a[i]);
printf("\n");
}
输出结果:
820
26.#include
#include
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);
}
输出结果:
7
27.#include
voidmain()
{
inta,b;
for(a=2,b=3;b<30;){
printf("%d%d",a,b);
a=a+b;
b=a+b;
}
}
输出结果:
23581321
28.#include
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
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;
}
假定structIntNode的类型定义为:
structIntNode{intdata;structIntNode*next;};
函数功能:
求出由f所指向的单链表中所有结点的最大值。
五、按题目要求编写程序或函数(每小题6分,共12分)
31.编写一个程序,输出35以内(含35)的、能够被4或者7整除的所有整数。
参考答案:
#include
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];
else
returna[n-1]*FF(a,n-1);
}
综合测试3
一、单选题(每小题2分,共20分)
1.由C语言源程序文件编译而成的目标文件的默认扩展名为()。
a.exe
b.cpp
c.c
d.obj
2.设x和y均为逻辑值,则x||y为假的条件是()。
a.它们均为假
b.其中一个为假
c.其中一个为真
d.它们均为真
3.枚举类型中的每个枚举常量的值都是一个()。
a.字符
b.整数
c.浮点数
d.记录
4.循环语句“for(i=0;i<=n;i++)S;”中循环体S被执行的次数为()。
a.n
b.n+1
c.n-1
d.1
5.假定有定义为“inta[4][5]={{1,3,5},{2,8}};”,则a[1][1]的值为()。
a.3
b.8
c.5
d.2
6.在下面的选项中,不能作为函数值返回类型的是()。
a.int
b.long
c.new
d.void
7.假定x的值为4,y的值为6,则表达式x++*++y的值为()。
a.24
b.35
c.30
d.28
8.用calloc函数创建具有10个整型元素的动态存储空间的正确调用是()。
a.calloc(sizeof(int),10,)
b.calloc(10,sizeof(int))
c.calloc(10)
d.calloc(10,sizeof(char))
9.假定有定义“intb[10],*pb;”,则不正确的赋值为()。
a.pb=b+4
b.pb=b
c.pb=&b[0]
d.pb=b[5]
10.标准输入设备的文件流标识符是()。
a.stderr
b.stdio
c.stdin
d.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))。
16.若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.假定一个结构类型的定义为“structA{inta,b;A*c;};”,则该类型的长度为(12)。
23.假定要访问一个结构对象x中的数据成员a,则表示方式为(x.a)。
三、写出下列每个程序运行后的输出结果(每小题6分,共30分)
24.#include
voidmain(){
inti,s=0;
for(i=1;;i++){
if(s>20)break;
if(i%2)s+=i;
}
printf("s=%d\n",s);
}
输出结果:
s=25
25.#include
voidmain(){
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];