C语言程序设测试二及答案.docx
《C语言程序设测试二及答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设测试二及答案.docx(18页珍藏版)》请在冰豆网上搜索。
C语言程序设测试二及答案
C语言程序设计期末考试试题及其答案
一、单项选择题(本大题共20题,每题1分,共20分)
1、A)。
程序的执行是从(一个CA本程序的main函数开始,到main函数结束
B本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C本程序的main函数开始,到本程序文件的最后一个函数结束
D本程序文件的第一个函数开始,到本程序main函数结束
2、以下不正确的C语言标识符是(D)
A、ABCB、abcC、a_bcD、ab.c
3、一个C语言程序是由(B)
A、一个主程序和若干子程序组成
B、函数组成
C、若干过程组成
D、若干子程序组成
4、以下能对一维数组a进行初始化的语句是:
(C)
A.inta[5]=(0,1,2,3,4,)B.inta(5)={}
C.inta[3]={0,1,2}D.inta{5}={10*1}
5、设变量a是整型,f是实型,i是双精度型,则表达式10+‘a'+i*f值的数据类型为(C)
A、intB、floatC、doubleD、不确定
6、C语言中函数返回值的类型是由(A)决定的.
A、函数定义时指定的类型B、return语句中的表达式类型
C、调用该函数时的实参的数据类型D、形参的数据类型
7、有如下程序,输入数据:
12345M678<cR>后(表示回车),x的值是(B)。
#include
main(){
intx;
floaty;
scanf(=%f,&x,&y);
}
A、12345B、123C、45D、345
8、设有以下说明语句:
typedefstructstu
{inta;
floatb;
}stutype;
则下面叙述中错误的是(D)。
A、struct是结构类型的关键字
是用户定义的结构类型structstu、B.
C、a和b都是结构成员名
D、stutype是用户定义的结构体变量名
9、若有说明:
intn=2,*p=&n,*q=p,则以下非法的赋值语句是:
(D)
A、p=qB、*p=*qC、n=*qD、p=n
10、已知charx[]=hello,y[]={'h','e','a','b','e'};,则关于两个数组长度的正确描述是(B).
A、相同B、x大于yC、x小于yD、以上答案都不对
11、下列代码输出的是(C)
main()
{
inta[5]={1,2,3,4,5};
int*ptr=(int*)(&a+1);
printf(%d,%d,*(a+1),*(ptr-1));
}
A、2,3B、2,4C、2,5D、输出错误
12、有以下程序
main()
{inta=1,b=3,c=5;
int*p1=&a,*p2=&b,*p=&c;
*p=*p1*(*p2);
printf(%d\n,c);
}
执行后的输出结果是(C)
A、1B、2C、3D、4
13、有以下程序段
#include
intmain()
{intx[]={10,20,30};
int*px=x;
printf(%d,,++*px);printf(%d,,*px);
px=x;
printf(%d,,(*px)++);printf(%d,,*px);
px=x;
printf(%d,,*px++);printf(%d,,*px);
px=x;
printf(%d,,*++px);printf(%d\n,*px);
return0;
}
程序运行后的输出结果是(A)
A、11,11,11,12,12,20,20,20B、20,10,11,10,11,10,11,10
C、11,11,11,12,12,13,20,20D、20,10,11,20,11,12,20,20
14、如果在C程序中有main(intargc,char*argv[]),那么(D)是指命令行参数个数。
中的.
A、argvB、argv[]C、argc,argv[]D、argc
15、以下关于typedef的叙述不的是(B)
A.用typedef可以定义各种类型名,但不能用来定义变量
B.用typedef可以增加新类型
C.用typedef只是将已存在的类型用一个新的名称来代表
D.用typedef便于程序的通用
16、下面程序的运行结果是(C)
#include
main()
{intnum=0;
while(num<=2)
{num++;
printf(“%d,num);
}
}
A、1
B、12
C、123
D、1234
17、下面代码能通过编译的是:
()A
A)intmain()
{
inta[3]={1,2,3};
int*b[3]={&a[1],&a[2],&a[3]};
int**p=b;
0;return
}
B)intmain()
{
inta[3]={1,2,3};
int*b[3]={a[1],a[2],a[3]};
int**p=b;
0;return
}
C)intmain()
{
inta[3]={1,2,3};
int*b[3]={&a[1],&a[2],&a[3]};
int*p=b;
0;return
}
D)intmain()
{
inta[3]={1,2,3};
int*b[3]={&a[1],&a[2],&a[3]};
int*p=&b;
return0;
}
18、若有以下程序:
voidmain()
{
char*a[3]={I,love,China};
char**ptr=a;
printf(%c%s,*(*(a+1)+1),*(ptr+1));
}
这段程序的输出是(C)
A、Il
B、oo
C、olove
D、Ilove
19、以下对二维数组a的正确说明是(C)
A、inta[3][];B、floata(3,4);
C、doublea[1][4];D、floata(3)(4);
20、若二维数组a有m列,则在a[i][j]前面的元素个数为(B)
A、j*m+i
B、i*m+j
C、i*m+j-1
D、i*m+j+1
21、下面选项属于函数指针的是:
(D)
A、(int*)p(int,int)B、int*p(int,int)C、两者都是D、两者都不是
二、填空题(本大题共10空,每空2分,共20分)
1、输入一个字符,判断该字符是数字、字母、空格还是其他字符。
main()
{charch;
ch=getchar();
if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
printf(ItisanEnglishcharacter\n);
elseif(ch>='0'&&ch<='9')
printf(Itisadigitcharacter\n);
elseif(ch==‘')
printf(Itisaspacecharacter\n);
else
printf(Itisothercharacter\n);}
2、若输入字符串:
abcde<回车>,则以下while循环体将执行__0___次.
while((ch=getchar())=='e')printf(*);
3、若有定义:
chars[]=china;则C编译系统为数组s开辟___6__个字节的内存单元.
_______
、下列程序运行后的输出结果是4.
*
**
***
****
___
___#include
main()
{
inti,j;
for(i=4;i>=1;i--)
{printf(*);
for(j=1;j<=4-i;j++)
printf(*);
printf(\
);
}
}
6,8,10}};则初始化后,a[1][2]5、若有定义:
int得到的
初值是____0_______a[2][1]得到的初值是________6________
6、在C语言中,二维数组元素的内存中的存放顺序是_按行主顺序存放_
三、程序分析题(本大题共4题,每题2分,共8分,写出程序执行结果)
1、#include
main()
{inta,s,n,count;
a=2;s=0;n=1;count=1;
while(count<=7){n=n*a;s=s+n;++count;}
printf(“s=%d”,s);
}
功能:
求S=0+2+4+8+16+32+64+128和。
输出结果:
s=254
2、#include
main()
{inta[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j)sum=sum+a[i][j];
printf(“sum=%d\n”,sum);
}
功能:
出矩形阵a的主对角线上的元素之和。
输出结果:
27
3、#include
main()
{chargrade='C';
switch(grade)
{
);“90-100\n”case‘A':
printf();
80-90\n”:
printf(case‘B'“
);
70-80\n”‘C':
printf(“case
);break;60-70\n”‘D':
printf(“case
”);':
printf(“<60\ncase‘E);”default:
printf(“error!
\n}
}
76十进制为注:
L70-80
60-70
#include
、4};int
intn[3][3]={1,2,3};
main()
{printf(“%d,”,m[1][0]+n[0][0]);
printf(“%d\n”,m[0][1]+n[1][0]);
}
3,0
四、编程题(本大题共10题,每题6分,共60分)
1、编写摄氏温度、华氏温度转换程序。
要求:
从键盘输入一个摄氏温度,屏幕就显示对应的华氏温度,输出取两位小数。
转换公式:
F=(C+32)×9/5。
#includestdafx.h
#include
intmain()
{
floatc,f;
printf(inputc:
);
scanf(%f,&c);
f=(c+32.0)*9.0/5.0;
printf(F=%.2f\n,f);
system(pause);
}
2、试编程判断输入的正整数是否既是5又是7的正倍数。
若是,则输出yes;否则输出no。
#includestdafx.h
#include
intmain()
{
intx;
scanf(%d,&x);
if(x%5==0&&x%7==0)
printf(yes);
else
printf(
o);
system(pause);
}
3、判断数m是否为素数(只能被1和它本身整除的整数)?
#includestdafx.h
#include
intmain()
{
boolisPrime(unsignedlong);
intm;
printf(inputm:
);
scanf(%d,&m);
if(isPrime(m))
printf(misaprimenumber!
\n);
else
printf(misnotaprimenumber!
\n);
system(pause);
}
boolisPrime(unsignedlongn){
if(n<=3){
returnn>1;
}elseif(n%2==0||n%3==0){
returnfalse;
}else{
for(unsignedshorti=5;i*i<=n;i+=6){
if(n%i==0||n%(i+2)==0){
returnfalse;
}
}
returntrue;
}
}
4、对15个数进行排序,按从小到大的顺序输出。
#includestdafx.h
#include
intmain()
{
inti,j,a[15],t;
printf(input15numbers:
\n);
for(i=0;i<15;i++)
scanf(%d,&a[i]);
for(j=0;j<14;j++)
for(i=0;i<14-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
for(i=0;i<15;i++)
printf(],a[i]);
printf(\
);
system(pause);
}
5、(*)编程输出如下图形(不能仅用printf语句):
*
***
*****
*******
*********
#includestdafx.h
#include
intmain()
{
inti,k,j;
for(i=0;i<=4;i++)
{for(j=0;j<4-i;j++)
printf();
for(k=0;k<=2*i;k++)
printf(*);
printf(\
);}
system(pause);
}
6、请编程序将“China”译成密码,密码规律是:
用原来的字母后面第4个字
母代替原来的字母。
例如,字母”A”后面第4个字母是”E”,用”E”,用E
代替A,因此,”China”应译为”Glmre”.请编写一程序,用赋初值的方法使
c1,c2,c3,c4,c5这5个变量的值分别为'C''h''i''n''a',经过
运算,使c1,c2,c3,c4,c5分别变成'G''i''m''r''e'.分别用
putchar函数和printf函数输出这5个字符。
Printf
#includestdafx.h
#include
intmain()
{
charc1='C',c2='h',c3='i',c4='n',c5='a';
printf(%c%c%c%c%c,c1+4,c2+4,c3+4,c4+4,c5+4);
system(pause);
}
Putchar
#includestdafx.h
#include
intmain()
{
charc1='C',c2='h',c3='i',c4='n',c5='a';
putchar(c1+4);
putchar(c2+4);
putchar(c3+4);
putchar(c4+4);
putchar(c5+4);
system(pause);
}
7、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少
#includestdafx.h
#include
intmain()
{
intcount=0;
for(inti=1;i<5;i++)
for(intj=1;j<5;j++)
for(intn=1;n<5;n++)
if(i!
=j&&i!
=n&&j!
=n)
{
printf(%d%d%d%\n,i,j,n);
count++;
}
牰湩晴尨一共有%d\n,count);
system(pause);
}
8、请编写程序,输出以下扬辉三角形(要求输出10行)。
第一种
#includestdafx.h
#include
#defineN10
intmain()
{
inti,j;
inta[N][N];
for(i=1;i{
a[i][1]=1;//每行第一个输出1
a[i][i]=1;//每行末尾输出1
}
for(i=3;ifor(j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];//第i行j列的数等于他低下一行的相邻左右数的和。
for(i=1;i{
for(j=1;j<=N-i-1;j++)printf();//输出三角前面用空格填充
for(j=1;j<=i;j++)
输出三角数值printf(M,a[i][j]);//
printf(\
);//换行
}
printf(\
);
system(pause);
}
第二种
#includestdafx.h
#include
#defineM10
#defineN10
intmain()
{
inta[M][N],i,j;
for(i=0;ifor(j=0;j<=i;j++)
if(j==0||j==i)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i{
for(j=0;j<=i;j++)
printf(M,a[i][j]);
printf(\
);
}
system(pause);
}
9、写一程序,要求用户在键盘上输入一个整数,并把每位数字转换为英文。
例如:
输入1024时,输出OneZeroTwoFour
#includestdafx.h
#include
intmain()
{
longintn;
intm,i=0,c[10];
scanf(%ld,&n);
do
{m=n_x0010_;
i++;
c[i]=m;
printf(]]]\n,i,m,c[i]);
}
while((n/=10)>0);
while(i>=1)
{i--;
switch(c[i+1])
{case0:
{printf(zero);printf();break;}
case1:
{printf(one);printf();break;}
case2:
{printf(wo);printf();break;}
case3:
{printf(hree);printf();break;}
case4:
{printf(
our);printf();break;}
case5:
{printf(
ive);printf();break;}
case6:
{printf(six);printf();break;}
case7:
{printf(seven);printf();break;}
case8:
{printf(eight);printf();break;}
case9:
{printf(
ine);printf();break;}
default:
printf(
o);}}
system(pause);
}
10、请编程,从键盘输入6名学生的5门成绩,分别统计每个学生的平均成绩。
(在主函数中输入输出,子函数求平均成绩)
#includestdafx.h
#include
intmain()
{
doublepingjun(double,int);
intr,c,i,j;
doubletmp,sum[10];
r=6;//6students
c=5;//5subjects
for(i=1;i<=r;i++)
{
牰湩晴尨请输入第%d个学生的所有成绩\n,i);
for(sum[i]=0,j=0;j{
scanf(%lf,&tmp);
sum[i]+=tmp;
}
}
for(i=1;i<=r;i++)
printf(heaverageofstudent%dis:
%0.3lf\n,i,pingjun(sum[i],c));
system(pause);
return0;
}
doublepingjun(doublesum,intn)
{
sum=sum/n;
returnsum;
}