《C程序设计》期末复习练习题及参考答案3.docx
《《C程序设计》期末复习练习题及参考答案3.docx》由会员分享,可在线阅读,更多相关《《C程序设计》期末复习练习题及参考答案3.docx(17页珍藏版)》请在冰豆网上搜索。
《C程序设计》期末复习练习题及参考答案3
《C程序设计》期末复习练习题及参考答案(3)
《C程序设计》期末复习练习题及参考答案(3)
一、单项选择题
1.若有定义int(*p)[4],则标识符p是一个。
A)指向整型变量的指针变量
B)指向函数的指针变量
√C)指向有四个整型元素的一维数组的指针变量
D)指针数组名,有四个元素,每个元素均为一个指向整型变量的指针
2.下列对字符串的定义中,错误的是:
。
√A)charstr[7]="FORTRAN";
B)charstr[]="FORTRAN";
C)char*str="FORTRAN";
D)charstr[]={'F','O','R','T','R','A','N',0};
3.针对下面程序段,下面哪些说法是正确的?
#include
voidSwap(int*x,int*y);
main()
{inta,b;
a=5;
b=9;
Swap(&a,&b);
printf("a=%d,b=%d",a,b);
}
voidSwap(int*x,int*y)
{int*pTemp;
*pTemp=*x;
*x=*y;
*y=*pTemp;
}
A)程序运行结果为乱码;
B)程序运行后将导致程序崩溃;
C)程序编译时出错导致程序无法运行;
√D)程序执行了危险的操作;
4.已知学生记录描述为:
structstudent
{intno;
charname[20];
charsex;
struct
{intyear;
charmonth[15];
intday;
}birth;
};
structstudents;
设变量s中的生日是1984年11月11日,下列对生日的正确赋值方式是_____
A)s.birth.year=1984;s.birth.month="11";s.birth.day=11;
B)s.birth.year=1984;s.birth.month=11;s.birth.day=11;
√C)s.birth.year=1984;strcpy(s.birth.month,"11");s.birth.day=11;
D)s.birth.year=1984;strcpy(s.birth.month,11);s.birth.day=11;
5.要使下面程序的输出1,2,34,则从键盘输入的数据格式应为。
#include
main()
{chara,b;
intc;
scanf("%c%c%d",&a,&b,&c);
printf("%c,%c,%d\n",a,b,c);
}
A)1234B)1,2,34C)’1’,’2’,34√D)1234
6.以下选项中为合法整型常量的是()。
A)-080√B)-80C)-8e1.0D)-80.0e
7.若x,i,j和k都是int型变量,则计算表达式x=(i=4,j=16,k=32)后,x的值为()。
A)4B)16√C)32D)52
8.下列程序执行后的输出结果是()。
#include
voidfunc(int*a,intb[])
{b[0]=*a+6;}
main()
{inta,b[5];
a=0;b[0]=3;
func(&a,b);printf("%d\n",b[0]);
}
√A)6B)7C)8D)9
9.设有定义chargrade='A';则以下给出的程序运行结果或说法正确的是()。
switch(grade)
{case'A':
case'B':
case'C':
printf(">=60pass!
\n");
case'D':
printf("<60\n");
default:
printf("error!
\n");
}
A)>=60pass!
B)<60C)error!
√D)以上结果都不正确
10.以下程序执行后的输出结果是()。
#include
intmain()
{inti=1,j=1,k=2;
if((j++||k++)&&i++)
printf("%d,%d,%d\n",i,j,k);
return0;
}
A)1,1,2B)2,2,1√C)2,2,2D)2,2,3
11.执行完循环语句for(i=1;i<10;i++);后,以下关于变量i的值及循环体的执行次数的说法正确的是()。
A)i的值是9,循环体执行9次B)i的值是9,循环体执行10次
√C)i的值是10,循环体执行9次D)i的值是10,循环体执行10次
12.以下程序的运行结果是()。
#include
intmain()
{intm,n;
for(m=0,n=10;mprintf("%d,%d\n",m,n);
return0;
}
A)6,7B)7,6√C)9,7D)7,9
13.以下程序的运行结果是()。
#include
intmain()
{inti;
inta[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
printf("%d",a[2-i][i]);
return0;
}
A)159√B)753C)357D)591
14.下列可用于C语言用户标识符的一组是()。
A)void,define,WORD√B)a3_3,_123,Car
C)For,-abc,IFCaseD)2a,DO,sizeof
15.若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为()。
.
A)a<>0B)!
aC)a=0√D)a!
=0
16.以下程序的输出结果是()。
#include
voidmain()
{intx=10,y=10;
printf("%d%d\n",x--,--y);
}
A)99√B)109C)910D)1010
17.若有定义:
char*name[]={"Followme","BASIC","GreatWall","FORTRAN"};,则name[2]的值是()。
A)字符'G'B)字符串"GreatWall"
√C)字符串"GreatWall"的首地址D)不确定
18.有以下程序,程序执行后的输出结果是()。
#include
voidfun(char*p)
{char*q=p;
while(*q!
='\0')
{(*q)++;
q++;
}
}
intmain()
{chara[]={"Program"},*p;
p=&a[3];
fun(p);
printf("%s\n",a);
return0;
}
√A)ProhsbnB)PrphsbnC)ProgsbnD)Program
19.下面列出的C语言提供的合法的数据类型关键字是()。
A)Double√B)shortC)integerD)Char
20.字符(char)型数据在微机内存中的存储形式是()。
A)反码B)补码C)EBCDIC码√D)ASCII码
21.设inta=12,则执行完语句a+=a-=a*a后,a的值是()。
A)552B)264C)144√D)-264
23.能够完成如下函数计算的程序段是()。
-1x<0
Y=0x=0
1x>0
A)y=1;√B)if(x>=0)
if(x!
=0)if(x>0)y=1;
if(x>0)y=1;elsey=0;
elsey=0;elsey=-1;
C)y=0;D)y=-1;
if(x>=0)if(x>0)y=1;
if(x>0)y=1;elsey=0;
elsey=-1;
24.有如下程序
#include
voidmain()
{intx=1,a=0,b=0;
switch(x)
{
case0:
b++;
case1:
a++;
case2:
a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
该程序的输出结果是()。
√A)a=2,b=1B)a=1,b=1C)a=1,b=0D)a=2,b=2
25.下面程序的输出结果是()。
#include
voidmain()
{inti;
for(i=1;i<6;i++)
{if(i%2!
=0){printf("#");continue;}
printf("*");
}
printf("\n");
}
√A)#*#*#B)#####C)*****D)*#*#*
26.C语言中while和do-while循环的主要区别是()。
.
√A)do-while的循环体至少无条件执行一次
B)while的循环控制条件比do-while的循环控制条件严格
C)do-while允许从外部转到循环体内
D)do-while的循环体不能是复合语句
27.当对两个字符串进行比较时,应该使用的函数是()。
A)strcat√B)strcmpC)strcpyD)strlen
28.以下程序的运行结果是()。
#include
voidmain()
{int*p,a=1;
p=&a;
*p=10;
printf("%d\n",a);
}
A)1√B)10C)不能确定D)11
29.设有定义inta[]={1,5,7,9,11,13},*p=a+3;则*(p-2),*(a+4)的值是()。
√A)511B)19C)59D)有错误
30.若i为整型变量,则以下循环的次数是()。
for(i=2;i==0;)printf(“%d”,i--);
A)无限次√B)0次C)1次D)2次
二、填空题
1.C语言标识符由___字母______、____数字______和______下划线_____来构造。
2.设有定义:
FILE*fp;,请将以下打开文件的语句补充完整,以便可以向文本文件readme.txt的最后续写内容。
fp=fopen("readme.txt",“a”);
3.若有说明和语句:
inta=25,b=60;b=++a;则b的值是 26 。
4.若intx=5;while(x>0)printf(“%d”,x--);的循环执行次数为 5 。
5.若有inta[5],*p=a;则p+2表示第 三 个元素的地址。
6.若有说明和语句:
inta=5,b=6,y=6;b-=a;y=a++则b和y的值分别是 1 、 5 。
7.已知整型变量a=3,b=4,c=5,写出逻辑表达式a||b+c>c&&b-c的值是 1 。
8.在C语言中,变量的存储类别有四种,它们是:
自动(auto)、寄存器(register)、静态(static)、外部(extern)。
9.如果一个变量在某个范围内是有效的,该范围就称为变量的作用域。
自动(auto)存储类别的局部变量,其作用域为:
从定义的位置起,到函数体(或复合语句)结束为止
10.设有定义inta,b;写出满足条件“a是3的倍数,或者b不是5的倍数”的逻辑表达式:
a%3==0||b%5!
=0。
三、程序运行结果分析题
1.
main()
{inti,j,x=0;
for(i=0;i<2;i++)
{
x++;
for(j=0;j<3;j++)
{
if(j%2)continue;
x++;
}
x++;
}
printf("x=%d\n",x);
}
程序运行结果是:
x=6
2.
#include
structdate
{intyear;
intmonth;
intday;
};
structdatefunc(structdatep)
{p.year=2000;
p.month=5;
p.day=22;
returnp;
}
main()
{structdated;
d.year=1999;
d.month=4;
d.day=23;
printf("%d/%d/%d\n",d.year,d.month,d.day);
d=func(d);
printf("%d/%d/%d\n",d.year,d.month,d.day);
}
程序的运行结果是:
1999/4/23
2000/5/22
3.
#include
main()
{
chara[]="Hello";
char*p=NULL;
for(p=a;p{
printf("%s\n",p);
}
}
程序运行结果是:
Hello
ello
llo
lo
o
4.
#include
intfun(intx,inty)
{returnx>y?
x:
y;}
main()
{inta=2,b=5,c=8;
printf("%d\n",fun(fun(a+c,b),a-c));
}
程序运行结果是:
10
5.
#include
voidFunc(void);
main()
{inti;
for(i=0;i<5;i++)
{Func();}
}
voidFunc(void)
{staticinta=1;
intb=2,c;
c=a+b;
a++;
b++;
printf("%d\n",c);
}
程序运行结果是:
3
4
5
6
7
6.当运行以下程序时,从键盘输入如下内容并回车:
ADescriptor,则下面程序的运行结果是v0=13,v1=4,v2=12。
#include
intmain()
{charc;
intv0=1,v1=0,v2=0;
do
{switch(c=getchar())
{
case'a':
case'A':
case'e':
case'E':
case'i':
case'I':
case'o':
case'O':
case'u':
case'U':
v1+=1;
default:
v0+=1;v2+=1;
}
}while(c!
='\n');
printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);
printf("\n");
return0;
}
7.当运行以下程序时,运行结果是_______。
#include
voidfun(char*t,char*s)
{while(*t!
=0)t++;
while((*t++=*s++)!
=0);
}
intmain()
{charss[3][20]={"I","don’t","know"};
inti;
for(i=2;i>0;i--)
fun(ss[i-1],ss[i]);
for(i=0;i<3;i++)
printf("%s\n",ss[i]);
return0;
}
Idon’tknow
don’tknow
know
8.当运行以下程序时,运行结果是___1,5,3,8____。
#include
intmain()
{inta[][4]={{2,9,1,8},{8,9,7,2},{4,3,2,1},{1,5,3,5}},i,j,k,t;
for(i=0;i<4;i++)
{for(j=0;j<3;j++)
{for(k=j+1;k<4;k++)
if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}
}
}
for(i=0;i<4;i++)printf("%d,",a[i][i]);
return0;
}
9.有以下程序
#include
#include
typedefstruct{charname[9];charsex;floatscore[2];}STU;
voidf(STUa)
{STUb={"Zhao",′m′,85.0,90.0};inti;
strcpy(a.name,b.name);
a.sex=b.sex;
for(i=0;i<2;i++)a.score[i]=b.score[i];
}
main()
{STUc={"Qian",′f′,95.0,92.0};
f(c);
printf("%s,%c,%2.0f,%2.0f\n",c.name,c.sex,c.score[0],c.score[1]);
}
程序的运行结果是_____Qian,f,95,92_______。
四、程序填空题
阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。
1.先按学号由小到大的顺序从键盘输入学生的学号和成绩,然后从键盘任意输入一个学生的学号,查找并打印具有该学号的学生的成绩。
#include
#defineARR_SIZE40
intBinSearch(longa[],intn,longx);
main()
{floatscore[ARR_SIZE];
intn,i,pos;
longnum[ARR_SIZE],x;
printf("Pleaseentertotalnumber:
");
scanf("%d",&n);
printf("Pleaseenterthenumberandscore:
\n");
for(i=0;i{
scanf("%ld%f",&num[i],&score[i]);
}
printf("Pleaseenterthesearchingnumber:
");
scanf("%ld",&x);
pos=BinSearch(num,n,x);
if(pos!
=-1)
{
printf("score=%4.0f\n",score[pos]);
}
else
{
printf("Notfound!
\n");
}
}
intBinSearch(longa[],intn,longx)
{
intlow,high,mid;
low=0;
high=n-1;
while(low<=high)
{
mid=(high+low)/2;
if(x>a[mid])
{
low=mid+1;
}
elseif(x{
high=mid-1;
}
else
{
return(mid);
}
}
return(-1);
}
2.输入一行字符,统计其中的英文字符、数字字符、空格及其它字符的个数。
#include
#include
#defineARR_SIZE80
main()
{
charstr[ARR_SIZE];
intlen,i,letter=0,digit=0,space=0,others=0;
gets(str);
for(i=0;str[i]!
='\0';i++)
{
if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z')
letter++;
elseif(str[i]>='0'&&str[i]<='9')
digit++;
elseif(str[i]=='')
space++;
elseothers++;
}
printf("Englishcharacter:
%d\n",letter);
printf("digitcharacter:
%d\n",digit);
printf("space:
%d\n",space);
printf("othercharacter:
%d\n",others);
}
3.以下程序为求出并打印1000以内所有水仙花数,请补齐代码。
所谓水仙花数是指一个3位正整数,其各位数字的立方和等于该正整数。
例如407=4*4*4+0*0*0+7*7*7,故407是一个水仙花数.
#include
intmain()
{
intx,y,z,