您好,欢迎访问三七文档
二级(C语言)模拟题1一、选择题1.以下叙述不正确的是()。A)C语言的执行总是从main函数开始B)一个C源程序必须包含一个main函数C)C语言程序的基本组成单位是函数D)在编译C程序源程序时,可发现注释中的拼写错误答案:D,错误,编译器不会查注释的问题。2.以下()是错误的整型常量。A)-0xcdfB)018C)0xeD)011答案:B,八进制合法数为0到7,B错,AC是十六进制,D是八进制数3.若有定义:inta,b;doublex,则以下不符合C语言语法的表达式是()。A)x%(-3)B)a+=-2C)a=b=2D)x=a+b答案:A,%表示求余数,操作数不能是浮点数,A错。4.若有定义:inti,j;则表达式(i=2,j=5,i++,i+j++)的值是()。A)7B)8C)9D)10答案:B,i++后i变成3,i+j++就为3+5=85.已有如下定义和输入语句inta;charc1,c2;scanf(“%d%c%c”,&a,&c1;&c2);若要求a、c1、c2的值分别为10、A和B,正确的数据输入是()。A)10ABB)10ABC)10ABD)10AB答案:A,根据输入格式,不能有空格,选A。6.若希望当a的值为奇数时,表达式的值为“真”,a的值为偶数时,表达式的值为“假”。则不能满足要求的表达式是()。A)a%2==1B)!(a%2==0)C)!(a%2)D)a%2答案:C,特殊值带入,取a为2,2%2为0,取非,为1,跟题目要求相反,所以选C。7.若有定义:inta=2,b=3;floatx=3.5,y=2.5;则表达式float(a+b)/2+(int)x%(int)y的值为().A)3.5B)3.0C)2.5D)2.0答案:2.5+3%2=2.5+1=3.5,选A。8.以下程序的运行结果是()。voidmain(){intn=’e’;swithc(n--){default:printf(”error”);case’a’:case’b’:printf(”good”);break;case’c’:printf(”pass”);case’d’:printf(”warn”);}}A)errorB)goodC)errorgoodD)warn答案:C,直接运行可得答案,n—其实就是e,进入default,因为没有break,要顺延。9.以下程序的运行结果是()。voidmain(){intsum=0,item=0;while(item5){item++;sum+=item;if(sum==5)break;二级(C语言)模拟题2}printf(”%d\n”,sum);}A)10B)15C)5D)6答案:B,直接运行即可输出为:10.下面程序段的运行结果是()。inti=0,a[]={3,4,5,4,3};do{a[i]++;}while(a[++i]5);for(i=0;i5;i++)printf(”%d”,a[i]);A)45654B)34543C)45554D)45543答案D,添加voidmain()黏贴直接运行即可输出为:11.若有定义:inta[2][3];则对数组元素的非法引用是()。A)a[0][1/2]B)a[1][1]C)a[4-4][0]D)a[0][3]答案D,第二维最多到2。12.以下程序段运行后屏幕输出为()。charstr[]=”ab\\cd”;printf(”%d”,strlen(str));A)4B)5C)6D)7答案B,a是第一个字符,b第二个,\\第三个,c第四个,d第五个,共5个字符。13.若有如下函数定义:intfun(){staticintk=0;return++k;}以下程序段运行后屏幕输出为()。inti;for(i=1;i=5;i++)fun();printf(”%d”,fun());}二级(C语言)模拟题3A)0B)1C)5D)6答案D,直接运行,这道题主要考察static变量,staticintk=0;初始化只能执行一次。运行结果:14.下面程序的输出结果是()#includestdio.h#defineSQR(x)(x*x)voidmain(){inta,b=3;a=SQR(b+2);printf(”\n%d”,a);}A)11B)25C)不定值D)产生错误答案A,这道题要注意展开不合并原则,求SQR(b+2),直接带入SQRb+2*b*2,注意不能用括号括起来,这就是展开不合并原则。可直接运行,但是要注意把全角的双引号改成半角。注意到黏贴可能出现的问题,主要是因为全角的双引号,要改成半角,输出15.有说明语句:double*p,a;能通过scanf语句正确给输入项读入数据的程序段是()。A)*p=&a;scanf(”%lf”,p);B)*p=&a;scanf(”%lf”,*p);C)p=&a;scanf(”%lf”,*p);D)p=&a;scanf(”%lf”,p);答案D,注意指针本身就是地址,如果加了*,就变成了所指内容,BC都错,A错在初始化指针格式错误,应该是D的格式。16.下面程序的输出结果是()#includestdio.hvoidmain()二级(C语言)模拟题4{inti;char*s=”abc”;for(i=0;i3;i++)printf(”%s\n”,s+i);}A)abcB)cC)abcD)abcbccabcabcbcabc答案A,注意到是%s格式,就要从当前字符往后直到\0结束。17.以下程序的运行结果是()。#includestdio.hunionUtype{inti;floatf;}u[2];voidmain(){printf(”sizeof(u):%d\n”,sizeof(u));}A)2B)4C)6D)8答案D,u是联合体数组,注意联合体本身取决于最长的成员,就是float,4字节,加上数组两个元素,共占8字节。18.若有如下定义,函数fun的功能是()。其中head指向链表首结点,整个链表结构如下图:head…structnode{intdata;structnode*next;};intfun(structnode*head){intn=0;structnode*t=head;while(t!=NULL){n++;t=t-next;}returnn;}A)删除链表head中的所有结点B)计算链表head中结点的个数C)插入一个元素到链表head中D)创建一个链表head答案B,直接看核心代码:while(t!=NULL){n++;t=t-next;}有个n++,就是在统计节点个数。19.下面程序的输出结果为()。#includestdio.hvoidmain(){enumWeekday{sun=7,mon=1,tue,wed,thu,fri,sat};enumWeekdayday=sat;printf(”%d\n”,day);}A)7B)6C)5D)4datadatadataNULL二级(C语言)模拟题5答案B,可以直接运行,显示6,也可以直接看代码,mon赋常量1,后面依次要加1,到了sat就是6。20.以下程序的可执行文件名为cmdline.exe。#includestdio.h#includestdlib.hvoidmain(intargc,char*argv[]){if(argc!=2){printf(”Youforgottotypeyournameoryoutypedmoreparameters\n”);exit(1);}printf(”Hello%s\n”,argv[1]);}在DOS命令行输入:cmdlineharry回车,则输出结果是()。A)YouforgottotypeyournameoryoutypedmoreparametersB)HelloharryC)HellocmdlineD)hello答案:B,注意到输入了两个字符串,那么argc就是2,其中argv[1]表示第二个字符串,也就是harry,所以最后输出为Helloharry二、改错题(共2小题,每题10分)1.程序cmody071.c,其功能是从键盘输入三角形的三边长,求其面积,若三个边长不能构成三角形,则提示。如输入:6911输出:26.98#includestdio.h#includemath.hvoidmain(){floata[3],s,area;inti;printf(”Pleaseinput3numbers:\n”);for(i=0;i3;i++)scanf(“%f”,/**//**/);/**/if(a[0]+a[1]a[2]||a[1]+a[2]a[0]||a[0]+a[2]a[1])/**/{s=(a[0]+a[1]+a[2])/2;area=sqrt(s*(s-a[0])*(s-a[1])*(s-a[2]))lprintf(”areais%.2f\n”,area);}elseprintf(”error.\n”);getch();}答案:scanf(“%f”,&a[i]);if(a[0]+a[1]a[2]&&a[1]+a[2]a[0]&&a[0]+a[2]a[1]),第一处,输入scanf(“%f”,&a[i]);表示输入三角形三个边长,第二处,应该是且的关系,用&&2.程序cmody072.c其功能是求解百马百担问题。有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马数可分别为多少?有多少种解决方案?#includestdio.h#includeocnio.h/**/voidfun()/**/{intlarge,middle,small,n=0;clrscr();for(large=0;large=33;large++)for(middle=0;middle=50;middle++){small=2*(100-3*large-2*middle);二级(C语言)模拟题6/**/if(large+middle+small=100)/**/{n++;printf(”%d--large:%d,middle:%d,small%d\n”,n,large,middle,small);}}returnn;}voidmain(){intnum;num=fun();printf(”\nThereare%dsolutions.\n”,num);getch();}答案:intfun()if(large+middle+small==100),第一处,明显有返回值,返回类型就错了,应该是int,第二处,相等应该用==,而不是赋值号。三、填空题(共3小题,每题8分)1.补充程序Ccon071.c,对函数226fxxx,分别计算8fx和sinfx的值。如x=2.0,则输出:f(x+8)=86.000f(sinx)=5.008#includestdio.h/**//**/doublefun(doublex){/**//**/}voidmain(){doublex,y1,y2;clrscr();printf(“Pleaseinputx:”);scanf(“%lf”,&x);y1=fun(x+8);y2=fun(/**//**/);printf(“\nf(x+8)=%.3lf”,y1);printf(“\nf(sinx)=%.3lf”,y2);getch();}答案:#includemath.h,return(x*x-2*x+6);sin(x),第一处,填math头文件预编译头,注意到后面有sin函数,第二处按题目给的二次函数填写,根据题目要求,第三处填sin(x)。2.补充程序Ccon072.c,计算!!()!mpnmn,其中m、n为整数且mn≥0。#includestdio.hdoublefun(unsignedm,unsignedn){unsignedi;doublep=1.0;for(i=1;
本文标题:二级C模拟题7详解
链接地址:https://www.777doc.com/doc-2746115 .html