二级C语言程序设计7.docx
《二级C语言程序设计7.docx》由会员分享,可在线阅读,更多相关《二级C语言程序设计7.docx(17页珍藏版)》请在冰豆网上搜索。
![二级C语言程序设计7.docx](https://file1.bdocx.com/fileroot1/2023-1/2/5bef7850-b112-47ae-9b9b-cf5b061ccc6b/5bef7850-b112-47ae-9b9b-cf5b061ccc6b1.gif)
二级C语言程序设计7
二级C语言程序设计-7
(总分:
100.00,做题时间:
90分钟)
一、{{B}}选择题{{/B}}(总题数:
30,分数:
60.00)
1.构成C程序的三种基本结构是
∙A.顺序结构、转移结构、递归结构
∙B.顺序结构、嵌套结构、递归结构
∙C.顺序结构、选择结构、循环结构
∙D.选择结构、循环结构、嵌套结构
(分数:
2.00)
A.
B.
C. √
D.
解析:
2.C语言编译程序的功能是
∙A.执行一个C语言编写的源程序
∙B.把C源程序翻译成ASCII码
∙C.把C源程序翻译成机器代码
∙D.把C源程序与系统提供的库函数组合成一个二进制执行文件
(分数:
2.00)
A.
B.
C. √
D.
解析:
3.下列形式中不合法的常量是
∙A.2.E8
∙B.-.28
∙C.-028
∙D.2e-8
(分数:
2.00)
A.
B.
C. √
D.
解析:
4.以下不是C语言字符型或字符串常量的是
∙A."It's"
∙B."0"
∙C.'a=0'
∙D.'/010'
(分数:
2.00)
A.
B.
C. √
D.
解析:
5.C语言程序中,若函数无返回值,则应该对函数说明的类型是
∙A.int
∙B.double
∙C.char
∙D.void
(分数:
2.00)
A.
B.
C.
D. √
解析:
6.若变量已正确定义并赋值,则错误的赋值语句是
∙A.a+=a+1;
∙B.a=sizeof(double);
∙C.a=d‖c;
∙D.a+1=a;
(分数:
2.00)
A.
B.
C.
D. √
解析:
7.若有定义:
inta=1,b=2,c=3;,则执行表达式(a=b+c)‖(++b)后a,b,c的值依次为
∙A.1,2,3
∙B.5,3,2
∙C.5,2,3
∙D.5,3,3
(分数:
2.00)
A.
B.
C. √
D.
解析:
8.有以下程序
#include<stdio.h>
main()
{intk=10;
printf("%4d,%o,%x/n",k,k,k);
}
程序的运行结果是(□代表一个空格)
∙A.10,12,a
∙B.□□10,012,a
∙C.010,12,a
∙D.□□10,12,a
(分数:
2.00)
A.
B.
C.
D. √
解析:
9.设有:
chars[5],c;,则调用函数scanf能正确给s和c读入数据的是
∙A.scanf("%s%c",s,c);
∙B.scanf("%d%c",&s,&c);
∙C.scanf("%d%c",s,&c);
∙D.scanf("%s%c",s,&c);
(分数:
2.00)
A.
B.
C.
D. √
解析:
10.设x,y,z均为实型变量,代数式
在C语言中的正确写法是
∙A.x/y*z
∙B.x%y%z
∙C.x/y/z
∙D.x*z/y
(分数:
2.00)
A.
B.
C. √
D.
解析:
11.有以下程序
#include<stdio.h>
main()
{inti,j,k,a=5,b=6;
i=(a==b)?
++a:
--b;
j=a++;k=b;printf("%d,%d,%d/n",i,j,k);
}
程序的运行结果是
∙A.7,6,5
∙B.5,5,5
∙C.7,5,5
∙D.5,6,5
(分数:
2.00)
A.
B. √
C.
D.
解析:
12.设变量x为longint型并已正确赋值,以下表达式中能将x的百位上的数字提取出的是
∙A.x/10%100
∙B.x%10/100
∙C.x%100/10
∙D.x/100%10
(分数:
2.00)
A.
B.
C.
D. √
解析:
13.有以下程序
#include<stdio.h>
main()
{inti,j,x=0;
for(i=0;i<2;i++)
{x++;
for(j=0;j<=3;j++)
{if(j%2==0)continue;x++;}
x++;
}
printf("x=%d/n",x);
}
程序的运行结果是
∙A.x=4
∙B.x=6
∙C.x=8
∙D.x=12
(分数:
2.00)
A.
B.
C. √
D.
解析:
14.有以下程序
#include<stdio.h>
main()
{intsum=0,x=5;
do{sum+=x;}while(!
--x);
printf("%d/n",sum);
程序的运行结果是
∙A.0
∙B.5
∙C.14
∙D.15
(分数:
2.00)
A.
B. √
C.
D.
解析:
15.有以下程序
#include<stdio.h>
main()
{charch='Z';
ch=(ch-'A'+1)%26+'A';putchar(ch);
程序的运行结果是
∙A.Z
∙B.Y
∙C.B
∙D.A
(分数:
2.00)
A.
B.
C.
D. √
解析:
16.以下函数的功能是:
计算a的n次方作为函数值返回
doublefun(doublea,intn)
{inti;doubles=1.0;
for(i=1;i<=n;i++)s=______;
return8;
}
为实现上述功能,函数中下划线处应填入的是
∙A.s*i
∙B.s*a
∙C.s+i*i
∙D.s+a*a
(分数:
2.00)
A.
B. √
C.
D.
解析:
17.在C语言程序中,下列说法正确的是
∙A.函数的定义可以嵌套,但函数的调用不可以嵌套
∙B.函数的定义不可以嵌套,但函数的调用可以嵌套
∙C.函数的定义和调用均不可以嵌套
∙D.函数的定义和调用均可以嵌套
(分数:
2.00)
A.
B. √
C.
D.
解析:
18.若主函数中有定义语句:
inta[10],b[10],c;,在主函数前定义的fun函数首部为:
voidfun(intx[]),则以下选项中错误的调用语句是
∙A.fun(b);
∙B.fun(&c);
∙C.fun(&a[3]);
∙D.fun(b[1]);
(分数:
2.00)
A.
B.
C.
D. √
解析:
19.有以下程序
#include<stdio.h>
main()
{intk,n=0;charc,str[]="teach";
for(k=0;str[k];k++)
{c=str[k];
switch(k)
{case1:
case3:
case5:
putchar(c);printf("%d",++n);break;
default:
putchar('N');
}
}
}
程序的运行结果是
∙A.Ne1NN
∙B.e1a2e3
∙C.Ne1Nc2N
∙D.Na1NNNN
(分数:
2.00)
A.
B.
C. √
D.
解析:
20.以下叙述中错误的是
∙A.同一个数组中所有元素的类型相同
∙B.不可以跳过前面的数组元素,给后面的元素赋初值
∙C.定义语句:
inta[10]={0};,给a数组中所有元素赋初值0
∙D.若有定义语句:
inta[4]={1,2,3,4,5};,编译时将忽略多余的初值
(分数:
2.00)
A.
B.
C.
D. √
解析:
21.执行以下程序段后,s的值为
inta[]={1,2,3,4,5,6,7,8,9},s=0,k;
for(k=0;k<8;k+=2)s+=*(a+k);
∙A.13
∙B.16
∙C.17
∙D.45
(分数:
2.00)
A.
B. √
C.
D.
解析:
22.有以下程序
#include<stdio.h>
#defineN4
voidfun(inta[][N],intb[])
{inti;
for(i=0;i<N;i++)b[i]=a[i][N-1-i];
}
main()
{intx[N][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},y[N],i;
fan(x,y);
for(i=0;i<N;i++)printf(:
%d,",y[i]);
printf("/n");
}
程序的运行结果是
∙A.1,2,3,4,
∙B.3,6,9,12,
∙C.4,7,10,13,
∙D.1,5,9,13,
(分数:
2.00)
A.
B.
C. √
D.
解析:
23.有以下程序
#include<stdio.h>
#include<string.h>
main()
{charstr[]={"Hello,Beijing"};
printf("%d,%d/n",strlen(str),sizeof(str));
}
程序的运行结果是
∙A.13,13
∙B.13,14
∙C.13,15
∙D.14,15
(分数:
2.00)
A.
B. √
C.
D.
解析:
24.有以下程序
#include<stdio.h>
voidfun(char(*p)[6])
{inti;
for(i=0;i<4;i++)prinff("%c",p[i][i]);
printf("/n");
}
main()
{chars[6][6]={"ABCDE","abcde","12345","FGHIJ","fghij","54321"};
fun(s);
}
程序的运行结果是
∙A.Aa1F
∙B.Ab3I
∙C.ABCD
∙D.fghij
(分数:
2.00)
A.
B. √
C.
D.
解析:
25.有以下程序
#include<stdio.h>
intfun(intn)
{if(n)returnfun(n-1)+n;
elsereturn0;
}
main()
{printf("%d/n",fun(3));}
程序的运行结果是
∙A.4
∙B.5
∙C.6
∙D.7
(分数:
2.00)
A.
B.
C. √
D.
解析:
26.有以下程序
#include<stdio.h>
#defineM5
#definef(x,y)x*y+M
main()
{intk;
k=f(2,3)*f(2,3);
printf("%d/n",k);
}
程序的运行结果是
∙A.22
∙B.41
∙C.100
∙D.121
(分数:
2.00)
A.
B. √
C.
D.
解析:
27.有以下定义
struetdata
{inti;charc;doubled;}x;
以下叙述中错误的是
∙A.x的内存地址与x.i的内存地址相同
∙B.structdata是一个类型名
∙C.初始化时,可以对x的所有成员同时赋初值
∙D.成员i、c和d占用的是同一个存储空间
(分数:
2.00)
A.
B.
C.
D. √
解析:
28.有以下程序
#include<stdio.h>
#include<string.h>
typedefstruet{charname[9];charsex;floatscore[2];}STU;
voidf(STU*a)
{strcpy(a->name,"Zhao");
a->sex='m';a->score[1]=90.0;
main()
{STUc={"Qian",'f',95.0,92.0},*d=&c;
f(d);printf("%s,%c,%2.0f,%2.0f/n",d->name,c.sex,c.seore[0],c.score[1]);
}
程序的运行结果是
∙A.Qian,f,95,92
∙B.Zhao,f,95,90
∙C.Zhao,m,95,90
∙D.Zhao,f,95,92
(分数:
2.00)
A.
B.
C. √
D.
解析:
29.若有以下定义
struettt{charname[10];charsex;}aa={"aaaa",'F'},*p=&aa;
则错误的语句是
∙A.scanf("%c",aa.sex);
∙B.aa.sex=getchar();
∙C.printf("%c/n",(*p).sex);
∙D.printf("%c/n",p->sex);
(分数:
2.00)
A. √
B.
C.
D.
解析:
30.若有说明:
typedefstruet{inta;charc;}W;则以下叙述正确的是
∙A.编译后系统为W分配5个字节
∙B.编译后系统为W分配6个字节
∙C.编译后系统为W分配8个字节
∙D.编译后系统不为W分配存储空间
(分数:
2.00)
A.
B.
C.
D. √
解析:
二、{{B}}程序填空题{{/B}}(总题数:
2,分数:
20.00)
31.程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。
所有学生数据均以二进制方式输出到文件中。
函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
源程序如下:
#include<stdio.h>#defineN5typedefstructstudent{longsno;charname[10];floatscore[3];}STU;voidfun(char*filename,STUn){FILE*fp;/*********found*********/fp=fopen(______,"rb+");/********found********/fseek(fp,-1L*sizeof(STU),______);/********found********/fwrite(______,sizeof(STU),1,fp);fclose(fp);}main(){STUt[N]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},{10005,"ZhangSan",95,80,88}};STUn={10006,"ZhaoSi",55,70,68},ss[N];inti,j;FILE*fp;fp=fopen("student,dat","wb");fwrite(t,sizeof(STU),N,fp);fclose(fp);fp=fopen("student,dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);printf("/nTheoriginaldata:
/n/n");for(j=0;j<N;j++)printf("/nNo:
%ldName:
%-8sScores:
",ss[j].sno,ss[j],name);for(i=O;i<3;i++)printf("%6.2f",ss[j].score[i]);printf("/n");fun("student,dat",n);printf("/nThedataaftermodifing:
/n/n");fp=fopen("student,dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);for(j=0;j<N;j++)printf("/nNo:
%ldName:
%-8sScores:
",ss[j].sno,ss[j],name);for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);printf("/n");}}
(分数:
10.00)
填空项1:
__________________ (正确答案:
filename或"student.dat"SEEK_END或2&n)
解析:
32.给定程序中,函数fun的功能是:
找出100~999之间(含100和999)所有整数中各位上数字之和为x(x为一正整数)的整数,然后输出;符合条件的整数个数作为函数值返回。
例如,当x值为5时,100~999之间各位上数字之和为5的整数有:
104、113、122、131、140、203、212、221、230、302、311、320、401、410、500。
共有15个。
当x值为27时,各位数字之和为27的整数是:
999。
只有1个。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
源程序如下:
#include<stdio.h>fun(intx){intn,s1,s2,s3,t;n=0;t=100;/********found********/while(t<=______){/********found********/s1=t%10;s2=(______)%10;s3=t/100;/********found********/if(s1+s2+s3==______){printf("%d",t);n++;}t++;}returnn;}main(){intx=-1;while(x<0){printf("Pleaseinput(x>0):
");scanf("%d",&x);}printf("/nTheresultis:
%d/n",fun(x));}
(分数:
10.00)
填空项1:
__________________ (正确答案:
999t/10X)
解析:
三、{{B}}程序修改题{{/B}}(总题数:
2,分数:
20.00)
33.给定程序MODI1.C中函数fun的功能是:
统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数;并把该整数中各位上最大的数字值作为函数值返回。
例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
源程序如下:
#include<stdio.h>intfun(unsignedn,int*zero){intcount=0,max=0,t;do{t=n%10;/********found********/if(t=0)count++;if(max<t)max=t;n=n/10;}while(n);/********found********/zero=count;returnmax;}main(){unsignedn;intzero,max;printf("/nInputn(unsigned):
");scanf("%d",&n);max=fun(n,&zero);printf("/nTheresult:
max=%dzero=%d/n",max,zero);
(分数:
10.00)
__________________________________________________________________________________________
正确答案:
(错误点1:
if(t==0)或if(!
t)或if(0==t)错误点2:
*zero=count;)
解析:
34.给定程序MODI1.C中函数fun的功能是:
依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
源程序如下:
#include<stdio.h>voidfun(char*s){inti,j;for(i=0,j=0;sill!
='/0';i++)if(s[i]>='0'&&s[i]<='9')/**********found**********/s[j]=s[i];/**********found**********/s[j]="/0";main()charitem[80];printf("/nEnterastring:
");gets(item);printf("/n/nThestringis:
"%s"/n",item);fun(item);printf("/n/nThestringofchangingis:
"%s"/n",item);}
(分数:
10.00)
__________________________________________________________________________________________
正确答案:
(错误点1:
s[j++]=s[i];或*(s+j++)=*(s+i);或s[j]=s[i],j++;或s[j]=s