C语言考试复习专用三套题附答案.docx
《C语言考试复习专用三套题附答案.docx》由会员分享,可在线阅读,更多相关《C语言考试复习专用三套题附答案.docx(25页珍藏版)》请在冰点文库上搜索。
C语言考试复习专用三套题附答案
《C语言程序设计》习题集
习题一
一、 语言基础(共20分,每题2分)
(一)设x为一数字字符,则其所对应的十进制数值为。
A)xB)x-‘0’C)*xD)&x
(二)说明语句chars=‘\t’,使s包含了几个字符?
。
A)1B)2C)3D)说明有错
(三)设a=6,b=4,则表达式b*=a+3的值为。
A)3B)18C)27D)36
(四)若给定表达式(m)?
a++:
a--,则其中表达式m和
等价。
A)m==0B)m!
=0C)m=0D)m=1
(五)设有说明语句inta[10],则数组a包括了个数组元素。
A)1B)9C)10D)20
(六)以下函数test返回值类型为。
test(intx)
{printf(“%f\n”,(float)x);
}
A)intB)floatC)voidD)不确定或错误
(七)C语言规定,main函数的参数。
A)只能有0个B)只能有0个或一个
C)只能有0个或2个D)可有任意个
(八)设x为整型变量,p基类型为整型的指针变量,则正确的赋值表达式是。
A)p=&xB)p=xC)*p=&xD)*p=*x
(九)TurboC中,int型数据在存储器中占二个字节,则以下类型数据在存储器中占的字节数为:
。
structtest
{intx;
floaty;
charz;
};
A)2B)3C)6D)7
(十)rewind()函数的作用是。
A)重新打开文件
B)使文件位置指针重新回到文件的开始
C)使文件位置指针重新回到文件的末
D)返回文件长度值
二、阅读下列程序,写出运行结果(共18分,每题3分)
[程序1]
#include
voidmain()
{inta=1,b=4,c=2;运行结果:
1
a=(a+b)/c;
printf(“%d\n”,--a);
}
[程序2]
voidmain()
{charc1=67;/*‘A’的ASCII码值为65*/
if(‘A’<=c1&&c1<=’Z’)运行结果:
67,D
printf(“%d,%c”,c1,c1+1);
elseprintf(“%c”,c1);}
[程序3]
viodmain()
{inta=0,n=5;运行结果:
1,5,4,3,2,0
for(;;)
{a++;n--;
printf(“%d,”,a);
a=n;
if(n==0)break;
}
printf(“%d”,a);
}
[程序4]
main()
{inti,j;运行结果:
1,2,4,8,16,32,64,128,256,512
staticinta[10]={1,1,1,1,1,1,1,1,1,1};
for(i=0;i<10;i++)
for(j=0;j
a[i]=a[i]+a[j];
for(i=0;i<10;i++)
printf(“%d,”,a[i]);
}
[程序5]
intk=2;
f(intm)运行结果:
6,8
{m+=k;k+=m;5,9
printf(“%d,%d\n”,m,k++);
}
main()
{inti=4;
for(i++);
printf(“%d,%d\n”,i,k);}
[程序6]
voidmain()
{staticinta[10],i;运行结果:
13579
for(i=0;i<10;i++)
a[i]=i+1;
for(i=0;i<10;i=i+2)
printf(“%d”,*(a+i));
}
三、阅读分析下列程序,在处填上适当的内容使程序(或函数)完整(共21分,每空3分)
(一) 以下程序输出所有大写字母和其对应的ASCII码值。
voidmain()
{intch;
for(ch=’A’;ch<=’Z’;ch++)
printf(“字母%c的ASCII码值是:
%d\n”,ch,1);
}
答案:
ch
(二)以下函数的功能是将一个字符串S的内容颠倒过来。
voidreserve
(2)答案:
chars[]
{inti,j,k;
for(i=0,j=strlen(s)-1;3;i++,j--)答案:
i{k=s[i];s[i]=s[j];s[j]=k;}
}
(三)由键盘输入三个数a,b,c,计算以这三个数为边长的三角形面积。
#include
voidmain()
{floata,b,c,s,s1;
scanf(“%f%f%f”,4);答案:
&a,&b,&c
if((a+b)>c&&(a+c)>b&&(b+c)>a)
{s=(a+b+c)/2;
s1=s*(s-a)*(s-b)*(s-c);
s=5;答案:
sqrt(s1)
printf(“\n三角形面积为:
%f\n”,s);
}
else
printf(“\n不是三角!
\n”);
}
(四)从键盘输入一个字符串,把它输出到文件中,文件名由键盘输入。
#include
voidmain()
{FILE*fp;
charch,*fn;
scanf(“%s”,fn);
if((fp=fopen(fn,6))==NULL)答案:
“w”
{printf(“打开文件出错\n”);
exit
(1);
}
while((ch=getchar())!
=EOF)
{fputc(7);答案:
ch,fp
putchar(ch);
}
fclose(fp);}
四、编程题(共21分)
1.从键盘输入3个整数,输出其中最大数。
(5分)
main()
{inti=0,x,mx=-32768;
while(i++<3)
{scanf(“%d”,&x);
if(x>mx)mx=x;
}
printf(“\n%d\n”,mx);
}
2.编写一函数uf(s),将字符串s中的第一个和最后一个字母改写成大写字母(如原来不是字母或已是大写字母,则不变)。
(5分)
#include
uf(char*s)
{inti;
i=strlen(s);
if(i==0)return;
if(s[0]>=’a’&&s[0]<=’z’)
s[0]+=’A’-‘a’;
if(s[i-1]>=’a’&&s[i-1]<=‘z’)
s[i-1]+=’A’–‘a’;
}
main()
{chars[]=”asdfgh”;
uf(s);
printf(“\n%s\n”,s);
}
3.从键盘输入10个浮点数,输出其平均值及所有低于平均值的数。
(5分)
#include
main()
{
floata[10],ave=0;
inti;
for(i=0;i<10;i++)
{
scanf(“%f”,&a[i]);
ave+=a[i];
}
ave/=10;
for(i=0;i<10;i++)
if(a[i]printf(“%f\t”,a[i]);
}
习题二
一、语言基础(共20分,每题2分)
(一) 若a为float类型变量,且a=4.6785,则表达式(int)(a*100+0.5)/100.0
的值为4.68。
(二)设有intx=11,y=10;则以下表达式的值为10。
x-->y?
10:
11>y++?
’a’:
’z’
(三)若所有变量都已正确定义为int型则执行下列程序段后x的值为79。
x=80;a=10b=16;y=9;z=0;
if(a
if(b!
=15)
if(!
y)x=81;
elseif(!
z)x=79;
(四)i,j为int型的变量,则下面程序中的循环体的执行次数为5。
i=1;j=0;
while(i+j<=10)
{if(i>jj=j+2);
elsei=i+2;}
(五)若有数组a[10],类型为int型,元素及值如下所示:
数组元素:
a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
元素中的值:
9483267015
则*(a+a[9])的值为6。
(六)以下函数调用语句中实参的个数为3.
Sub((x1,x2),(x3,x4,x5),x6)
(七)若有以下函数定义:
int(*hs)()
{
……/*函数体*/
}
则函数hs返回的值是整形。
(八)某C编译程序规定,int型数据存储占2个字节,float型数据存储占4个字节,char型数据存储占1个字节,现有记录描述如下:
structstu
{
union
{
charbj[5];
intbh[2];
}class;
charxm[8];
floatcj;
}xs;
则sizseof(xs)的值为17。
(九)设有以下定义:
#definea6
#defineba+4
则执行语句c=b*10(c为int型数据)后,c的值为46。
(十)在C中,文件指针变量的类型只能是FILE。
二、阅读下列程序,写出运行结果(共20分,每题4分)
[程序1]
#include
main()
{
inti;运行结果:
i=18,J=29.44
floatj;
i=18;
j=29.4361;
printf(“i=%4d,j=%2.2f”,i,j);
}
[程序2]
main()
{intk=10;charc=’b’;
do
swith(c++)运行结果:
12
{
case‘a’:
k++;
case‘b’:
k--;
case‘c’:
k+=3;break;
case‘d’:
k=k%4;
}
while(c!
=’c’);
printf(“%d\n”,k);}
[程序3]
main()
{
chara[]=”computer”;
chart;
inti,j=0;运行结果:
utrpomec
for(i=0;I<8;I++)
for(j=i+1;j<8;j++)
if(a[i]{
t=a[i];
a[i]=a[j];
a[j]=t;
}
printf(“%s”,a);
[程序4]
main()
{
char*p,s[]=”abcdefg”;
for(p=s;*p!
=’\0’);运行结果:
abcdefg
{
printf(“%s\n”,p);
p++;
if(*p!
=’\0’)
p++;
elsebreak;
}
}
5、以下程序的输出结果为___hellowellcom______。
main()
{chars1[40]="hello",s2[20]="wellcom";
inti=0,j=0;
while(s1[i]!
='\0')i++;
while(s2[j]!
='\0')s1[i++]=s2[j++];
s1[i]=0;
printf("%s\n",s1);
}
6、#include
main()
{
inti,j,x=0;
for(i=0;i<2;i++)
{
x++;
for(j=0;j<3;j++)
{
if(j%2)break;
x++;
}
x++;
}
printf("x=%d\n",x);
}
程序运行结果是:
x=6
三、阅读下列程序,在 线处填上合适的内容使程序(或函数)完整(共18分,每空2分)
1. 以下程序的功能是求三个数的最小公倍数。
max(intx,inty,intz)
{
if(x>y&&x>z)
return(x);
elseif(y>=x&&y>z)
return(y);
else
return(z);
}
main()
{
inta,b,c,I=1,j,s;
scanf(“%d%d%d”,&a,&b,&c);
s=max(a,b,c);
while
(1)
{
j=s*i;
if((j%a==0)&&(j%b==0)&&(j%c==0))
break;
i++;
}
prinf(“%d”,j);
}
2. 下面程序是判断输入的字符是否中心对称,(如”xyzzyx”和”xyzyx”都中心对称
#include
main()
{
chars[100],*p1,p2;
intn;
gets(s);
n=strlen(s);
p1=s;
p2=s+n-1;
while(p1if(*p1!
=*p2)
break;
else
{p1++;p2--;}
if(p1printf(“NO\n”);
else
printf(“YES\N”);
}
3. 结构数组中有4人的姓名和年龄,以下程序输入四人中年龄最大的人的姓名和年龄。
#defineNULL0
staticstructnode
{
charname[20];
intage;
}person[]={“lihong”,18,
“wangjun”,19,
“zhangwei”,20,
“zhaofeng”,19
};
main()
{
structnode*p,*q;
intold=0;
q=NULL;
p=person;
for(;p!
=NULL;p++)
if(oldage)
{
q=p;
old=p->age;
}
printf(“%s,%d\n”,q->name,q->age);
}
四、编程题(共22分)
1. 有36块砖,共36人搬,成年男子一次搬4块砖,成年女子一次搬3块砖,儿童两人抬1块砖,恰好一次全部搬完,编程求出成年男子成年女子和儿童各有多少人。
(6分)
main()
{intmen,women,child;
for(men=0;men<9;men++)
for(womem=0;women<12;women++)
{child=36-men-women;
if((men*4+women*3+child/2.0)=36)
printf(“%d,%d,%d\n”,men,women,child);
}
2. 非波那契数的递归如下:
除X0和X1外,序列中某个元素的值是其前两个元素的和,编写程序输入序号n,求它的非波那契数Xn。
longfib(inty)
{
if(y==0)
return(0);
elseif(y==1)
return
(1);
else
return(fib(y-1)+fib(y-2));
}
main()
{
intn;
longk;
scanf(“%d”,&n);
k=fib(n);
printf(“k=%d\n”,k);
}
3.用循环语句编程将二维数组a[3][4]的第一行和第三行对调(如下图),
并输出数组。
(8分)
main()
{
inti,j,t;
inta[3][4]={2,3,4,5,3,8,10,2,7,9,3,1};
for(i=0;i<4;i++)
{
t=a[0][i];
a[0][i]=a[2][i];
a[2][i]=t;
}
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf(“%3d”,a[i][j]);
printf(“\n”);
}
}
习题三
一.语言基础(共20分,每题2分)
(一)正确的C语言自定义标志符是A。
1.A)file_bakB)abc(10)
C)continueD)class+3
(二)设intx=8,y,z;执行y=z=x++;x=y==z后,变量x的值是B。
2.A)0B)1C)8D)9
(三)字符串“w\x53\\\np\103q”的长度是A。
3.A)7B)9C)15D)16
(四)设inta=9,b=8,c=7,x=1;则执行语句
if(a>7)if(b>8)if(c>9)x=2;elsex=3;
后x的值是C。
4.A)0B)2C)1D)3
(五)有如下程序
main()
{
intx=23;
do{
printf(“%d”,x--);
}while(!
x);
}
该程序的执行结果是B。
5.A)321B)23
C)不输出任何内容D)陷入死循环
(六)定义一个具有8个元素的整型数组,应当使用语句A。
6.A)inta[8];B)inta[2,4];
C)inta[];D)int*a[8];
(七)设intx[]={4,2,3,1},q,*p=&x[1];则执行语句
q=(*――p)++后,变量q的值为A。
7.A)4B)3C)2D)1
(八)函数调用时,下列说法中不正确的是B。
8.A)实际参数和形式参数可以同名
B)若用值传递方式,则形式参数不予分配存储单元
C)主调函数和被调函数可以不在同一个文件中
D)函数间传递数据可以使用全局变量
(九)下列数据类型中不属于构造类型的是D。
9.A)数组型B)结构型C)公用型D)枚举型
(十)存储整型数据-7856时,在二进制文件和文本文件中占用的字节数分别是B。
10.A)3,2B)2,5C)5,5D)5,2
二、阅读下列程序,写出运行结果(共20分,每题4分)
【程序1】
#include
main()
{
intx=1,a=0,b=0;运行结果:
a=1,b=1
switch(x){
case0;b++;
case1;a++;
case2;a++;b++;
}
printf(“a=%d,b=%d\n”,a,b);
}
【程序2】
space(intm)
{
while(m--)printf(“%c”,32);
}运行结果:
*
main()***
{inti,j;printf(“\n”);***
for(i=5;i>=1;i--)***
{ ***
space(i);
printf(“*”);
for(j=3;j>=2*(i/5)+2;j--)
{
space(4-i);
printf(“*”);
}
printf(“\n”);
}
}
【程序3】
longff(intn)运行结果:
6
{
if(n>3)
return(ff(n-1)+ff(n-2));
elsereturn(3);
}
main()
{
printf(“%d\n”,ff(4));
}
【程序4】
main()运行结果400-4-3:
{
inti,a[5];
for(i=0;i<5;i++)
a[i]=9*(i-2+4*(i>2))%5;
for(i=4;i>=0;i--)
printf(“%3d”,a[i]);
}
【程序5】
#include运行结果:
13
unionpw
{
inti;
charch[2];
}a;
main()
{
a.ch[0]=13;
a.ch[1]=0;
printf(“%d\n”,a.i);
}
6、以下程序的输出结果为_____x=37___。
#defineA3
#defineB(a)(A+1)*a
main()
{intx;
x=3*A+B(7);
printf("x=%d\n",x);
}
7.#include
voidFun(int*y)
{
printf("*y=%d\n",*y);
*y+=20;
printf("*y=%d\n",*y);
}
main()
{
intx=10;
printf("x=%d\n",x);
Fun(&x);
printf("x=%d\n",x);
}
程序运行结果是:
x=10
*y=10
*y=30
X=30
三、阅读下列程序,在处填上适当的内容使其完整。
(共20分,每空2分)
(一)下面程序用于计算n!
的值