C语言程序设测试二及答案教学文案.docx
《C语言程序设测试二及答案教学文案.docx》由会员分享,可在线阅读,更多相关《C语言程序设测试二及答案教学文案.docx(20页珍藏版)》请在冰豆网上搜索。
C语言程序设测试二及答案教学文案
C语言程序设计
期末考试试题及其答案
一、单项选择题(本大题共20题,每题1分,共20分)
1、一个C程序的执行是从(A)。
A本程序的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("%3d%f",&x,&y);
}
A、12345B、123C、45D、345
8、设有以下说明语句:
typedefstructstu
{inta;
floatb;
}stutype;
则下面叙述中错误的是(D)。
A、struct是结构类型的关键字
B、structstu是用户定义的结构类型
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(int argc,char *argv[]),那么(D )是指命令行中的参数个数。
A、argv B、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;
return0;
}
B)intmain()
{
inta[3]={1,2,3};
int*b[3]={a[1],a[2],a[3]};
int**p=b;
return0;
}
C)intmain()
{
inta[3]={1,2,3};
int*b[3]={&a[1],&a[2],&a[3]};
int*p=b;
return0;
}
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、若有定义:
char s[ ]="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("\n");
}
}
5、若有定义:
inta[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是____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)
{
case‘A’:
printf(“90-100\n”);
case‘B’:
printf(“80-90\n”);
case‘C’:
printf(“70-80\n”);
case‘D’:
printf(“60-70\n”);break;
case‘E’:
printf(“<60\n”);
default:
printf(“error!
\n”);
}
}
注:
L十进制为76
70-80
60-70
4、#include
intm[3][3]={{1},{2},{3}};
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。
#include"stdafx.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。
#include"stdafx.h"
#include
intmain()
{
intx;
scanf("%d",&x);
if(x%5==0&&x%7==0)
printf("yes");
else
printf("no");
system("pause");
}
3、判断数m是否为素数(只能被1和它本身整除的整数)?
#include"stdafx.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个数进行排序,按从小到大的顺序输出。
#include"stdafx.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("%5d",a[i]);
printf("\n");
system("pause");
}
5、(*)编程输出如下图形(不能仅用printf语句):
*
***
*****
*******
*********
#include"stdafx.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("\n");}
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
#include"stdafx.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
#include"stdafx.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个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少
#include"stdafx.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++;
}
printf("一共有%d\n",count);
system("pause");
}
8、请编写程序,输出以下扬辉三角形(要求输出10行)。
第一种
#include"stdafx.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("%4d",a[i][j]);//输出三角数值
printf("\n");//换行
}
printf("\n");
system("pause");
}
第二种
#include"stdafx.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("%4d",a[i][j]);
printf("\n");
}
system("pause");
}
9、写一程序,要求用户在键盘上输入一个整数,并把每位数字转换为英文。
例如:
输入1024时,输出OneZeroTwoFour
#include"stdafx.h"
#include
intmain()
{
longintn;
intm,i=0,c[10];
scanf("%ld",&n);
do
{m=n%10;
i++;
c[i]=m;
printf("%5d%5d%5d\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("two");printf("");break;}
case3:
{printf("three");printf("");break;}
case4:
{printf("four");printf("");break;}
case5:
{printf("five");printf("");break;}
case6:
{printf("six");printf("");break;}
case7:
{printf("seven");printf("");break;}
case8:
{printf("eight");printf("");break;}
case9:
{printf("nine");printf("");break;}
default:
printf("no");}}
system("pause");
}
10、请编程,从键盘输入6名学生的5门成绩,分别统计每个学生的平均成绩。
(在主函数中输入输出,子函数求平均成绩)
#include"stdafx.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++)
{
printf("请输入第%d个学生的所有成绩\n",i);
for(sum[i]=0,j=0;j{
scanf("%lf",&tmp);
sum[i]+=tmp;
}
}
for(i=1;i<=r;i++)
printf("theaverageofstudent%dis:
%0.3lf\n",i,pingjun(sum[i],c));
system("pause");
return0;
}
doublepingjun(doublesum,intn)
{
sum=sum/n;
returnsum;
}