您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > C语言程序设计---考试模拟试卷及解析
第十三章考试模拟试卷及解析13.1模拟试卷1及解析一、单项向选择题(每小题1.5分,共30分)1.关于C语言的叙述,不正确的是()。A)C程序必须包含一个main()函数B)C程序可由一个或多个函数组成C)C程序的基本组成单位是函数D)注释说明只能位于一条语句的后面分析:注释可以出现在语句的前面、后面或中间。例如,#includestdio.hvoidmain(void){/*计算1+2+3+4+…100的值*/inti;longs=0;for(i=1;i=/*不要丢掉'='号!*/100;i++)s+=i;/*注意以下输出语句中longint数据的输出控制格式”%ld”*/printf(s=%ld\n,s);}答案选D。2.以下()是正确的字符常量。A)cB)'\t'C)'12'D)\\分析:A)中的c为字符串常量,B)中的'\t'为转义字符,请大家注意常用转义字符的表示方法(参见教材),C)中'12'表示错误,因为单引号里面只能含有1个字符。D)中表示的是一个字符串(双引号),尽管这个字符串中只含有一个转义字符'\\'。答案选B。3.设charch='c';,则表达式ch+1的值为()。A)97B)98C)99D)100分析:字符变量存储的是所对应字符的ASCII值,26个字母之间的ASCII值按字母顺序是连续的,即字母'a'的ASCII值为十进制的97,字母'b'的ASCII值为十进制的98,依次类推。大家应记住常用字符的ASCII值,如,'A'为65,'0'为48等。答案选D。4.下面关于算术运算符的叙述,错误的是()。A)其运算对象不包含函数表达式B)运算符%的运算对象只能为整型C)算术运算符的结合方向是自左至右D)自加和自减运算符的结合方向是自右至左分析:运算符的运算对象可以是一个函数表达式,如sin(x)+10。答案选A。5.getchar()函数的功能是从终端输入()。A)一个整型变量值B)一个实型变量值C)多个字符D)一个字符答案选D。6.若有定义:inti=7,j=8;,则表达式i=j||ij的值为()。A)1B)变量i的值C)0D)变量j的值分析:表达式i=j||ij等价于(i=j)||(ij),其实不管变量i和j的值为多少,整个表达式的结果总是为“真”。答案选A。7.已知inta='R';则正确的表达式是()。AA)a%10B)a=int(3e2)C)2*a=a++D)a=a+a=a+3分析:B错误,应在转换目标的类型两边加上括号,即(int)(3e2),C表达式错误,因为赋值等号的左边不是“左值”,D的错误类似于C。答案选A。8.设有定义intx=5;,则以下语句执行后,变量x值为6的是()。A)printf(%d,x++);B)if(x=0)x=6;C)2==1?x++:x--;D)if(x++6)x++;分析:执行A语句,输出表达式x++的值5,变量x的值变为6。B语句中条件表达式为假,不执行赋值操作,变量x的值为0。C为条件表达式,由于表达式2==1的值为假,故执行表达式x--,使得变量x的值为4。D语句中条件表达式x++6的值为真,x变量的值自增了两次,即x值变为7。答案选A。9.在c语言中while循环和do~while循环的主要区别是()。A)do~while循环体内可以使用break语句,while循环体内不能使用break语句B)do~while的循环体至少无条件执行一次,while的循环体不是C)do~while循环体内可以使用continue语句,while循环体内不能使用continue语句D)while的循环体至少无条件执行一次,do~while的循环体不是答案选B。10.以下能对一维数组a进行正确初始化的语句是()。A)inta[5]=(0,0,0,0,0);B)inta[5]=[0];C)inta[5]={1,2,3,4,5,6,7};D)inta[]={0};分析:A中的(0,0,0,0,0)应为{0,0,0,0,0};B中的[0]应为{0};C中提供的初始值超过了数组的长度。答案选D。11.设有如下程序段inta[3][3]={1,0,2,1,0,2,1,0,1},i,j,s=0;for(i=0;i3;i++)for(j=0;ji;j++)s=s+a[i][j];则执行该程序段后,s的值是()。A)0B)1C)2D)3分析:对二维数组中的“下三角元素”(不包括对角线)求和。答案选C。12.若有定义:inta=2;,则语句a=strcmp(miss,miss);运行后a的值为()。A)1B)0C)-1D)2分析:函数strcmp(s1,s2)返回两个字符串s1所指向的字符串和s2所指向的字符串内容的比较(依据对应位置各个字符的ASCII值)结果。若s1s2,返回1,若s1s2,返回-1,若s1==s2,则返回0。答案选B。13.以下程序的运行结果是()。voidfun(intarray[4][4]){intj;for(j=0;j4;j++)printf(%-2d,array[2][j]);printf(\n);}voidmain(void){inta[4][4]={0,1,2,0,1,0,0,4,2,0,0,5,0,4,5,0};fun(a);}A)2005B)1004C)0120D)0450答案选A。14.若有以下宏定义:#defineMOD(x,y)x%y则执行以下程序段后,z的值是()。intz,a=15,b=100;z=MOD(b,a);A)100B)15C)11D)10分析:#defineMOD(x,y)x%y是带参数的宏定义,注意表达式中括号的使用。答案选D。15.以下程序段运行后*(++p)的值为()。chara[5]=work;char*p;p=a;A)'w'B)存放'w'的地址C)'o'D)存放'o'的地址分析:p=a;使得指针p指向数组a的首元素,即指向字符'w',++p后使p增1,指向了下一个字符'o'。答案选C。16.若函数fun的函数原型为:intfun(inti,intj);函数指针变量p定义为:int(*p)(inti,intj);则要使指针p指向函数fun的赋值语句是()。A)p=*fun;B)p=fun;C)p=fun(i,j);D)p=&fun;分析:函数名就是一个指向函数的指针,可以将函数名直接赋给一个指向函数的指针变量。答案选B。17.若有定义:structteacher{intnum;charsex;intage;}teacher1;则下列叙述不正确的是()。A)struct是结构体类型的关键字B)structteacher是用户定义的结构体类型C)num,sex,age都是结构体变量teacher1的成员D)teacher1是结构体类型名分析:teacher1是一个结构体类型的变量。答案选D。18.若有定义:structnode{intdata;structnode*next;};及函数:voidfun(structnode*head){structnode*p=head;while(p){structnode*q=p-next;free(p);p=q;}}调用时head是指向链表首结点的指针,整个链表的结构如下所示:则函数fun()的功能是()。A)删除整个单向链表B)删除单向链表中的一个结点C)显示单向链表中的所有数据D)创建单向链表分析:开始时,p指向单链表中的第一个结点,q指向第二个结点,删除p所指结点后,p再指向第二个结点,q指向第三个结点,再删除p所指结点,如此下去,直到所有的结点删除完为止。答案选A。19.在对于无符号数的位运算中,操作数右移一位相当于()。A)操作数除以2B)操作数乘以2C)操作数除以4D)操作数乘以4答案选A。head…15227∧20.以下程序的可执行文件名为tt.exe,若程序运行后屏幕显示:3,Weare,则在DOS提示符下输入的命令是()。voidmain(intargc,char*argv[]){inti;printf(%d,,argc);for(i=1;iargc;i++)printf(%s,argv[i]);}A.ttB.ttWeC.ttWeareD.ttWearehappy!分析:使用命令行参数时,argc表示命令行中参数的个数(包括程序名),argv[]是一个指针数组,它的每一个元素argv[0]~argv[argc-1]分别指向命令行中的各个字符串。答案选C。二、改错题(每小题8分,共16分)说明:(1)修改程序中每对“/**/”之间存在的错误;(2)不得删改程序中的“/**/”注释和其它代码。1.以下程序的功能是从键盘输入三角形的三边长,求其面积,若三个边长不能构成三角形,则提示。如输入:6911输出:26.98#includestdio.h#includemath.hvoidmain(void){floata,b,c;doubles,area;printf(Pleaseinput3numbers:\n);/**/scanf(%f%f%f,a,b,c);/**//**/if(a+bc||b+ca||a+cb)/**/{s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(areais%.2f\n,area);}elseprintf(error.\n);}分析:语句scanf(%f%f%f,a,b,c);中的变量应为取变量的地址(指针),即应改为:scanf(%f%f%f,&a,&b,&c);,条件表达式if(a+bc||b+ca||a+cb)中的逻辑运算符||应改为&&。2.以下程序的功能是求解百马百担问题。有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马数可分别为多少?有多少种解决方案?#includestdio.h/**/voidfun(void)/**/{intlarge,middle,small,n=0;for(large=0;large=33;large++)for(middle=0;middle=50;middle++){small=2*(100-3*large-2*middle);/**/if(large+middle+small=100)/**/{n++;printf(%d--large:%d,middle:%d,small:%d\n,n,large,middle,small);}}returnn;}voidmain(void){intnum;num=fun();printf(\nThereare%dsolutions.\n,num);}分析:根据函数fun的实现体中有returnn;语句,知道函数fun应该有返回值,且返回值类型为int。因此应将函数首部voidfun(void)改为:intfun(void)。根据题意,知道条件表达式if(large+middle+small=100)应改为:if(large+middle+small==100),逻辑运算符==与赋值运算符=是完全不一样的。三、填空题(每小题8分,共24分)说明:⑴在每对“/**/”之间的空白处补充程序,以完成题目的要求;⑵不得删改程序中的“/**/”注释和其它代码。1.补充下面程序,对函数62)(2xxxf,分别计算)8(xf和)(sinxf的值。如x=2.0,则输出:f(x+8)=86.000f(sinx)=5.008#includestdio.h/**//**/doublefun(doublex){/**//**/}voidmain(void){doublex,y1,y2;printf(Pleaseinputx:);scanf(%lf,&x);y1=fun(x+8);y2=fun(/**//**/);printf(\nf(x+8)=%.3lf,y1);printf(\nf(sinx)=%.3lf,y2);}分析
本文标题:C语言程序设计---考试模拟试卷及解析
链接地址:https://www.777doc.com/doc-8572153 .html