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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷1(共9套)(共27题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun(),该函数的功能是:返回字符数组中指定子符的个数,指定字符从键盘输入。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#defineN80intfun(chars[],charch){inti=0,n=0;while(【】){if(【】)n++;i++;}【】;}main(){intn;charstr[N],ch;clrscr();printf("\nInputastring:\n");gets(str);printf("\nInputacharactor:\n";scanf("%c",&ch);n=fun(str,ch);printf("\nnumberof%c:%d",ch,n);}标准答案:s[i]或者s[i]!=’\0’s[i]=chreturnn知识点解析:第一空:while循环的条件是当前参加比较的字符不为‘\0’,即还没有到字符串的最后一个字符。第二空:如果当前字符等于指定字符,则统计个数的变量n加1。第三空:函数要求返回字符数组中指定字符的个数,所以函数要返回n。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:对N名学生的学习成绩,按从高到低的顺序找出前叫m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include<conio.h>#include<string.h>#include<stdio.h>#include<alloc.h>#defineN10typedefstructss{charnum[10];ints;}STU;STU*fun{STUa[],intm){STUb[N],*t;inti,j,k;/*************found**************/*t=calloc(m,slzeof(STU));for(i=0;i<N;i++)b[i]=a[i];for(k=0;k<m;k++){for(i=j=0;i<N;i++)if(b[i].s>b[j].s)j=i;/*************found**************/t[k].num=b[j].num;t[k].s=b[j]s;b[j].s=0;}returnt;}outresult(STUa[],FILE*pf){inti;for(i=0;i<N;i++)fprintf(pf,"No=%sMark-%d\n",a[i].num,a[i].s);fprintf(pf,"\n\n");}main(){STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"Al0",71}};STU*pOrder;inti,m;clrscr();printf("*****THERESULT*****\n");outresult(a,stdout);printf("\nGivethenumberofthestudentswhohavebetterscore:");scanf("%d",&m);while(m>10){printf("lnGivethenumberofthestudentswhohavebetterscore:");scanf("%d",%m);pOrder=fun(a,m);printf("*****THERESULT*****kn");printf("Thetop:\n");for(i=0;i<m;i++)printf("%s%d\n",pOrder[i].num,p0rder[i].s);free(pOrder);}标准答案:(1)错误:*t=calloc(m,sizcof(STU));正确:t=calloc(m,sizeof(STU));(2)错误:t[k].num=b[j].num;正确:t[k]=b[j];知识点解析:calloc也用于分配内存空间。调用形式:(类型说明符*)calloc(n,size),功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。(类型说明符*)用于强制类型转换。calloc函数与malloc函数的区别仅在于一次可以分配n块区域。例如:ps=(struetstu*)calloc(2,sizeof(structstu));,其中的sizeof(structstu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配两块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。在本例中我们可别考虑那么复杂厂,根据定义类型STUb[N],*t;就可以看出*t=calloc(m,sizeof(STU));中的错误,t[k].num=b[j].num;的错误旨在考查对结构体概念的掌握和灵活应用程度。三、程序设计题(本题共1题,每题1.0分,共1分。)3、假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的K度,形参h给出了字符串中前导*号的个数,形参e给出了字符山中最后*号的个数。在编写函数时,不得使用c语言提供的字符串函数。例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仪在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>voidfun(char*a;intn,inth,inte){}main(){chars[81],*t,*f;intm=0,tn=0,fn=0;printf("Enterastring:\n");gets(s);t=f=s;while(*t){t++;m++;}/*m为字符串的长度*/t--;/*指针t指身字符串尾部*/while(*t==’*’){t--;tn++;}/*指针t指向最后一个字母,tn统计尾部’*’的个数*/while(*f==’*’){f++;fn++;}/*指针f指向第一个字母,tn统计导’*’的个数*/fun(s,m,fn,tn);printf("Thestringafterdeleted:\n");puts(s);}标准答案:voidfun(char*a,intn,inth,inte){inti,j=0for(i=h;i<n-e;i++)/*第一个字母和最后一个字母之间的字符全不删除*/a[j++]=a[i];a[j]=’\0;/*在字符串最后加上结束标记*/}知识点解析:注意循环变量i的初值(h)和终止值(n-e),由于h和e分别是a中的前导*和尾部*的个数,n是字符串的长度,所以从a[h])到a[n-e-1]之间的所有字符都要留下,而其他字符均删除。删除操作(即留下相应字符)现己由循环完成。本题技巧部分:voidfun(char*a,intn,inth,inte){a[n-e]=’\0;strcpy(a,a+h);}另外,请注意,a(n-e]的作用是使最后一个字母后出现字符串结束符。木程序采用了strcpy()库函数。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:对形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。例如,形参s所指的字符串为:baawrslkjghzlicda,执行后p所指字符数组中的字符串应为:aachjlsw。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)t=i(2)i(3)0或“\0”知识点解析:函数fun的功能是对形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符保存在另外一个数组中。在fun函数里,采用选择排序法对奇数位置的字符进行排序,排序之后将这些字符保存在p所指字符数组。在选择排序法中的升序排序中,首先从数组中挑选一个最小的元素,把它和第一元素交换,接着从剩下的n-1个元素中再挑出一个最小的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!标准答案:(1)y=1;(2)d=a-i;知识点解析:本题中函数的功能是为一个偶数查找两个素数,这两个素数之和等于该偶数。其中,函数fun用形参a放偶数,指针b和c放两个素数。把一个偶数分解成1和(x-1)两个数是否是素数,再分解为3和(x-3)这两个数,判断是否是素数,依此类推,直到找出这两个素数为止。本题中把偶数分解为i和d两个素数。判断i是否是素数,如果i不是素数,则i+2再循环;如果i是素数,则d=x-i,然后判断d是否是素数。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:把指定分数范围之外的学生数据放在b所指的数组中,分数范围之外的学生人数由函数值返回。例如,输入的分数是80和89,则应当把分数低于80和高于89的学生数据进行输出,不包含80分和89分的学生数据。主函数中把80放在low中,把89放在heigh中。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序#include<stdio.h>#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b,int1,inth){}main(){STRECs[N]={{“GA005”,55},{“GA003”,96},{“GA002”,80},{“GA004”,68},{“GA001”,88},{“GA007”,74},{“GA008”,85},{“GA006”,99},{“GA015”,90},{“GA013”,53},{“GA012”,66},{“GA014”,82},{“GA0ll”,73},{“GA017”,69},{“GA018”,64},{“GA016”,86}};STECh[N],tt;FILE*out;inti,j,n,low,heigh,t;printf(“Enter2integernumberlow&heigh:”);scanf(“%d%d”,&low,&heigh);if(heigh<low){t=heigh;heigh=low;low=t;}n=fun(S,h,low,heigh);printf(“Thestudent’Sdataout%d--%d:\n”,low,heigh);for(i=0;i<n;i++)printf("%s%4d\n",h[i].num,h[i].s);/*输出指定分数范围内的学生记录*/printf(“\n”);out=fopen(“out23.dat”,“w”);fprintf(out,“%d\n”,n);n=fun(s,h,70,79);for(i=0;i<n-1;i++)/*分数在70~79之外的学生记录按分数从低到高排列*/for(j=i+l;i<n;j十+)if(h[i].s>h[j].s){tt=h[i];h[i]=h[j];h[j]=tt;}for(i=0;i<n;i++)fprintf(out,“%4d\n”,h[i].s);fprintf(out,“\n”);fclose(out);}标准答案:intfun(STREC*a,STREC*b,intl,inth){inti,j=0;for(i=0;i<N;i++)if((a[i].s>=0&&a[i].s<1)||(a[i].s>h&&a[i].s<=100))/*将各分数低于1,高于h的学生记录存于结构体数组b中*/b[j++]=a[i];returnj;/*返回分数范围内的学生人数*/}知识点解析:处理此类分段统计问题,可采用多分支选择语句或条件选择语句。此处采用条件选择语句解答,具体见参考答案。使用条件选择语句进行分段统计时应当注意分段范围。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN8typedefstructlist{intdata;structlist*next;}SLIST;voidfun(SLIST*h,intx){SLIST*p,*q,*s;s=(SLIST*)malloc(sizeof(SLIST));/**********found**********/s->data=【1】;q=h;p=h->next;while(p!=NULL&&x>p->data){/**********found**********/q=【2】;p=p->next;}s->next=p;/**********found**********/q->next=【3】;}SLIST*creatlist(int*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;idata=a[i];p->next=q;p=q;}p->next=0;returnh;}voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)printf("\nThelistisNULL!\n");else{printf("\nHead");do{printf("->%d",p->data);p=p->next;}while(p!=NULL);printf("->End\n");}}main(){SLIST*head;intx;inta[N]={11,12,15,18,19,22,25,29};head=creatlist(a);printf("\nThelistbeforeinserting:\n");outlist(head);printf("\nEnteranumber:");scanf("%d",&x);fun(head,x);printf("\nThelistafterinserting:\n");outlist(head);}标准答案:xps知识点解析:第一空:“s=(SLIST*)malloc(sizeof(SLIST));”显然s是一个新结点,第一空处是给新结点的数据域赋值x,因此第一空处应该是“s->data=x;”。第二空:循环“while(p!=NULL&&x>p->data)”是用来寻找插入位置,当链表没有结束且x仍然大于p所指向的结点的数据时,就不断的向链表后面搜索。在循环体内,语句“p=p->next;”是找到下一个结点的地址,变量q用来保存当前结点的地址,因此第二空处应该是“q=p;”。第三空:“s->next=p;”将s插入链表当中,s指向p,此时s结点已经指向需要插入位置的下一个节点,因此在需要插入s结点的位置的上一个结点需要指向s结点,故第三处应该为“q->next=s;”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。例如:当s中的字符串为:”ABCDE”时,则t中的字符串应为:”ABCDEEDCBA”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includevoidfun(char*s,char*t){inti,s;sl=strlen(s);/************found************/for(i=0;i<=sl;i++)t[i]=s[i];for(i=0;i标准答案:slt[sl+sl]=’\0’知识点解析:(1)编译程序后可知,for(i=0;i<=s1;i++)这一行有错误,原因是s1变量没有定义,显然这个循环的目的是将s字符串的内容拷贝至t字符串,这里的循环变量i的最大值是s字符串的长度sl,因此第一个标识下是将s1改为sl。(2)题目要求将s中的字符拷贝至t字符串之后,还需将s按逆序连接到t串的后面,第二个循环已经完成了逆序接到t字符串的工作,最后是确定字符串的结尾,即字符串应该以“\0”结束。此时,字符串t的长度是2*sl,显然t[sl]=’\0’的话字符串长度仍然是sl,故第二个标识下是将t[sl]=’\0’改成t[2*sl]=’\0’或者t[sl+sl]=’\0’。三、程序设计题(本题共1题,每题1.0分,共1分。)3、程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(rota[][N],intn),函数的功能是:使数组左下三角元素中的值乘以n。例如:若n的值为3,a数组中的值为则返回主程序后a数组中的值应为注意:部分源程序存在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#include#defineN5voidfun(inta[][N],intn){}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,j,n,a[5][5];rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<5;i++)for(j=0;j<5;j++)fscanf(rf,"%d",&a[i][j]);fscanf(rf,"%d",&n);fun(a,n);for(i=0;i<5;i++){for(j=0;j<5;j++)fprintf(wf,"%4d",a[i][j]);fprintf(wf,"\n");}fclose(rf);fclose(wf);}main(){inta[N][N],n,i,j;printf("*****Thearray*****\n");for(i=0;i=3);printf("n=%4d\n",n);fun(a,n);printf("*****THERESULT*****\n");for(i=0;i标准答案:{inti,j;for(i=0;i知识点解析:(1)左下半角的元素是行下标大于等于列下标,即“i>=j”,包括对角线。(2)依次访问二维数组,把符合条件的元素的值乘以n。国家二级(C语言)机试模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#defineN8typedefstruct{intnum;intyear,month,day;}STU;intfun(STU*std,STU*k,intyear){inti,n=0;for(i=0;i标准答案:std[i].yearstd[i]n知识点解析:第一空:比较结构体的出生年份是否等于year,std是结构体指针,指向结构体数组的首地址,因此访问一个结构体的year成员是std[i].year,因此第一空处应为“if(std[i].year==year)”。第二空:这里是将找到的数据放在形参k所指的数组中,k是指针变量,k指向结构体数组的首地址,std[i]是结构体的地址,因此等号左边也应该是地址,故第二空处应为“k[n++]=std[i];”。第三空:fun函数的返回值是满足指定条件的人数n,故第三空处是“return(n);”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:在p所指字符串中找出ASCⅡ码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。例如,调用fun函数之前给字符串输入:ABCDeFGH,调用后字符串中的内容为:eABCDFGH。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#includevoidfun(char*p){charmax,*q;inti=0;max=p[i];while(p[i]!=0){if(maxp){*q=*(q-1);q--;}p[0]=max;}main(){charstr[80];printf("Enterastring:");gets(str);printf("\nTheoriginalstring:");puts(str);fun(str);printf("\nThestringaftermoving:");puts(str);printf("\n\n");}标准答案:q=p+I;while(q>p)知识点解析:(1)在C语言中语句以分号“;”结束,在第一个标识下语句“q=p+i”没有用分号结尾,应改为“q=p+I;”。(2)根据题意第二标识下是利用循环来将移走的字符前的原字符向后顺序移动,第二标识下“wihle(q>p)”wihle不是C语言关键字,应改成“while(q>p)”,利用while循环来实现字符移动。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为:asdasasdfgasdaszx67asdmklo,子字符串为:as,则应输出6。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#includeintfun(char*str,char*substr){}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/charstr[81],substr[3],ch;intn,len,i=0;FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");while(i<5){fgets(str,80,rf);fgets(substr,10,rf);len=strlen(substr)-1;ch=substr[len];if(ch==’\n’||ch==0x1a)substr[len]=0;n=fun(str,substr);fprintf(wf,"%d\n",n);i++;}fclose(rf);fclose(wf);}main(){charstr[81],substr[3];intn;printf("输入主字符串:");gets(str);printf("输入子字符串:");gets(substr);puts(str);puts(substr);n=fun(str,substr);printf("n=%d\n",n);NONO();}标准答案:{intcnt=0;char*p=str,*q;while(*p){q=strstr(p,substr);if(q==NULL)break;p=q+strlen(substr);cnt++;}returncnt;}知识点解析:(1)在fun函数中,str接受主函数中的字符数组的首地址,另一个字符形参指针指向子串字符数组substr的首地址。(2)利用strstr函数找到substr出现的位置,设置两个指针变量p和q分别记录起始地址和substr出现的地址。(3)每次循环开始,使指针p指向str字符串首地址,使q指向子串substr出现的地址,p的位置不断往后移,直到字符串尾,每次找到substr对应统计加1。国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充main函数,该函数的功能是:先以只写方式打开文件“out99.dat”,再把字符串str中的字符保存到这个磁盘文件中。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。试题程序:#include"stdio.h"#include"conio.h"#defineN80main(){FILE*fp;inti=0;charch;charstr[N]="I’mastudent!";clrscr();if((fp=fopen(【】))==NULL){printf("cannotopenout99.dat\n");exit(0);}while(str[i]){ch=str[i];【】;putchar(ch);i++;}【】;}标准答案:“out99.dat”,“w”fpnte(ch,fp)fclose(fp)知识点解析:第一空:本题考查对文件操作的掌握。打开一个文件的调用方式是,fp==fopen(文件名,使用文件方式);,题目要求以只写的方式打开文件“out99.dat”,所以文件使用方式为“w”。第二空;fputc()函数用于将一个字符写到磁盘文件上去,调用形式为:fputc(要输出的字符,文件指针)。第三空:对一个文件进行操作后,应该关闭它,以防它再被误用。调用形式为:fclose(文件指针);二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:计算S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…f(n)的值。例如,当n为5时,函数值应为10.407143。f(x)函数定义如下:请改正程序中的错误,使它能得山正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<conio.h>#include<stdio.h>#include<math.h>/**************found***************/f(doublex){if(x==0.0||x==2.0)return0.0;elseif(x<0.0)return(x-1)/(x-2);elsereturn(x+1)/(x-2);}doublefun(intn){inti;doubles=0.0,y;for(i=-n;i<=n;i++){y=f(1.0*i);s+=y;}/**************found**************/returns}main(){clrscr();printf("%f\n",fun(5));}标准答案:(1)错误;(1)f(doublex)正确:doublef(doublex)(2)错误;returns正确:returns;知识点解析:该程序的流程是,fun()程序对f(n)项循环累加,fun()程序采用条件选择语句计算函数f(x)的值。本题错误在于未定义函数f(doublex)的返回值类型。C语言规定,在未显式声明的情况下,函数返回值默认为int型。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编一个函数floatfun(doubleh),函数的功能是对变量h中的值保留两位小数,并对第三位进行四舍五入(规定h中的值为正数)。例如:若h值为8.32433,则函数返回8.32:若h值为8.32533,则函数返回8.33。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数。fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>floatfun(floath){}main(){floata;clrscr();printf("Entera:");scanf("%f",&a);printf("Theoriginaldatais:");printf("%f\n\n",a);printf("Theresult:%f\n",fun(a));}标准答案:floatfun(floath){longt;t=(h*1000+5)/10;/*单精度数h乘以1000后再加5,相当十对h中的第三位小数进行四舍五入除以10后将其赋给一个长整型数时就把第三位小数后的数全部截去*/return(float)t/100;/*除以100,保留2位小数*/知识点解析:注意本题要求h的值真正发生了四舍五入,而不是为了输出,即不能用printf(“%7.2f”,h)来直接得到结果。由于单精度数h乘以1000后再加5,此时相当于对h中的第三位小数进行四舍五入,再将其赋给一个长整型数时就把第三位小数后的数全部截去。注意在return中要将其中一个数转成浮点型数。国家二级(C语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充main函数,该函数的功能是求方程ax2+bx+c=0的两个实数根。方程的系数a、b、c从键盘输入,如果判别式(disc=b2-4ac)小于0,则要求重新输入a、b、c的值。例如,当a=1,b=2,c=1时,方程的两个根分别是x1=-1.00,x2=-1.00。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include"math.h"#include<stdio.h>main(){floata,b,C,disc,X1,x2;clrscr();do{printf("Inputa,b,C:");scanf("%f,%f,%f",&a,&b,ac);disc=b*b-4*a*c;if(disc<0)printf("disc=%f\nInputagain!\n",disc);}while(【】);printf("****+*theresult*+*****\n");x1=【】;x2=【】;printf("\nx1=%6.2f\nx2=%6.2f\n",x1/x2);}标准答案:disc<0(-b+sqrt(disc))/(2*a)(-b-sqd(disc))/(2*a)知识点解析:第一空:题目要求当判别式disc小于0时,要重新输入a、b、c的值,所以do--while循环的执行条件是disc<0。第二空:方程ax2+bx+c=0的一个实数根是:。第三空:方程ax2+bx+c=0的另一个实数根是:。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是逐个比较a,b两个字符串对应位置中的字符,把ASCII值小或相等的字符依次存放到c数组中,形成一个新的字符串。例如:a中的字符串为fshADfg,b中的字符串为sdAEdi,则c中的字符串应为fdAADf。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<strinq.h>voidfun(char*p,char*q,char*c){intk=0;while(*p||*q)/**********found**************/{if(*p<=*q)c[k]=*q;elsec[k]:*p;if(*p)p++;if(*q)q++;/**+**********found**************/k++}}main(){chara[10]="fshADfg",b[10]="sdAEdi",c[80]={’\0’);fun(a,b,c);printf("Thestringa:");puts(a);printf("Thestringb:");puts(b);printf("Theresult:");puts(c);}标准答案:(1)错误:{if(*P<=*q)正确:{if(*p>=*q)(2)错误:k++正确:k++;知识点解析:错误1:依题意,把ASCII值小或相等的字符存放到c数组中,故if语句的关系运算符应为“>=”。错误2:C语言规定,每个语句要用分号结束。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun(),对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码值升序排列。例如:原来的字符串为BdsihAd,则排序后输出为BAdhisd。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#include<ctype.h>#include<conio.h>intfun(char*s,intnum){}main(){chars[10];clrscr();printf("输入7个字符的字符串:");gets(s);fun(s,7);printf("\n%s",s);}标准答案:intfun(char*s,intnum){chart;inti,j;for(i=1;i<num-2;i++)/*下标值从1开始,用循环依次取得字符串中的字符*/for(j=i+1;j<num-1;j++)/*将字符与其后的每个字符比较*/if(s[i]>s[j])/*如果后面字符的ASCII码值小于该字符的ASCII码值*/{t=s[i];/*则交换这两个字符*/s[i]=s[j];s[j]=t;}}知识点解析:本题考查利用循环来控制数组元素的操作,首尾元素除外,因此,数组的下标值要从1开始,用循环变量i来依次取得数组中的元素,用数组中的元素s[i]和s[j]进行比较,如果后一个元素的ASCII码值小于前一个元素的ASCII码值,则交换这两个数组元素的值。国家二级(C语言)机试模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的字符串中右边的字符删除,只保留左边的k个字符。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)[M](2)N(3)0或ˋ\0ˊ知识点解析:本题中函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的字符串中右边的字符删除,只保留左边的k个字符。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:根据整型形参m的值,计算如下公式的值。例如,若m中的值为:5,则应输出:0.536389。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!标准答案:(1)for(i=2;i<=m;i++)(2)y-=1.0/(i*i);知识点解析:该程序功能是根据题目要求计算公式。从已给定源程序的main主函数开始入手,“printf("\nTheresultis%lfin",fun(n));”语句中的fun(n)将参数n传给函数doublefun(intm)中的m,实现公式的计算结果。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun,它的功能是:求出一个2×M整型二维数组中最大元素的值,并将此值返回调用函数。注意:部分源程序存在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。标准答案:知识点解析:该程序功能是寻找二维数组中最大元素的值。其中,求最大元素的方法:用最大值变量maX标记第一个待找数据,逐个把所有待找数据和max进行比较,并用max标记当前最大值及其所在位置,从而找出最大值。国家二级(C语言)机试模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)i(2)ps[j](3)tp知识点解析:本题中函数fun的功能是利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。在fun函数中采用了选择排序法,在选择排序法中的降序排序,首先从数组中挑选一个最大的元素,把它和第一元素交换,接着从剩下的n-1个元素中再挑出一个最大的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中函数fun()的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为7654321时,t中的数为642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<conio.h>/*************found**************/voidfun(longs,longt){longs1=10;s/=10;*t=s%10;/*************found**************/while(s<0){s=s/100;*t=s%10*s1+*t;s1=s1*10;}}main(){longs,t;clrscr();printf("\nPleaseenters:");scanf("%ld",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}标准答案:(1)错误:voidfun(longs,

温馨提示

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

评论

0/150

提交评论