C语言期中考试题目及答案
(2009-04-28 15:58:15)
标签:
for表达式操作数运算符if杂谈 |
分类: C语言程序设计 |
一、选择题:
【1】在C语言中,用户能使用的正确标识符是
A)
答案:B
分析:标识符只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线;大小写敏感;不能使用关键字;最长32个字符。
【2】以下
A) 0678
答案:D
【3】以下对C语言源程序有关常识正确的描述是
A)
B)
C)
D)
答案:D
【4】以下for循环的执行次数是 。
for(x=0,y=0;(y=123)&&(x<4);x++)
A)是无限循环
答案:C
分析:若要判断(y=123)&&(x<4)假,因为y=123永远为真,所以只需要判断x<4为假即可。
【5】对for(表达式1;;表达式3)可理解为 。
答案:B
【6】设有程序段
A)while循环执行10次
C)循环体语句一次也不执行
答案:C
分析:因为k=0为假,所以程序不执行其后的语句。
【7】C语言中while和do-while循环的主要区别是 。
A)
B)
C)
D)
答案:A
【8】设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后n的值为 。
A)1
答案:B
分析:对于&&运算,只要第一个操作数为假,就不判定第二个操作数。对于||运算,只要第一个操作数为真,就不判定第二个操作数。上题中m=a>b为假,则n=c>d没有被判定,所以n的值仍为2。
【9】以下程序运行后,a和b的值分别为:
A)%%1,%%%5
答案:B
分析:如果两个%连在一起,则输出一个%
【10】在以下运算符中,优先级最高的运算符是(
答案:B
【11】下列对一维数组a的正确说明语句为
答案:D
分析:数组名后面的[]是数组的标志,不能用圆括号或其它符号代替;数组元素的个数必须是一个固定的值,可以是整型常量、符号常量或整型常量表达式,不能是变量。
【12】下面程序段的输出结果是
int i;
int x[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
A)1 5 9
答案:C
分析:
数组x[3][3]的元素分别为:x[0][0] x[0][1] x[0][2]
对数组初始化后对应的值为:
当i=0时,x[i][2-i]= x[0][2]=3
当i=1时,x[i][2-i]= x[1][1]=5
当i=2时,x[i][2-i]= x[2][0]=7
当i=3时,条件不成立,程序退出。
二、填空题:
【1】main()
{ int a=5;float x=5.3,y=6.6;
printf("%.2f",x+a%3*(int)(x+y)%2/4);}
答案:5.30
分析:算术运算符结合方向为自左向右,并注意格式控制。
【2】main()
{ int a=1,b=2,m=2,n=2;
printf(“%d\n”,n++);}
答案:2
分析:对于&&运算,只要第一个操作数为假,就不判定第二个操作数。所以n的值为2,表达式n++的值也为2。
【3】main()
{ int x=1,y=0;
答案:10
分析:关系运算符的优先级高于条件运算符,条件运算符的结合方向为自右向左。--x>(y+x)或x-->(y+x)之类结构中,右边的x应为自减后的值。如表达式x>(y+x)?10:12.5>y++?20:30; 的值为20;表达式--x>(y+x)?10:12.5>y++?20:30; 的值为20。
【4】main()
{ int n=0;
while (n<=2)
{ n++;
}
}
答案:123
分析:{ n++; printf(“%d”,n);}为while语句的循环体部分,当n=0时条件成立,执行n++后n的值变为1,并输出1;当n=1时条件成立,执行n++后n的值变为2,并输出2;当n=2时条件成立,执行n++后n的值变为3,并输出3;n=3时条件不成立,程序退出。
【5】main()
{ int i=0;
{ printf(“*”);
if (i>3) break;
} while (1);
printf(“\n”);
答案:****
分析:此题中的while (1)永远为真,程序结束依靠break来控制,循环体语句为{ printf(“*”); i++;if (i>3) break; },当i的值分别为0,1,2,3时,程序循环四次,输出****;当i的值为4时,i>4为真,退出整个程序。
【6】main()
printf(“%d”,i);
}
答案:-1
分析:此题中for的循环体语句为{ a++;printf(“%d”,a);}。当i=-1时,-1<=i<1为0(为假),则不执行{ a++;printf(“%d”,a);},也就不输出a的值,所以只输出i的值为-1。
【7】main()
{ int i,x;
for ( i=1,x=1;i<=50;i++)
{ if (x>=10) break;
if (x%2==1)
x-=3;
}
printf(“x=%d,i=%d\n”,x,i);
}
答案:x=10,i=6
分析:break的功能是退出整个循环,结束程序的执行;而continue的功能是退出本次循环,进入下次循环。此题可用变量跟踪法来求解:i
1
2
3
4
5
6
【8】以下程序的运行结果是
main()
{
答案:3,6,6
分析:用变量分析法如下:
i
1
2
3
4
5
6
7
8
9
【9】执行以下程序后,输出结果是多少?
main()
}
答案:10
分析:此题要注意每循环一次,s的值就变为1,要得到s的值只需要看最后一次循环后s的值即可。当k=4时,j分别等于4和5,当j=4时,s+=j的值为5;当j=5时,s+=j的值为10。
【10】以下程序的运行结果是
main()
do { + + i;
if (i % 2!=0)
答案:1,3,5,7,9,11,13,15
分析:用变量跟踪法进行分析:
i
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
三、程序填空
输入一个正整数,求该数各位之和,如输入3256, 求得3+2+5+6=16。
main()
{ int i,t=
}
答案:【1】0
分析:本题定义i为输入的整数,t为各位数字之和。
四、编程题:
编程求“卖西瓜”问题。
问题:有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?
参考答案一:(其中d为天数,s为西瓜数量)
main()
{int d,s=1020;
for(d=0;s>=0;d++)
s=s/2-2;
printf("%d",d);
}
参考答案二:(其中day为天数,sum为西瓜数量)
main()
{int day,sum;