程序设计习题及答案.docx
《程序设计习题及答案.docx》由会员分享,可在线阅读,更多相关《程序设计习题及答案.docx(29页珍藏版)》请在冰豆网上搜索。
程序设计习题及答案
2011-2012年度第一学期“C语言程序设计”期末考试复习提纲
一、考试题型
序号
题型
每题得分
题量
总分
一
选择题
2
15
30
二
填空
2
5
10
三
程序阅读
4
5
20
四
编程题
10
1
10
15
2
30
二、题例:
(一)项目二数据类型、运算符和表达式
选择题:
1.不合法的C语言整型常量是A。
A.–012B.0x35C.123LD.8E2
2.不合法的C语言实型常量是A。
A.E3B..123C.–6.2E4D.5.0
3.不合法的C字符常量是C。
A.’2’B.’\101’C.’AB’D.’\n’
4.下列四组选项中,均是不合法的用户标识符的选项是B。
A.WP_0do
B.b-agotoint
C.floatla0_A
D.-123abcTEMP
5.下列四组选项中,均是合法转义字符的选项是A。
A.’\”’’\\’’\n’
B.’\’’\017’’\”’
C.’\018’’\f’’xab’
D.’\\0’’\101’’xlf’
6.定义三个变量a、b、c,并分别赋初值为5。
能实现该功能的语句是C。
A.inta=b=c=5;B.inta,b,c=5;
C.inta=5,b=5,c=5;D.inta=5;b=5;c=5;
7.若x,y,t均为int类型,则执行语句x=y=3;t=++x||++y;后,y的值是D。
A.不定值B.4C.1D.3
8.若x、i、j、k都是int型变量,则计算下面表达式后,x的值为C。
x=(i=4,j=16,k=32)
A.4B.16C.32D.52
9.设有说明:
charw;intx;floaty;doublez;则表达式w*x+z-y值的数据类型为D。
A.floatB.charC.intD.double
10.设以下变量均为int类型,则值不等于7的表达式是C。
A.(x=y=6,x+y,x+1)B.(x=y=6,x+y,y+1)
C.(x=6,x+1,y=6,x+y)D.(y=6,y+1,x=y,x+1)
填空题:
1.若有定义intm=5,y=2;,则计算表达式y+=y-=m*=y后的y值是-16。
2.若s是int型变量,且s=6,则表达式s%2+(s+1)%2的值为1。
3.若a是int型变量,则表达式(a=4*5,a*2),a+6的值为26。
4.若x和a均是int型变量,则计算表达式x=(a=4,6*2)后的x值为12,计算表达式x=a=4,6*2后的x值为4。
5.若a是int型变量,则计算表达式a=25/3%3后a的值为2。
6.若x和n均是int型变量,且x和n的初值均为5,则计算表达式x+=n++后x的值为10,n的值为6。
7.若有定义:
charc=‘\010’;则变量c中包含的字符个数为1。
8.若有定义:
intx=3,y=2;floata=2.5,b=3.5;则下面表达式的值为1。
(x+y)%2+(int)a/(int)b
9.已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=’a’+’8’-’3’的值为102。
阅读题:
(写出程序运行结果)
1.#include
main()
{intx=97;chary=’b’;
printf(“%c,%d ”,x,y) ;
}
答:
a,98
2.#include
main()
{intx=6;
x+=x-=x*x ;
printf(“x=%d\n”,x) ;
}
答:
x=﹣60
3.#include
main()
{intx;
(x=4*5,x*5),x+25;
printf(“x=%d\n”,x) ;
}
答:
x=20
4.#include
main()
{inti=1,j;
j=-i++;
printf(“%d\n”,j) ;
}
答:
﹣1
编程题:
(顺序结构编程)
1.输入华氏温度,输出摄氏温度。
C=5/9*(F-32)
#include
main()
{
floatC,F;
printf("请输入华氏温度F:
");
scanf("%f",&F);
C=5.0/9*(F-32);
printf("%.2f℉=%.2f℃\n",F,C);
}
2.输入底面半径r和高度h,计算并输出圆柱体的体积v。
v=πr2h(π取3.14,v计算结果保留到小数点后两位)
#include
#definePI3.14
main()
{
floatr,h,V;
printf("请输入底面半径r和高度h:
");
scanf("%f%f",&r,&h);
V=PI*r*r*h;
printf("圆柱体的体积V=%.2f\n",V);
}
3.从键盘输入一扇形的半径和角度,求扇形的面积和周长。
#include
#definePI3.14
main()
{
floatr,n,S,C;
printf("请输入扇形的半径r和角度n:
");
scanf("%f%f",&r,&n);
S=(n*PI*r*r)/360;
C=(n*PI*r)/180+2*r;
printf("扇形的面积S=%.2f,周长C=%.2f\n",S,C);
}
4.从键盘输入学生的三门考试成绩,计算并输出平均成绩。
#include
main()
{
floata,b,c,avg;
printf("请输入学生三门考试的成绩:
");
scanf("%f%f%f",&a,&b,&c);
avg=(a+b+c)/3;/*求平均成绩*/
printf("平均成绩为:
%.2f\n",avg);
}
(二)项目三C语言程序控制结构
选择题:
1.下列for循环的循环次数是 D。
inti=0,j;
for(j=10;i=j=10;i++,j--)printf(”ok”);
A.0次B.1次C.10次D.无限次
2.下列for循环的循环次数是 B 。
inti=0,j=0;
for(;!
j&&i<=5;i++)j++;
A.5次B.1次C.无限D.6次
3.语句for(i=0,j=0;i<=100;i++)j=j+i;运行后j的值为D 。
A.500B.100 C.5000D.5050
4、 有以下程序:
#include
main()
{char c;
while((c=getchar())!
='?
') putchar(--c); }
程序运行时,如果从键盘输入:
Y?
N?
<回车>,则输出结果为D。
A.YB.XYC.YXD.X
5.下面的程序段执行时,若从键盘输入5,则输出为 D 。
inta;
scanf(”%d”,&a);
if(a-->5)printf(”%d\n”,a++);elseprintf(”%d\n”,a);
A.7B.6C.5D.4
6.若inta=5;则执行下列语句后打印的结果为 A 。
do
{printf(“%2d\n”,a--);
}while(!
a);
A.5 B.不打印任何结果 C.4 D.陷入死循环
7.语句for(i=0,j=0;i<=100;i++)j=j+i;运行后j的值为 D 。
A.500 B.100 C.5000 D.5050
8.下面程序段的运行结果是C。
intn=0;
while(n++<=2);printf(“%d”,n);
A.2B.3C.4D.有语法错误
9.若i为整型变量,则以下循环执行次数是B。
for(i=2;i==0;)printf(“%d”,i--);
A.无限次B.0次C.1次D.2次
10.执行语句for(i=1;i++<4;);后变量i的值是C。
和第八题相似
A.3B.4C.5D.不定
填空题:
1、若输入字符串:
abcdef<回车>,则以下while循环体将执行____0____次。
While((ch=getchar())==’d’)printf(“**”);
2、下面程序段的运行结果是___a=-5______。
i=1;a=0;s=1;
do{a=a+s*i;s=-s;i++;}while(i<=10);
printf(“a=%d”,a);
3.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束
循环。
请填空。
intn=0,c;
c=getchar();
while(c!
=’\n’)
{
if(c>=’0’&&c<=’9’)n++;
c=getchar();
}
4.以下程序中,while语句的循环次数是无限次。
#include
main()
{inti=0;
while(i<10)
{if(i<1)continue;
if(i==5)break;
i++;
}
printf(“%d”,i);
}
5.下面程序的功能是用“辗转相除法”求两个正整数的最大公约数。
请填空。
#include
main()
{intr,m,n;
scanf(“%d%d”,&m,&n);
if(mr=m%n;
while(r){m=n;n=r;r=__m%n__;}
printf(“%d\n”,n);
}
6.执行以下程序后,输出“#”的个数是___6____。
#include
main()
{inti,j;
for(i=1;i<5;i++)
for(j=2;j<=i;j++)
putchar(‘#’);
}
阅读题:
(写出程序运行结果)
1.#include
main()
{inty=10;
do{y--;
}while(--y);
printf(“%d\n”,y--);
}
答:
0
2. #include
main()
{int x=15;
while(x>10&&x<50)
{x++;
if(x/3){x++;break;}
else continue;
}
printf(“%d\n”,x);
}
答:
17
3.#include
main()
{inta=1,b=0;
for(;a<3;a++)
switch(a++)
{case1:
b--;break;
case2:
b++;
case3:
b+=3;
}
printf(“%d\n”,b);
}
答:
﹣1
4.#include
main()
{ints,i;
for(s=0,i=1 ;i<3 ;i++,s+=i) ;
printf(“%d\n”,s);
}
答:
5
编程题:
1.计算s=1+1/2+1/3+……+1/n
#include
main()
{
inti,n;
floats;
scanf("%d",&n);
for(s=0.0,i=1;i<=n;i++)
s=s+1.0/(i);
printf("s=%f\n",s);
}
2.求和:
从1加到100
#include
main()
{
intn,s;
for(s=0,n=1;n<=100;n++)
s=s+n;
printf("s=%d\n",s);
}
3.如果0#include
main()
{
intn,i;
longs;
printf("请输入整数n:
");
scanf("%d",&n);
if(n>0&&n<17)
{
for(i=2,s=1;i<=n;i++)
s=s*i;
printf("%d!
=%d\n",n,s);
}
elseprintf("输入错误!
请输入1-16中的整数!
\n");
}
4.如果0〈n<8,请计算s=1!
+2!
+3!
+……+n!
,并打印输出计算结果s。
(注:
n!
=1*2*3*……*n)
#include
main()
{
intn,i,s,fact;
printf("请输入整数n:
");
scanf("%d",&n);
if(n>0&&n<8)
{
for(i=1,s=0,fact=1;i<=n;i++)
{
fact=fact*i;/*求n!
*/
s=s+fact;/*求s=1!
+2!
+3!
+……+n!
*/
}
printf("s=%d\n",s);
}
elseprintf("输入错误,请输入1-7中的整数!
\n");
}
5.从键盘输入一个大于1的整数,输入是否为素数,是,则输出“YES”,否则输出“NO”
#include
main()
{
intn,i;
printf("请输入整数n:
");
scanf("%d",&n);
if(n>1)
{
for(i=2;iif(n%i==0)break;
if(i==n)printf("YES\n");
elseprintf("NO\n");
}
elseprintf("输入错误,请输入大于1的整数!
\n");
}
(三)项目四数组
选择题:
1.若二维数组a有m列,则在a[i][j]前的元素个数为____B____.(注意列)
A.j*m+IB.i*m+jC.i*m+j-1D.i*m+j+1
2.以下对二维数组a的正确说明是____C____.
A.inta[3][];B.floata(3,4);C.doublea[1][4];D.floata(3)(4);
3.若有说明:
intx[][3]={1,3,5,7,9,11};,则x数组的行数为___A____。
A.2B.3C.4D.无确定值
4.若有以下定义
inta[]={1,2,3,4,5,6,7};
charc1=’b’,c2=’2’;
则数值不为2的表达式是_____A_____。
A.c2-0B.a[1]C.’d’-c1D.a[‘3’-c2]
5.以下程序的输出结果是_____B______。
main()
{inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
for(i=0;i<3;i++)
for(j=0;j<=i;j++)
s+=a[i][j];
printf(“%d\n”,s);
}
A.18B.19C.20D.21
6.有两个字符数组a、b,则以下正确的输入语句是___B____.
A.gets(a,b);B.scanf(“%s%s”,a,b);
C.scanf(“%s%s”,&a,&b);D.gets(“a”),gets(“b”);
7.当执行下面的程序时,如果输入ABC,则输出结果为____A_____。
#include
#include
main()
{charss[10]=“1,2,3,4,5”;
gets(ss);strcat(ss,”6789”);printf(”%s\n”,ss);
}
A.ABC6789B.BC67C.12345ABC6D.ABC456789
8.判断字符串s1是否大于字符串s2,应当使用___D____.
A.if(s1>s2)B.if(strcmp(s1,s2))
C.if(strcmp(s2,s1)>0)D.if(strcmp(s1,s2)>0)
填空题:
1.下面程序以每行4个数据的形式输出a数组,请填空。
#defineN20
main()
{inta[N],i;
for(i=0;ifor(i=0;i{if(___i%4==0____)__printf(“\n”);_
printf(“%3d”,a[i]);
}
printf(“\n”);
}
2.若有定义:
inta[3][4]={{1,2},{0},{4,6,8,10}};
则初始化后,a[1][2]的初值是___0____,a[2][1]的初值是____6___。
3.下面程序的运行结果是___7,3_____。
main()
{inta[10]={10,2,-13,21,11,67,-78,8,90,-53};
inti,x=0,y=0;
for(i=0;i<10;i++)
if(a[i]>0)x++;
elsey++;
printf(“%d,%d\n”,x,y);
}
4.下面程序的功能是:
输入50个数,按逆序输出,请填空。
main()
{inta[50],i;
for(i=0;i<50;i++)
scanf(“%d”,&a[i]);
for(__i=49__;i>=0;_i--__)
printf(“%4d”,a[i]);
}
5.下面程序可求出矩阵a的主对角线上的元素之和,请填空。
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);
}
6.下面程序的功能是在三个字符串中找出最小的,请填空。
#include
#include
main()
{chars[20],str[3][20];
inti;
for(i=0;i<3;i++)gets(str[i]);
strcpy(s,__str[0]__);
if(strcmp(str[1],s)<0)strcpy(s,str[1]);
if(strcmp(str[2],s)<0)strcpy(s,str[2]);
printf(“%s\n”,__s__);
}
阅读题:
1.#include
main()
{inta[10],i;
for(i=9;i>=0;i--)a[i]=10-i;
printf(“%d%d%d\n”,a[2],a[5],a[8]);
}
答:
852
2.#include
main()
{inta[3][3]={1,2,3,4,5,6,7,8,9},i,s=0;
for(i=0;i<=2;i++)
s=s+a[i][i];
printf(“s=%d\n”,s);
}
答:
s=15
3.#include
main()
{inta[4][4]={{1,3,5},{2,4,6},{3,5,7}};
printf(“%d%d%d%d\n”,a[0][3],a[1][2],a[2][1],a[3][0]);
}
答:
0650
4.#include
#include
main()
{chars[][10]={“a”,”good”,”world”};
strcat(s[0],s[1]);
printf(“%s”,s[0]);
}
答:
agood
5.#include
main()
{chars[]=“abcdef”;
s[3]=’\0’;
printf(“%s\n”,s);
}
答:
abc
编程题:
1.从键盘输入10个整数,存入数组a,从数组a的第二个元素起,分别将后项减前项之差存入数组b,按每行3个元素输出数组b。
#include
main()
{
inta[10],b[10],i,j;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0,j=0;i<9;i++,j++)
{
b[j]=a[i+1]-a[i];
printf("%5d",b[j]);
if(i%3==2)printf("\n");
}
}
2.输入一个字符串,将其中的大写字符转换成小写,其它的不做转换,然后输出得到的字符串。
#include
main()
{
inti;
chars[100];
scanf("%s",s);
for(i=0;s[i]!
='\0';i++)
{
if(s[i]>='A'&&s[i]<='Z')
s[i]=s[i]+32;
}
for(i=0;s[i]!
='\0';i++)
printf("%c",s[i]);
printf("\n");
}
3.读入20个整数,统计非负数个数,并计算非负数之和
#include
main()
{
inta[20],i,n,s=0;
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
if(a[i]