还剩11页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
试题二参考答案与评分标准
一、单项选择题(10分,每题2分评分标准正确得2分错误扣2分)1.以下不能对二维数组a进行正确初始化的语句是A)inta[2][3]={0};B)inta[][3]={{12}{0}};√C)inta[2][3]={{12}{34}{56}};D)inta[][3]={123456};2.有以下程序片断floatfunintxinty){returnx+y;}main{inta=2b=5c=8;printf(%
3.0f\nfunintfuna+cba-c);}程序运行后的输出结果是:A编译出错√B9C21D
9.03.若有以下调用语句,则不正确的fun函数的函数原型是main{…inta
[50]n;…funna
[9];…}A)voidfun(intmintx[]);B)voidfun(intsinth
[41]);C)voidfun(intpint*s);√D)voidfun(intninta);4.下面程序片段的执行结果是#defineMAX10inta[MAX]i;main{printf\n;sub1;sub3a;sub2;sub3a;}sub2{inta[MAX]imax=5;fori=0;imax;i++a[i]=i;}sub1{fori=0;iMAX;i++a[i]=i+i;}sub3inta[]{inti;fori=0;iMAX;i++printf%da[i];printf\n;}A024681012141618012341012141618B01234024681012141618C012345678901234√D
0246810121416180246810121416185.下列程序执行后的输出结果是#includestdio.hmain{inta
[3]
[3]*pi;p=a
[0]
[0];fori=1;i9;i++{p[i]=i+1;}printf%d\na
[1]
[2];}A)3√B)6C)9D)随机数
二、写出下列程序的运行结果10分,评分标准正确得2分,完全错误扣2分,如果部分错误,少一行或者多了一行,或者其他提示信息,则扣1分1.main{intijx=0;fori=0;i2;i++{X++;forj=0;j3;j++{ifj%2continue;X++;}X++;}printfx=%d\nx;}程序运行结果是x=82.#includestdio.hstructSTU{charnum
[10];floatscore
[3];};main{structSTUs
[3]={{20021909585}{20022958075}{200231009590}}*p=s;inti;floatsum=0;fori=0;i3;i++{sum=sum+p-score[i];}printf%
6.2f\nsum;}程序的运行结果是
270.003.#includestdio.hmain{chars
[100];charci;scanf%cc;scanf%di;scanf%ss;printf%d%c%s\ncis;}已知字符’a’的ASCII码值为97,那么当程序输入a空格97空格123回车,程序运行结果是97a1234.#includestdio.hinta=13b=8;intmaxintaintb{intc;c=aba:b;returnc;}main{inta=5;printfMax=%d\nmaxab;}程序运行结果是Max=85.位式运算符是C语言作为中级语言的体现,可以实现以二进制比特位为单位的操作,其中“”是“位式与运算符”,有如下程序:#includestdio.hintfuncunsignedintx{intimask=1total=0;fori=1;i=16;i++{ifxmask==masktotal++;mask=mask*2;}returntotal;}main{unsignedintinput;printfpleaseinputannumber:;scanf%uinput;printfTheresultis:%d\nfuncinput;}当用户输入为15时,程序运行结果是Theresultis:4
三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求(8分,评分标准每空1分,正确得1分,错误扣1分)
1.由键盘输入一个班的某课程的学生成绩,计算其平均分,然后输出(注使用动态数组实现)#includestdio.h#includestdlib.hmain{int*p=NULLnisum;printfpleaseenterarraysize:;scanf%dn;p=int*mallocn*sizeofint;ifp==NULL{printfnoenoughmemory!\n;exit0;//或者return;}printfpleaseenterthescore:;fori=0;in;i++{scanf%dp+i;}sum=0;fori=0;in;i++{sum=sum+*p+i;}printfaver=%d\nsum/n;freep;}
2.输入一个字符数小于100的字符串string,然后在string所保存字符串中的每个字符间加一个空格#includestdio.h#defineMAX100voidCopyStringcharc[]chars[];voidInsertchars[];main{charstring[MAX];scanf%sstring;Insertstring;printf%sstring;}voidCopyStringcharc[]chars[]{inti;fori=0;s[i]!=\0;i++{c[i]=s[i];}c[i]=\0;}voidInsertcharsrcStr[]{charstrTemp[MAX];inti=0j=0;CopyStringstrTempsrcStr;whilestrTemp[j]!=\0{srcStr[i]=strTemp[j];i++;j++;srcStr[i]=;i++;}srcStr[i]=\0;}
四、在下面给出的4个程序中,共有16处错误(包括语法错误和逻辑错误),请找出其中的错误,并改正之(30分,每找对1个错误,加1分,每修改正确1个错误,再加1分只要找对15个即可,多找不加分)1.设计一个函数MaxCommonFactor,利用欧几里德算法,即称辗转相除法计算两个正整数的最大公约数#includestdio.hintMaxCommonFactorintaintb;main{intabx;printfInputab:;scanf%d%dab;x=MaxCommonFactorab;printfMaxCommonFactor=%d\nx;}intMaxCommonFactorintaintb;{intr;do{r=a%b;a=b;b=r;}whiler!=0;returna;}2.从键盘输入10个整型数据,放入数组a中,求其最大值、最小值及其所在元素的下标位置,并输出#includestdio.hmain{inta
[10]nmaxminmaxPosminPos;forn=0;n10;n++{scanf%da[n];}max=min=a
[0];//应初始化为数组中的某一元素maxPos=minPos=0;forn=1;n10;n++{ifa[n]max{max=a[n];maxPos=n;}elseifa[n]min{min=a[n];minPos=n;}}printfmax=%dpos=%d\nmaxmaxPos;printfmin=%dpos=%d\nminminPos;}3.下面的函数MyStrcmp用于实现函数strcmp的功能,将两个字符串s和t进行比较,要求将两个字符串中第一个不相同字符的ASCII码值之差作为MyStrcmp函数的返回值#includestdio.hintMyStrcmpchars[]chart[];main{charstr1
[20]str2
[20];printfInputstring:;getsstr1;printfInputanotherstring:;getsstr2;ifMyStrcmpstr1str20{printfstr1str2\n;}elseifMyStrcmpstr1str20{printfstr1str2\n;}else{printfstr1=str2\n;}}intMyStrcmpchars[]chart[]{inti;fori=0;s[i]==t[i];i++{ifs[i]==\0return0;}returns[i]-t[i];}4.从键盘任意输入10个整数,用函数编程实现将其中最大数与最小数的位置对换后,再输出调整后的数组#includestdio.h#defineARRSIZE10//去掉末尾的;voidMaxMinExchanginta[]intn{intmaxValue=a
[0]minValue=a
[0]maxPos=0minPos=0;intitemp;fori=1;in;i++{ifa[i]maxValue{maxValue=a[i];maxPos=i;}elseifa[i]minValue{minValue=a[i];minPos=i;}}temp=a[maxPos];a[maxPos]=a[minPos];a[minPos]=temp;}main{inta[ARRSIZE]in;printfInputnn=10:;scanf%dn;printfInput%dNumbers:\nn;fori=0;in;i++{scanf%da[i];}MaxMinExchangan;printfAfterMaxMinExchange:\n;fori=0;in;i++{printf%4da[i];}printf\n;}
五、编程(42分)总的原则每出现一处简单语法错误就扣1分具体评分标准见各题
1.规定一个工人工作时间每个月160小时,每小时工资为5元,如果加班的话,每小时增加4元,请编程计算并打印此工人一个月的工资,要求由键盘输入工作时间(14分)参考答案//2分包括标识符命名、缩进等代码风格#includestdio.hmain{inttsalary;//2分printfPleaseinputthetime:\n;scanf%dt;//1分ift0||t744//1分一个月超过31天每天24小时,考虑到最大最小范围判断,而且合理即可{printfErrorThetimeyouenteredisbeyondscope!\n;return;}ift=160//2分ifelse结构正确salary=t*5;//2分elsesalary=160*5+t-160*9;//2分printfThesalaryis:%d\nsalary;//2分}
2.编程计算并打印一元二次方程ax2+bx+c=0的根,a、b、c由键盘输入,其中a不等于0要求考虑一元二次方程根的所有情况(无根,有两个相等实数根,有两个不等实数根,有两个虚数根)(14分)已知一元二次方程的求根公式为参考答案//2分包括标识符命名、缩进等代码风格#includestdio.h#includestdlib.h#includemath.h//1分#defineEPS1e-6//1分main{floatabcdiscpq;//1分变量定义与输入printfPleaseenterabc;scanf%f%f%fabc;iffabsa=EPS//1分与零比较,求绝对值各一分{printfItisnotaquadraticequation!\n;exit0;//1分}disc=b*b-4*a*c;//1分iffabsdisc=EPS{//1分printfTwoequalrealroots:x1=x2=%
6.2f\n-b/2*a;}else{p=-b/2*a;q=sqrtfabsdisc/2*a;//2分ifdiscEPS{//2分printfTwounequalrealroots:x1=%
6.2fx2=%
6.2f\np+qp-q;}else{//1分printfTwocomplexroots\n;printfx1=%
6.2f+%
6.2fi\npq;printfx1=%
6.2f-%
6.2fi\npq;}}}
3.不用函数strcat,编程实现字符串连接函数MyStrcatchar*dstStrchar*srcStr将字符串srcStr连接到字符串dstStr的尾部,并编写主函数调用MyStrcat将用户输入的两个字符串相连接(14分)参考答案//2分包括标识符命名、缩进等代码风格#includestdio.hvoidMyStrcatchar*dstStrchar*srcStr;//1分main//3分主函数完全正确{chars
[80];chart
[80];printfPleaseenterastring:\n;getss;getst;MyStrcatst;printfTheconcatis:\n;putss;}voidMyStrcatchar*dstStrchar*srcStr{while*dstStr!=\0//2分{dstStr++;}while*srcStr!=\0//1分{*dstStr=*srcStr;//3分srcStr++;dstStr++;}*dstStr=\0;//2分}。