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

下载本文档

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

文档简介

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

(共9套)

(共26题)

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

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

1、

给定程序中,函数fun的功能是:将NXN矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换。

例如,若N=3,有下列矩阵:[*]

交换后为:[*]

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

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

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

#include<stdio.h>

#defineN4

/**林******found**********/

voidfim(int11],intn)

linti,s;

/**科***4^found**********/

for([2J.i<n.i++)

{s=t[i][i];

/**林***:*r^:fOgd***壮***林/

t[i][n-l-i]=13];

}

)

roainO

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

printfC^XnTheoriginalarray:\n,z);

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

{for(j=0;j<N;j++)printfC«d*t[i][j]);

)

N):

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

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

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

printf("\n");

)

}

标准答案:l[][N]i=0s

知识点解析:第一空:在主函数中fun函数的调用形式是“fun(t,N);",t是二维数组

名,故fun函数的第一个参数为指针,因此第一空处应为第二空:fun函

数的第二个参数n指明了矩阵的大小为n,对角线元素与反向对角线元素有n个,

故循环有n次,因此变量i从。开始,到n-1结束,因此第一空处应为“i=0;i

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

2、给定程序MODH.C中函数fun的功能是:将s所指字符串中最后一次出现的

与U所指字符串相同的子串替换成t2所指字符事,所形成的新串放在w所指的数

组中。在此处,要求tl和12所指字符串的长度相同。例如,当s所指字符串中的

内容为:"abcdabfabc”,tl所指子串中的内容为:“ab”,t2所指子串中的内容

为:“99”时,结果,在w所指的数组中的内容应为:"abcdabf99c”。请改正程序中

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

也不得更改程序的结构!#include#includevoidfun(char*s,char*tl,char*t2,char

*w){char*p,*r,*a=s;strcpy(w,s);/************f0Un(j************/while(w){p

=w-r=t]・while(*r)/************found************/[F(*r^=*p){r++•p++・}else

break;if(*r='\0')a=w;w++;}r=t2;while(*r){*a=*r;a++;r++;}}main(){char

s[100],tI[100],t2[100],\v[100J;printf(u\nPleaseenterstringS:");scanf("%s",s);

printf("\nPleaseentersubstringtlscanf("%s",tl);printf("\nPleaseentersubstring

t2:");scanf(0%sH,t2);if(strlen(tl)==strlen(t2)){fun(s,tl,t2,w);printf("\nTheresult

is:%s\n'\w);}elseprintf("\nError:strlen(tl)!=strlen(t2)\nM);)

标准答案:vvhilc(*w)if(*r==*p)

知识点解析:(1)第一个标识符下while循环中的判断条件不指向字符串尾,就

进入循环进行子串出现判断与替换操作,while循环中指向w字符串尾的指针,应

该是“whilc(*w)”(2)第二个标识下“IF(*r==*p)”是比较r指向的字符和p指向的字

符是否相同,在C语言中没有“IF”关键字,应该用if语句,故第二个标识下应改成

«if[*r==*py\

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

3、请编写一个函数fun,它的功能是:求出1到m之间(含m)能被7或11整除的

所有整数放在数组a中,通过n返回这些数的个数。例如,若传送给m的值为

50,则程序输出:711142122283335424449注意:部分源程序存在文件

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

花括号中填入你编写的若干语句。#includc#dcfincM100voidfun(intm,int*a,int

*n)()maiiiO{intaa[M],n,k;voidNONO();fun(50,aa,&n);for(k=0;k<n;k十十)

if((k+1)%20==0)printf("\n");elseprintf(n%4d",aa|k|);printf(u\n");NONO();)void

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

*/FILE*fp,*wf;inti,n,j,k,aa[M],sum;fp=fopenC'in.dat'V'r");wf=

fopen("out.datH,"w");for(i=0;i<10;i++){fscanf(fp,"%d,n,&j);fun(j,aa,&n);sum

=0;for(k=0;k<n;k++)sum+=aa[k];fprintf(wf,r,%d\n",sum);}fclose(fp);

fclose(wf);}

标准答案:{inii,j=0;*n=0;for(i=l;i<=m;i++)if(i%7==0||i%ll==0){j++;)

*n=j;}

知识点解析:进入fun函数,根据前面的分析:(1)数i能否被7或II整除,它

的逻辑表达式为“(i%7=0||i%l1==0)”。(2)其中满足被7或11整除的数的个

数,可以用累加器j来计数。

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

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

1、给定程序中,函数fun的功能是:判断形参s所指字符串是否是"回

文”(Palindrome),若是,函数返回值为1;不是,函数返回值为0。“回文”是正读

和反读都一样的字符串:不区分大小写字母)。例如,LEVEL和Level是"回文”,

而LEVLEV不是“回文”。请在程序的下划线处填入正确的内容并把下划线删除,

使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK.I.C

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

1tinclude<stdio.h>

2tinclude<string.h>

3tinclude<ctype.h>

4intfun(char*s)、

5(char*lp,*rp;

6/………*found…*……/

7

8rp-s*strlen(s)-1;

9while((toupper(*lp)Mtoupper

(*rp))&&(lp<rp)){

10/………*found……•…/

11】p++;rp_2_;}

12/……*…C*………/

13if(lp<rp)_3_;

14elsereturn1;

15

16main()

17(chars[81];

18printf("Enterastring:");scanf

C%s\s);

19if(fun(s))printf("\n\"%s\Misa

Palindrome.\n\n",s);

20elseprintf(H\n\"%s\"isn*ta

Palindrome.\n\n",s);

21;)

标准答案:(l)s(2)--(3)retumO

知识点解析:函数fun的功能是:判断形参s所指字符串是否是“回文”,即比较第

一个字符和最后一个字符是否相同,第二个字符和倒数第二个字符是否相同,依此

类推,可以用循环来实现。

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

2、给定程序MODH.C中函数fun的功能是:把主函数中输入的3个数,最大的

放在a中,最小的放在c中,中间的放在b中。例如,输入的数为:551234,输

出结果应当是:a=55.0,b=34.0,c=12.0。请改正程序中的错误,使它能

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

1!*include<stdio.h>

2ivoidfun(float*a,float*b,float*c)

4*********found********

5float

6if(*a<*b)

7{k-*a;*a-*b;*b-k;}

8►♦♦♦♦♦***found********

9if(*a>*c)

10{k-*c;*c-*a;*a-k;)

if(*b<*c)

12{k-*b;*b-*c;*c-k;}

13

14main()

15{floata,b,c;

16printf("Inputabc:");scanf

w

(%f%f%fr4ar&br&c);

17printf("a-%4.Ifrb

H

%4.lf\n\nra,b/C);

18fun(&a,&c);

%4.lf,c

19printf(**a■%4.Ifrb

%4.lf\n\n”,a,b,c);

结构。20J}

标准答案:⑴floatk;(2)if(*a<*c)

知识点解析:本题中函数的功能是把主函数中输入的3个数,最大的放在a中,最

小的放在c中。对三个数进行两两比较,实现函数功能。

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

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

串尾部的*号全部删除,前面和中间的*号不删除。例如,字符串中的内容为:

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

****A*BC*DEF*G。在编写函数时,不得使用C语言提供的字符串函数。注意:

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

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

1!・include<stdio.h>

2ivoidfun(char*a)

3,•

4

5j

6;main()

7•{chars[81];voidNONO();

8•printf("Enterastring:\nM);

gets(s);

9\fun(s);

10•printf("Thestringafterdeleted:

\n");puts(s);

11\NONO<);

12j)

13IvoidNONO()

14;(/*本函数用于打开文件,输入数据,调用函

数,输出数据,关闭文件.*/

15iFILE*inr*out;

16\inti;chars[81];

17•in-fopen("in.dat","r");

18\out-fopen("out.dat","w");

19\for(i-0;i<10;i++)(

20»fscanf(inr“%s”,s);

21\fun(s);

22;fprintf(out,"%s\n"/s);

23\

)

24•fclose(in);

25!fclose(out);

26;

inti«0;

2char*p,*q;

3p-q-a;

4while(*p)

5P++;

6p-;

7while(*p==*

8p一;

9while(q<=p)

10(

11a(i]-*q;

12i++;

13q++;

14)

标准答案:15

知识点解析:该程序功能是将字符串尾部的“*”号全部删除,前面和中间的号不

删除。本题的解题过程首先确定由串尾开始的第一个非“*”位置,将由头开始到此

位置的字符拷贝到字符串。

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

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

1、函数fun的功能是:计算,~2!短的前n项。若x=2.5,函数值

为:12.182340。请在程序的下划线处填入正确的内容并把下划线删除,使程序

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

行或删行,也不得更改程序的结构!#includedoublefun(doublex,intn){doublef,

t;inti:f=1.0;/******************found*************/t=【1】;/

不不不不不不不不不不不不不不不不不不louna不不斗不予不予不不不*不不/।or(1二iyi•1

标准答案:(l)l(2)l(3)i

知识点解析:第一空:艰据"returnf;",“件=t;”可知f是级数和返回值,t代表级

数项,第一空处是对I进行初始化,级数是从第二项开始变化的,显然I应该初始

化为1,故第一空处应为“1”。第二空:函数的功能是求级数前n项和,“41.0:

”f初始化为1,第一项不用再求,因此在循环当中还需要求后面的n—l个级数项

之和,故循环变量i从1变化到n-1。刚好循环n・l次,故第二空处应为“1”。第三

空:由审题分析可知级数项的变化规律是后一项是在前一项的基础上乘以X除以

n,故第三空处应为“i”。

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

2、给定程序MODH.C中函数fun的功能是:判断ch中的字符是否与str所指串

中的某个字符相同;若相同,什么也不做,若不同,则将其插在串的最后。请改

正程序中的错误,使它能进行正确的操作。注意:不要改动main函数,不得漕行

或删行,也不得更改程序的结构!#include#include/**********found*********void

fun(char*str,charch)*/voidfun(charstr,charch){while(*str&&*str!=ch)str++;

/**********found*********if(*str!=ch)*/while(*str!=ch){str[0]=ch;

/**********found*********str[1尸str[l]=,0\}main(){chars[81],c;

printf("\nPleaseenterastring:\nM);gets(s);printf("\nPleaseenterthecharacterto

search:");c=getchar();fun(s,c);printf("\nTheresultis%s\n",s);}

标准答案:voidfun(char*str,charch)if(*str!=ch)str[l]=,\O,;

知识点解析:(1)第一个标识下,“voidfun(charstr,charch)”根据主函数中的fun

函数的调用“fun(s,c)”,知道s为数组名,传的应该是数组地址,所以应改为“void

fun(char*str,charch)”。(2)while循环中对ch与str进行匹配检查,第二个标识

下,是当不同时执行连诿操作,那么判断*51「与Ch是否不同的表达式应该是

“if(*slr!=ch)”。(3)第三个标识下,连接后的新串耍添加结尾符,所以正确的表

达是将“str[1]=U改为“str[1尸\0"

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

3、程序定义了NxN的二维数组,并在主函数中赋值。请编写函数fun,函数的功

能是:求出数组周边元素的平均值并作为函数值返给主函数中的s。例如:a数组

01279

19745

a=23831

4S682

中的值为:5914,则返回主程序后s的值应为:3.375o注意:部分源程序

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

在函数fun的花括号中填入你编写的若干语句。#includc#includc#dcfineN5

doublefun(intw[][N]){(main(){inta[N][N]={0,1,2,7,9,1,9,7,4,5.

2,3,8,3,1,4,5,6,8,2,5,9,1,4,1);inti,j;void

NONO();doubles;printf(H*****Thcarray*****\n");for(i=0;i

标准答案:inli,j,n=0;doublesum=0;for(i=0;i

知识点解析;进入fun函数,根据前面的分析,采用循环分别对符合周边元素条件

的元素进行统计求平均值。

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

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

1、给定程序中,函数fun的功能是:在带有头结点的单向链表中,查找数据城中

值为ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号;若不存在

值为ch的结点,函数返回。值。请在程序的下划线处填入正确的内容并把下划线

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

中。不得增行或删行。也不得更改程序的结构!#include#include#de「ineN8

typedefstructlist{intdata;structlist*next;}SLIST;SLIST*creatlist(char*);void

outIist(SLIST*);intfun(SLIST*h,charch){SLIST*p;intn=0;p=h->next;

/**********found**********/while(pi=[]]){n++・/**********found**********/

if(p->data==ch)return[2];elsep=p->next;}return0;)main(){SLIST*head;intk;

charch;charhead=creatlist(a);outlist(head);

printf("Enteraletter:*');scanf("%cH,&ch);/*********xfound**********/

k=fun([3]);if(k==0)printf("\nNotfound!\n");elseprintf("Thcsequencenumber

is:%d\n",k);}SLIST*creatlist(char*a){SLIST*h,*p,*q;inti;h=p=(SLIST

*)malloc(sizcof(SLIST));for(i=0;idata=a[i];p->ncxt=q;p=q;}p->ncxt=0;returnh;}

voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)printf("\nThelistis

NULL!\nM);else{printf("\nHeadH);do{printf("->%cn,p->data);p=p->next;}

while(p!=NULL);printfT->End\n”);})

标准答案:0nhead,ch

知识点解析:第一空:这里是补充循环结束条件,链表是单向有限的,最后一个结

点的指针域指向NULL,因此可以用这个来作为循环结束条件,在p指向的结点的

指针域不是NULL时表明还有下一个结点,因此第一空处应该是

“whi1e(p!=NULL)”。第二空:在循环当中n用来记录顺序号,如果“if

(p->data==ch)”成立,则已经找到数据域中值为ch的结点,返回顺序号,即“return

n;Mo第三空:fun函数的调用形式是:fim(SLIST*h,charch),第一个参数是头结

点地址,第二个参数是需要寻找的ch值,因此第三空处应该是“k=fun(head,ch);"°

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

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

求平方根的迭代公式如下:♦媪)例如,a为2时,平方根值为:

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

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

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

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

/******************found*******************/if(fhbs(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、N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的

头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。例如,若学

生的成绩是:85,76,69,85,91,72,64,87,则平均分应当是:78.625。注

意:部分源程序在文件PROGL「中°请勿改动主函数main和其他函数中的任何

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

N8structslist{doubles;structslist*next;);typedefstructslistSTREC;double

fun(STREC*h){}STREC*creat(double*s){STREC*h,木p,*q:inti=0;h=p;

(STRBC*)malloc(sizeof(STREC));P—>s=0;while(i8=s[i];i++;p—>next=q;

p=q,)p->next=0;returnh;)outlist(STREC*h){STREC*p;p=h—>nexl;

printf(,'head,3;do{printf("一>%4.lf\P->s),p=p—^>next;)while(P!=0):

printf/\n\rT);)main()(doubles|N|={85,76,69,85,91,72,64,87},

ave,voidNONO();STREC*h;h=creat(s);outliSt(h);ave=fun(h);

printf(,,ave=%6.31An”,ave);NONO();}voidNONO。(/*本函数用于打开文

件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti,j;

doubles[N],ave;STREC*h;in=fbpen(,,in.dat","r");

out=fopen(,,out.dat”,"w");for(i=0;i<10;i++)(for(j=0;j

标准答案:STREC*p=h—>next;/*由于头结点中没有存放数据*/double

av=0.0;/*对计竟成绩平均值的变量进行初始化*/intn=0:

while(p!=NULL)(/*判断链表是否结束*/av=av+p->s;/*对成绩进行累加*/

p=p->next;/*到下一个结点位置*/n++;/*人数加1*/}av/=n;/*计算

成绩平均值*/returnav;/*返回成绩平均值*/

知识点解析:(1)首先定义存放平均值的变量,并对其初始化。(2)在循环中,依次

取链表中存放的成绩,并对其求和。(3)最后计算平均值,并返回值。

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

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

1、给定程序中,函数fun的功能是:将a所指3x5矩阵中第k列的元素左移到第

00列,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。例

1234534512

如,有下列矩阵:;;;:;若卜为2,程序执行结果为;:;:;靖

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

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

改程序的结构!#include#defineM3#defineN5voidfun(int(*a)[N]»intk){inti,j,

p,/***************^^und***************1•P<=[I].p++)

for(i=0;i

标准答案:(l)k(2)N一1(3)temp

知识点解析:第一空:由审题分析可知,循环的左移是把每列元素循环左移k个位

置,故循环条件是p<=k,故第一空处应为“k“。第二空:“for(j=0;j<[2];

j++)a[i][j]=a[i]U+l];”是把每列元素左移一个位置,总共有N列,最后一列存储被

移出来的放第一列,故需要移动N.I歹力循环条件为j

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

2、请编写函数Fun,函数的功能是:判断字符串是否为回文?若是,函数返回1,

主函数中输出:YES:否则返回0,主函数中输出NO。回文是指顺读和倒读都一

样的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注

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

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

N80intfun(char*str){}main(){chars[N];voidNONO();printf("Enterastring:');

gets(s);printf("\n\n");puts(s);if(fun(s))printf("YES\n');elseprintf(uNO\n");NONO();)

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

据,关闭文件。*/FILE*rf,*wf;inti;chars[N];rf=fopenC'in.dat'V'r");wf=

fopen("out.dat'\"wH);for(i=0;i<10;i++){fscanf(rf,"%sM,s);if(fun(s))fprintf(wf,

"%sYES\n",s);elsefprintf(wf,"%sNO\n",s);}fclose(rf);fclose(wf);)

标准答案:(inti,n=0,flag=l;〃初始设置标识位flag=lchar*p=str;〃设置工作指针

while(*p)〃取字符串大小{n++;p++;}for(i=0;i

知识点解析:进入fun函数,根据前面的分析:主要思路是:(1)首先用整型变

量i表示所判断的字符串中前面对应元素的下标。i初值为0,n是字符串的长度,

通过循环来求得n。(2)然后,把下标为i的字符与下标为的字符比较,

如果相同,i加1,继续进行一对一的字符比较。不断重复此过程,直到iNn/2为

止。在此过程中,如果下标为i的字符与下标为的字符不相同,则可以断定

字符串不是回文,立即退出函数。(3)如果正常结束循环,就说明字符串符合回

文条件。

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

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

1、给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个

数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。例如,形参s

所指的字符串为:ThisisaClanguageprogram,函数的返回值为6。请在程序的下

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

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

构!#includeintfun(char*s){intn=0,flag=0;while(*s!=,\0')

{if(*s,=,,&&flag==O){i******************found*******************/

[1].flao=1.|/******************found*******************/

1*s。i-1,,)Rag=:[)]•/******************found*******************/

[3];)returnn;)main(){charstr[8l];intn;printf("\nEnteralinetext:\

n");gets(str);n=fun(str):printf("\nfhereare%dwordsinthistext.\n\n",

n);}

标准答案:(1)n++(2)0(3)s++

知识点解析:第一空:“if(*7=,'&&flag==0)”说明找到空格了.单词的数量应加

1,故第一空处应为“n++”。第二空:"iR*s!=''&&flag==0)”和“ifTs=='')flag=

[2]:”在flag为0的情况下,n才加1,因此第二空处是将flag置0,即第二空

处应为“0”。第三空:“比怕(飞!=,\0,)”循环的终止条件是5达到结尾,因此在循环

体内s应该不断往字符串尾移动,即第三空为”S++”。

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

2、给定程序M0D11.C中函数fun的功能是:把主函数中输入的3个数,最大的

放在a中,最小的放在c中,中间的放在b中。例如,输入的数为:551234,输

出结果应当是:a=55.0,b=34.0,e=12.0。请改正程序中的错误,使它能得出

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

构。#includevoidfun(float*a,float*b,float*c){/********found***********

/^loat*k,if("a<*b){k=*a・*a=*b・*b=k.}/***********found*********/

if(*a>*c){k=*c;*c=*a;*a=k;)if(*b<*c){k=*b;*b=*c,*c=k;))main()

{floata,b,c;printf("Inputabc:");scanf&a,&b,&c);

printf("a=%4.If,b=%4.If,c=%4.If\n\n",a,b>c);fun(&a,&b,

&c);printf("a=%4.If,b=%4.If,c=%4.lf\n\n",a,b,c);}

标准答案:(l)floalk;⑵if(*a<*c)

知识点解析:(1)第一个标识下的变量k是在比较过程中,临时存放数据的变量,

因此k不应是指针,所以将“float";"改为“floatk:%(2)分析函数中第一个if语

句,如果主函数中ac,则进行对调,又把大数放在c中,这样的逻辑显然是混乱

的。因此第二个标识下"ifj*a>*c)”应该改为“if(*a<8c)”。

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

3、编写函数fun,它的功能是:求Fiboncci数列中大于t的最小的一个数,结果由

函数返回。其中Fibonacci数列F(n)的定义为:F(0)=0,F(l)=lF(n)=F(n-1)+F(n-

2)例如:当t=1000时,函数值为:1597。注意:部分源程序在文件PROG1.C

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

入你编写的若干语句。#include#includeintfun(intt){)main。/*主函数*/{in(n;

voidNONO0;n=1000;printfC'n=%d,f=%d\nM,n,fun(n));NONOO;)voidNONO()

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

*fp,*wf;inti,n,s;fp=fopcn(nin.dat","r");wf=fopcn("out.dat","w");for(i=0;i<

10;i++){fscanf(fp,"%d'\&n);s=fun(n);fprintf(wf,"%d\n",s);)fclose(fp);

fclose(wf);}

标准答案:{intf0=0,fl=l,f;do{f=fO+fl;fO=fl;fl=f;}while(f

知识点解析:(1)在循环中求得数列,并对数列的值进行判断,看是否符合题干

要求。(2)如果求得的数列值不满足题干要求,将当前值赋值给前一项,将前一

项赋给前一项的前一项,继续求下一项的数列值,直到满足条件。

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

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

1、给定程序中,函数fun的功能是:对形参s所指字符串中下标为奇数的字符按

ASCH码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符

数组中,形成一个新串。例如,形参s所指的字符串为:baawrskjghzlicda,执行

后p所指字符数组中的字符串应为:aachjlswo请在程序的下划线处填入正确的内

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

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

fun(char*s,char*p){inti,j,n,x,t;n=0;for(i=0;s[i]!=>\0\i++)n++;

for(i=l,is[j])t=j;if(t!=i){x=s[i];s[i]=s[t];s[t]=X:)}for(i=l,j=0;i

标准答案:⑴t=i(2)i(3jO或“\0”

知识点解析:第一空:由审题分析可知,I记录开始的字符,数组中挑选一个最小

的元素和I位置的字符交换,故第一空处应为第二空:“for(j=12]+2;j

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

2、给定程序MODH.C中函数fun的功能是:根据整型形参n,计算如下公式的

值。=…4=仃工例如,若n=10,则应输出:0.617977o请

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

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

******************found*******************/jfun(intn){float?X=],inti•

f/*A*2^«t»»>»f/••

/不平不千不千不干不千不干年可不不不不]ouna不干不不平不可不可不不不不不不不不不不/]or(i二,•\

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

知识点解析:⑴其中fun函数中的“floatA=l;”和“returnA;”语句说明fun函数具

有float返回值,所以将“inifun(inln)"改为"floatfun(hatn)”。(2)根据题干中给出的

公式,可以知道第11项的分母中A是第n-1项,所以第二个标识下的“for(i=2:i

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

3、请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返

回。二维数组中的值在主函数中赋予。例如:二维数组中的值为:[*]则函数值为

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

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

#defineM4#defineN5intfun(inta[M][N]){}main(){intaa[M][N]=({1,3,5,7,

9),{2,9,9,9,4},{6,9,9,9,8),{1,3,5,7,0)};inti,j,y;void

NONO();printf("Theoriginaldatais:\n");for(i=0;i

标准答案:inttot=0,i,j;for(i=O;i

知识点解析:进入fun函数,根据前面的分析:求周边元素的和,可以采用两个循

环分别把行元素和列元素相加。但要避免把周边元素重复相加。

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

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

1、给定程序中,函数fun的功能是:找出NxN矩阵中每列元素中的最大值,并按

顺序依次存放于形参b所指的一维数组中。请在程序的下划线处填入正确的内容

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

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

1finclude<stdio.h>

2♦defineN4

3voidfun(int(*a)[N],int*b)

4(intirj;

5for(i-0;i<N;"♦)(

6/♦********♦found***♦*♦*♦**/

7b(i]-_1_;

8for(j-1;j<N;j++)

9found*………/

10if(b(i)_2_a(j][i])b[i]-

a(j](i);

12

13main()

14{intx[N)(N]-{(12,5,8,7),[6,1,9,3),

{1,2,3,4},(2,8,4,3}力

15printf("\nThematrix:\n");

16for(i-0;i<N;

17(for(j-0;j<N;j++)printf

(74d",x[i][j]);

18printf(M\nw);

19

20found

21fun(_3_);

22printf(M\nTheresultis:n);

23for(i-0;i<N;printf("%3d"r

y(i]);

24printf("\n");

25

标准答案:(1)a[0][i](2)V(3)x,y

知识点解析:本题中函数勋的功能是找出NxN矩阵中每列元素中的最大值,并按

顺序依次存放于形参b所指的一维数组中。在胁函数内,多次寻找最大值,两个循

环嵌套就可以满足题干要求。

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

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

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

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

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

♦include<stdio.h>

♦defineN100

3intfun(int*s,intn)

4(intirj,kra,b,c;

5j-0;

6for(i«100;i<n;i++)(

7/•♦•**********found*m

8k-n;

9a-k%10;k/-10;

10b-k%10;k/-10;

11♦********found*************

12c-k%10

13if(a—b&&a««c)

14

15returnj;

16

17main()

18{inta[N],nrnum,。,i;

19do

20{printf("XnEntern(<-1000):

www

);scanf(%df&n);}

21while(n>1000);

22num«fun(a,n);

23printf(n\n\nTheresult:\n");

24for(i-0;i<num;i++)printf("%5d"r

25printf("\n\n");

26}

标准答案:⑴k=i;(2)c=k%10;

知识点解析:本题中函数的功能是找出100至

温馨提示

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

评论

0/150

提交评论