国家二级C语言机试(操作题)模拟试卷15_第1页
国家二级C语言机试(操作题)模拟试卷15_第2页
国家二级C语言机试(操作题)模拟试卷15_第3页
国家二级C语言机试(操作题)模拟试卷15_第4页
国家二级C语言机试(操作题)模拟试卷15_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家二级C语言机试(操作题)模拟试

卷第1套

一、程序填空题(本题共I题,每题1.0分,共J分0)

1、使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中

包含一个源程序文件blankl.co在此程序中,函数fun的功能是:计算X所指数

组中N个数的平均值(规定所有数均为正数),平均值通过形参返回给主函数,将小

于平均值旦最接近平均值的数作为函数值返同,并在主函数中输出。例如,有10

个正数:46、30、32、40、6、17、45、15、48、26,平均值为30.500000。主函

数中输出m=30。请在程序的下划线处填入正确的内容并把下划线删除,使程序得

出正确的结果。注意:部分源程序在文件BLANKl.C中。不得增行或删行,也

不得更改程序的结构!试题程序:#include<Stdib.h>=I}include<stdio.h>

#defineN10doublefun(doublex[],double*av){inti,j:doubled,s;s=0:

for(i=o;i<N;i++)s=s+x[i];/*********found*********/[I]=s/N;

d=32767;for(i=0;i<N;i++)if(x[i]<*av&&*av-x[i]<=d){/

*********R^und*********/d=*av—x[i].i=[2];}/

*********I^Qund*********Ireturn[3],}main()(inti;doublex[N]>av,m;

for(i=0;i<N;i++){x[i]=rand()%50;prLntf(”%4.Of,x[i]);}printf(H\n");

m=fun(x,&aV);printf("\nTheaverageis:%f\n",av):printf("m=%5.If',

m);pnntf("\n")j;)

标准答案:(l)*av(2)i(3)x[j]

知识点解析:埴空1:从原程序中可以看出*av代表的是平均值,而*/N表示的就

是平均值,因此本空应该填*av。填空2:if语句来判断找最接近平均值的数,因

而此空应该填i。填空3:题目要求将小于平均值且最接近平均值的数作为函数返

回,而j表达的是最接近平均值的数在数组中的下标,因而木空应该填写x[j]。

二、程序修改题(本题共I题,每题1.0分,共1分0)

2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中

包含一个源程序文件modi1.co在此程序中,函数fun的功能是:根据整型形参

n,计算如下公式的值。A1=LA2=l—加■I+42''+如时1)例如,

若n=10,则应输出0.617977o请改正程序中的错误,使它能得出正确的结果。

注意:部分源程序在文件MODH.C中,不要改动main函数,不得增行或删行,

也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>

#include<stdio.h>/*********found*********/inifun(intn){floalA=1;int

i;/*********f()und*********/for(i=2;i<n;i++)A=l.0/(1+A);return

A;)voidmain(){intn,system("CLS");printf(M\nPleaseentern:");scanf(M%

d",&n);prLntf("A%d=%lf\n”,n,fun(n));}

标准答案:(l)floatfun(intn)(2)for(i=2;i<=n;i++)

知识点解析:(1)根据函数的返回值可知,函数应定义为float型。(2)该题中函数

fun的作用是计算数列前n项的和,而数列的组成方式是:第n项的分母是1加第

n-I项的值,分子为1,如果循环累加按for(i=2;i〈n;i++)执行,当输入n=2时

循环不会执行,程序将得不到想要的结果,因此循环变量的取值范围应包括2,循

环的条件为iV=n。

三、程序设计题(本题共[题,每题7.0分,共7分0)

3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中

包含一个源程序文件progl.c。在此程序中,定义了NxN的二维数组,并在主函

数中自动赋值。请编写函数fun(inta口[N],intm),该函数的功能是使数组右上半

"197"

a=238

三角元素中的值乘以m。例如,若m的值为2,a数组中的值为L56」则返

-21814'

2616

回主程序后a数组中的值应为L512」注意:部分源程序在文件PR0G1.C

中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填

入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>

#inckide<stdlib.h>#include<string.h>#defineN5voidfun(inta[][N],intm){}

main(){inta[N][N],m,i,j;FILE*out;;printf("***Thcarray***\n"),for(i:

0;i<N;i++){for(j=0;j<N;j++){a[i]|j]=rand()%20;primf("%4d”,a|i|[j]);}

printf("\n"):)m=rand()%4:printf("m=%4d\n"»m):fun(a,m):printf("THE

RESULT\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",a[i][j]);

printf("\n");)/*********found*********/out=fopen("out.dat","w");

for(i=0;i<N;i++)for(j=0;j<N;j++)a[i][j]=i*j;fun(a,8);for(i=0;i<N;

i++){for(j=0;j<N;j++)fprintf(out,"%4d",a[i][j]);fprintf(out,"\n");)

l^]ose(0ut)・I*********^Qund*********I}

标准答案:voidfun(inta[][N],intm){inti,j;for(j=0;j<N;j++)for(i=0;i<

=j;i++)a[i][j]=a[i][j]*m;/*右上半三角元素中的值乘以m*/)

知识点解析:本程序实现将矩阵中右上半三角元素中的值乘以m,使用循环语句

遍历数组元素,第1个循环用于控制行坐标,第2个循环用于控制列下标。

国家二级C语言机试(操作题)模拟试

卷第2套

一、程序填空题(本题共I题,每题1.0分,共I分°)

1、使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中

包含一个源程序文件blankl.co在此程序中,函数fun的功能是计算下式

H…(2x-l)<10.3

222

24?6(2XQ2直到(2xn)、'并将计算结果作为函

数值返回。例如,若形参e的值为1。3,函数的返回值为2.985678。请在程序

的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部

分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:

#include<stdio.h>doublefun(doublee){inti;doubles»x;/

*********found*********/s=0;i=[1];x=l.0;while(x>e){/

*********8und*********/[2],/*********found*********/x=(20*i-1)

/(([3])*(2.0*i));s=s+x;)returns;|main(){doublee=le-3;printf("\nThe

resultis:%f\n",fun(e));)

标准答案:(l)0(2)i++或++i或i+=l或1与+1(3)2.0*i

知识点解析:填空1:循环变量il开始参加运算,但是在每次循环的开始i都进行

自加1操作,故i应赋初值为0。填空2:循环变量i自增1运算。填空3:根据

公式确定表达式通项。注意x为double型,故应将i变为double型再进行运算。

二、程序修改题(本题共1题,每题1.0分,共1分C)

2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中

包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:将s所指字符串

的正序和反序进行连接,形成的新串放在t所指的数组中。例如,当s所指字符串

为“ABCD”时,t所指字符串中的内容应为“ABCDDCBA”。请改正程序中的错误,

使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更

改程序的结构!试题程序:#include<conio.h>#include<stdio.h>#include<

string.h>/*********found*********/voidfun(chars,chart){inti,d;

d=strlen(s);for(i=0;i<d;i++)t[i]=s|i|;for(i=0;i<d;i++)t|d+i]=s|d-l-i];/

*********fQund*********/t[2*d-l]='\O':)main(){chars[100],t[100]:

printf("inPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("inTheresult

is:%sin",t);)

标准答案:(l)voidfun(char*s,chart)(2)t[2*d]=,\0\或皿+i]='\0';或

t[2*d]=0;或t[d+i]=O;

知识点解析:(1)从调用函数来看,函数传递的是数组,所以函数的形参应为指

针。(2)循环结束后回文字符的个数为2*d个,因为数组下标是从0开始的,所以

最后一个字符的下标为2*d-l,在最后一个字符的后面加上结束符、0、因此为

t[2*d]=,\0,;o

三、程序设计题(本题共1题,每题7.0分,共1分。)

3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中

包含一个源程序文件progl.c.在此程序中,编写函数fun,其功能是:将S所指

字符串中除了下标为奇数同时ASCII码值也为奇数的字符之外,其余的所有字符

全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若S所指

字符串的内容为“ABCDEFG12345",其中字符A的ASCH码值为奇数,但所在元

素的下标为偶数,因此需要删除;而字符1的ASCII码值为奇数,所在数组中的

下标也为奇数,因此不应当删除,其他依此类推。最后t所指数组中的内容应为

“135”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何

内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<

conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,charl[]){)

main(){chars[100],t[100]«printf("TnPleaseenterstrings:*,);scanf("%s".s):

fun(s,t);printf("inTheresultis:%sin",t);}

标准答案:voidfun(char*s,chart[]){inti,j=0,n;n=strlen(s);for(i=0:i<n;

i++)if((i%2)&&(s[i]%2))(t[j++]=s[i]:/*将下标为奇数同时ASCI工码值为奇数

的字符放入数组t中*/}5]='\0';/*最后加上结束标识符*/)

知识点解析:本题要求除了下标为奇数同时ASCII码值也为奇数的字符,其余的

所有字符都删除,即要留下下标为奇数同时ASCII码值也为奇数的字符。所以if

的条件语句应为:if(i%2!=0&&s[i]%2!=0)。

国家二级C语言机试(操作题)模拟试

卷第3套

一、程序填空题(本题共,题,每题上0分,共I分。)

1、使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中

包含•个源程序文件blankl.co在此程序中,函数fun的功能是:将形参n中,

各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新数,作为函数值

返回。例如,从主函数输入一个整数27638496,则函数返回值为26846。请在程

序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:

部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:

#include<stdio.h>unsignedlongfun(unsignedlongn){unsignedlongx=0,s,

intt;s=n:!*********^Qund*********/[|]

*********found*********/whilef[2]){t=s%10;if(t%2==0){/

*********found*********/x=x+t*i;i=[3];)s=s/10;}returnx,)main()

{unsignedlongn=-l;while(n>99999999IIn<0)(printf("Pleaseinput(0<n<

100000000):");scanf("%ldn,&n);)printfC1\nTheresultis:%ld\nM,

fun(n));)

标准答案:(1)1(2)s>0(3)i*10

知识点解析:填空1:变量i用来控制被取出的偶数在新数中的位置,应赋初值

lo填空2:while语句的循环条件是s>0。填空3:变量i用来标识个位、百位和

千位等。

二、程序修改题(本题共I题,每题1.0分,共I分。)

2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中

包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:输出MxM整数

方阵,然后求两条对角线上元素之和,并作为函数值返回。请改正程序中的错

误.使它能得出正确的结果.注意:不要改动main函数.不得增行或删行,也不

得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>

#include<stdio.h>#defineM5/*********found*********/intfun(intn,int

xx[][]){inti,j,sum=0:printf("\nThe%dx%dmatrix:\n",M,M);for(i=0;i

<M;i++){for(j=0;j<M;j++)/*********found*********/printf("%f,

xx[i]|j]);printf(M\n");)for(i=0;i<n;i++)sum+=xx[i][i]+xx[i][n-i-l],

return(sum):)voidmain(){intaa[M][M]={{1,2,3,4,5),(4,3,2,1,0},

{6,7,8,9,0),{9,8,7,6,5},{3,4,5,6,7));system(',CLSn);

printf("\nThesumofallelementsOn2diagnalsis%ld",fun(M,aa));)

标准答案:(Dintfun(intn,intxxfHM])(2)printf("%d",xxfil[jl);

知识点解析:(I)当用数组作为函数的形参时,可以不定义数组的行数,但一定要

定义数组的列数。(2)该处错误比较隐蔽,一般c语言上机考试很少涉及prinlf函数

中的错误,此处只要明白“d”和“产的区别就可以了。格式字符d表示以带符号的十

进制形式输出整数(正整数不输出符号);格式字符f表示以小数形式输出单精度、

双精度数据,隐含输出6位小数。

三、程序设计题(本题共[题,每题1.0分,共7分。)

3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中

包含一个源程序文件progl.c。在此程序中,编写函数fun,其功能是:将a、b

两个两位正整数合并成一个新的整数放在e中。合并的方式是:将a中的十位和个

位数依次放在变量e的千位和十位上,b中的十位和个位数依次放在变量e的个位

和百位上。例如,当a=45,b=12,调用该函数后e=4251。注意:部分源程序给

出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号

中填入你编写的若干语句。试题程序:#inckide<conio.h>#inckide<stdio.h>

voidfun(inta»intb,long*c){)main(){inta»b;longc;printf("Inputa»b:");

scanf("%d%d",&a,&b);fun(a,b,&c);prinlf("Theresultis:%ld\n",c);}

标准答案:voidfun(inta,intb,long*c){/*b%10获取b的个位,a/10获取a的

十位,a%10获取a的个位,b/10获取b的十位*/*c=b/

10+(a%10)*10+(b%10)*100+(a/10)*1000;}

知识点解析:本题中主要的问题是如何取出a和b的个位数和十位数,取出后如何

表示成c中相应的位数「由于a和b都是只有两位的整数,所以分别对它们除10

可得到它们的十位数,分别用10对它们求余可得到它们的个位数。得到后对应乘

以1000、100、10、1,就可得到c的千位数、百位数、十位数和个位数。注意使

用c时要进行指针运算C

国家二级C语言机试(操作题)模拟试

卷第4套

一、程序填空题(本题共I题,每题1.0分,共1分。)

1、使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中

包含一个源程序文件blankl.co在此程序中,函数fun的功能是:判定形参a所

指的NxN(规定N为奇数)的矩阵是否是“幻方”,若是,函数返回值为1;若不是,

函数返回值为0。“幻方”的判定条件是:矩阵每行、每列、主对角线及反对角线上

元素之和都相等。例如,以下3x3的矩阵就是一个,幻方”:492357816请在

程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注

意:部分源程序在文件BLANKLC中。不得增行或删行,也不得更改程序的结

构!试题程序:#include<stdio.h>#defiFieN3intfun(int(*a)[N]){inti,j,ml,

m2,row,colum;ml=m2=0;for(i=0;i<N;i++){j=N-i-1;ml+=a[i][i];

m2+=a[i][j]:)if(ml!=m2)return0;for(i=0;i<N:i++){/

*********tound*********/row~colum~[]],for(j=0;j<N;j++)

{row+=a[i]|j];colum+=a|j][i];}/*********found*********/if((row!=colum)

[2](row!=ml))returnO:)/*********found*********/return[3];)main()

{intx|N][N]»i,j;printf("Enternumberforarray:\n");for(i=0;i<N;i++j

for(j=0:j<N:j++)scanf("%d“,&x[i][j]):printf("Array:\nu):for(i=0:i<N:

i++){for(j=0:jVN;j++)printf("%3d“,x[i][j]);printf("\n");)if(fun(x))

printf("TheArrayisamagicsquare.\nM);elseprintf("TheArrayisn'tamagic

square.\n");}

标准答案:⑴。⑵||(3)1

知识点解析:填空1:本题考查为变量赋初值,在这里row+=a[i][j]代表是每行的

总和,cok】m+=a[j][i]代表的是每列的总和,因而row,cokim在初始化时应该为

零,此空应该填0。填空2:本题考查了if条件语句,此句if判断代表每行的总和

与列是否相等,每行的总和是否与对角线的总和相等,两者若有一个不成立,即返

回0,因而此空应该填写填空3:题目耍求若矩阵是“幻方”,则函数返回值为

1,因而此空应该填写1。

二、程序修改题(本题共[题,每题7.0分,共7分0)

2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中

包含一个源程序文件modi1.Co在此程序中,函数fun的功能是:传入一个整数

11I

m,计算如下公式的值。'2"3""m例如,若输入5,则应输出-

0.283333。请改正程序中的错误,使它能得出正干角的结果。注意:部分源程序在

文件MODI1.C+,不耍改动main函数,不得增行或删行,也不得更改程序的结

构!试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>

doublefun(intm){doublet=l.0;inti;for(i=2;i<=m;i++)/

*********j^Qund*********/t=10-]/i,/*********^Qund*********/}void

main(){intm;system("CLS");printf("\nPleaseenterlintegetnumbers:\n");

scanf("%d",&m);printf("n\nTheresultis%lf\n",fun(m));}

标准答案:(l)t-=1.0/i;(2)returnt;

知识点解析:(1)变量t存放公式的和,通过循环语句进行复合运算,因此此处应改

为l・=l.0/i;,注意此处应进行变量的类型转换。

三、程序设计题(本题共I题,每题7.0分,共7分°)

3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中

包含一个源程序文件progl.C。在此程序中,请编写一个函数,用来删除字符串

中的所有空格。例如,输入asdafaaz67,则输出为asdafaaz67。注意:部分源程

序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函

数fun的花括号中填入你编写的若干语句。试题程序:#inckide<stdio.h>

#includc<ctypc.h>#include<conio.h>#include<stdlib.h>voidfun(char*str)

{}main(){charstr|81];charMsg|]="Inputastring:";intn;FILE*out;

printf(Msg);gets(str);puts(str):fun(str);printf(,,***str:%s\n",str),/

*********found*********/out=fopcn("out.dat","vv");fun(Nsg);fprintf(out,

"%s",Nsg):fclose(out):/*********found*********/)

标准答案:voidfun(char*str){inti=0;char*p=str:while(*p){if(*p!=")/*删除空

格*/{str[i++]=*p;}p++;}str[i]=>\0\/*加上结束符*|}

知识点解析:本题要求删除所有空格,即保留除了空格以外的其他所有字符。由于

c语言中没有直接删除字符的操作,所以对不需要删除的字符采用“保留”的操作。

用指针P指向字符串中的每一个字符,每指向到一个字符都判断其是否为空格,若

不是空格则保存到

国家二级C语言机试(操作题)模拟试

卷第5套

一、程序填空题(本题共7题,每题1.0分,共[分0)

1、使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中

包含一个源程序文件blankl.co在此程序中,函数fun()的功能是在形参s所指字

符串中的每个数字字符之后插入一个“s”。例如,形参s所指的字符串为"

def35adh3kjsdf7",执行后结果为"def3*5*adh3*kjsdt7*"。请在程序的下划线处

填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给

出如下。不得增行或删行,也不得更改程序的结构!试题程序:l#inckideV

stdio.h>2voidfun{charts)3{4inti,j,n;5for(i=0;s[i]!=z\0';i++)6

/*********found*********/7if(s[i]>='O'<u>[1]</u>s[i]<=,9')8[9

n=0;10/*********found*********/11while(s[i+l+n]!=<u>[2]</u>)12n++:

13for(j=i+n+l)14/*********found*********/15s[j+l]=Vu>[2]V/u>;

16s[j+l]='*';17i=i+l;18)19)20main()2I{22chars[60]=',def35adh3kjsdf7";

23printf(n\nTheoriginalstringis:%s\nH,s),24fun(s);25printf("\nTheresult

is:%s\n",s);26}

标准答案:(1)&&(2)0或'\0'(3)疝或*(s+j)

知识点解析:填空1:if语句中的表达式用来判断是否为数字字符。数字字符的条

件是大于等于,0,,同时小于等于'9’.因此需要使用逻辑与来连接.

故空I处应该填&&。填空2:while语句用来判断是否到达字符串的结尾。故空

2处应该填0(或字符串结束标志"\0")o填空3:for语句使数字后的字符全都后

移一个单位,因此要使sU+l]=s[j];。故空3处应该填s[j]。

二、程序修改题(本题共1题,每题1.0分,共7分。)

2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中

包含一个源程序文件modil.Co在此程序中,函数fun()的功能是根据整型形参

.!1.1.1

y=I+~~~~+~~~~+-~+…+----

m,计算如下公式的值:2x23X34x4mxm例如,若巾的

值为5,则应输出1.463611o请改正程序中的错误,使它能得出正确的结果,注

意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:

1#include<conio.h>2#include(stdio.h>3doublefun(intm)4{5doubley=l.0;

6inti;7/*********found*********/8for(i=2;i<m;i++)9

/*********found*********/10y+=l/(i*i);]]retum(y);12)13main()14{15intn=5;

16printf(M\nTheresultis%lf\n",fun(n));17}

标准答案:(l)for(i=2;i<=m;i++)(2)y+=l.0/⑴i);或y+=(double)l/(i*i);

知识点解析:(I)根据公式可以知道for循环语句中变量i的取值范围应该包括m。

(2)变量y是一个double型变量,而i是整型变量,所以要进行类型转换,改为

y+=l.0/(i*i);或y+=(doublc)l/(i*i);©

三、程序设计题(本题共[题,每题7.0分,共[分°)

3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中

包含一个源程序文件progl.c。在此程序中,编写函数fun(),其功能是实现

B=A+AT,即将矩阵A加上A的转置,结果存放在矩阵B中。计算结果在main()

I23

456

789

其转置矩阵如下:

147

258

369

程序输出:

2610

61014

函数中输出。举例如下。输入如下的矩阵:101418注意:部

分源程序给出如下。请勿改动主函数main。和其他函数中的任何内容,仅在函数

fun()的花括号中填入你编写的若干语句。试题程序:1#include<stdio.h>2

#include<conio.h>3#include<stdlib.h>4voidfun(inta[3][3],intb[3][3])5{6

7}8voidmain()9{10inta[3][3]={{1,2,3),{4,5,6),{7,8,9)),t[3][3];

11inti,j;12system。'CLS*');13fun(a,t);14for(i=0;i<3;i++)15{16for(j=0;j<

3;j++)17printf("%7d",t[i][j]);18printf("\nn);19)20)

标准答案:1voidfun(inta[3][3],intb[3][3])2{3inti,j;4for(i=0;i<3;i++)5

for(j=0;jV3;j++)6bli]|j]=ali]|j]+a|j][i];7/*把矩阵a加上a的转置,存放在矩阵b中

*/8}

知识点解析:行列数相等的二维数组的转置就是行列互换。即转置后的第i行第j

列正好对应原矩阵的第j行第i歹人本题使用两层循环实现矩阵的转置,并将计算

结果存入矩阵b中,外层循环控制矩阵的行下标,内层循环控制矩阵的列下标。

国家二级C语言机试(操作题)模拟试

卷第6套

一、程序填空题(本题共I题,每题1.0分,共I分°)

1、使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中

包含一个源程序文件blankl.co在此程序中,函数fun的功能是:将形参指针所

指结构体数组中的三个元素按num成员进行升序排列。请在程序的下划线处填入

正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序给出如

下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>

typedef]struct(intnum:charame[10];1)PERSON:

*********found*********/voidfun(PERSON[l]{/*********found*********

/[2]temp;if(std[O].num>std[l].num){temp=std[0];std[O]=std[l];

std[l]=temp;}if(std[O].num>std[2].num)(temp=std[0];std[O]=std[2];

std[2]=temp;}if(std[l].num>std[2].num)(temp=std[lj;std[l]=std[2];

std[2]=temp;})main(){PERSONstd[]={5,nZhanghuM,2,HWangLi",6,

LinMin"):inti;/*********found*********/fun[3];printf("Theresult

is":);for(i=0;i<3;i++)printf("%d,%s",std[i].nu,std[i].name);)

标准答案:(l)std[](2)PERSON(3)std

知识点解析:填空1:定义形参变量引用数组std,此时形参可以定义为指针变

量,也可以定义为数组。由下文可知,程序是通过数组下标对数组元素进行操作

的,因此形参应使用数组形式,而非指针形式。填空2:程序使用变量lemp交换

结构体数组元素的值,因而temp应定义为PERSON型。填空3:程序通过函数

fun对数组std进行操作,因此函数的实参应为std。

二、程序修改题(本题共[题,每题7.0分,共7分0)

2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中

包含一个源程序文件modi1.Co在此程序中,函数fun的功能是:将rn(lSmglO)

个字符串连接起来,组成一个新串,放入pt所指存储区中。例如:把三个串

“abc”、“CD”、“EF”连接起来,结果是“abcCDEF”。请改正程序中的错误,使它能

得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序

的结构!试题程序:#include<stdiio.h>#include<string.h>voidfun(char

str|||10|»intm,char*pt){/*********found*********/Intk,q,i;for(k=0;

kVm;k++){q=strlen(str[k]);for(i=0;i<q;i++)/*********found*********/

pt[i]=str[k,i];pt+=q;pt[O]=O;)}main(){intm.h:chars[10][10],p[120];

prLntf("Pleaseenterm:');scanf("%d",&m);gets(s[O]);printf("PleaseenteE%

dstring:",m);for(h=0;h<m;h++)gels(s|h|);fun(s,m,p);print:("The

resultis:%s",p);)

标准答案:(l)intk,q,i;(2)pt[i]=str[k][i]:

知识点解析:(1)关键字书写错误,定义整型变量的关键字应使用ini,而非Ini。

(2)数组元素表示错误,表示二维数组元素,应使用方括号将行坐标和列坐标分别

括起来,即str[k,i]应改为:

三、程序设计题(本题共/题,每题1.0分,共I分。)

3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中

包含一个源程序文件progl.Co此程序定义了NxN的二维数组,并在主函数中自

动赋值。请编写函数fun(inta[][N]),该函数的功能是:将数组左下半三角元素中

的值全部置成0。例如a数组中的值为:197238456则返回主程序后a数组中

的值应为:097008000注意:部分源程序给出如下。请勿改动main函数和其

他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程

序:#include<conio.h>#include<stdio.h>#include<stdlib.h>#dcfineN5

voidfun(inta[][N]){}voidmain(){inta[N][N],i,j;system("CLS"):

printf("****Thearray****\n"):for(i=0:i<N:i++)/*产生一个随机的矩阵

*/{for(j=0;j<N;j++){a[i][j]=rand()%10;pr2ntf("%4d",a[ij|j]);}printf(u\

nu);)fun(a);printfC'THERESULT\n");for(i=0;i<N;i++){for(j=0;j<N;

j++)printf("%4d”,a[i皿);printfC\n");)}

标准答案:voidfun(inta[][N]){inti,j;fdr(i=O;i<N;i++)for(j=0;j<=i;j++)

a[i][j]=O;/*将数组左下半三角元素中的值全部置成0*/)

知识点解析:对于NxN二维数组,如何表示其左下半三角元素,可以通过以下语

句实现。for(i=0;i<n;i++)for(j=0;j<=i;j++)外层循环用来控制矩阵的行下

标,内层循环控制矩阵的列下标。注意列下标的取值范围,因为要表示下三角元

素,所以j的范围是。〜i。

国家二级C语言机试(操作题)模拟试

卷第7套

一、程序填空题(本题共[题,每题1.0分,共7分。)

1、使用VC++2010打开考生文件夹下bkmkl中的解决方案。此解决方案的项三中

包含一个源程序文件blank1.co在此程序中,函数fun的功能是:计算NxN矩阵

的主对角线元素和反向对角线元素之和,并作为函数值返回。要求先累加主对角线

元素中的值,再累加反向对角线元素中的值。例如,若N=3,有下列矩阵:123

456789首先累加I1、5、9,然后累加3、5、7,函数返回值为30。请在程序的

下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:剖分

源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:include

<sldi*.h>#defineN4fun(intt|||N|,intn){inii,sum;/

*********found*********/[1];for(i=0;i<n;i++)/

*********found*********/sum+=l2j;for(i=0;iVn;i++)/

*********found*********/sum+=t[i]|n-i-[3]I;returnsum;}main(){int

i,j,t[][N]={21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,

10);printf("\nThcoriginaldata:\n");for(i=0;i<N;i++){for(j=0;j<N;

j++)printf("%4dn,l[i皿);printf("\nH);)printfC^Theresultis:%d",fun(t,

N));}

标准答案:(l)sum=0(2)t[i][i](3)l

知识点解析:填空1:变量sum用来储存“和”结果,所以将其初始化为0。填空

2:从题目中可以了解到,主对角线元素的行和列下标是相同的,所以应填入

t[i][i]o填空3:对于反向对角线元素的行和列的下标,它们的关系是相加和为n・

1,所以应填入1。

二、程序修改题(本题共7题,每题7.0分,共I分0)

2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中

包含一个源程序文件modil.c。在此程序中,函数fun和funx的功能是:用二分

法求方程2x3・4x2+3x-6=0的一个根,并要求绝对误差不超过0.OOlo例如,若

给m输入-100,给n输入90,则函数求得的一个根为2.000。请改正程序中的

错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也

不得更改程序的结构!试题程序:#include<stdio.h>#include<math.h>double

funx(doublex){relurn(2*x*x*x-4*x*x+3*x-6);doublefun(doublem,doublen)

|/*********R^i]nd*********Iintr•r=(m+n)/2・/*********R*)i]nd*********

/while(fabs(n-m)<0.001){if(funx(r)*funx(n)<0)m=r;elsen=r;r=(m+n)/

2;)returnr;)main(){doublem,n,root;printf("Entermn:\n");scanff1,%

&m,&n);root=fun(m,n);printf("root=>o6.3f\n",root):)

标准答案:(1)doubler;(2)while(fabs(n-m)>0.001)

知识点解析:(1)程序中会发现r=(m+n)/2,而m和n都是double型的,并且艰据

题意可知,变量「需要定义为double型。(2)绝对误差不超过0.001,所以循环条

件应为fabs(n-m)>0.001o

三、程序设计题(本题共7题,每题分,共7分。)

3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中

包含一个源程序文件progl.co在此程序中,规定输入的字符串中只包含字母和*

号。编写函数fun,其功能是:除了字符串前导和尾部的*号外,将串中其他的水

号全部删除。形参h已指向字符串中第一个字母,形参P指向字符串中最后一个字

母。在编写函数时,不得使用C语言提供的字符串函数。例如,若字符串中的内

容为“****A*BC*DEF*G********,删除后,字符串中的内容应当是

,,****ABCDEFG********“。注意:部分源程序给出如下。请勿改动主函数main

和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试

题程序:#include<stdio.h>#includc<conio.h>#includc<string.h>void

fun(cha*a,char*h,char*p){)main(){chars[81],*l,*f;pnntf(HEnterastring:

\n");gets(s);t=f=s;while(*t)t++;t--;while(*t='*')t--;

whilc(*f=='*')fun(s,f,t),printf("Thestringafterdeleted:\n");

puts(s);}

标准答案:voidfun(char*a,char*h,char*p){inti=0;char*q=a;/*将前导水号

保存到a中*/whilc(q<h){a[i]=*q;q++;i++;1/*继续遍历数组*/while(q<

p){if(*q!='*"){/*如果不是*保存到a中*/a[i]=*q;i++;)q++;)/*将末尾*

号保存到a中*/while(*q){a[i]=*q;i++;q++;}a[i]=,\0\}

知识点解析:本题的重点是要选择好判断条件,首先是需要判断前导*号的结束,

然后判断是否指向最后一个字母,最后补充尾部*号,只要思路对了即可正确解

答。

国家二级C语言机试(操作题)模拟试

卷第8套

一、程序填空题(本题共I题,每题1.0分,共I分。)

1、给定程序中,函数fun的功能是:根据形参c中指定的英文字母,按顺序打印

出若干后继相邻字母,输出字母的大小写与形参c一致,数量由形参d指定。若输

出字母中有字母Z或z,则应从A或a开始接续,直到输出指定数量的字母。例

如:c为Y,d为4,则程序输出ZABC;c为N,d为2,则程序输出ab。请在

程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注

意:源程序存放在文件BLANK1.C中,不得增行或删行,也不得更改程序的结

构!#inckide<stdio.h>#pragmawarning(disable:4996)voidfun(charc,intd){int

i;charA[26],a[26]>^ptr;/*********founcl**芯******/for(i=0;i<([1];

i++){A[i]='A'+i;a[i]=,a,+i;)/*********found*********/if((c〉

='a')&&(c([2]'z'))ptr=a:elseptr=A;/*********found*********/for(i=I;i

<=d;i++)printf("%c",ptr|(c-ptr[01+i)%([3]]);)main(){chare;intd;

printf("pleaseinputc&d:\n");scanf("%c%d",&c,&d),fun(c,d);)

标准答案:(1)26(2)V=(3)26

知识点解析:函数fun()中首先将大写字母按照字母表的顺序存放到数组A中,将

小写字母按照字母表的顺序存放到数组a中;然后判断输入的字符c,若字符c是

小写字母,则将指针pir指向数组a,若是大写字母,将指针ptr指向数组A;然后

使用变量i遍历1到d,输出pu•所指数组中,偏移量为c-ptr[O]+i的元

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论