全国计算机等级考试二级C语言上机题库100套第二部分50至100套二级C语言.docx
- 文档编号:8181015
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:208
- 大小:93.87KB
全国计算机等级考试二级C语言上机题库100套第二部分50至100套二级C语言.docx
《全国计算机等级考试二级C语言上机题库100套第二部分50至100套二级C语言.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C语言上机题库100套第二部分50至100套二级C语言.docx(208页珍藏版)》请在冰豆网上搜索。
全国计算机等级考试二级C语言上机题库100套第二部分50至100套二级C语言
第50套:
给定程序中,函数fun的功能是:
有N×N矩阵,以主对角线为对称线,对称元
素相加并将结果存放在左下三角元素中,右上三角元素置为0。
例如,若N=3,有
下列矩阵:
123
456
789
计算结果为
100
650
10149
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#defineN4
/**********found**********/
voidfun(int(*t)___1___)
/*宏为世纪教育*/
{inti,j;
for(i=1;i {for(j=0;j { /**********found**********/ ___2___=t[i][j]+t[j][i]; /**********found**********/ ___3___=0; } } } main() {intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j; printf("\nTheoriginalarray: \n"); for(i=0;i {for(j=0;j printf("\n"); } fun(t); printf("\nTheresultis: \n"); for(i=0;i {for(j=0;j printf("\n"); } } 解题思路: 第一处: 形参t的定义,整数数组其宽度为N,所以应填: [N]。 第二处: 对称元素相加,其结果仍存放在左下三角元素中,所以应填: t[i][j]。 第三处: 右上三角元素置为0,所以应填: t[j][i]。 *************************************************** 给定程序MODI1.C中函数fun的功能是: 计算函数 F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。 其中x和y的值不等,z和y的值不等。 例如,当x的值为9、y的值为11、z的值为15时,函数值为-3.50。 请改正程序中的错误,使它能得出正确结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include #include #include /************found************/ #defineFU(m,n)(m/n) floatfun(floata,floatb,floatc) {floatvalue; value=FU(a+b,a-b)+FU(c+b,c-b); /************found************/ Return(Value); } /*宏为世纪教育*/ main() {floatx,y,z,sum; printf("Inputxyz: "); scanf("%f%f%f",&x,&y,&z); printf("x=%f,y=%f,z=%f\n",x,y,z); if(x==y||y==z){printf("Dataerror! \n");exit(0);} sum=fun(x,y,z); printf("Theresultis: %5.2f\n",sum); } 解题思路: 第一处: define定义错误,所以应改为: #defineFU(m,n)((m)/(n))。 第二处: return错写成Return,变量value错写成Value。 *************************************************** 规定输入的字符串中只包含字母和*号。 请编写函数fun,它的功能是: 将字 符串中的前导*号全部删除,中间和尾部的*号不删除。 例如,字符串中的内容为: *******A*BC*DEF*G****,删除后,字符串中的内 容应当是: A*BC*DEF*G****。 在编写函数时,不得使用C语言提供的字符串函数。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include voidfun(char*a) { } main() {chars[81]; printf("Enterastring: \n");gets(s); fun(s); printf("Thestringafterdeleted: \n");puts(s); NONO(); } 解题思路: /*宏为世纪教育*/ 本题是考察字符串的操作。 1.利用循环扫描出字符串左边第1个字符不是'*'的字符。 2.再利用循环把以后的字符依次移动原字符串首地址开始存放。 3.最后给字符串a加上结束符。 参考答案: voidfun(char*a) { intj=0; char*p=a; while(*p=='*')p++; while(*p){ a[j++]=*p; p++; } a[j]=0; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第51套: 给定程序中,函数fun的功能是: 计算出形参s所指字符串中包含的单词个数, 作为函数值返回。 为便于统计,规定各单词之间用空格隔开。 例如,形参s所指的字符串为: ThisisaClanguageprogram.,函数 的返回值为6。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意: 源程序存放在考生文件夹下的BLANK1.C中。 /*宏为世纪教育*/ 不得增行或删行,也不得更改程序的结构! 给定源程序: #include intfun(char*s) {intn=0,flag=0; while(*s! ='\0') {if(*s! =''&&flag==0){ /**********found**********/ __1__;flag=1;} /**********found**********/ if(*s=='')flag=__2__; /**********found**********/ __3__; } returnn; } main() {charstr[81];intn; printf("\nEnteralinetext: \n");gets(str); n=fun(str); printf("\nThereare%dwordsinthistext.\n\n",n); } 解题思路: 本题是统计字符串中包含的单词个数。 第一处: 单词个数用变量n来统计,当当前字母不是空格且flag状态标志为0时,则单词数 就加1,将状态标志flag置为1,所以应填: n++。 第二处: 当当前字符是空格时,flag状态标志置0,所以应填: 0。 第三处: 到字符串下一个位置,所以应填: s++。 *************************************************** 给定程序MODI1.C中函数fun的功能是: 从n(形参)个学生的成绩中统计出低 于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单 元中。 例如,若输入8名学生的成绩: 80.5607290.59851.58864 则低于平均分的学生人数为: 4(平均分为: 75.5625)。 请改正程序中的错误,使它能统计出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #defineN20 intfun(float*s,intn,float*aver) {floatave,t=0.0; intcount=0,k,i; for(k=0;k /**************found**************/ t=s[k]; ave=t/n; for(i=0;i /*宏为世纪教育*/ if(s[i] /**************found**************/ *aver=Ave; returncount; } main() {floats[30],aver; intm,i; printf("\nPleaseenterm: ");scanf("%d",&m); printf("\nPleaseenter%dmark: \n",m); for(i=0;i printf("\nThenumberofstudents: %d\n",fun(s,m,&aver)); printf("Ave=%f\n",aver); } 解题思路: 第一处: 应求累加和,而不赋值,所以应改为t+=s[k];。 第二处: ave不需要取地址,直接赋给*aver就可以了。 *************************************************** 请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所 指的存储单元中。 例如,输入如下整数: 876675896101301401980431451777 则输出结果为: 6,980 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include intfun(int*s,intt,int*k) { } main() { inta[10]={876,675,896,101,301,401,980,431,451,777},k; fun(a,10,&k); printf("%d,%d\n",k,a[k]); NONO(); } 解题思路: 本题是考察考生如何在指定的数组找出最大元素值的下标,通过形参*k返回到主程序中。 给出的程序是使用for循环语句进行处理的,在循环之前,首先把数组的第一个元素值赋给 最大值变量max,位置pos为0,然后通过循环依次判断下一元素值是否大于最大值max,如果大 于,那么把这个数重新赋给max,位置i赋给pos,循环结果,即可得到最大值的位置pos,最后 执行语句*k=pos就可以实现返回了。 参考答案: intfun(int*s,intt,int*k) { inti,pos=0,max=*s; for(i=1;i if(max<*(s+i)){ max=*(s+i); pos=i; } } *k=pos; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第52套: 给定程序中,函数fun的功能是: 将N×N矩阵中元素的值按列右移1个位置, /*宏为世纪教育*/ 右边被移出矩阵的元素绕回左边。 例如,N=3,有下列矩阵 123 456 789 计算结果为 312 645 978 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意: 源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #defineN4 voidfun(int(*t)[N]) {inti,j,x; /**********found**********/ for(i=0;i<___1___;i++) { /**********found**********/ x=t[i][___2___]; for(j=N-1;j>=1;j--) t[i][j]=t[i][j-1]; /**********found**********/ t[i][___3___]=x; } } main() {intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j; printf("Theoriginalarray: \n"); for(i=0;i {for(j=0;j printf("\n"); } fun(t); printf("\nTheresultis: \n"); for(i=0;i {for(j=0;j printf("\n"); } } 解题思路: 第一处: 函数fun是对N×N矩阵进行操作,for循环的终止值为N。 第二处: 把最后一列的元素值赋值给临时变量x保存用来交换,所以应填: N-1。 第三处: 第1列元素值使用x替换,由于C语言的下标是从0开始的,所以应填: 0。 *************************************************** /*宏为世纪教育*/ 例如,若q的值为: 50.0,则函数值为: 49.394948。 请改正程序中的错误,使程序能输出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include doublefun(doubleq) {intn;doubles,t; n=2; s=2.0; while(s<=q) { t=s; /************found************/ s=s+(n+1)/n; n++; } printf("n=%d\n",n); /************found************/ returns; } main() { printf("%f\n",fun(50)); } 解题思路: 第一处: 如果两个整数类型相除,结果仍为整数,所以必须转换其中一个数的类型,所以 应改为: s+=(float)(n+1)/n;。 第二处: 返回结果错误,应改为: returnt;。 *************************************************** 编写函数fun,它的功能是: 求Fibonacci数列中大于t的最小的一个数,结果 由函数返回。 其中Fibonacci数列F(n)的定义为: F(0)=0,F (1)=1 F(n)=F(n-1)+F(n-2) 例如: 当t=1000时,函数值为: 1597。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include intfun(intt) /*宏为世纪教育*/ { } main()/*主函数*/ {intn; n=1000; printf("n=%d,f=%d\n",n,fun(n)); NONO(); } 解题思路: 本题是考察考生用递推算法来求出斐波那契数列中每项的值。 给出的程序就是用变量f、f0 和f1来表示递推的过程,给变量f0和f1最初分别置数列中第1项和第2项的值0和1,然后进入循 环,执行语句f=f0+f1;将所得和值存入f中,这就是数列的第3项,把f1的值移入f0中,将f的 值移入f1中,为求数列的下一列作好准备;接着进入下一次循环,通过语句f=f0+f1求得数列的 第4项,不断重复以上步骤,每重复一次就依次求得数列的下一项,直至某项满足要为止。 参考答案: intfun(intt) { intf0=0,f1=1,f; do{ f=f0+f1; f0=f1; f1=f; }while(f returnf; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第53套: 函数fun的功能是: 计算 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意: 源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include doublefun(doublex) {doublef,t;intn; f=1.0+x; /**********found**********/ t=___1___; n=1; do{ n++; /**********found**********/ t*=(-1.0)*x/___2___; f+=t; } /**********found**********/ while(___3___>=1e-6); returnf; } /*宏为世纪教育*/ main() {doublex,y; x=2.5; y=fun(x); printf("\nTheresultis: \n"); printf("x=%-12.6fy=%-12.6f\n",x,y); } 解题思路: 第一处: 根据公式可知,变量t的值为x。 第二处: 根据公式可知,此处应该除以n,所以应填: n。 第三处: 根据试题中条件的要求,所以应填: fabs(t)。 *************************************************** 给定程序MODI1.C中函数fun的功能是: 求整数x的y次方的低3位值。 例如,整 数5的6次方为15625,此值的低3位值为625。 请改正函数fun中指定部位的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include longfun(intx,inty,long*p) {inti; longt=1; /**************found**************/ for(i=1;i t=t*x; *p=t; /**************found**************/ t=t/1000; returnt; } main() {longt,r;intx,y; printf("\nInputxandy: ");scanf("%ld%ld",&x,&y); t=fun(x,y,&r); printf("\n\nx=%d,y=%d,r=%ld,last=%ld\n\n",x,y,r,t); } 解题思路: 第一处: 错误在for循环语句上,根据试题要求,终止条件应该是i<=y。 第二处: 要取低3位的值时,应模1000取余数,而不是整除1000取商。 *************************************************** 例如,在主函数中从键盘给x输入0.21后,输出为: s=1.100000。 注意: 部分源程序在文件PROG1.C中。 /*宏为世纪教育*/ 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的 花括号中填入你编写的若干语句。 给定源程序: #include #include doublefun(doublex) { } main() {doublex,s; printf("Inputx: ");scanf("%lf",&x); s=fun(x); printf("s=%f\n",s); NONO(); } 解题思路: 本题是根据给定的公式进行计算。 具体操作请看答案程序中的说明。 参考答案: doublefun(doublex) { intn=1;/*循环计数*/ doublesn=1;/*累计数*/ doublexn=1,xn1=0;/*x的n值,以及x的n-1值;*/ while(fabs(xn-xn1)>=0.000001)/*绝对值是否满足条件*/ { xn=xn*x*(0.5-n+1)/n;/*表达式分解以后xn=(xn-1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 计算机等级考试 二级 语言 上机 题库 100 第二 部分 50