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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷第1

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

1、数组str全由大小写字母字符组成。请补充函数fun(),该函数的功能是:把str

中的字母转换成紧接着的下一个字母,如果原来的字母为,7或则相应地转换

成H或,AL结果仍保存在原数组中。例如,输入“StudentZz”,则输出

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

的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程

序:#include<stdio.h>#defineN80voidfun(chars[]){inti;for(i=0;[1;i-+)

{if(s[i]==,z,||s[i]=,Z,)s[i]-=[];elses[i]+=[];})main(){charstr[N];

clrscr();printf("\nInputastring:\n");gets(str);printf("\n***original

string***\nH):puts(str):fun(str):printf("\n***newstring***\n"):puts(str):}

标准答案:s[i]!=\(r251

知识点解析:第一空:for循环的执行条件是当前字符不为'\0',即还没有到字符串

的最后一个字符'\0'。第二空:如果原来的字母是9或2、则要转换成侬或,AL

也就是把ASCH码减去25。第三空:除了字母,z,或2、其他字母都转换成下一个

字母,所以把ASCII码加上1。

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

2、下列给定程序中,函数fun()的功能是;将s所指字符串中的字母转换为按字母

序列的后续字母(但Z转化为A,z转化为a),其他字符不变。请改正函数fun()中

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

也不得更改程序的结构。试题程序:#include<stdio.h>#include<ctype.h>

#inckide<conio.h>

{while(*s!=,@,){if(*s>='A,&*s<=,z,||*s>=,a,&&*s<=,z,){if(如=Z)

*S='A';elseiR*S='z')*s='a';else*s+=l;)

}}main(){chars[80];clrscr():

printf("\nEnterastringwithlength<80:\n\n");gets(s);printf("\nThestring:

\n\nH);puts(s);fun(s);printf("\n\nTheCords:\n\nH);puts(s);}

标准答去:⑴错误:while(*s!='@')正确:while(*s)(2)错误:(*s)++;正确:s++:

知识点解析:根据题目要求,可对字符串所有字母进行遍历。对每一个字母,若该

字母为密或2"将该字母改成出或,A:即ASCH码值减25,当然也可以用题目

中的if语句来实现转换,若该字母不是N或2、则该字母的ASCII码值加1;对

字符串所有字符重复以上过程即可得到题目要求的结果,可用循环语句和条件语句

来实现。

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

3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构件数组

s中,请编写函数fun(),它的功能是:把分数最高的学生数据放在h所指的数组

中。注意:分数高的学生可能不只一个,函数返回分数最高学生的人数。注意:

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

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

16typedefstruct{charnum|10|;ints;(STREC;intfun(STREC*a,STREC*b)

{)main(){STRECs[N]={{nGA005",85),{"GA003n,76},{“GA002",69),

{MGA004",85),{"GA001M,91),{,,GA007n,72),{"GA008",64),("GA006",87},

{"GA015",85),("GA013,;91),{"GAO12",64),{"GA014,;91),{“GA011",66},

{"GA017,;64),("GAOI8';64),{"GA016H,72}};STRECh[N];inti,n;FILE*out;

n=fun(s,h);printf("The%dhighestscore:\n",n);for(i=0;i<n;i++)printf("%s%4d\n

”川i].num,h[i].s);/*输出最高分学生的学号和成绩*/printf("\nH);

out=fopcn("out45.dat",fprintf(out,"%d\n",n);for(i=0;i<n;i++)fprintf(out,

"%4d\n'\hLiJ.s);tclose(out);)

标准答案:intfun(STREC*a,STREC*b){inti,j=0»max=a[0].s;for(i=0;i<

N;i++)if(max<a[i].s)max=a[i].s;/*找出最大值517fol*(i=0;i<N;i++)

if(max==a[i].s)b|j++]=ali];/*找出成绩与max相等的学生的记录,存入结构体b中

*/relurnj;/*返回最高成绩的学生人数*/)

知识点解析:该程序使用循环嵌套,第1个for语句的作用是找出最大值。第2个

循环的作用是找出与max相等的成绩,也即坡高成绩的学生记录,并存入b中。

国家二级(C语言)机试模拟试卷第2

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

1、给定程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序

前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。例如,s所

指字符串为:asdI23fgh5##43df,处理后新字符串为:123543asdfgh##df。请在程

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

源程序存放在考生文件夹下的BLANKI.C中。不得增行或删行,也不得更改程序

♦include<stdio.h>

2linclude<string.h>

3♦include<stdlib.h>

4#include<ctype.h>

5char*fun(char*s)

6(inti,j,k,n;char*p,*t;

7n-strlen(s)+1;

8t-(char*)malloc(n*sizeof(char));

9p-(char*)malloc(n*sizeof(char));

10j«0;k-0;

11for(i-0;i<n;i++)

12(if(isdigit(s[i])){

13/**♦*******found****♦*****/

14p(_1_

15else

16{t[k]-s[ij;.

17)

18/………*found……工…/

19for(i-0;i<_2_;i++)p[j*i]-

t[i];

20p[j+k]-O;

21/…•…***found………*/

22return_3__;

23|

24main()

25(chars[80];

26printf("Pleaseinput:w);scanf

M

(%s"ys);

27printf(w\nTheresultis:%s\n",

fun(s));

的结构!28

标准答案:(l)j(2)k(3)p

知识点解析:函数fun的功能是:将形参s所指字符串中的所有数字字符顺序前

移,其他字符顺序后移出。在助函数中,定义了两个数组指针p和t分别存储数字

字符和其他字符,把s所指的字符串中的数字字符和其他字符分别存储在p和t

中,然后将t字符串中的字符按照题干要求的顺序存储在p字符串的后面。

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

2、给定程序MODH.C中函数fun的功能是:读入一个字符串(长度V20),将该字

符串中的所有字符按ASCH码升序排序后输出。例如,若输入:edcba,则应输

ill:abcdco请改正程序中的错误,使它能统计出正确的结果。注意:不要改动

main函数,不得增行或删行,也不得更改程序的结构!

♦include<stdio.h>

2♦include<string.h>

3voidfun(chart[])

4

5charc;

6inti,j;

7r………found*………*/

8for(i■strlen(t);i;i--)

9for(j«0;j<i;j++)

10»•****♦***found**♦♦*♦****♦/

if(t[j]<t[j+1])

12

13c,t[j];

14t(j)-t(j+1);

15t[j♦11-c;

16

17

18main()

19

20char3(81];

21printf(w\nPleaseenteracharacter

string:");

22gets(s);

23printf("\n\nBeforesorting:\n

www

\is\rs);

24fun(s);

25printf("XnAftersortingdecendingly:

\ns);

26

标准答案:(1)for(i=strlen(t)—1;i;i--)或for(i=stHen⑴-1:i>0:i--)(2)if(t[j]>t[j

+U)

知识点解析:本题中函数的功能是读入一个字符串(长度V20),将该字符串中的所

有字符按ASCII码升序排序后输出。木题思路是利用字符串长度作为循环的控制

条件,然后在循环过程中将字符按.ASCII码排序。

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

3、请编写函数fun,函数的功能是:移动一维数组中的内容:若数组中有n个整

数,要求把下标从。到p(含p,p小于等于n-1)的数组元素平移到数组的最后。例

如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10:p的值为3。移

动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。注意:部

分源程序在文件PROGLC中。请勿改动主函数main和其他函数中的任何内容,

仅在,函数fun的花括号中填入你编写的若干语句。

1!tinclude<stdio.h>

♦defineN80

3voidfun(intintp,intn)

4

5

6

7main()

8<inta[N]=[1,2,3,4,5,6,7,8,9,10,

11,12,13,14,15);

9inti,p,n-15;voidNONO();

10printf(wTheoriginaldata:\n");

11for(i-0;i<n;i++)printf("%3d"r

12printf(w\n\nEnterp:w);scanf(w%dH,

&p);

13fun(arprn);

14printf("\nThedataaftermoving:

\n");

15for(i-0;i<n;printf(M%3dw,

16printf(**\n\nw);

17NONO();

18)

19voidNONO()

20{/*请在此函数内打开文件,输入测试数据,

调用fun函数,输出数据,关闭文件.*/

21FILE*rfr*wf;inta(N],i,jrp,n;

22rf-fopen("in.dat","r");

23wf■fopen("out.dat","w");

24for(i-0;i<5;i++){

w

25fscanf(rfr%d&p);

26for(j«0;j<n;j++)fscanf(rf,

27fun(arp,n);

28for(j-0;j<n;fprintf

w

(wfr%3d"ra[jj);fprintf(wfr"\n");

29)

30fclose(rf);fclose(wf);

31

1!inti,j«Orb(N];

2ifor(i=p+l;i<n;i-»-+)b[j*+]=w[i];

3;for(i-0;i<-p;i++)b(j++]«w(i];

标准答案:4jfor(i=0;i<n;i++)w[i]»b[i];

知识点解析:该程序功能是移动一维数组中的内容。解题思路首先将字符串拷贝到

一个临时的数组,然后将字符串进行前移操作,最后将由于前移覆盖掉的字符,由

临时数组中拷贝到指定字符串。

园家二级(C语言)机试模拟试卷第3

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

1、给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后

插入一个*号。例如,形参s所指的字符串为:det35adh3kjsdf7.执行结果为:

def3*5*adh3*kjsdt7*0请在程序的下划线处填入正确的内容并把下划线删除,使程

序得出正确的结果。注意:源程序存放在考生文件夹下的BI.ANK1.C中。不

得增行或删行,也不得更改程序的结构!#includcvoidfun(char*s){inti,j,n;

f0r(i=O*i++)/******************fo(jnd*******************i

[1]s[i]<=,9,){n=0:/

求*****************found*******************/whilc(8[i+1+n]i=[2])n++;

=]+n+[•J,1)/******************!^^und*******************/

n,,

s[j+l]=[31;s[j+l尸-i=i+l;}}main(){chars[80]=ba3a54cd23a;printf("

\nTheoriginalstringis:s):fun(s):printf(n\nThcresultis:%s\n",

S);)

标准答案:(l)&&(2)0或“\O"(3)s(j]

知识点解析:第一空:“if(s[i]>=U【1】s[i]<=9)”是判断s[i]是否是数字字符,数

字字符必须满足s[i]>=,(T和s[i]v=,9"两者之间是与的关系,故第一空处应填

第二空:显然“while(s[i+l+n]!=[2])n++;”是求s(i+l)之后的字符数量,找

到其后的字符数量之后便可以在“for(j=i+n+l;j>i;j-)”循环中移动后面的字符了,

故while的条件是没有达到字符串结束位,n++,即第二空处应填“0”或“\0”。第

三空:"for(j=i+n+l:j>i;j-)”循环是将数字字符后面的字符往后移动一位,从最后

一个字符开始往后移动,故s[j+l]=s[j],即第三空处为“SU]”。

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

2、给定程序M0D11.C的功能是:读入一个整数kQWkWOOOO),打印它的所有质

因子(即所有为素数的因子)。例如,若输入整数:2310,则应输出:2、3、5、7、

llo请改正程序中的语法错误,使程序能得出正确的结果。注意:不要改动main

函数,不得增行或删行,也不得更改程序的结构!include

/************found************/IsPrime(intn);/*定义函数*/{inti,m;m=1;for

(i=2;i<n;i++)/************found************/if!(n%i){m=0;break;)return

(m);)main(){intj,k;printf("\nPleaseenteranintegernumberbetween2and10000:");

scanf("%d",&k);printf("\n\nThcprimefactor(s)of%dis(arc):",k);for(j=2;j<=k;

j++)if((!(k%j))&&(IsPrime(j)))printf(H\n%4d",j);printf("\nn);}

标准答案:IsPrime(intn)if(!(n%i))

知识点解析:(1)第一个标识下面的“IsPrime(intn)厂在程序中显然是一个函

数,因此应将后面的分号去掉。(2)第二个标识下面的if语句后面缺少括号,因

此,if!(n%i)应改为if(!(n%i))。该题主要考查标点符号、运算符、基本定义。

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

3、请编写一个函数unsignedfun(imsignedw),w是一个大于10的无符号整数,若

w是n(应2)位的整数,函数求出w的低n-1位的数作为函数值返回。例如:w值

为5923,则函数返回923;w值为923则函数返回23。注意:部分源程序存在文

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

的花括号中填入你编写的若干语句。#includcunsignedfun(unsignedw){}NONO()

{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文

件。*/unsignedx;inti;FILE*rf,*wf;rf=fopen("in.dat',,"rH);wf=

fopen("out.datn,"w");for(i=0;i<20;i++){fscanf(rf,"%u",&x);fprintf(wf,"%u\nM,

fun(x));}fclose(rf);fclose(wf);}main(){unsignedx;printf("Enteraunsignedinteger

number:");scanf("%u",&x);printf("Theoriginaldatais:%u\n",x);if(x<10)printf

("Dataerror!”);elseprintf("Theresult:%u\n",fun(x));NONO();}

标准答案:{unsignedt.s=O.sl=l.p=O:t=w:while(t>10){if(t/10)p=t%10;s=s+p*sl;

sl=sl*10;t=t/10;)returns;}

知识点解析:进入fun函数,根据前面的分析:利用while循环语句,根据对拆分

无符号数的分析取得每位上的数。如果要截取的数I大于10,就说明I不只有个

位,进入while循环。每次截取一位p,然后将p乘以相应的权数si,加上原有的

计算结果s,形成的新的数,然后将t中截取的这位删除。其中,截取t的第一

位,那么权数就是1,第二位对应的权数就是10,以此类推。

家二级(C语言)机试模拟试卷第4

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

1、给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查找含有形参

substr所指子串的所有字符串并输出,若没找到则输出相应信息。ss所指字符串数

组中共有N个字符串,且串长小于M。程序中库函数subslr(sl,s2)的功能是在si

串中查找s2子串,若没有,函数值为0,若有,为非0。请在程序的下划线处填

入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考

生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!

#include井include#defineN5#defineM15voidfun(char(*ss)[M],char*substr){int

i,find=0;/*************«*f0Unj**************/for(i=0;i<[1];j++)/

***********j^Qund**************/jr(strstr(ss|i|?[2])!=NULL){find=l;

puts(ss[i]);printf("\n");}if(find==

[3])printf(H\nDoiftfound!\n");}main()(charx[N][M]=(',BASIC,','C

langwage","Java","QBASIC","Access"),str[M|;int1;printf("\nTheoriginal

string\n\n");for(i=0;i

标准答案:⑴N(2)substr(3)0

知识点解析:第一空:ufor(i=0;i<[1];i++)"补充循环的结束条件,fun的参数

(*ss)[M]是指向N行M列的字符串数组,循环是逐行字符串是否含有substr所指的

子串,因此循环次数是N次,故第一空处应为“NL第二空:4tif(strsr(ss[i],

[2])!=NULL)”是判断字符串ss[i]是否含有subsir所指的子串,故第二空处为

"substr"o第三空:“if(find==【3】)printf("\nDon'tfound!\n");”说明没有找到输出

提示信息,如果找到了“find=l;puts(ss[i]);printf("\rT);"可知find会变成I,在没

有找到的情况下find为初值0o故第三空处判断find是否等于0便可知是否找到了

符合要求的字符串,因此第三空为“0”。

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

2、请编写函数fun,其功能是:计算并输出

5-1+(1+6)川+6+6)--(1+&+-小..♦布)例如,在主函数中从键盘给n输入20

后,输出为:s=534.188884。注意:要求n的值大于I但不大于100。部分源程

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

数fun的花括号中填入你编写的若干语句。#include#includedoublefun(intn){)

main(){intn;doubles;printf("\n\nlnputn:");scanf("%d”,&n);s=fun(n);

printf("\n\ns=%f\n\n",s);NONO();}NONO(){/*请在此函数内打开文

件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;ini

n,i;doubles;rf=fopen("in.dat","r"),wf=fopcn(Hout.dat","w");for(i=0;

i<10;i++){fscanf(rf,"%d",&n);s=fun(n);fprintf(wf,n%lf\n",s);}

fclose(rf);fclose(wf);}

标准答案:inli;doublefac=1.0;doublesum=l.0;for(i=2;i<=n;

i++)(fac+=sqrt(i);sum+=fac;}returnsum;

知识点解析:(1)根据题干中给出的数列,推出每一项是在前一项的基础上加当前

项数的平方根,第n项的项数为n。(2)在循环中求得每一项,然后对其进行累加

求和。

国家二级(C语言)机试模拟试卷第5

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

1、给定程序中,函数fun的功能是将a和b所指的两个字符串转换成面值相同的

整数,并进行相加作为函数值返回,规定字符串中只含9个以下数字字符。例

如,主函数中输入字符串:32486和12345,在主函数中输出的函数值为:44831。

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

注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得

更改程序的结构!#include#include#include#defineN9longctod(char*s){longd=0:

whilc(*s)if(isdi"it(*s)){;***************f^Qund****************/d=d*10+*s—I•

/***************found****************/[2];}returnd;)longfun(char*a,

char*b){/***************j^Qund****************/return[3]•}main(){char

sl[N],s2[N];do{printf("inputstringsi:H);gets(sl);}while(strlen(sl)>N);do

{printfC'Inputstrings2:");gets(s2);)while(strlen(82)>N);printf("Theresult

is:%id\n",fun(sl,S2));)

标准答案:(l)^*(2)s++(3)ctod(a)+ctod(b)

知识点解析:第一空:举例说明ctod内循环的作用,例如将字符串“123”转换为数

字时:第一次进入循环时,依等于字符“1",d应等于0*10+1,第一空处是将字符

变成数字,字符“1”变成数字1可由字符“1"减去字符“0”得到,故第二空处应为

;第二空:S是数组指针,在循环中S不断往后移动商至到达数组结束,故

第二空处应为“s++”。第三空:由审题分析可知,在fun函数内两次调用ctod函数

完成字符串到整数的变浜,然后求和,故第三空处为“ctod(a)+ctod(b)”,

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

2、给定程序M0D11.C中函数fun的功能是:应用递归算法求形参a的平方根。

求平方根的迭代公式如下:"=例如,a为2时,平方根值为:

1.414214。请改正程序中的错误,使它能得出正确结果。注意:不要改动main

函数,不得增行或删行,也不得更改程序的结构。includeinclude

/******************found*******************/doublefun(doublea,dounlex0)

{doublexl,y;xl=(xO+a/xO)/2.0;

/******************found*******************/if(f<ibs(x1__x0)>0.00001)

y=fun(a,xl);elsey=xl;returnY;}main(){doublex;printf("Enterx:");

scanf("%If,&x);printff'Thesquarerootof%lfis%lf\n",x,fun(x,1.0));}

标准答案:(l)doublefun(doublea,doublexO)(2)if(fabs(xl-x0)>0.00001)

知识点解析:(1)主函数中1.0)\x是double型变量,1.0是浮点数,可

知fun有两个double型参数,而第一标识下“dounle”不是C语言关键字,所以应将

^doublefun(doublea.dounlexO)"改为"doublefun(doublea,doublex0)"o(2)第二个

标识下的if语句是判断进行递归运算的条件,第二标识下变量xO没有定义,根据

题意,这里是判断xl和xO的差值的绝对值是否比0.00001大,所以第二个标识

下“if(fhbs(xl-xo)>0.00D01)”改为“if(fhbs(xl—x0)>0.00001)”。

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

3、假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:只删除

字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的长

度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个

数.在编写函数时,不得使用「语言提供的字符串函数.例如.字符串中的内容

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

A*BC*DEF*G。注意:部分源程序在文件FROG1.C文件中。请勿改动主函数

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

句。#includevoidfiin(char*a,intn,inth,inte){)main()(chars[81]>*t,*f;

intm=0»tn=O»fn=0;voidNONO();printf(^Enterastring:\n");gets(s);

t=f=s;while(*t)(t++;m++;)t-----;while(*t==,*,){t------;tn++:)

while(*f==,*,){f+-+;fn++;)fun(s,m,fn,tn);print^^Thestringafterdeleted:

\n");puts(s);NONOJ);}voidNONO()(/*本函数用于打开文件,输入数据,

调用函数,输出数据,关闭文件。*/FILE*in,*out;inti;chars[811,*t,*f;

intm=0,tn=O,fn=0;in=fopen(,,in.dat",'T'>out=fopen(,,out.dat",”W'');

for(i=0;i<10;i++){fscanf(in,s);t=f=s;m=0;tn=O;fn=0;

while(*t){t++:m++;)t-----;while(*t==,*,){t-----;tn++;}whi!e(*f==,*,){fH-;

fn++;)fun(s,m,fn,tn);fprintf(out,"%s\n'',s);|fclose(in);

fclose(out);}

标准答案:char*p=a;intj=O,len=0;while(*p){p++;len++;}while(j

知识点解析:(I)主函数中,首先统计字符串长度、前导和尾部叫”号的数量,把这

些参数传给函数fun。(2)根据字符串长度,前导以及尾部“*”号统计的数目,确定

执行字符移动的起始位置。(3)在循环中依次执行字符的移动。

国家二级(C语言)机试模拟试卷第6

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

I35(2xn-l)

1、给定程序中,函数Rrn的功能是计算下式“丞*丁♦/j—pF直到,并把计算

结果作为函数值返回。例如,若形参e的值为le-3,函数的返回值2.985678。

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

注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得

更改程序的结构!#includedoublefun(doublee){inii,doubles,x;/

*****************)und*****************/s=0•[]]•x=1

while(x>e){/****************R)und*****************/[2].

/x=(2.0*i—1)/((3)*(2.0*i));

s=s+x;}returns;}main(){doublee=le一3;printf("\nTheresultis:%fin”,

fun(c));)

标准答案:(l)0(2)i++(3)2.0*i

知识点解析:第一空:“returns;”可知s是返回值,s的初始化值为0,故循环累

加是从第一项开始累加的,在循环体“2:x=(2.0*i-l)/(([3])*(2.0*i));

s=s+x;”中,变量i没有递增,故第二空处应为“i++”。当x是级数的第一项时,

i=l(i++之后变成1),故i的初始化值为0,因此第一空处应为“0”。第二空:由上

面的分析可知,第二空处应为“i++”。第三空:“x=(2.0*i-l)/

(([3])*(2.0*i));”是求级数项的值,根据题干给出的级数项特征可知,级数项

的分母是(2.0*i)的平方,故第三空处应为“2.0*i"o

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

2、下列给定程序中,函数proc()的功能是:删除字符串str中所有空白字符(包括

Tab字符、Enter符及换行符)。输入字符串时以“#"结束输入。请修改程序中的错

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

不得更改程序的结构。试题程序:#include#include#includevoidproc(char*p)

{inti,t;charc[80];for(i=0,t=0:p[i];i++)if(!isspace(*(p+i)))c[t++]=p[i];

//****found****c[t]="\O";strcpy(p,c);)vOidmain(){chare,str[80J;inti=0;

prinif("Inputasiring:M):c=geichar();while(C!='#'){str[i]=c:i++;

c=getchar();}str[i]='\O';proc(str);puts(str);}

标准答案:错误:c[U="\(r;正确:c[t尸\0';

知识点解析:删除空格后的字符串放在数组c中,完成字符的复制后,要为新的字

符串c添加结束符。因比,“c[t尸,\0";”应改为

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

3、学生的记录由学号和成绩组成。N名学生的数据已在主函数中放入结构体数组

s中,请编写函数fun,它的功能是:把分数最低的学生数据放在b所指的数组

中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。注

意:部分源程序在文件PR0G1.C文件中。请勿改动主函数main和其他函数中的

任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#dcfineN16

typedefstruct{charnum[10];ints;JSTREC;intfun(STREC*a,STREC*b){}

main(){STRECs[N]={{"GA05%85),1nGAO3%76},{"GAO2n,69),

{"GA04",85},{"GAOIH,91),{nGAO7",72),["GAO8",64),{"GA06",

87),{”GAO15G85),{"GAO13",91),{"GAO12",64),{"GA014n,91),

{"GAO11",91),{"GAO17",64),{"GAO18n,64),("GAO16",72}};STREC

h[N];intiyn;FILE*out;n=fun(s»h);printf("The%dlowestscore:\n",

n);for(i=0;i

标准答案:inti,j=0,min=a[0].s;for(i=0;ia[i].s){j=0:b[j++]=a[i];

min=a[i].s;}elseif(min==a[i].s)b[j++]=a[i];}returnj;

知识点解析:(1)要把最低分数的学生数据放在数组中,首先求出最低分数,再使

用一个for循环把所有的成绩进行比较,找出最低的分数来。(2)找出所有与最低

分数相等的学生,并将坡低分数的人数累加。

家二级(C语言)机试模拟试卷第7

一、程序填空题(本题共7题,每题7.0分,共7分°)

1、函数fun的功能是进行数字字符转换。若形参ch中是数字字符U〜,夕,则U

转换成9,T转换成8,2噬换成7,……,9转换成若是其他字符则保

持不变:并将转换后的结果作为函数值返回。请在程序的下划线处填入正确的内

容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下

的BLANK1.C中。不得增行或删行,也不得更改程序的结构!include/

********************found*******************x*/[1]fun(charch){/

********************found*******************x*/][2])/

木木木木木木木木木木*木*木*木*木**k)und*'***木木水木木木木木木木木木木木木内木/return—(ch—[3]

returnch;}main(){charcl,c2;printf("\nTheresult:\n");cl=,2,;

c2=fun(cl);printf(Mcl=%cc2=%c\nn,cl,c2);cl='8';c2=fun(cl);

printf("cl=%cc2=%e\n",cl,c2);cl='a';c2=fun(cl);printf("cl=%cc2=%c

\n",cl,c2);|

标准答案:(l)char(2)chv='9'(3)'O'

知识点解析:第一空:由主函数内fun函数的调用“cl=,2>c2=fun(cl);",而cl

和c2是char变量,可知fun函数的返回值类型是char,故第一空处补充返回值类

型应为“char”。第二空:数字字符是‘0'〜'夕,因此数字字符必须ch>=XT且

ch<=19\故第二空处应为chv=,91第三空:数字字符转换规则是:9喈换

成'9',T唯换成8,2转换成7,……,’歹啜换成O,即返回值为‘9~ch」(T),

故第三空处应为“’0。

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

2、给定程序MODI1.C中函数fun的功能是:读入一个字符串(长度<20),将该字

符串中的所有字符按ASCII码升序排序后输出。例如,若输入:edcba,则应输

出:abcdco请改正程序中的错误,使它能统计出正确的结果。注意:不要改动

main函数,不得增行或删行,也不得更改程序的结构!#include#includevoid

fun(chart[]){chare;inti,j;/*************found************/

for(i=strlen(t);i;i-----)for(j=0;j

标准答案:(l)for(i=strlen⑴一1;i;i------)或for(i二strlen⑴一1:i>0;i------)

(2)if(l[j]>t[j+l])

知识点解析:(1)字符串的长度包括尾符,将字符串中的字符按ASCH码排序,应

排除尾符号,所以第一个标识下的“for(i=strlen⑴;i;i-----『改为"fbr(i=strlen(t)・

1;i;i-)%(2)题干中要求升序排列,第二个标识下的

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

3、函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。

合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位

和个位数依次放在c数的百位和个位上。例如,当a=45,b=12时,调用该函数

后,c=5142。注意:部分源程序存在文件PROG1.C中。数据文件in.dat中的数

据不得修改。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花

括号中填入你编写的若干语句。#includevoidfun(inta,intb,long*c){)main(){int

a,b;longc;voidNONO();printf("Inputa,b:");scanf("%d,%d",&a,&b);fun(a,b,&c);

printf("Theresultis:%ld\nH,c);NONO();)voidNONO(){/*本函数用于打开文件,

输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,a,b;longc;rf

=fopcn("in.datH,"r");wf=fopcn("out.dat","w");for(i=0;i<10;i++){fscanf(rf,

"%d,%d",&a,&b);fun(a,b,&c);fprinlf(wf,"a=%d,b=%d,c=%ld\n",a,b,c);}

fclose(rf);fclose(wf);}

标准答案:[*c=(a%10)*1000+(b/10)*100+(a/10)*10+(b%10);}

知识点解析:(1)分解两位数的正整数n的个位和十位数,可用n%10和n/10实

现。(2)设x0、xl、x2、x3为一位数,则x0、xlxlO、x2x100>x3x1000,可以

分别使x0、xl>x2、x3构成个、十、百、千带权数,而

xO+xlxIO+x2xlOO+x3xlOOO构成四位数。本题最多只考虑四位数。

国家二级(C语言)机试模拟试卷第8

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

1、请补充fun函数,该函数的功能是:判断一个年份是否为闰年。例如,1900年

不是闰年,2004是闰年。[注意]部分源程序给出如下。请勿改动主函数main和

其他函数中的任何内容,仅在函数fun的横线.上填入所编写的若干表达式或语句。

[试题源程序]#include<stdio.h>#includc<conio.h>intfun(intn){intfiag=0;

if(n%4==0){if((1))fiag=1;)if((2))flag=1;return(3);}voidmain(){intyear;

clrscr();printf("Inputtheyear:");scanf("%d",&year);if(fun(year))printf(H%disaleap

yearAn",year);elseprintf("%disnotaleapyearAn",year);}

标准答案:[1]n%100!=0[2]n%400==0[3]flag

知识点解析:题的关键是要知道闰年的定

温馨提示

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

评论

0/150

提交评论