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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷9(共

9套)

(共27题)

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

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

1、甲乙丙丁四人I司时开始放鞭炮,甲每隔U秒放一次,乙每隔〔2秒放一次,丙每

隔t3秒放一次,丁每隔t4秒放一次,每人各放n次。函数fun的功能是根据形参

提供的值,求出总共听到多少次鞭炮声作为函数值返回。注意,当几个鞭炮同时炸

响,只算一次响声,第一次响声是在第0秒。例如,若11=7,t2=5,t3=6,

t4=4,n=10,则总共可听到28次鞭炮声。请在程序的下划线处填入正确的内容并

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

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

*include<stdio.h>

2•found………*/

3♦defineOK(i,t,n)((___1___

&&(i/t<n))

4intfun(inttlrintt2,intt3,int

t4rintn)

5intcount,t,maxt-tl;

6if(maxt<t2)maxt■t2;

7if(maxt<t3)maxt■t3;

8if(maxt<t4)maxt■t4;

9count-1;/*给count赋初值*/

10,……**found………

11for(t-1;t<naxt*(n-1);2

12

13if(OK(trtlrn)||OK(t,t2,

n)||OK(trt3,n)||OK(trt4rn))

14count+4-;

15

16****found****

17return3

18

19main()

20{inttl-7rt2-5rt3-6rt4«4rn-10rr;

21r-fun(tlrt2,t4,n);

M

22printf("Thesound:%d\nrr);

23

标准答案:(l)i(2)t++(3)count

知识点解析:函数勋的功能是根据形参提供的值求出总共听到多少次鞭炮声,胁函

数的参数是每个人放鞭泡的间隔时间和燃放次数。甲乙丙丁四人同时开始放鞭炮,

由于间隔不同在某些时刻几个人会同时燃放,这种情况只算一次响声,因此需耍考

虑同时燃放的次数。

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

2、给定程序MODH.C中函数fun的功能是:将长整型数s中每一位上为偶数的

数依次取出,构成一个新数放在I中。高位仍在高位,低位仍在低位。例如,当s

中的数为:87653142时,t中的数为:8642。请改正程序中的错误,使它能得出止

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

tinclude<stdio.h>

2voidfun(longs,long*t)

{intd;

4.ilongsl-1;

5;♦t-0;

6!while(s>0)

7■i{d-s«10;

8;/************found********

9;if(d*2-0)

10•{*t-d*sl+*t;

11;si*-10;

12j

13!************found****

14\

s\-10;

15•

16!

17\

main()

18;{longs,t;

19!printf("\nPleaseenter

w

scanf(%ld"r&s);

20;fun(sr&t);

w

215printf("Theresultis:%ld\nrt);

构!22!J

标准答案:(l)if(d%2==0)(2)s/=10;

知识点解析:本题中函数的功能是将长整型数s中每一位上为偶数的数依次取出,

构成一个新数放在t中。首先在函数中对长整型数的每一位来进行截取,然后对其

进行判断,最后根据判断结果进行操作。

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

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

s中,请编写函数fun,它的功能是:把高于等于平均分的学生数据放在b所指的

数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。

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

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

♦include<stdio.h>

2♦defineN12

3typedefstruct

4(charnum[10);

5doubles;

6}STREC;

7doublefun(STREC*a,STREC*b,int

♦n)

8

9

10

11main()

wHw

12(STRECs(N]-{{GA05r85b(GA03"r76b

{BGA02”,69},「GA04”,85},(”GA01”,91),

{-GA07",12},{MGA08",64),("GA06",87),

ww

(GA090r60),(GAll"r79}r("GA12"r73b

{“GA10”,90});

13STRECh(N),t;FILE*out;

14intdoubleave;

15ave-fun(s,h,&n);

16printf("The%dstudentdatawhich

ishigherthan%7.3f:\n",n,ave);

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

18printf("%s%4.lf\nR,h[i].num,

h(i].s);

19printf("\n");

20out■fopen("out.dat","wM);

M

21fprintf(out,%d\n%7.3f\n"rn,

ave);

22for(i-0;i<n-l;i++)

23for(j-i+1;j<n;

24if(h(i].s<h[j].s)

{t-h(i];h[i]-h(j);h[j]-t;}

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

26fprintf(out,"%4.s);

27fclose(out);

28

1doublet«0;

2inti;

3*n«0;

4for(i-0;i<N;i++)t»t+a[i].s;

5t-t/N;

6for(1-0;i<N;i+4)if(a[i].s>t)b

[(wn)++)-a(i];

标准答案:7returnt;

知识点解析:该程序功能是把高于或等于平均分的学生数据放在b所指的数组中,

高于等于平均分的学生人数通过形参n传回,平均分通过函数返回值返回。解题过

程首先求得平均分,然后将所有成绩与平均分进行比较,如果大于或等于平均分,

存入指定数组。

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

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

1、请补充函数fun(),该函数的功能是把数组bb中的数按从小到大的排列(数组的

值及元素个数从土函数中输入)。例如,输入23541,结果为12345。注意:

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

fun()吧的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h

>#defineN100voidfun(intbb[],intn){intfor(i=0;[];i++)for(j=0;

【];j++)if(bb[j]>bbU+l]){t=bb[j];bb[j]=bb[j+1];bb[j+l]=t;}}main(){inti=0,

n=0;intbb[N];clrscr();printf("\nlnputn:\n");scanf("%d",&n);printf("\nlnputdata:

\n");while(i<n){printf(nbb[%d]i);scanf(n%dH,&bb[i]);i++;)fun(bb,n);

printf("\n***theresult***\n");for(i=0;i<n;i-H-)printf(',%4d,\bb[i]);}

标准答案:iVnjVn-1

知识点解析:第一空:本题采用冒泡法进行排序。冒泡法的思路是:如果对n个数

从小到大排序,则要进行n轮比较,在每一轮比较中要进行n-1次两两比较。所谓

两两比较就是从头到尾依次将相邻两个数进行比较并将其中大的数放在后面,即两

两比较后这两个数要形成题中所要求的顺序。理解了冒泡法的思路,则此空应填i

<no

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

2、以下程序可把输入的十进制数以十六进制数的形式输出。请在横线上填上适当

的内容并把横线删除,使它能得出正确的结果。注意:不要改动main函数,不得

增行或删行,也不得更改程序的结构。试题程序;main。{char

b[17]={-0123456789ABCDEF");intc[64],d,i=0,base=16;longn;printfC'Entera

numberin'*)*scanf("%ld"&n),do{/*****************found****************/

c[i]=;i++;n=n/base;}while(n!=0);printf("Transmitenewbase:\n");for(-i;i>

/***************found*******************/{d=c[i],printb.);)

printf("\nM);}

标准答案:(1)错误:缺少语句正确:应填入!!%62$©或%16⑵错误:缺少语句正

确;应填入[d]

知识点解析:在该程序中,字符数组b存储十六进制的16个数字符,整型数组c

存储译出的十六进制数的各位数值。从整数n译出它的各位十六进制数值,需采用

除16取余的方法,即求n除16的余,得到它的十六进制的个位数,接着将n除以

16。在n不等于。的情况下循环,能顺序求出n的十六进制的个位数、十位数、百

位数等。程序中变量base已预置16,所以在第1个空框处可填代码n%base或n%

16o当n的十六进制数的个位、十位、百位等依次存放于数组c中后,就从最高位

至最低位,参照数组c[i]的内容d(以其内容为下标),取十六进制数字符表中的字

符b[d]输出。所以在第2个空框处可填入代码[山。

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

3、请编写函数fun(),它的功能是计算:s=(1n⑴+1n(2)+ln(3)+…+ln(m)严在c语

言中可调用log(n)函数求ln(n)。例如,若m的值为20,则fun()函数值为

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

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

<conio.h>#include<stdio.h>#include<math.h>doublefun(intm){)main()

{clrscr();printf("%f\n",fun(20));)

标准答案:doublefun(intm){inti;doubles=0.0;for(i=l;i<=m;i++)s=s+

log(i);/*计算s=ln(1)+ln(2)+ln(3)+...+in(m)*/returnsort(s);/*对s求平方根并返

回*/)

知识点解析:首先,题目要求计算从1到m的对数的和,可用从1到m的循环,

每次循环都累加求和。咳题需要注意之处是,log。函数的形式参数应当为double

型变量,而用于循环的基数变量为整数,需要进行强制转换。在返回的时候求小平

方根。

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

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

1、下列给定程序中,函数fun()的功能是:对N名学生的学习成绩,按从高到低的

顺序找出前m(rnSO)名学生来,并将这些学生数据存放在一个动态分配的连续存

储区中,此存储区的首地址作为函数值返回。注意:部分源程序给出如下。请勿

改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的

若干表达式或语句。试题程序:#include<stdio.h>#include<malloc.h>#includc

<string.h>#include<conio.h>#defineN10lypedefstructss{charnum[10];int

order;)STU;STU*fun(STUa[],ihtm){STUb[N],*tt;inti,j,k;[];for(i=0;i<N;

i++)b[i]=a[i];for(k=0;k<m;k++){for(i=j=O;i<N;i++)if([])j=i;tt[k]=b|j];

b[j].order=0;)return[];)outresult(STUa[],FILE*pr){inti;for(i=0;i<N;i++)

fprintf(pf,"No=%sMark=%d\n",a[i].num,a[i].order);fprintf(pf,"\n\n");)main(){STU

[N]={(HAO1M,80},{nA02",79),{“A03”,66},{“A04”,82},{“A05”,87},

{"A06",93},{"A07",78},(nA08",60),{"A09';85),{"A10",73));STU*p_order;inti,m;

clrscr();printf("***TheOrigialdata***\nn);outresult(a,stdout);printf(H\nGivethe

numeberofthestudentswhohavebetterscore:");scan「("%cT,&m);while(m>10)

{printf("\nGivethenumberofthestudetswhohavebetterscore:");scanf("%d",&mi;}

p_order=fun(a,m);printf("***THERESULT***\nn);printf("***Thetopstudents

***\n");for(i=0;i<m;i十十)printf("%s%d\n",p_order[i].num,p_order[i].order);

free(p_order);}

标准答案:tt=(STU*)malloc(sizeof(STU)*m)b[i].order>b[j].ordertt

知识点解析:第一空:H是结构体STU型指针,声明时并没有进行初始化,所

以,需要使用malloc()函数动态申请存储空间。动态申请存储空间的大小取决于函

数的形参m。第二空:按成绩高低找出前m名学生的方法是,先假设第一名学生

成绩最高,依次与其他学生的成绩进行比较,如果出现成绩更高者,则认为这名学

生成绩最高,全部比较完后找到成绩第一名的学生,存入指针tt所指的结构体空

间中,同时将这名同学的成绩置0,这样在其他同学中找第一名就相当于找到所有

同学中的第二名,依此类推,进行m次循环,找到前m名学生v第三空:题目要

求函数值返回动态分配的存储区的首地址,所以返回指针tto

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

2、下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点数据域

赋值。函数fun()的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并

且作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:不要

改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:include

<stdio.h>#include<conio.h>#include<stdlib.h>lypedefstructaa{intdata;

structaa*next;}NODE;/*************found**************/fun(NODE*h){int

max=-1;NODE*p;p=h->next;while(p)(if(p->data>max)max=p->data;

/*************^^und**************/next•1returnmax;}outresult(ints,

FILE*pf){fprintf(pf,"\nThemaxinlink:%d\n",s);JNODE*creatlink(intn,intm)

{NODE*h,*p,*s,*q;inti,x;h=p=(NODE*)malloc(sizeof(NODE));h->data=9999;

for(i=l;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s->data=rand()%m;s->

next=p->next;p->next=s;p=p->next;}p->next=NULL;returnh;}outlink(NODE

*h,FILE*pf){NODE*p;p=h->next;fprintf(pf,M\nTheLIST:\n\nHEAD");while(p)

{fprintf(pf,"->%d'\p->data);p=p->next;}fprintf(pf,"\n");)main(){NODE*head;

intm;clrscr();head=creailink(12,100);outlink(head,stdout);m=fun(head);printf(H\rThe

RESULT:\n");outresult(m,stdout);)

标准答案:(1)错误:fun(NODE*h)正确:intfun(NODE*h)(2)错误:p=h->next;

正确:p=p->next;

知识点解析:本题考查的这种链表的数据结构中,必须利用指针变量才能实现。即

一个结点中应包含一个由针变量,用它存放下一结点的地址。建立单向链表的一般

步骤是:建立头指针一建立第一个节点一头指针指向第一个节点一建立第二个节点

一第一个节点的指针域指向第二个节点一……一最后一个节点指向NULLo本题重

点是:了解链表的基本思想和相关算法,其实考试时的程序根本没有书上的难。在

这里我们要说,重点理解有关链表插入及删除时指针移动的先后顺序问题。注意指

针的保存和归位。(即头指针的保存和链表遍历时指针的归位)。这都是考试重点!

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

3、请编写一个函数fun{),它的功能是:比较两个字符串的长度,(不得调用C语

言提供的求字符串长度的函数),函数返回较K的字符串。若两个字符串长度相

等,则返回第1个字符串。例如,输入beijingVCR>shanghaiVCR>(VCR>为

回车键),函数将返回shanghai。注意:部分源程序给出如下。请勿改动主函数

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

试题程序:#include<stdio.h>char*fun(char*s,char*t){}main(){char

a[20],b[10],*p,*q;inti;printf("Input1thstring:");gets(a);printfj"Input2thstring:");

gets(b);printf("%s",fun(a,b));}

标准答案:char*fun(char*s,char*t){inti,i;fbr(i=0;s[i]!=''0';计+);/*求字符串的长

度*/for(j=0;t[i]!=)(T;j++);if(i>=j)/*比较两个字符串的长度号returns;/*函数返回

较长的字符串,若两个字符串长度相等,则返回第1个字符串*/elsereturnt;}

知识点解析:本题中,第1个for循环的作用是求出s的字符个数i,第2个酎循

环的作用是求出t的字符个数j,因为任何循环都要控制一条语句,所以在每一个

for循环条件后面必须要有一个分号。本题也可用如下技巧:char*fun(char*s,char

*t){if(strlen(s)>=strlen(t)returns;elsereturnt;}

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

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

1、

给定程序中,函数fun的功能是;将NX晚阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。

例如,N=3,有下列矩阵M

讨算结果为[旬

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

注意।源程序存放在考生文件夹下的BLANK1.C中。

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

ttinclude<stdio.h>

#defineN4

voidfun(int(*t)[N])

{inti,j,x;

/**********fogd**********/

for(i=0;i<[1];i++)

(

/**********found**********/

x=t[i][[2]];

for(j=N-l;j>=l;j—)

t[i][j]=t[i][j-U;

/**********found**********/

t[i][⑶]=X;

)

}

niainO

{intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;

printfCTheoriginalarray:\n,z);

for(i=0;i<N;i++)

{for(j=0;j<N;j++)printfC%2d"t[i][j]);

printfC\n*);

)

fun(t);

printf(,z\nTheresultis:\n");

for(i=0;i<N;i++)

{for(j=0;j<N;j++)printf("%2d”,t[i][j]);

)

)

标准答案:Oj--j

知识点解析:第一空:由审题分析可知,此处是使第一列成为第一行,即把第一列

元素移动到第一行,第一列元素是第一行元素是故第一空处

应为“0”。第二空:第四个循环是最后一列成为最后一行,即将最后一列移动到最

后一行,“for(j=N-l;j>=0;2)”循环变量j从N-1开始,到0结强共循环N

次,故j每次减一,第三空处是“j-"。第三空:最后一个循环将临时数组中的元素

成为最后一列,即故第三空处应为“j”。

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

2、给定程序MODH.C中函数fun的功能是:找出100至n(不大于1000)之间三位

数字相等的所有整数,巴这些整数放在s所指数组中,个数作为函数值返回。请

改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main

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

fun(int*s,intn)(inti,j,k,a,b,c;j=0;for(i=100;ilOOO);num=fun(a,

n);pr-ntf("\n\nTheresult:\n");for(izO;i

标准答案:(l)k=i;(2)c=k%IO;

知识点解析:(1)第一个标识下的“k=n”,n是一个固定值,循环计算结果每次都会

一样,这里应该是从100开始往n计算,逐个求个位、十位和百位,故第一标识下

应改为“k=i;"o(2)C语言语句以分号“;”结尾,而第二标识下“c=k%10”没有用分

号结尾,显然不正确,应改为“c=k%10:

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

3、请编一个函数tim(char*s),函数的功能是把s所指字符串中的内容逆置。例

如:字符串中原有的字符串为:abcdefg,则调用该函数后,串中的内容为:

gfedcbao注意:部分源程序存在文件PROGI.C中。请勿改动主函数main和其

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

#include#defineN81fun(char*s){)NONO(){/*请在此函数内打开文件,输入测

试数据,调用fun函数,输出数据,关闭文件。*/inti;chara[N];FILE*rf,*\vf;

rf=fbpen("in.dat",nrH);wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,

"%s",a);fun(a);fprintf(wf,M%s\n",a);)fclose(rf);fclose(wf);)main(){chara[N];

printf("Enterastring:");gets(a);printf("Theoriginalstringis:");puts(a);fun(a);

printf(n\n");printf("Thestringaftermodified:");puts(a);NONO();)

标准答案:{charb|N|;inti=0,j;memset(b,0,N);for(j=strlen(s)-l;j>=0;j-

-)b[i++]=s[j];strcpy(s,b);}

知识点解析:进入fun函数,根据前面的分析:首先求得字符串的长度,然后通

过循环进行字符交换。要注意的是,如果字符串长度是奇数,则最中间的元素在逆

置前后的位置是没有改变的。

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

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

1、给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编

号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一

个数据块写到名为myfilc5.dat的二进制文件中。请在程序的下划线处填入正确

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

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

#inckide#defineN5typedefstruct{intnum;charname[10];chartel[10];}STYPE;void

check。;/**********found**********/intfun([1]*sld)

।/**********found**********/[2]inti•

if((fp=fopen("myfile5.dat"/'wb"))==NULL)return(O);printf("\nOutputdatatofile!\n");

for(i=0;i

标准答案:STYPEFILEfp

知识点解析:第一空:在main。函数中,观察fun()函数调用:k=fun(s),由s的定

义可知s是STYPE结构体数组,即传入fun函数的参数是STYPE结构体数组的首

地址,因此fun()函数的参数是STYPE结构体指针,故(1)处应该为int

fun(STYPE*std)o第二空:在C语言中,fopen函数的调用形式是:FILE

fphopen(文件名,文件使用方式),在fun()函数体内部,由

if((fp=fopen(,,myfile5.dat,',"wb,,))==NULL)nJ^,fp是一个指向FILE类型的指针变

量,因此(2)处是指针变量fp的定义,WFILE*fpo第三空:fwrile函数的调用

形式是:fwrite(buffer,size,count,fp),buffer是一个指针,指向输入数据存放在内

存区的起始地址,size是要输入的字节数,count是要输入大小为size个字节的数

据块的个数,fp是文件指针。因此(3)处应该添加文件指针,由前面的定义可

知,fun函数内的文件指针是fp,即(3)处是fw由e(&std[i],sizeof(STYPE),l,

fp)。

二、程序修改题(本题共/题,每题/.0分,共/分C)

2、

给定程序M0D1LC中函数fun的功能是,计算并输出high以内最大的10个素数之和。high的值由主函数传给fun的数。

若high的值为:100,则函数的值为:732。

请改正程序中的错误,使程序能输出正确的结果。

注意।不要改动main函数,不得增行或删行,也不得更改程序的结构!

"include<stdio.h>

tfinclude〈math,h〉

intfun(inthigh)

{intsum=0,n=0,j,yes;

/****:M:****4*found************/

while<(hi5h>=2)a&Gi<10)

(yes=1;

for(j=2;j<=high/2;j++)

if(high%j=0){

/**********+*found************/

yes=0;break

}

if(yes)(sum+=high;n++;)

high一;

)

returnsum;

}

main()

(

printfun(100));

)

标准答案:while((2<=high)&&(n<10))break;

知识点解析:(1)C语言中左右括弧必须成对出现,在第一个标识下“while

((high>=2)&&(n<10)”中,显然缺少一个右括弧,应改为

4i,,

while((2<=high)&&(n<10))o(2)在判断素数的循环过程中,只要被判断的数能

被某数整除就不是素数,就会跳出判断循环,在C语言中使用break语句跳出循

环,并且C语言中的语句使用分号为结尾。所以“break”应改为“break;"。

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

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

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

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

函数后,c=524K注意:部分源程序存在文件PROG1.C中。数据文件IN.DAT

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

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

main(){inta,b,longe;voidNONO();printf("Inputa,b:");Scanf("%d%cT,

&a,&b);fun(a,b,&c);printf("Thcresultis:%ld\n",c);NONO();}void

NONO()(/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。

*/FILE*rf,*wf;inti,a,b;longe;rf=fopen("in.dat'\"r");

wf=fopen("out.dat","w");for(i=0»i<10;i++){fscanf(rf,"%d,%d",&a,

&b);fun(a,b,&c);fprintf(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/l。实

现。(2)设x0、xl、x2、x3为一位数,则x0、xlxl0>x2xl00>x3xl000,可以分

别使x0、xl、x2、x3构成个、十、百、千带权数,而xO+xlxlO+x2xlOO+x3xlOOO

构成四位数。本题最多只考虑四位数。

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

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

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

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

指字符串为:ud123fghS##43df,处理后新字符串为:123543asdfgll##df。请在程序

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

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

的结构!#include#include#include#includechar*funichar*s){inti,j,k,n;

char*p,*t;n=strlen(s)+l;t=(char*)malloc(n*sizeof(char));

p=(char*)malloc(n*sizeof(char));j=0:k=0:for(i=0;i

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

知识点解析:第一空:由审题分析可知,p字符串保存数字字符,j记录p字符串

的长度,故第一空处应填“j”。第二空:“for(i=0;i<[2];i++)pD+i]=t[i];”是将t

字符串串里的k个字符放在p字符串后面,I字符串的长度是k,故第二空处应为

“k”。第三空:p字符串保存了按题干要求的字符内容,函数的返回值应指向字符

串地址的指针,故第三处是“p”。

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

2、给定程序MODII.C中函数fun的功能是:求三个数的最小公倍数。例如,给

主函数中的变量xl、x2、x3分别输入15112,则输出结果应当是:330。请改正

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

行,也不得更改程序的结构。#include/*********次found**************/fun(int

x,y,z){intj,t,n,m;j=l;t=j%x;m=j%y;n=j%z;

while(t!=0||m!=0||n!=0)(j=jJ+l;t=j%x:m=j%y:n=j%Z;)/

returni;}main(){intxl,x2,x3>j;

printf("Inputxlx2x3:");scanf(M%d%d%dn,&xl,&x2,&x3);printf("xl=%

d.x2=%d,x3=%d\n'.xl.x2.x3):j=fnn(x1.x2.xl):printf("Theminimal

commonmultipleis:%d\n",j);}

标准答案:(l)intfun(intx,inty,intz)(2)returnj;

知识点解析:(1)在主函数中x2,x3);\可知fun函数有3个整型形

参,且有整型返回值,在第一个标识下,应该有三个int声明的变量,故第一标识

下应改成"intfUn(intx,inly,intz)”。(2)在循环“whileq(t!=0||m!=0||n!=0)”中,当

I、m和n均为O时,即j%x、j%y和j%z均等于0,循环条件为假,退出循环,

此时j就是x、y和z的最小公倍数,故函数的返回值为j。

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

3、请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字

符按ASCII码降序排列。例如,原来的字符串为CEAedca,排序后输出为

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

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

#include#includevoidfun(char*s,intnum){}NONO(){/*请在此函数内打开文件,

输入测试数据,调用fun函数,输出数据,关闭文件。*/chars[10];FILE*rf,

*wf;inti=0;rf=fopen("in.dat","r");wf=fopenC'out.dat'V'w");while(i<10)

{fgets(s,1O,rf);s[7]=0;fun(s,7);fprintf(wf,"%s\n",s);i++;}fclose(rf);fclose(wf);}

main(){chars[10];print]("输入7个字符的字符串gels(s);fun(s,7);

printf(n\n%sn,s);NONO();}

标准答案:{chart;inti.j;for(i=l;i

知识点解析:进入fun函数,根据前面的分析:选择排序法中的降序排序,首先

从数组中挑选一个最大的元素,把它和第一个元素交换,接着从剩下的num-1个

元素中再挑出一个最大的元素,把它和第二个元素交换,不断重复以上过程,直到

比较完最后两个元素。

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

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

1、请补充main函数,该函数的功能是:如果数组aa的前一个元素比后一个元素

小,则把它保存在数组比中并输出。例如,输入“40,51,62,33,35,52,48,

95,66,73”,则结果输出“40,51,33,35,48,66”。注意:部分源程序给出如

下。请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填

入所编写的若干表达式或语句。试题程序:#includcVstdio.h>#dcfincN10main

(){inti,n=0;intaa[N]={40,51,62,33,35,52,48,95,66,73);intbb[N];clrscr();for

(i=0;i<【];i++)if(an[i][i+l])[];printf("\n***displayhh***Tn");for

(i=0;i<n;i++)printf("bb[%d]=%2d",【】);}

标准答案:N-lbb[n++]=aa|i|i,bb[i]

知识点解析:第一空:题目要求找出比后一个元素小的元素,所以最后一个元素不

需要参加判断,因为它后面没有元素了,所以f。「循环中,i取值从。到N-2。第二

空:将满足题目要求的元素存入数组bb中。第三空:题目要求将数组bb中的数输

出,所以输出函数的输出列表是i和bb[i]。

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

2、给定程序中,函数fun()的功能是:求输入的两个数中较小的数。例如:输入5

10,结果为minis5。请改正fun()程序中的错误,使它能得出正确的结果。注

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

#includeVstdio.h>#includeVconio.h>/*************found**************/int

fun(intx,y)(intz;z=x<y?x:y;return(z);)main()(inta,b,c;scanf("%d,%d\n”,&a,

&b);c=fun(a,b);printf("minis%d",c);}

标准答案:错误:inlfun(intx,y)正确:inil、un(imx,inty)

知识点解析:C语言中规定,在函数的形参中不允许出现intx,y之类的语句,必

须指定每一个参数的类型,所以在做类似题目时一定要谨慎。

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

3、请编写函数fun(),该函数的功能是:将放在字符串数组中的M个字符串(每串

的长度不超过N),按J顷序合并组成一个新的字符串。例如,若字符串数组中的

M个字符串为AAAABBBBBBBCC则合并后的字符串内容应该是

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

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

#includc<conio.h>#dcfineM3#defincN20voidfun(chara[M][N],char*b){}

main(){charw[M][N]={"AAAA","BBBBBBB","CC"),i;chara[100]={H

####################");printf("Thestring:\n");for(i=0;i<M;i++)puts(w[i]i;

printfC\nn);fun(w,a);printf("TheAstring:\n");printf("%sn,a);printf("\n\nn);|

标准答案:voidtun(chara[M][NJ,char*b){inti,j,k=0;for(i=0;i<M;i++)/格将

字符串数组中的M个字符串,按顺序存入一个新的字符串*/for(j=0闺i]

[j]!=,\0\j++)b[k++]=a[i]U];b[k]='(T;/*在字符串最后加上结束标志符*/}

知识点解析:本程序中for(i=0;i〈M;i++)循环的作用是用于对二维数组行的控

制,第2个循环的作用是从同一行中取出字符并存放到一维数组b中,语句是

b[k++]=a[i]U];o

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

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

1、给定程序中

温馨提示

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

评论

0/150

提交评论