C++期末习题 南财.docx
《C++期末习题 南财.docx》由会员分享,可在线阅读,更多相关《C++期末习题 南财.docx(15页珍藏版)》请在冰豆网上搜索。
C++期末习题南财
1.若有声明"inta=5,b=2;",则表达式"b+=(float)(a+b)/2"运算后b的值为。
2.若有声明"chars[10]="remind";",执行"puts(s+2);"后的输出结果是。
3.若定义:
inta=0,b=1,c=2;则语句printf(“%d\n”,a+b>c&&b!
=c);的输出结果是
4.声明局部变量时若缺省存储类别,该变量的存储类别是。
5.设intm=5;语句while(m==0)printf(“%d”,m-=2);的循环执行的次数是
6.若有程序段“inta[10],*p=a,*q;q=&a[5];”,则表达式q-p的值是。
7.有定义inta,b,c;则“a是偶数”的表达式是。
8.有定义inta,b,c;已经知道a、b、c为正数,则a、b、c构成一个三角形的条件是。
9.设typedefcharCHA;CHAax;则变量ax占用的内存字节数是
10.设有以下宏定义,则执行语句“z=Y(1+2)+1;”后,z的值为
#defineY(n)(n+1)*n
11.若实参是一个数组名,在调用函数时,实参向形参传递的是
12.设inta=10,*p=&a;则执行printf(“%d\n”,*p+a);的结果是
13.设chara[20]={‘‘NANJING”},*p=a+2;,则*(p+2)的值是___________。
14.下面函数要求计算两个整数x,y之和,并通过形参z传回结果值,请填空,
voidadd(intx,inty,)
{*z=x+y;}
15.下面程序的输出结果为。
intk;
char*str[6]={“abcd”,“efgh”,“ijkl”,“mnop”,“qrst”,“uvwx”},**p=str;
printf(“%s\n”,*(p+3));
16.设有定义语句“struct{intx;inty;}d[2]={{1,3},{2,7}};”,则
printf(“%d\n”,d[1].x);的输出是
17.以下程序的输出结果是
chars1[20]=”abcw12d”,s2[]=”123”;
main()
{strcpy(s1,s2);
printf(“%s\n”,s1);}
18.设有char*s[5]={“forturn”,”C++”,”basic”},执行prinf(“%s”,*(s+2));将输出_____________。
1.下列程序片段中,不正确的字符串赋值或初始化方式是()
Achars[]={'a','b','c','d','\0'}
Bchars[10]="abcd";
Cchar*sp;sp="abcd"
Dchars[10];s="abcd";
2.执行下面程序片段的结果是()
inta=100;
do{printf(“%3d”,a--);}while(!
a);
A陷入死循环B不输出任何内容
C99D100
3.下列声明,正确的是()
Achar*a[]={“abc”,“1”}Bchara[][3]={'abc','1'}
Cchara[3][]={'a','1'}Dchara[0][3]={“a”,“1”}
4.下述语句中,可以在字符串s1小于字符串s2时显示"YES"的是()
Aif(s1puts("YES")puts("YES")
Cif(strcmp(s1,s2)<0)Dif(strcmp(s1,s2)>0)
puts("YES")puts("YES")
5.下面程序的输出结果是()
#include
main()
{inta[]={1,2,3,4,5},y,*p=&a[2];
y=*p--;
printf("%d,%d",*p,y);}
A2,2B3,3
C2,3D3,2
6.以下数据类型名的定义中正确的是()
Aenuma={one,two,three};
Benuma{a1,a2,a3};
Cenuma{1,2,3};
Denuma{“one”,“two”,“three”};
7.若有以下定义:
则正确的引用或定义是()
structexample{intx;floaty;}v1;
Aexample.x=10Bexamplev2;v2.x=10;
Cstructv2;v2.x=10;Dstructexamplev2={10};
8.定义如下变量和数组:
intm;inta[2][2]={1,2,3,4};
则下面的输出结果是()
for(m=0;m<2;m++)
printf("%d",a[m][1-m]);
A1,2B2,3
C3,4D7和6
9.以下程序的输出结果是()
main()
{intn=4;
while(n--)printf("%d",--n);
}
A20B31C321D210
10.设x和y均为int型变量,则执行下的循环后,y值为()
for(y=1,x=1;y<=50;y++)
{
if(x>=10)break;
if(x%2==1){x+=5;continue;}
x-=3;
}
A2B4C6D8
11.给出以下定义:
charx[]="abcdefg";
chary[]={'a','b','c','d','e','f','g'};
则正确的叙述为()
A数组x和数组y等价B数组x和数组y的长度相同
C数组x的长度大于数组y的长度D数组x的长度小于数组y的长度
12.若有下面程序段,则正确的输出是()
char*p="break",a[10]={'1','2','3','4'};
printf("%c,%c",p[2],*(a+1));
Ae,2Br,1
Ce,1Dr,2
13.设struct
{charname[10];
intage;
}stu[2]={{“Tom”,25},{“Mary”,26}},*p=stu;
则执行语句printf(“%s%d\n”,p->name,stu[1].age),后输出的结果是()
ATom25BTom26
CMary25DMary26
14.设以下宏定义,则执行语句“z=Y(1+1);”后,z的值为()
#defineY(n)(n+1)*n
A4B6
C8D10
15.设有定义:
doublex[10],*p=x;,以下能给数组x下标为6的元素读入数据的正确语句是()
A.scanf("%f",&x[6]);B.scanf("%lf",x[6]);
C.scanf("%lf",p+6);D.scanf("%lf",p[6]);
16.若有以下定义,则值为4的表达式是( )。
inta[3][4]={{1,2},{3,4},{5,6}},(*p)[4]=a;
A.p[1][1]B.p++,*(p+1)
C.a[2][2]D.*(p+1*4+1)
17.若有如下结构定义:
structstu
{intn,charm[20];}x1;
则下面正确的语句是()
A.scanf(“%d,%c”,x1);B.scanf(“%d,%c”,&x1);
C.scanf(“%d”,x1.n);D.scanf(“%s”,x1.m);
18.下面程序的输出结果是()
#include
main()
{inta[]={1,2,3,4,5},y,*p=&a[2];
y=*p--;
printf("%d,%d",*p,y);}
A.2,2B.3,3C.2,3D.3,2
19.下列语句组中,正确的是()
A.char*s;s="Olympic";B.chars[7];s="Olympic";
C.char*s;s={"Olympic"};D.chars[7];s={"Olympic"};
20.有说明struct{charname[15],sex;intage;floatscore;}stu,*p=&stu;
以下语句中正确的是()。
A.scanf(“%c”,p->sex);B.scanf(“%s”,stu.name);
C.scanf(“%d”,stu.age);D.scanf(“%f”,p->score);
1.程序的运行结果。
voidmain()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
case3:
a++;b++;
}
printf(“\na=%d,b=%d”,a,b);
}
2.下面程序的运行结果第一行:
,第二行:
。
#include
intfun(char*a,char*b)
{intm=0,n=0;
while(*(a+m)!
='\0')m++;
while(b[n])
{*(a+m)=b[n];m++;n++;}
*(a+m)='\0';returnm;
}
voidmain()
{chars1[20]="yes",s2[5]="no";
printf("%d\n",fun(s1,s2));
puts(s1);}
3.程序的运行结果。
intfun(int*s,intt,int*k)
{inti;
*k=0;
for(i=0;iif(s[*k]
returns[*k];}
main()
{inta[10]={6,7,9,-10,30,-4,98,31,-1,7},k,y;
y=fun(a,10,&k);
printf("%d,%d\n",k,y);
}
4.程序的运行结果。
#include
voidfun(intx[],intn,inty[],intm)
{inti=0,j,t;
for(i=0;i{
for(j=0;jif(x[j]>y[i])break;
for(t=n+i;t>j;t--)x[t]=x[t-1];
x[j]=y[i];
}
}
main()
{inta[10]={10,20,30,40,50};
intb[5]={6,27,48,59,80},k;
fun(a,5,b,5);
for(k=0;k<4;k++)
printf("%d",a[k]);
printf("\n");
}
5.程序的运行结果。
#include
intfun(char*s,char*t)
{
while(*s&&*s==*t)s++,t++;
return*s-*t;
}
main()
{charstr1[80],str2[80],k;
gets(str1);
gets(str2);
k=fun(str1,str2);
printf(“%d\n”,k);
}
输入:
ab+12
AB+12
6.以下程序运行时输出结果是。
#include
main()
{inti;
for(i=0;i<5;i++)
switch(i++)
{defult:
printf(“A”);break;
case1:
case2:
printf(“%d”,i++);
case3:
printf(“X”);
break;
}
}
7.程序的运行结果为
voidc_d(inta[],intn,int*c,int*d);
main()
{inti,a[]={2,4,1,6,7,32,45,75,45,90},c,d;
c_d(a,10,&c,&d);
printf("c=%dd=%d",c,d);
}
voidc_d(inta[],intn,int*c,int*d)
{inti;
*c=*d=a[0];
for(i=0;i{if(*cif(*d>a[i])*d=a[i];}
}
8.程序输出结果为。
voidfun(char*s1,char*s2)
{intj;char*p=s1,*q;
while(*p)
{if(*p>='0'&&*p<='9')
{*s2=*p;s2++;
q=p;
while(*q){*q=*(q+1);q++;}
}
elsep++;
}
*s2='\0';
}
main()
{charstr1[20]="A12D34ef5",str2[20];
fun(str1,str2);
printf("%s,%s\n",str1,str2);
}
1.编程计算下面的公式的值,其中n的值由键盘输入
s=1!
+2!
+3!
+…+n!
#include
intmain()
{floats,t;
inti=1,n;
scanf(“%d”,&n);
;
t=1;
while(i<=n)
{t=;
s=s+t;
i=i+1;
}
printf(“%f\n”,s);
}
2.编写程序,计算s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。
#include
main()
{
intn,s,sum=0;
scanf("%d",&n);
for(inti=1;i<=n;i++)
{
____________;
for(intj=1;j<=i;j++)
_____________;
sum+=s;
}
printf("%d",sum);
}
3.以下程序调用invert函数按逆序重新放置a数组中元素的值。
a数组中的值在main函数中读入。
#include
#defineN10
intinvert(int*s,inti,intj)
{intt;
if(i{t=*(s+i);*(s+j)=(s+j);*(s+j)=t;
invert(s,________,j-1);}
}
main()
{inta[N],i;
for(i=0;iinvert();
for(i=0;iprintf("\n");}
4.以下程序的功能是:
统计一个字符串中数字字符"0"到"9"各自出现的次数,统计结果保存在数组count中。
例如,如果字符串为"lenterschar4543123564879ffgh",则统计结果为:
1:
22:
13:
24:
35:
26:
17:
18:
19:
1。
试完善程序以达到要求的功能。
#include
voidfun(char*t,intcount[])
{char*p=t;
while()
{if(*p>='0'&&*p<='9')
count[]++;
p++;
}
}
voidmain()
{chars[80]="1enterschar4543123564879ffgh";intcount[10]={0},i;
fun(s,);
for(i=0;i<10;i++)
if(count[i])printf("%d:
%d",i,count[i]);
}
5.下面的程序将名为f1.dat的文件拷贝到f2.dat中。
#include
main()
{FILE*fp1,*fp2;
charc;
fp1=fopen(“fp1.dat”,”rb”);
fp2=fopen();
c=fgetc(fp1);
while(c!
=EOF)
{fputc(,fp2);
;
}
fclose(fp1);fclose(fp2);
}
6.以下程序的功能是实现:
从键盘上输入一个字符串,把该字符串中的字母变成小写字母,其它字符不变,并写到文件test.dat中。
如输入为abc23XYZ45Az?
,写入文件的内容为:
abc23xyz45az?
请填空。
#include
main()
{FILE*fp;
charstr[80];inti=0;
if((fp=fopen("test.dat",))==NULL)
{printf("can'topenthisfile.\n");exit(0);}
printf("inputastring:
\n");
gets(str);
while(str[i])
{if()
str[i]+=32;
fputc();
i++;
}
fclose(fp);
}
1编写程序找出1000以内的完数,所谓完数是指一个数等于其各因子之和。
例如6是一个完数,因为6=1+2+3。
2用循环控制从键盘输入12个整数并存放在一个4×3的数组中,求各列元素的平均值保存在一个一维数组中,并输出结果。
3.写一个函数实现字符串的逆置。
例:
若参数str原串为:
12AB34xyzCD,则结果为:
DCzyx43BA21,返回值为串长。
(不得用库函数)
函数头如下:
intreverse(char*str)
4.写一个函数从一个字符串中取出其中的数字字符作为结果串。
若参数str为:
C65Aabc?
?
+TdV34+,则取出的结果串参数des为:
6534。
函数头如下:
char*subdig(char*str,char*des)