C语言程序设计复习题
一、选择题
1.下列选项中可作为C语言合法常量的是(a)。A)-80B)-080
C)-8e1.0D)-80.0e
2.下列不能定义的用户标识符是(d)。
A)MainB)_0
C)_intD)sizeof
3.下列选项中,不能作为合法常量的是(b)。
A)1.234e04B)1.234e0.4
C)1.234e+4D)1.234e0
4.有定义语句:intb;charc[10];,则正确的输入语句是(b)。
A)scanf("%d%s",&b,&c);B)scanf("%d%s",&b,c);
C)scanf("%d%s",b,c);D)scanf("%d%s",b,&c);
5.设有变量定义inta,b,d=25;则语句a=d/10%9,b=a&&(-1);执行之后a、b变量的值为(b)
A)a=6,b=1B)a=2,b=1
C)a=6,b=0D)a=2,b=0
6.下列程序段的输出结果是(d)。
inti=1,j=2,k=3;
if(i++==1&&(++j==3‖k++==3))
A)123B)234
C)223D)233printf("%d%d%d\n",i,j,k);
7.若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式a<b?a∶c<d?c∶d的值是(a)。
A)1B)2
C)3D)4
8.设有定义语句:chara[7]="a0\0a0\0";则sizeof(a)和strlen(a)的值分别为(c)。
A)22B)76
C)72D)62
9.下列能正确定义一维数组的选项是(b)。
A)inta[5]={0,1,2,3,4,5};B)chara[]={0,1,2,3,4,5};
C)chara={'A','B','C'};D)inta[5]="0123";
10.已有定义:chara[]="xyz",b[]={'x','y','z'};,下列叙述中正确的是(c)。
A)数组a和b的长度相同B)a数组长度小于b数组长度
C)a数组长度大于b数组长度D)上述说法都不对
11.下列语句或语句组中,能正确进行字符串赋值的是(d)。
A)char*sp;*sp="right!";B)chars[10];s="right!";
C)chars[10];*s="right";D)char*sp="right!";
12.下列叙述中错误的是(a)。
A)用户所定义的标识符允许使用关键字
B)用户所定义的标识符应尽量做到“见名知意”
C)用户所定义的标识符必须以字母或下划线开头
D)用户定义的标识符中、大、小写字母代表不同标识
13.下列能正确定义且赋初值的语句是(b)。
A)intnl=n2=10;B)charc=32;
C)floatf=f+1.1;D)doublex=12.3E2.5;
14.设有定义:intk=1,m=2;floatf=7;则下列选项中错误的表达式是(c)。
A)k=k>=kB)-k++
C)k%int(f)D)k>=f>=m
15.设有定义:inta=2,b=3,c=4;,则下列选项中值为0的表达式是(a)。
A)(!a==1)&&(!b==0)B)(a<b)&&!c‖1
C)a&&bD)a‖(b+b)&&(c-a)
16.有下列程序段:
intk=0,a=1,b=2,c=3;
k=a<b?b:a;k=k>c?c:k;
执行该程序段后,k的值是(b)。
A)3B)2C)1D)0
17.设变量已正确定义,则以下能正确计算f=n!的程序段是(d)。
A)f=0;B)f=1;
for(i=1;i<=n;i++)f*=i;for(i=1;i<n;i++)f*=i;
C)f=1;D)f=1;
for(i=n;i>1;i++)f*=i;for(i=n;i>=2;i--)f*=i;
18.设有定义:intn1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是(a)。
A)*p=*q;B)p=q;C)*p=&n1;D)p=*q;
(29)若有定义:intx=0,*p=&x;,则语句printf("%d\n",*p);的输出结果是(b)。
A)随机值B)0C)x的地址D)p的地址
19.设fun()函数的定义形式为
voidfun(charch,floatx){…}
则下列对函数fun的调用语句中,正确的是(c)。
A)fun("abc",3.0);B)t=fun('D',16.5);
C)fun('\65',2.8);D)fun(32,32);
20.有下列程序:
#include<stdio.h>
intmain()
{charc1='1',c2='2';
c1=getchar();c2=getchar();putchar(c1);putchar(c2);
return0;}
当运行时输入:a<CR>后,下列叙述正确的是(a)。
A)变量c1被赋予字符a,c2被赋予回车符
B)程序将等待用户输入第2个字符
C)变量c1被赋予字符a,c2中仍是原有字符2
D)变量c1被赋予字符a,c2中将无确定值
21.下列不合法的字符常量是(a)。
A)'\018'B)'\"'
C)'\\'D)'\xcc'
22.表达式3.6-5/2+1.2+5%2的值是(d)。
A)4.3B)4.8
C)3.3D)3.8
23.下列能正确定义字符串的语句是(d)。
A)charstr[]={'\064'};B)charstr="kx43";
C)charstr=";D)charstr[]="\0";
24.下列数组定义中错误的是(b)。
A)intx[][3]={0};
B)intx[2][3]={{l,2},{3,4},{5,6}};
C)intx[][3]={{l,2,3},{4,5,6}};
D)intx[2][3]={l,2,3,4,5,6};
25.下列4个程序中,完全正确的是(b)。
A)#include<stdio.h>B)#include<stdio.h>
intmain();intmain()
{/*programming*/{/*/programming/*/
printf("programming!\n");printf("programming!\n");
return0;}return0;}
C)#include<stdio.h>D)include<stdio.h>
intmain()intmain()
{/*/programming*/*/{/*programming*/
printf("programming!\n");printf("programming!\n");
return0;}return0;}
26.若有定义:floatx=1.5;inta=1,b=3,c=2;则正确的switch语句是(c)。
A)switch(x)B)switch((int)x);
{case1.0:printf("*\n");{case1:printf("*\n");
case2.0:printf("**\n");case2:printf("**\n");
}}
C)switch(a+b)D)switch(a+b)
{case1:printf("*\n");{case1:printf("*\n");
case2+1:printf("**\n");casec:printf("**\n");
}}
27.若各选项中所用变量已正确定义,fun()函数中通过return语句返回一个函数值,下列选项中错误的程序是(a)。
A)intmain()B)floatfun(inta,intb){……}
{……x=fun(2,10);……}intmain()
floatfun(inta,intb){……}{……x=fun(i,j);……}
C)floatfun(int,int);D)intmain()
intmain(){floatfun(intI,intj);
{……x=fun(2,10);……}……x=fun(i,j);……}
floatfun(inta,intb){……}floatfun(inta,intb){……}
28.要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,
下列正确的程序段是(a)。
A)while((ch=getchar())!='N')printf("%c",ch);
B)while(ch=getchar()!='N')printf("%c",ch);
C)while(ch=getchar()=='N')printf("%c",ch);
D)while((ch=getchar())=='N')printf("%c",ch);
29.已定义下列函数:
intfun(int*p)
{return*p;}
fun函数返回值是(b)。
A)不确定的值
C)形参p中存放的值B)一个整数D)形参p的地址值
30.若有说明语句:double*p,a;则能通过scanf语句正确给输入项读入数据的程序段是
(d)。
A)*p=&a;scanf("%1f",p);B)*p=&a;scanf("%f",p);
C)p=&a;scanf("%1f",*p);D)p=&a;scanf("%1f",p);
31.有下列程序段
structst
{intx;int*y;}*pt;
inta[]={l,2},b[]={3,4};
structstc[2]={10,a,20,b};
pt=c;
下列选项中表达式的值为11的是(c)。
A)*pt−>yB)pt−>x
C)++pt−>xD)(pt++)->x
32.设有下列定义和语句
charstr[20]="Program",*p;
p=str;
则下列叙述中正确的是(a)。
A)*p与str[0]的值相等
B)str与p的类型完全相同
C)str数组长度和p所指向的字符串长度相等
D)数组str中存放的内容和指针变量p中存放的内容相同
二、填充题
1.下列程序段运行后的输出结果是【】。
inta,b,c;
a=10;b=20;c=(a%b<1)‖(a/b>1);
printf("%d%d%d\n",a,b,c);
答案:10200
2.下列程序段运行后的输出结果是【】。
charc1,c2;
for(c1='0',c2='9';c1<c2;c1++,c2--)printf("%c%c",c1,c2);
printf("\n");
答案:0918273645
3.下列程序段运行后的输出结果是【】。
charch[]="abc",x[3][4];inti;
for(i=0;i<3;i++)strcpy(x[i],ch);
for(i=0;i<3;i++)printf("%s",&x[i][i]);
printf("\n");
答案:abcbcc
4.下列程序段运行后的输出结果【】。
inta=1,b=2,c=3;
if(c=a)printf("%d\n",c);
elseprintf("%d\n"b);
答案:1
5.下列程序段运行后的输出结果是【】。
charc;intn=100;
floatf=10;doublex;
x=f*=n/=(c=50);
printf("%d%f\n",n,x);
答案:220.000000
6.已知字母A的ASCII码为65,下列程序段运行后的输出结果是
intmain()
{chara,b;
a='A'+'5'-'3';b=a+'6'-'2';
printf("%d%c\n",a,b);
return0;}
答案:67G
7.下列程序段的输出结果是【】。
intmain()
{inta[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;
for(i=0;i<3;i++)s+=a[i][i]+a[i][3-i-1];printf("%d\n",s);
return0;}
答案:30
8.写出下面程序段的输出结果【】
m=0;
for(a=1;a<=3;a++)
for(b=1;b<=3;b++)
if(b%3!=0)break;
elsem++;
printf(“%d”,m);.
答案:0
9.下面程序段的输出结果【】
m=1;
switch(m)
{case1:m++;
case2:m--;
case3:m++;}
printf(“%d”,m);】。【
答案:2
10.写出下面程序的输出结果【】
intn=2;
if(n++%3)printf(“*”);
elseprintf(“#”);
答案:*
11.写出下面程序段的运行结果【】
int*p,x;
x=90;
p=&x;
printf(“%d”,*p);
答案:90
12.下面程序段的运行结果是:【】
inta[10]={1,2,3,4,5,6,7,8,9,10};
int*p,k;
p=a;
for(k=0;k<=9;k++)printf(“%2d”,*(p+9-k));
答案:10987654321
13.charp[][20]={“get”,”put”,”out”};表达式strlen(p[0])+strlen(p[1])+strlen(p[2])的值是答案:9
14.intm[5]={1,2,3,4,5},*p;表达式(p=m+3)-m的值是【】
答案:3
15.charstr[100]=”program”;表达式strlen(str+1)的值是【】
答案:6
三、程序填空
1、下面程序的功能是输出以下图形。
*
***
*****
*******
#include<stdio.h>
intmain()
{
inti,j;
for(i=1;i<=4;i++)
{
for(j=1;j<=4-i;j++)printf(“”);
for(j=1;j<=;j++)printf(“*”);//答案:2*i-1
printf(“\n”);
}
return0;}】【
2、编程求出从键盘上输入的不多于10个整型数的总和。如果不足10个数,则以输入0为结束。
#include<stdio.h>
intmain()
{
inti=1,sum=0,x;for(;;i++)//答案:i<=10
{
printf(“Enter:");
scanf(“%d”,&x);
if(x==0)
_________________
sum+=x;
}
printf(“sum=%d\n“,sum);
return0;}
3、用递归算法编程求某个正整数的阶乘。
#include<stdio.h>
//答案:intfac(intn);
intmain()
{
intn,y;
printf("Inputaintegernumber:");
scanf("%d",&n);
y=fac(n);
printf("%d!=%15d",n,y);
return0;}
intfac(intn)
{
intf;
if(n<0)
printf("n<0,dataerror!");
elseif(n==0)
elsef=
return(f);
}
4、//答案:break;;;//答案://答案:f=1fac(n-1)*n输入三个字符串,找出其中最大者。
#include<stdio.h>#include//答案:<string.h>
intmain()
{charstring[20],str[3][20];
inti;
for(i=0;i<3;i++)gets();//答案:str[i]if(>0)//答案:strcmp(str[0],str[1])
strcpy(string,str[0]);
else
strcpy(string,str[1]);if(>0)//答案:strcmp(str[2],string)
strcpy(string,str[2]);
printf("\nThelargeststring\
is:\n%s\n",string);
return0;}
5、下列函数用简单选择排序对一维整数数组中的数据进行从大到小的排序,请填空。
#include<stdio.h>
#defineSIZE100
intmain()
{
inti,j,l,n,t,a[SIZE];
printf("Inputn:");
scanf("%d",&n);
for(i=0;i<=n-1;i++)
{
printf("Inputdata:");scanf("%d",);//答案:&a[i]
}
for(i=0;i<n-1;i++)
{
l=i;for(j<n;j++)//答案:j=i+1if()l=j;//答案:a[j]>a[l]
if(i!=l){t=a[i];a[i]=a[l];a[l]=t;}
}
for(i=0;i<=n-1;i++)
printf("%d,",a[i]);
printf("\n");
return0;}
四、编程题个a
1.
2.
3.
4.
5.
6.
7.
8.输入a(1~9)、n(1~8),求s=a+aa+aaa+……之值。输入3个实数,按照代数值从小到大的顺序输出这三个数。输入a、b、c的值,计算并输出多项式ax2+bx+c=0的两个根。求Fibonacci数列:1,1,2,3,5,8,…的前20个数。译密码,如Hello,world!,译成密码:Lipps,asvph!。P1405.6、P1415.16.P1686.3、P1696.15从键盘上输入10个实数,保存在数组中,然后再输入一实数,输出该实数在数组中是否存在?如
果存在,输出该实数在数组中下标,不存在,输出–1。(查找使用函数实现)
9.从键盘上输入一行字符串,分别统计字符串中英文字母、空格、数字和其它字符的个数,统计功能用函数实现。
10.编写一个程序,从键盘上输入5个学生的身高和体重以及姓名,将其存放在一个结构数组中,将该结构数组中内容写入一个二进制文件stu.dat中。
11.从10题得到的文件中读出5个学生的身高和体重以及姓名,并存放在一个结构数组中,输出其中身高最高和体重最重的学生的信息(姓名、体重、身高)。