您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > C语言期中考试题目及答案
一、选择题:【1】在C语言中,用户能使用的正确标识符是。A)5fB)_forC)structD)_f.5答案:B分析:标识符只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线;大小写敏感;不能使用关键字;最长32个字符。【2】以下那个是正确的C语言常量。A)0678B)'\0101'C)1.2E3.5D)123L答案:D【3】以下对C语言源程序有关常识正确的描述是。A)main函数必须位于文件的开头B)每个语句必须单独一行C)标识符中大小写字母没有区别D)宏定义#define部分不一定要放在程序的最开头位置答案:D【4】以下for循环的执行次数是。for(x=0,y=0;(y=123)&&(x4);x++)A)是无限循环B)循环次数不定C)执行4次D)执行3次答案:C分析:若要判断(y=123)&&(x4)假,因为y=123永远为真,所以只需要判断x4为假即可。【5】对for(表达式1;;表达式3)可理解为。A)for(表达式1;0;表达式3)B)for(表达式1;1;表达式3)C)for(表达式1;表达式1;表达式3)D)for(表达式1;表达式3;表达式3)答案:B【6】设有程序段intk=10;while(k=0)k=k-1;则下面描述中正确的是。A)while循环执行10次B)循环是无限循环C)循环体语句一次也不执行D)循环体语句执行一次答案:C分析:因为k=0为假,所以程序不执行其后的语句。【7】C语言中while和do-while循环的主要区别是。A)do-while的循环体至少无条件执行一次B)while的循环控制条件比do-while的循环控制条件严格C)do-while允许从外部转到循环体内D)do-while的循环体不能是复合语句答案:A【8】设有:inta=1,b=2,c=3,d=4,m=2,n=2;执行(m=ab)&&(n=cd)后n的值为。A)1B)2C)3D)4答案:B分析:对于&&运算,只要第一个操作数为假,就不判定第二个操作数。对于||运算,只要第一个操作数为真,就不判定第二个操作数。上题中m=ab为假,则n=cd没有被判定,所以n的值仍为2。【9】以下程序运行后,a和b的值分别为:#includestdio.hmain(){inta,b;a=10%3,b=5;printf(“%%%d,%%%%d”,a,b);}A)%%1,%%%5B)%1,%%dC)%%3,%%5D)1,5答案:B分析:如果两个%连在一起,则输出一个%【10】在以下运算符中,优先级最高的运算符是()(A)<=(B)/(C)!=(D)&&答案:B【11】下列对一维数组a的正确说明语句为。A)inta(10);B)intn=10,a[n];C)intn;D)#defineSIZE10scanf(%d,&n);inta[SIZE];inta[n];答案:D分析:数组名后面的[]是数组的标志,不能用圆括号或其它符号代替;数组元素的个数必须是一个固定的值,可以是整型常量、符号常量或整型常量表达式,不能是变量。【12】下面程序段的输出结果是inti;intx[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i3;i++)printf(%d,x[i][2-i]);A)159B)147C)357D)369答案:C分析:数组x[3][3]的元素分别为:x[0][0]x[0][1]x[0][2]x[1][0]x[1][1]x[1][2]x[2][0]x[2][1]x[2][2]对数组初始化后对应的值为:123456789当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(){inta=5;floatx=5.3,y=6.6;printf(%.2f,x+a%3*(int)(x+y)%2/4);}答案:5.30分析:算术运算符结合方向为自左向右,并注意格式控制。【2】main(){inta=1,b=2,m=2,n=2;(m=ab)&&++n;printf(“%d\n”,n++);}答案:2分析:对于&&运算,只要第一个操作数为假,就不判定第二个操作数。所以n的值为2,表达式n++的值也为2。【3】main(){intx=1,y=0;y=(x--(y+x)?10:12.5y++?20:30);printf(%d,y);}答案:10分析:关系运算符的优先级高于条件运算符,条件运算符的结合方向为自右向左。--x(y+x)或x--(y+x)之类结构中,右边的x应为自减后的值。如表达式x(y+x)?10:12.5y++?20:30;的值为20;表达式--x(y+x)?10:12.5y++?20:30;的值为20。【4】main(){intn=0;while(n=2){n++;printf(“%d”,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(){inti=0;do{printf(“*”);i++;if(i3)break;}while(1);printf(“\n”);}答案:****分析:此题中的while(1)永远为真,程序结束依靠break来控制,循环体语句为{printf(“*”);i++;if(i3)break;},当i的值分别为0,1,2,3时,程序循环四次,输出****;当i的值为4时,i4为真,退出整个程序。【6】main(){inta,i;for(a=1,i=-1;-1=i1;i++){a++;printf(“%d”,a);}printf(“%d”,i);}答案:-1分析:此题中for的循环体语句为{a++;printf(“%d”,a);}。当i=-1时,-1=i1为0(为假),则不执行{a++;printf(“%d”,a);},也就不输出a的值,所以只输出i的值为-1。【7】main(){inti,x;for(i=1,x=1;i=50;i++){if(x=10)break;if(x%2==1){x+=5;continue;}x-=3;}printf(“x=%d,i=%d\n”,x,i);}答案:x=10,i=6分析:break的功能是退出整个循环,结束程序的执行;而continue的功能是退出本次循环,进入下次循环。此题可用变量跟踪法来求解:ixx%2x+=5x-=3111626033318480555110610则if(x=10)break;条件成立,退出整个循环。【8】以下程序的运行结果是。main(){inti,v1=0,v2=1,v3=2;for(i=1;i10;i++){switch(i%4){case1:v1++;case2:v2++;break;default:v3++;}}printf(%d,%d,%d\n,v1,v2,v3);}答案:3,6,6分析:用变量分析法如下:ii%4v1v2v3111222333340451246257358069136【9】执行以下程序后,输出结果是多少?main(){intj,k,s;for(k=2;k6;k++,k++){s=1;for(j=k;j6;j++)s+=j;}printf(%d,s);}答案:10分析:此题要注意每循环一次,s的值就变为1,要得到s的值只需要看最后一次循环后s的值即可。当k=4时,j分别等于4和5,当j=4时,s+=j的值为5;当j=5时,s+=j的值为10。【10】以下程序的运行结果是。main(){inti=0;do{++i;if(i%2!=0)printf(%d,,i);}while(i=15)答案:1,3,5,7,9,11,13,15分析:用变量跟踪法进行分析:i++ii%2!=0是否执行printf(%d,,i)01真是12假否23真是34假否45真是56假否67真是78假否89真是910假否1011真是1112假否1213真是1314假否1415真是1516条件不成立,退出程序。三、程序填空输入一个正整数,求该数各位之和,如输入3256,求得3+2+5+6=16。main(){inti,t=【1】;scanf(“%d”,&i);while(【2】){t+=【3】;i/=10;}printf(“%d\n”,t);}答案:【1】0【2】i0【3】i%10分析:本题定义i为输入的整数,t为各位数字之和。四、编程题:编程求“卖西瓜”问题。问题:有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?参考答案一:(其中d为天数,s为西瓜数量)main(){intd,s=1020;for(d=0;s=0;d++)s=s/2-2;printf(%d,d);}参考答案二:(其中day为天数,sum为西瓜数量)main(){intday,sum;day=0,sum=0;while(sum=1020){sum=sum*2+4;day++;}printf(%d,day);}
本文标题:C语言期中考试题目及答案
链接地址:https://www.777doc.com/doc-4878629 .html