资源描述
《C程序设计基础及实验》课程期中考试试卷参考答案
试题一、单选题(每小题2分,共20分)
1. 以下正确的字符常量是______。
A.’\412’
B.255
C.’\08’
D.’\’
【解答】
A. 八进制412超出了8位二进制所能表示的范围03ff;
B. 255是一个合法的整数,可以表示一个字节的值;
C. 8不是一个合法的八进制数字;
D. \是转义字符,\’表示单个单引号字符本身,所以。字符常量缺少右单引号。
2. 假设有定义:float x=16/5/2.0, y=16/5.0/2; 则 x 和 y 的值分别为______。
A.1.5 1.6
B.1.6 1.6
C.1.5 1.5
D.1.6 1.5
【解答】
16/5/2.0 è (16/5)/2.0 è 3/2.0 è 1.5
16/5.0/2 è (16/5.0)/2 è 3.2/2 è 1.6
3. 下列语句中, _____ 将输出%d。
A.printf(“%d”);
B.printf(“%%d”);
C.printf(“\%d”);
D.printf(“%%%d”)
【解答】
A.%d表示输出十进制整型量,但缺少相应的输出表达式,故输出结果是随机值;
B.%%表示输出一个%符号本身,d是普通字符,原样输出,所以输出%d;
C.\%表示符号%,%d表示输出十进制整型值,故输出结果是随机值;
D.%%表示输出符号%本身,%d表示输出十进制整型值。
4. 下列程序段输出结果为 _____。
int x=1, y=012;
printf(“%d”,y*x++);
A.12
B.10
C.20
D.24
【解答】
x++表达式的值是1,y*x++ è y*1 è y è 012 è 10
5. 下列程序段输出结果为 _____。
int a=1,b=2,c=2,t;
while(a<b<c) { t=a; a=b; b=t; c--; }
printf(“%d,%d,%d”,a,b,c);
A.1,2,0
B.2,1,0
C.1,2,1
D.2,1,1
【解答】
a=1,b=2,c=2
(1) 表达式a<b<c è 1<2<2 è 1 < 2 è 1条件成立,则执行循环体,结果为:a=2,b=1,c=1
(2) 表达式a<b<c è 2<1<1 è 0 < 1 è 1条件成立,则执行循环体,结果为:a=1,b=2,c=0
(3) 表达式a<b<c è 1<2<0 è 1 < 0 è 0条件不成立,循环结束。
6. 在下图中,阴影部分区域可用表达式_______来表示。
//// ////
//// ////
X
a b c
A.(x<=a)&&(x>=b)&&(x<=c)
B.(x<=a)||(b<=x<=c)
C.(x<=a)||(x>=b)&&(x<=c)
D.(x<=a)&&(b<=x<=c)
【解答】
(x<=a)|| ((x >=b) && (x <= c)) è (x<=a)|| (x>=b) && (x <= c)
7. 下列程序段输出结果为 _____。
int x = -3, y = 2;
if(x>y);
x = -x;
if(x<y)
y = -y;
printf("x=%d,y=%d\n", x, y);
A.x=3,y=-2
B.x=3,y=2
C.x=-3,y=2
D.x=-3,y=-2
【解答】x=3,y=2;
请注意:if(x>y);
8. 对于循环while(!e) 语句,!e等价于_____。
A.e==0
B.e!=0
C.e==1;
D.e!=1
【解答】
!e
e==0
e!=0
e==1
e!=1
e为0
1
1
0
0
1
e 为非0
0
0
1
0/1
0/1
9. 循环 for(i=0, j=5; ++i!=--j; ) printf(“%d %d”, i, j); 将执行_____。
A.6次
B.3次
C.0次
D.无限次
【解答】
(1) i=0, j=5: ++i è 1 , --j è 4, i=1,j=4, 1 != 4成立;打印;i=1, j=4;
(2) i=1,j=4: ++I è 2 , --j è 3, i=2,j=3, 2 != 3成立;打印;i=2, j=3;
(3) i=2,j=3: ++I è 3, --j è 2, I = 3, j=2, 3 != 2成立;打印;i=3,j=2;
(4) ……
10. 下列程序段执行后s值为_____。
int i=5, s=0;
do if (i%2) continue; else s+=i; while (--i);
A.15
B.9
C.6
D.以上均不是
【解答】
(1) I=5,s=0: i%2è5%2è1成立:continue;--iè4, i=4;
(2) I=4,s=0: i%2è4%2è0不成立:s=0+4=4;--iè3, i=3
(3) I=3,s=4: i%2è3%2è1成立:continue;--iè2, i=2
(4) I=2,s=4: i%2è2%2è0不成立:s=4+2=6; --iè1,i=1
(5) I=1,s=6: i%2è1%2è1成立:continue;--iè 0
试题二、填空题(每小题2分,共20分)
1. 表达式 1+4/5+15<7+4%5+(8,10) 的值为 _____。
【解答】
1+(4/5)+15<7+4%5+(8,10)
è 1+0+15<7+4%5+(8,10)
è1+15<7+4%5+(8,10)
è16<7+4%5+(8,10)
è16<7+4+(8,10)
è16<11+(8,10)
è16<11+10
è16<21
è1
2. 表达式 !!5 的值为 _____。
【解答】
!!5 è !(!5) è!0è1
3. 表达式 ~(10<<1)&4 的值为______。
【解答】
10: 00001010
10<<1: 00010100
~(10<<1): 11101011
4: 00000100
&----------------------------------
00000000 即 0
4. 假设有定义:int x=10;则表达式 0<=x<=9 的值为 _____。
【解答】
0<=x<=9 è (0<=x)<=9 è (0<=10) <=9 è 1 <= 9 è 1
5. 下列 for循环语句将输出: 0 1 2 0 1 2 0 1 2.
for( i=1; i<=9; i++ ) printf("%2d", _______);
【解答】 (i-1)%3
6. 对于定义: int m=5, y=2; 当计算表达式y+=y-=m*=y 后,y的值为_____。
【解答】
y+=y-=m*=y ó y += (y -= (m *=y))
先计算m*=y: 由于m=5, y=2, 所以:m=m*y=5*2è10
再计算y-=10: 由于y=2,所以:y = y-10=2-10è -8
最后计算y += -8: 由于y=-8,所以:y = y+(-8)=(-8)+(-8)è-16
7. 对于char c; 若已知其值为小写字母, 则将其转换为相应大写字母的表达式为_____。
【解答】
c-‘a’+’A’
8. 下列语句的输出结果为_____。
printf("%d#%x#", 027, 27);
【解答】
23#1b#
9. 已知字符’a’的ASCII码为97,则下列语句的输出结果为_____。
printf("%c#%d#",98,’c’);
【解答】
b#99#
10. 下列程序段将输出_____。
unsigned char x=255,y=’\1’;
switch(!!x) {
case 0: printf("*0*#");break;
case 1:
switch(y) {
case 0: printf("*1*#");break;
case 1: printf("*2*#");break;
}
default: printf("*3*#");
}
【解答】
*2*#*3*#
试题三、程序阅读题(每小题6分,共30分)
1. 下列程序将输出_____。
#include <stdio.h>
void swap(int x, int y)
{
int t;
t=x; x=y; y=t;
return;
}
void main(void)
{
int a=3, b=2;
swap(a, b);
printf("%d#%d#", a, b);
return;
}
【解答】
3#2#
注:尽管在函数swap()里,形参x和y的值发生了交换,但根据函数参数的传递原则——“实参向形参单向传值(即x向a赋值,y向b赋值),形参的改变不影响实参”,实参变量a和b的值未发生交换!
2. 下列程序将输出_____。
# include <stdio.h>
int s;
int f(int m)
{
static int k=0;
for(; k<=m; k++) s++;
return s;
}
void main(void )
{
int s=1;
s=f(2)+f(2);
printf("%d#%d#", s, f(20));
return;
}
【解答】输出结果为:6#21#
注:(1)全局变量s的初始值为0;
(2)在f函数中,s是全局变量有效,而在main函数中,s是局部变量有效;
(3)在f函数中,k是静态变量,每次函数f调用结束后,其内存单元和值仍然保留。
3. 若输入:1273 <回车>,以下程序的输出结果是_______。
#include <stdio.h>
void main(void)
{
int n, m;
scanf(“%d”, &n);
m=0;
while (n>0) {
m=m*10+n%10;
n/=10;
}
printf(“%d”, m);
return;
}
【解答】输出结果是:3721
4. 若输入 -6+15*3/5=<回车> , 以下程序的输出结果是_______。
#include <stdio.h>
void main()
{
int m=0, sum=0;
char c, oldc='+';
do {
c=getchar();
if(c<='9'&&c>='0')
m=10*m+c - '0';
else {
if(oldc=='+')
sum += m;
else
sum -= m;
m=0;
oldc=c;
printf("%d#", sum);
}
} while(c!='=');
return;
}
【解答】0#-6#9#6#1#
程序的意思:对输入的字符串扫描,若碰到数字字符序列,求出相应的整数值m;若碰到其它字符——若字符是+号,则将m值加入到sum中去;若字符不是+号,则将从sum中减去m值。
5. 若输入:how are you? <回车>,以下程序的输出结果是_______。
#include <stdio.h>
void main(void )
{
int word;
char ch;
word=0;
while((ch=getchar())!='?'){
if(ch==' ') word=0;
else if(word==0){
word=1;
if(ch<='z'&&ch>='a') ch=ch-'a'+'A';
}
putchar(ch);
}
return;
}
【解答】How Are You
该程序思路:碰到一个新单词,则将该单词首字母从小写改为大写,其它字符原样输出。
提示:可借鉴统计单词个数程序的算法。
试题四、程序填空题(每空2分,共30分)
1. 输入正整数n,计算s = 1/1! + 1/2! + 1/3! + ……+ 1/n!的值。
#include <stdio.h>
void main( void)
{
int j, k, n;
double f, s;
scanf("%d", &n);
(1) ; s=0.0
for (k=1 ; k<=n; k++){
(2) ; f=1.0
for(j=1; (3) ; j++) j<=k
(4) ; f=f*j
s=s+1.0/f;
}
printf("sum=%f\n", (5) ); s
return;
}
2. 输入一个整数,统计该数的位数。如:输入12534,输出5;输入-99,输出2;输入0,输出1。
#include <stdio.h>
void main(void)
{
int count=0, number;
scanf(“%d”, (6) ); &number
if (number < 0) number = (7) ; -number
do {
number = (8) ; number/10
count++;
} while ( (9) ); number!=0
printf(“%d\n”, count);
return;
}
3. 下面程序验证“哥德巴赫猜想”:寻找3到1000间满足“偶数=素数1+素数2”(如10=3+7)的所有偶数。素数指只能被1和自身整除的正整数,如2,3,17等;1不是素数。
#include <stdio.h>
void main(void)
{
int i, j;
(10) ; /*prime()函数声明*/ int prime(int n)
for (i=3 ; i<=500; i++)
for (j=2; ; j++)
if ( (11) ) { prime(j)==1 && prime(2*i-j)==1
printf(“%d = %d +%d\n”, 2*i, j, 2*i-j); /*若2*i为两个素数之和 */
break;
}
(12) ; return
}
int prime(int n) /* 判断n是否为素数:是返回1,不是返回0 */
{
int i;
if (n==1)
return (13) ; 0
for (i=2; i<=n/2; i++)
if ( (14) ) n%i==0
return 0;
return (15) ; 1
}
《C程序设计基础及实验》期中考试试卷, 2012年11月23日 10 / 10
展开阅读全文