




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C语言)机试模拟试卷40(共9套)(共27题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充main函数,该函数的功能是:输出一个NXN矩阵,要求非周边元素赋值0,周边元素赋值1。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#defineN10main(){intbb[N]IN];ihti,j,n;clrscr0;printf("\nInputn:\n");scanf("%d",&n);for(i=0;i<n;i++)for(j=0;j<n;j++){if(【】)bb[i][j]=l;else【】;}printf("\n***theresult***\n");for(i=0;i<n;i++){printf("\n\n");for(j=0;j<n;j++)printf("%4d",bb[i][j]);}}标准答案:i==0‖i==n-1‖j==0‖j==n-1bb[i][j]=0知识点解析:第一空:用二维数组表示n×n矩阵时,周边元素是行下标为0或n-1,列下标为。或n-1的元素,判断时四个条件中只要有一个条件满足,则该元素就是周边元素,所以用“‖”运算符。第二空:题目要求将非周边元素赋值为0。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:删除字符串s中所有空白字符(包括Tab字符、回车符及换行符)。输入字符串时用’#’结束输入。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include<string.h>#include<stdio.h>#include<ctype.h>fun(char*p){int!i,t;charc[80];for(i=0,t=0;p[i];i++)if(!isspace(*(p+i)))c[t++]=p[i];/**********************************/c[t]=’\0’;strcpy(p,c);}main(){charc,s[80];inti=0;printf("Inputastring:");c=getchar();while(c!=’#’)(s[i]=c;i++;c=getchar();}s[i]="\0";fun(s);puts(s);}标准答案:错误:c[t]="\0",正确:c[t]=’\0’知识点解析:注意,该程序的if条件中应用了isspace函数,该函数的功能是检查ch是否空格、跳格符(制表符)或换行符。三、程序设计题(本题共1题,每题1.0分,共1分。)3、假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。例如,若字符串中的内容为****A*BC*DEF*G*******删除后,字符串中的内容则应当是****A*BC*DEF*G。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数6ln的花括号中填入所编写的若干语句。试题程序:#include<stdio,h>#include<conio.h>voidfun(char*a){}main(){chars[81];printf("Enterastring:\n");gets(s);fun(s);printf("Thestringafterdeleted:\n");puts(s);}标准答案:voidfun(char*a){while(*a!=’\0’)a++;a--;/*指针a指向字符串的尾部*/while(*a==’*’)a--/*指针a指向最后一个字母*/*(a+l)=’\0’;/*在字符串最后加上结束标志位*/}知识点解析:前面我们遇到类似将字符串头部的’*’号全部删除,其实解题思路是一样的,请参照前面试题解析及参考答案。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后a所指数组中的数据为:4、2、6、8,返回值为4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#defineN9intfun(inta[],intn){inti,j;j=0;for(i=0;i标准答案:a[i]%2a[j]j知识点解析:第一空:由“___2___=a[i];j++;”是将偶数元素保存起来并且计数变量加1,可知j记录了偶数元素的个数,第一空处是判断a[i]是否是偶数,因此第一空处应为“a[i]%2”。第二空:a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]….,j初始化为0,a[j]就可以将偶数元素存放在a中,故第二空处应为“a[j]”。第三空:fun函数的返回值是偶数个数,故第三空处应为“j”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行和删行,也不得更改程序的结构!#include#defineN20voidfun(inta[],intn){inti,j,t,p;for(j=0;j<n-1;j++){/************found************/p=jfor(i=j;i<n;i++)if(a[i]<a[p])/************found************/p=j;t=a[p];a[p]=a[j];a[j]=t;}}main(){inta[N]={9,6,8,3,-1},i,m=5;printf("排序前的数据:");for(i=0;i<m;i++)printf("%d",a[i]);printf("\n");fun(a,m);printf("排序后的数据:");for(i=0;i<m;i++)printf("%d",a[i]);printf("\n");}标准答案:p=j;p=i;知识点解析:(1)第一个标识下面“p=j”,根据C语言的语法,不难发现语句结束缺少分号,因此改为“p=j;”。(2)第二个标识下面的“p=j;”上两句是以i作为循环和判断条件,其中语句“for(i=j;i三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串:123412132,输入字符为:1,则输出:3。注意:部分源程序在文件PROGI.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#include#defineM81intfun(char*ss,charc){}main(){chara[M],ch;voidNONO();printf("\nPleaseenterastring:");gets(a);printf("\nPleaseenterachar:");ch=getchar();printf("\nThenumberofthecharis:%d\n",fun(a,ch));NONO();}voidNONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti;FILE*rf,*wf;chara[M],b[M],ch;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",a);fscanf(rf,"%s",b);ch=*b;fprintf(wf,"%c=%d\n",ch,fun(a,ch));}fclose(rf);fclose(wf);}标准答案:{intcnt=0;char*p=ss;while(*p){if(*p==c)cnt++;p++;}returncnt;}知识点解析:如果不是串尾就进入while循环,在循环过程中利用if条件表达式判断当前字符是否为指定的字符,如果符合条件,那么对统计计数变量进行加1操作。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查找含有形参substr所指子串的所有字符串并输出,若没找到则输出相应信息。ss所指字符串数组中共有N个字符串,且串长小于M。程序中库函数substr(s1,s2)的功能是在s1串中查找s2子串,若没有,函数值为0,若有,为非0。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN5#defineM15voidfun(char(*ss)[M],char*substr){inti,find=0;/***************found**************/for(i=0;i<【1】;i++)/***********found**************/if(strstr(ss[i],【2】)!=NULL){find=1;puts(ss[i]);printf("\n");}/************found************/if(find==【3】)printf("\nDon’tfound!\n");}main()(charx[N][M]=("BASIC","Clangwage","Java","QBASIC","Access"},str[M];int1;printf("\nTheoriginalstring\n\n");for(i=0;i标准答案:(1)N(2)substr(3)0知识点解析:第一空:“for(i=0;i<【1】;i++)"补充循环的结束条件,fun的参数(*ss)[M]是指向N行M列的字符串数组,循环是逐行字符串是否含有substr所指的子串,因此循环次数是N次,故第一空处应为“N"。第二空:“if(strsr(ss[i],【2】)!=NULL)"是判断字符串ss[i]是否含有substr所指的子串,故第二空处为"substr"。第三空:“if(find==【3】)printf("\nDon’tfound!\n");"说明没有找到输出提示信息,如果找到了“find=1;puts(ss[i]);printf("\n");"可知find会变成1,在没有找到的情况下find为初值0。故第三空处判断find是否等于0便可知是否找到了符合要求的字符串,因此第三空为“0"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求每复制三个字符之后插入一个空格。例如,在调用fun函数之前给a输入字符串:ABCDEFGHIJK,调用函数之后,字符数组b中的内容则为:ABCDEFGHIJK。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#includevoidfun(char*p,char*b){inti,k=0;while(*p){i=1;while(i<=3&&*p){/***************found****************/b[k]=p;k++;p++;i++;}if(*p){/***************found****************/b[k++]="";}}b[k]=’\0’;}main(){chara[80],b[80];printf("Enterastring:");gets(a);printf("Theoriginalstring:");puts(a);fun(a,b);printf("\nThestringafterinsertspace:");puts(b);printf("\n\n");}标准答案:(1)b[k]=*p;(2)b[k++]=’’;知识点解析:(1)p是指针。p存放的内容是地址值,第一标识下“b[k]=p;"含义是将p存放的地址内容赋给b[k],而不是把p指向豹字符拷贝到b[k],显然不符合题意,应改成“b[k]=*p;",*p是取p指向的字符的内容。(2)第二个标识符下是复制三个字符后在b中插入空格,原题中给出的"b[k++]="";",在c语言中字符常量是由单引号括起的单个字符,即空格字符应为“’’",而“"""是表示字符串常量且该字符串中只有一个空格字符。第二标识下是将空格字符复制给b[k++],因此第二标识下应改为“b[k++]=“;"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写程序fun,函数的功能是:实现B=A+A’,即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。例如,输入下面的矩阵:其转置矩阵为:程序输出:注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(inta[3][3],intb[3][3]){}main()/*主程序*/{inta[3][3]=({1,2,3},{4,5,6},{7,8,9}},t[3][3];inti,j;voidNONO();fun(a,t);for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%7d",t[i][j]);printf("\n");}NONO();}voidNONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti,j,k,a[3][3],t[3][3];FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(k=0;k<5;k++){for(i=0;i<3;i++)fscanf(rf,"%cl%d%d",&a[i][0],&a[i][1],&a[i][2]);fun(a,t);for(i=0;i<3;i++){for(j=0;j<3;j++)fprintf(wf,"%7d",t[i][j]);fprintf(wf,"\n");}}fclose(rf);fclose(wf);}标准答案:intc[3][3];inti,j;for(i=0;i<3;i++)for(j=0;j<3;j++){c[i][j]=a[j][i];//矩阵的转置b[i][j]=a[i][j]+c[i][j];}知识点解析:(1)首先,将a所指数组元素中的值进行转置并放到c所指数组中。(2)矩阵相加是指把两个矩阵中下标相同的元素的值一一对应相加。国家二级(C语言)机试模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充main函数,该函数的功能是:从键盘输入学生的成绩(用回车键作为分隔符),并统计各分数段学生的人数。具体要求为:A类为90~100分,B类为80~89分,C类为70~79分,D类为60~69分,59分以下的为E类。当成绩为0时结束成绩的输入,并且最后输入的0不进行统计。例如,输入89,99,45,64,56,78,88,74,66,55,0。结果为A:1B:2C:2D:2E:3注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<conio.h>#defineN100main(){floatscore[N];intbb[5];intgrade,i=-1,n=0;charch=’A’;clrscr();printf("Inputascore(0~100);\n");do{i++;n++;printf("score[%d]=",i);scanf(【】);}while(score[i]!=0);for(i=0;i<5;i++)【】;for(i=0;i<n-1;i++){grade=【】;switch(grade){case10:case9:bb[0]++;break;case8:bb[1]++;break;case7:bb[2]++;break;case6:bb[3]++;break;default:bb[4]++;}}for(i=0;i<5;i++)printf("\n%c:%d",ch+i,bb[i]);}标准答案:"%f",&score[i]bb[i]=0score[i]/10知识点解析:第一空;本题考查标准输入函数scanf()的调用格式,注意score[i]为实型变量,并且score[i]的前面要记住加上取址符&。第二空:数组bb[5]中存放各分数段学生的人数,程序中只对数组bb[5]进行了声明,并没有给予初始化,此处将数组各元素初始化为0。第三空:通过switch语句可以看出,grade等于将分数整除10后的值。注意,运算符‘/’两边都是整型数时,结果仍然是整型数。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:依次取出字符串中所有的数字字符,形成新的字符串,并取代原字符串。请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<conio.h>voidfun(char*s){inti,j;for(i=0,j=0;s[i]!=’\0’;i++)if(s[i]>=’0’&&s[i]<=’9’)/*************found**************/s[j]=s[i];/*************found**************/s[j]="\0";}main(){charitem[80];clrscr();printf("\nEnterastring:");gets(item);printf("\n\nThestringis:\%s\n",item);fun(item);printf("\n\nThestringofchangingis:\%s\n",item);}标准答案:(1)错误;s[j]=s[i];正确:s[j++]=s[i];(2)错误:s[j]="\0";正确:s[j]=’\0’;知识点解析:有循环条件if(s[i]>=’0’&&s[i]<=’9’)以及题目要求“依次取出字符串中所有的数字字符”可知,s[j]=s[i];表述错误。s[j]="\0";中是一个常识性语法错误,学习者只要在平时训练的时候注意一下就可以了。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数voidfun(intx,intpp[],int*n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在即所指的数组中,这些除数的个数通过形参n返回。例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>voidfun(intx,intpp[],int*n){}main(){intx,aa[1000],n,i;clrscr();printf("\nPleaseenteranintegernumber:\n");scanf("%d",&x);fun(x,aa,&n);for(i=0;i<n;i++)printf("%d",aa[i]);printf("\n");}标准答案:voidfun(intx,intpp[],int*n){inti,j=0;for(i=1;i<x;i=i+2)/*i的初始值为1,步长为2,确保i为奇数*/if(x%i==0)/*将能整除x的数存入数组pp中*/pp[j++]=i;*n=j;/*传回满足条件的数的个数*/}知识点解析:本题题干信息是:能整除x且不是偶数的所有整数。循环语句中i从1开始且每次增2,所以i始终是奇数。国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域,从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKI.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN6typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*p,*q;intt;/**********found**********/p=【1】;while(p){/**********found**********/q=【2】;while(q){/**********found**********/if(p->data【3】q->data){t=p->data;p->data=q->data;q->data=t;}q=q->next;}p=p->next;}}NODE*creatlist(inta[]){NODE*h,*p,*q;inti;h=(NODE*)malloc(sizeof(NODE));h->next=NULL;for(i=0;idata=a[i];q->next=NULL;if(h->next==NULL)h->next=p=q;else{p->next=q;p=q;}}returnh;}voidoutlist(NODE*h){NODE*p;p=h->next;if(p==NULL)printf("ThelistisNULL!\n");else{printf("\nHead");do{printf("->%d",p->data);p=p->next;}while(p!=NULL);printf("->End\n");}}main(){NODE*head;inta[N]={0,10,4,2,8,6};head=creatlist(a);printf("\nTheoriginallist:\n");outlist(head);fun(head);printf("\nThelistaftersorting:\n");outlist(head);}标准答案:h->nextp->next>=知识点解析:第一空:由审题分析可知,q从h的下一个元素开始寻找最小值,故第一空为“h->next”。第二空:由审题分析可知,while循环是在剩下的元素当中找最小值,剩下的结点是由q指向的链表,q从p的后一个结点开始,故第二空处应为“p->next”。第三空:“if(p->data__3__q->data)”是比较p结点和p结点数据的大小,如果p结点的数据比q结点的数据大,那么应该将p结点和q结点的数据进行交换,故第三空处应为“>=”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:将s所指字符串中出现的与t1所指字符串相同的子串全部替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如,当s所指字符串中的内容为:”abcdabfab”,t1所指子串中的内容为:”ab”,t2所指子串中的内容为:”99”时,结果在W所指的数组中的内容应为:”99cd99f99”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includevoidfun(char*s,char*t1,char*t2,char*w){char*p,*r,*a;strcpy(w,s);while(*w){p=w;r=t1;/************found************/while(r)if(*r==*p){r++;p++;}elsebreak;if(*r==’\0’){a=w;r=t2;while(*r){/************found************/*a=*r;a++;r++}w+=strlen(t2);}elsew++;}}main(){chars[100],t1[100],t2[100],w[100];printf("\nPleaseenterstringS:");scanf("%s",s);printf("\nPleaseentersubstringt1:");scanf("%s",t1);printf("\nPleaseentersubstringt2:");scanf("%s",t2);if(strlen(t1)==strlen(t2)){fun(s,t1,t2,w);printf("\nTheresultis:%s\n",w);}elseprintf("Error:strlen(t1)!=strlen(t2)\n");}标准答案:while(*r)*a=*r;a++;r++;知识点解析:(1)函数通过while语句比较r所指字符串是否和p所指的子串相同,若有相同,会一直循环到*r是’\0’才退出循环。所以第二个标识下的“while(r)”改为“while(*r)”。(2)C语言中,语句应该以“;”结束,在第二个标识处,“r++”语句没有以“;”结束,因此第二个标识处应该是“*a=*r;a++;r++;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,它的功能是:求出能整除形参x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。例如,若x中的值为:35,则有4个数符合要求,它们是:1,5,7,35。注意:部分源程序在文件PROGI.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(intx,intpp[],int*n){}main(){intx,aa[1000],n,i;voidNONO();printf(”\nPleaseenteranintegernumber:\n”);scanf(”%d”,&x);fun(x,aa,&n);for(i=0;i标准答案:{inti;*n=0;for(i=1;i<=x;i++)if((x%i==0)&&(i%2))pp[(*n)++]=i;}知识点解析:进入fun函数,根据前面的分析:首先,初始化变量*n;定义i,作为循环变量。然后,每判断一次i的值是否能整除形参x,且i不为偶数,满足题干条件的话存储到pp所指数组中,*n记录找到整数的个数,不断循环此过程,直到i的值等于m。国家二级(C语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#defineN5typedefstructstudent{longsno;charname[10];floatscore[3];}STU;voidfun(char*filename,STUn){FILE*fp;/**********found**********/fp=fopen(【1】,"rb+");/**********found**********/fseek(【2】,-(long)sizeof(STU),SEEK_END);/**********found**********/fwrite(&n,sizeof(STU),1,【3】);fclose(fp);}main(){STUt[N]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},{10005,"ZhangSan",95,80,88}};STUn={10006,"ZhaoSi",55,70,68},ss[N];inti,j;FILE*fp;fp=fopen("student.dat","wb");fwrite(t,sizeof(STU),N,fp);fclose(fp);fp=fopen("student.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);printf("\nTheoriginaldata:\n\n");for(j=0;j标准答案:filenamefpfp知识点解析:第一空:“fp=fopen(__1__,"rb+");”补充fopen的参数,fopen的调用形式是:fp=fopen(文件名,文件使用方式),因此第一空处应填文件名“filename”。第二空:此处是补充fseek函数的参数,fseek的调用形式是:fseek(fp,offset,position),其中第一个参数是文件型指针,故第二空处应填文件型指针变量“fp”。第三空:fwrite的调用形式是(buffer,size,count,fp),最后一个参数是文件型指针,故第三空处应填“fp”,将新的学生数据写在最后一个学生数据位置。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:根据整型形参m,计算如下公式的值。例如,若m=2000,则应输出:0.000160。请改正程序中的语法错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#inclucle/****************found**************/fun(intm){doubley=0,d;inti;/****************found**************/for(i=100,i<=m,i+=100){d=(double)i*(double)i;y+=1.0/d;}return(y);}mein(){intn=2000;printf("\nTheresultis%lf\n",fun(n));}标准答案:(1)doublefun(in七m)(2)for(i=100;i<=m;i+=100)知识点解析:(1)第一个标识下的fun函数的定义,根据题干中给出的公式中的分数部分。可知应该具有double类型返回值。所以应将“。fun(intm)"改为“doublefun(intm)"。(2)第二个标识下的for循环过程是实现对公式的求解,C语句中for循环中的多个循环条件表达式是以分号为分隔符,所以第二个标识下“for(,净100,i<=m,i+=100)"改为“for(i=100;i<=m;i+=100)"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、假定输入的字符串中只包含字母和·号。请编写函数fun,它的功能是:使字符串的前导·号不得多于n个;若多于n个,则删除多余的*号:若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。例如,字符串中的内容为:*********A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍为********A*BC*DEF*G****。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(char*a,intn){}main(){chars[81];intn;voidNONO();printf("Enterastring:\n");gets(s);printf("Entern:");scanf("%d",&n);fun(s,n);printf("Thestringafterdeleted:\n");puts(s);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti,n;chars[81];in=fopen("in.dat","r");out=fopen("out.dat","w");for(i=0,i<10;i++){fscanf(in,"%s",s);fscanf(in,"%d",&n),fun(s,n),fprintf(out,"%s\n",s);}fclose(in);fclose(out);}标准答案:inti=0,k=0;char*t=a;while(*t==’*’){k++;t++;}t=a;if(k>n)t=a+k—n;while(*t){a[i]=*t;i++;t++;}a[i]=’\0’;知识点解析:(1)首先由字符串头开始判断字符是否为"*"号字符,如果字符是符号"*",则对"*"号进行统计。(2)根据统计的"*"号数目结合题目中对"*"号个数的要求,判断是执行对"*"号的截取操作,还是什么都不用做。(3)然后将其他的所有字符拷贝到字符串,最后记得在新串s的末尾加上结束符"’\n’"。国家二级(C语言)机试模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:对形参s所指字符串中下标为奇数的字符按ASCⅡ码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。例如,形参s所指的字符串为:baawrskjghzlicda,执行后p所指字符数组中的字符串应为:aachjlsw。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKI.C中。不得增行或删行,也不得更改程序的结构!#includevoidfun(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标准答案:(1)t=i(2)i(3)0或“\0"知识点解析:第一空:由审题分析可知,t记录开始的字符,数组中挑选一个最小的元素和t位置的字符交换,故第一空处应为“t=1"。第二空:“for(j=【2】+2;j二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:根据整型形参m,计算如下公式的值。例如,若m中的值为:5,则应输出:1.463611。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行。也不得更改程序的结构!#includedoublefun(intm){doubley=1.0;inti;/******************found*******************/for(i=2;i标准答案:(1)for(i=2;i<=m;i++)(2)y+=1.0/(i*i);知识点解析:(1)根据题干中给出的公式,可以看到循环是从2到m,所以第一个标识下的“for(i=2;i三、程序设计题(本题共1题,每题1.0分,共1分。)3、已知学生的记录由学号和学习成绩构成,N名学生的数据已存入结构体数组a中。请编写函数fun,函数的功能是:找出成绩最高的学生记录,通过形参指针传回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。注意:部分源程序存在文件PROGI.C中。请勿改动主函数mare和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#include#defineN10typedefstructss{charnum[10];ints;}STU;fun(STUa[],STU*s){}main(){STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;inti;printf("*****Theoriginaldata*****\n");for(i=0;i<N;i++)printf("No=%sMark=%d\n",a[i].num,a[i].s);fun(a,&m);printf("*****THERESULT*****\n");printf("Thetop:%s,%d\n",m.num,m.s);NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;STUa[N],m;inti;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++)fscanf(rf,"%s%d",a[i].num,&a[i].s);fun(a,&m);fprintf(wf,"Thetop:%s,%d\n",m.num,m.s);fclose(rf);fclose(wf);}标准答案:{inti,max=a[0].s,j=0;for(i=1;i知识点解析:(1)首先指定第一个成绩为最高分数。(2)再使用一个for循环把所有的成绩进行比较,找出最高的分数来。国家二级(C语言)机试模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)next(2)t->data(3)t知识点解析:fun函数的功能是输出链表尾部结点中的数据,并释放该结点,使链表缩短。由于链表是单向的,找到链表尾部结点需要利用循环从头结点开始查找,直至找到最后一个,找到之后输出尾部结点的数据,然后删除尾结点。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.c中函数fun的功能是;由形参给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数个数。例如,n=8时,输入:193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763所得平均值为:195.838745,在平均值以上的实数个数应为:5请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!标准答案:(1)intj-c=0;doublexa=0.0;(2)if(x[j]>=xa)知识点解析:本题中函数的功能是输出平均值,并统计在平均值以上(含平均值)的实数个数。本题中的函数实现过程首先求解平均值,然后将所有值与平均值进行比较,统计高于平均值的实数个数。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:s=35.951014。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。标准答案:知识点解析:该程序功能是计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。在循环中,首先确定相邻元素之间的关系,然后对其进行平均值平方根之和的操作。国家二级(C语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村土房子收购合同范例
- 农村自建别墅合同样本
- 二居合同标准文本
- 乡镇楼盘收购合同范例
- 上海市家装合同标准文本
- 动态美术教学模型的研究与应用计划
- 2013劳动合同标准文本
- 2025《合同协议样本》
- 养虾雇人合同标准文本
- 买卖茶具合同标准文本
- 河南省天一小高考2024-2025学年(下)高三第三次考试政治
- 新课标《义务教育历史课程标准(2022年版)》解读课件
- 夏晖冷链物流公司
- 2025年上半年江西省水务集团限责任公司招聘60人易考易错模拟试题(共500题)试卷后附参考答案
- 人教版小学数学四年级下册第五单元《三角形》作业设计
- 2025年辽宁省能源控股集团所属辽能股份公司招聘笔试参考题库附带答案详解
- 第五课 我国的根本政治制度课件高考政治一轮复习统编版必修三政治与法治
- 2024年南通市公安局苏锡通园区分局招聘警务辅助人员考试真题
- 不良资产处置业务操作流程与财务管理
- 填海石采购合同6篇
- 2025届山东省青岛市高三下学期一模英语试题(原卷版+解析版)
评论
0/150
提交评论