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

下载本文档

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

文档简介

国家二级C语言机试(操作题)模拟试卷46(共9套)(共27题)国家二级C语言机试(操作题)模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:逆置数组元素中的值。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。形参n给出数组中数据的个数。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#inCludeVoidfun(inta[],intn){inti,t;/**********found***********/for(2=0;i<___1____;i++){t=a[i];/**********found***********/a[i]=a[n一1—___2___];/**********found***********/___3___=t;}}main(){intb[9]={1,2,3,4,5,6,7,8,9},i;printf(“\nTheoriginaldata:\n”);for(i=0;i<9;i++)printf(“%4d”,b[i]);printf(“\n”);fun(b,9);printf(“\nThedataafterinvert:\n”);for(i=0;i<9;i++)printf(“%4d”,b[i]);printf(“\n”);}标准答案:(1)n/2(2)i(3)a[n—i—1]知识点解析:函数fun的功能是将数组中的元素倒置。第一空:由审题分析可知,总共交换n/2次,故循环的终止条件为i等于n/2,故第一空处应为“n/2”。第二空:a[0]和a[n-1]交换,a[1]和a[n-2]交换…,因此a[i]和a[n—i-1]交换,故第二空处应为“i”。第三空:“t=a[i];a[i]=a[n—1—i];”所以第三空处是把t值赋值a[n—1-i],故第三窄处应为“a[n—1—i]”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数;并把该整数中各位上最大的数字值作为函数值返回。例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includeintfun(unsignedn,int*zero){intcount=0,max=0,t;do{t=n%10;/**********found***********/if(t=0)count++;if(max标准答案:(1)if(t==0)(2)*zero=count;知识点解析:本题中函数的功能是统计一个无符号整数中各位数字值为0的个数。对无符号数进行截取,然后对每个数字进行判断并统计。[解题思路](1)第一个标识下的if语句是判断t是甭为0,而原题给出的“if(t=0)”是将0赋值给t,所以将第一个标识下的“if(t=0)”改为“if(t==0)”。(2)第二个标识下的“zero=count;”语句,根据fun函数中zero的定义为指针型。所以,第二个标识下“zero=count;”应该改为“*zero=count:”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。例如,输入beijingshanghai(为回车键),函数将返回shanghai。注意:部分源程序存在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#inoiudechar*fun(char*s,char*t){}main(){chara[20],b[20];voidNONO();printf(“Input1thstring:”);gets(a);printf(“Input;2thstring:”);gets(b);printf(“%s\n”,fun(a,b));NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti;chara[20],b[20];fp=fopen(“in.dat”,“r”);wf=fopen(“out.dat”,“w”);for(i=0;i<10;i++){fscanf(fp,“%s%s”,a,b);fprintf(wf,“%s\n”,fun(a,b));}fclose(fp);fclose(wf);}标准答案:inti:char*p=s,*q=t;intn=0,m=0;while(*p)//计算串s的长度n,其中p为临时指针{n++;p++;}while(*q)//计算串t的长度m,其中q为临时指针{m++;q++;}if(n>=m)//比较m和n的值,设置p指向较大的指针p=s;elsep=t;returnp;知识点解析:该程序功能是比较两个字符串的长度。解题过程是首先分别求得两个字符串的长度,然后对这两个值进行判断,实现两个字符串长度的比较。[解题思路]进入fun函数,根据前面的分析:(1)首先求得字符串的长度,设变量n和m分别用来求字符串的长度,初值设为0,把字符串中的字符逐个访问,每访问一个字符,n和m分别加1,直到字符串结束。(2)使用两个临时指针变量p、q分别作为访问字符串的变量。(3)根据m和n的值返回串,设置指针p,指向返回串的开始地址。国家二级C语言机试(操作题)模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>typedefstruct{intnum;charname[9];floatscore[3];}STU;voidshow(STUtt){int.i;print.f("%d%s:",tt.num,tt.name);for(i=0;i<3;i++)print:f("%5.1f",tt.score[i]);print:f("\n");}/*********found*********/voidmodify(【1】*ss,floata){inti;for(i=0;i<3;i++)/*********found*********/ss一>【2】*=a;}main(){STUstd={1,"Zhanghua",76.5,78.0,82.0};float:a;print:f("\nTheoriginalnumbetandnameandscores:\n");show(std);print:f("knlnputanumber:");scanf("%f",&a);/*********found*********/modify(【3】,a);printf("\nAresultofmodifying:\n");show(std);}标准答案:(1)STU(2)score[i](3)&std知识点解析:本题考查:数组变量赋值;函数实参定义。本题是利用结构体存储学生记录,对记录进行修改并由实参ss返回。填空1:实参ss是一个结构型指针变量,所以应填STU。填空2:该学生的各科成绩都乘以一个系数a,所以应填score[i]。填空3:函数的调用,由于函数定义时使用的指针结构型变量,所以应填&std。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:求k!(k<13),所求阶乘的值作为函数值返回。例如,若k=10,则应输出3628800。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<eonio.h>#include<stdio.h>longfun(intk){/*********found*********/ifk>1return(k*fun(k一1));return1;}main(){intk=10;printf("%d!=%ld\n",k,fun(k));}标准答案:if(k>1)知识点解析:本题考查:if语句,考生需要根据题意来确定if语句是否是正确的,if条件语句经常考,考生需掌握。语法错误,if条件表达式应写在小括号内。三、程序设计题(本题共1题,每题1.0分,共1分。)3、程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N],intn),该函数的功能是:使数组左下半三角元素中的值乘以n。例如,若n的值为3,a数组中的值为:则返回主程序后a数组中的值应为:注意:部分源程序给出如下。请勿改动函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#inclucle<stdio.h>#inclucle<conio.h>#inclucie<stdlib.h>#defineN5voidfun(inta[][N],intn){}main(){inta[N][N],n,i,j;printf("*****Thearray*****\n");for(i=0;i<N;i++){for(j=0;j<N;j++){a[i][j]=rand()%10;printf("%4d",a[i][j]);}printf("\n");}n=rand()%4;printf("n=%4d\n",n);fun(a,n);printf("*****TGERESULT*****\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",a[i][j]);printf("\n");}}标准答案:voidfun(inta[][N],intn){inti,j;for(i=0;i<N;i++)for(j=0;j<=i;j++)/*矩形的下三角时,积相乘*/a[i][j]=a[i][j]*n;}知识点解析:本题的fun的功能是使数组的左下半三角元素中的值乘以n,因此本题需要使用双重for循环,for循环需要注意的是:(1)循环初值,根据题意要求控制循环变量的取值范围;(2)循环条件,确定循环结束的条件,即当不满足条件时,结束循环。首先从数组中找出要被乘以n的那部分元素,这一过程其实就是找出将被挑出的元素在原数组中的分布规律的过程。通过观察得出,要被处理的元素下标值的范围是每行中从第一个元素开始,直到列数等于该行行数时为止。找到这个规律后,依次从数组中取得符合要求的元素,然后乘以n。国家二级C语言机试(操作题)模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的作用是:不断从终端读入整数,由变量a统计大于0的个数,用变量c来统计小于0的个数,当输入0时结束输入,并通过形参pa和pb把统计的数据传回主函数进行输出。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2voidfun(int*px,int*py)3{4/**********found**********/5int_(1)_;6scanf(’’%d’’,&k);7/**********found**********/8while(2)9{if(k>0)a++;10if(k<0)c++;11/**********found**********/12__(3)__;13}14*px=a;*py=c;}15main()16{intx,y;17fun(&x,&y);18printf(’’x=%dy=%d\n’’,x,y);19}标准答案:(1)a=0,c=0,k(2)(k!=0)(3)scanf(’’%d’’,&k);知识点解析:本题中函数fun的功能是不断从终端读入整数,由变量a统计大于0的个数,用变量c来统计小于0的个数,当输入0时结束输入,然后通过形参pa和pb把统计的数据传回主函数进行输出。因为此函数对于数字的大小有不同的处理方式,所以根据题意首先要区别大于0、小于0和等于0的数字,然后进行统计和程序的进行。然后我们就能想到要使用条件语句来进行,while或者if都可,再利用自增运算符既可以统计,得到结果。第一空:“int__(1)__;”这一空出现在fun函数最开始的定义阶段,我们可以看到这里定义的是int整型数据,而在这下面的一步为“scanf*’’%d’’,&k);”即让我们输入k的数据,再根据题意,就可以知道这里的k是我们不断输入的整数,而整个程序也仅仅需要这一个数据的输入,所以这一空定义的就是我们需要输入的数据k,同时下面出现在a,c也都没有定义,所以这一空应该填“a=0,c=0,k”。第二空:“while__(2)___;”这一空出现在fun函数中的while循环中,是要给出while循环的条件语句。根据题意我们就可以知道,这里循环是只要数字不0就一直进行,而while循环内部也能看到k>0和k<0时的统计步骤,所以这里while循环应该就是while循环的终止条件,k不等于即可,即这一空应该填“(k!=0)”(注意这里应该加上条件语句应有的括号)。第三空:“……(3);……”这一空在while循环中,此while循环是数字的判定函数。这一空前面已经有了对于数字大于0或者小于0的判断,也有相应的a++和c++来进行个数统计,但是我们会发现这里功能已经齐全,只不过没有达到题目要求的不断的输入,所以这里循环还要继续输入k的值才能实现题目所达到的要求,所以这一空应该填的是“scanf(’’%d’’,&k);"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序modi1.C的主函数中,将a、b、c三个结点链成一个单向链表,并给各结点的数据域赋值,函数fun()的作用是:累加链表结点数据域中的数据作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。1#include<stdio.h>2typedefstructlist3{intdata;4structlist*next;5}LIST;6intfun(LIST*h)7{LIST*p;8/**********found**********/9intt;10p=h;11/**********found**********/12while(p)13{14/**********found**********/15t=t+p.data;16p=(*p).next;17}18returnt;19}20main()21{LISTa,b,c,*h;22a.data=34;b.data=51;23c.data=87;c.next=’\0’;24h=&a;a.next=&b;b.next=&c;25printf(’’总和=%d\n’’,fun(h));26}标准答案:(1)intt改为intt=0;(2)while(*p)改为while(p)(3)t=t+p.data;改t=t+(*p).data知识点解析:本题中函数fun()的作用是:累加链表结点数据域中的数据作为函数值返回。这里数据是主函数中定义的a,b,c,但是要是链表结点的方式将其相加,其实也类似于普通的数据加减,只不过这里用到链表和结构体的话就要注意很多的细节问题,因为指针一直是C语言最难理解的一部分,很容易搞错它的使用方法。(1)第一个错误在定义t时,t是数据结果,但是在一开始定义时,t应该定义为0的,这样才不会影响后面的数据结果,以免程序出现不必要的错误所以这里应该讲intt改为“intt=0”。(2)第二个错误在fun函数中执行while条件时while的条件语句。这里用“*p”,我们都知道这是指针的形式,而“*p”的意义是指针变量p所指向的变量的值,所以这里“*p”是一个具体的变量,而while(*p)的意义是“*p”不为空时就一直执行,但是这里根据题意我们需要的链表的地址来进行题目需要的链表的计算,而单向链表的结束的标志就是链尾,链尾的特征则是指向为空,这里指向为空指的是地址比阿娘,所以这里的终止条件不应该是p所指向的值为0,而是p的地址为空,所以“while(*p)”应该改为“while(p)”。(3)第三个错误在fun()函数中的计算。我们都知道,链表与结构体是紧密相连的,这一题同样用到了,而且我们进行的也是链表结点的运算,自然要用到结构体成员变量的运算。但是在“t=t+p.data”这个运算时,“p.data”的意义是“p.data”这个指针变量,也就是说这是指针变量的运算,指针变量是跟结点变量不同的,我们需要的是结点的数据,而不是指向它的指针的数据,所以这里的运算是完全错误的,为了符合题意,我们应该要使用结点的结构体变量。即“=t+p.data”应该改为“t=t+(*p).data”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是分别统计形参t所指二维数组中字母A和C的个数。注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。1#include<stdio.h>2#include<stdlib.h>3#defineM144voidNON0();5voidfun(char(*t)[M],int*a,int*c)6{7}8voidget(char(*s)[M])9{inti,j;10for(i=0;i<M;i++)11{for(j=0;j<M;j++)12{s[i][j]=65+rand()%12;13printf(’’%c’’,s[i][j]);}14printf(’’\n’’);15}16}17main()18{chara[M][M];19intx,y;20get(a);21fun(a,&x,&y);22printf(’’A=%dc=%d\n’’,x,y);23NONO();24}25voidNONO()26{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/27FILE*fp,*wf;28inti,j,x,y;29chara[M][M];30fp=fopen(’’in.dat’’,’’r’’);31wf=fopen(’’out.dat’’,’’w’’);32for(i=0;i<M;i++)33{for(j=0;j<M;j++)34{fscanf(fp,’’%c’’,&a[i][j]);}35}36Fun(a,&x,&y);37fprintf(wf,’’A:%d\n’’,x);38fprintf(wf,’’C=%d\n’’,y);39fclose(fp);40fclose(wf);41}标准答案:1voidfun(char(*t)[M],int*a,int*c)2{inti,j;3*a=0;*c=0;4for(i=0;i<M;i++)5for(j=0;j<M;j++)6if(t[i][j]==’A’)*a=*a+1;7elseif(t[i][j]==’c’)*c=*c+1;8}知识点解析:本题中fun函数实现的功能的主要功能是找出二维数组中A和C的个数,最先就能想到用条件语句进行判断和统计。解题步骤主要为:第一步,要得到所需要的二维数组,第二步,二维数组进入fun函数中进行数据处理,fun函数中需要if条件语句来进行判断,判断数组中的字母是否为A或者C,数组中的每个数据都需要进行判断,要注意A和C是分开统计的,所以这里需要同时统计A和C,然后分别得到结果;第三步,输出得到的结果:字母A和字母C的个数。本题首先需要一个二维数组,二维数组的大小在程序开始就进行了定义“define=14”,这个大小比较合适,然后利用gets函数得到数组,然后数据就可以进入fun函数中进行处理应用。进入fun函数,fun函数首先肯定需要for循环语句将二维数组中的数据进行排序使用,然后需要条件语句进行判断处理,这两步是一体,见程序第9~11行,for循环保证全部使用了二维数组中数据,并且是依次使用,if语句判断了字母是否为A或者C或者都不是,并且进行了统计相加得到了A的个数a,C的个数c,这样循环完成后,A和C的个数a、c就能继续返回主函数进行输出了,见程序26行,最终得到结果。国家二级C语言机试(操作题)模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:在有n个元素的结构体数组std中,查找有不及格科目的学生,找到后输出学生的学号:函数的返回值是有不及格科目的学生人数。例如,主函数中给出了4名学生的数据,则程序运行的结果为:学号:N1002学号:N1006共有2位学生有不及格科目请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2typedefstruct3{charnum[8];4doublescore[2];5/**********found**********/6}___(1)___;7intfun(STUstd[],intn)8{inti,k=0;9for(i=0;i<n;i++)10/**********found**********/11if(std[i].score[0]<60__(2)__std[i].score[1]<60)12{k++;prfntf(’’学号:%s’’,std[i].num);}13/**********found**********/14return_-(3)__;15}16main()17{STUstd[4]={’’N1001’’,76.5,82.0,’’N1002’’,53.5,73.0,’’N1005’’,80.5,66.0,’’N1006’’,81.0,56.0};18printf(’’\n共有%d位学生有不及格科目\n’’,fun(std,4)};19}标准答案:(1)STU(2)||(3)k知识点解析:本题中函数fun的功能是在有n个元素的结构体数组std中,查找有不及格科目的学生,找到后输出学生的学号;函数的返回值是有不及格科目的学生人数。这里用到了结构体,结构体在对于个人信息处理是有很方便的作用。只需要用到学生的分数和学号,所以这里的结构体的成员表列比较少。然后根据题目要求是要统计出不及格学生的人数并且查找和统计他们的学号,这里用到if条件语句即可进行统计,要注意的是这里学科数,要求只要有一门学科不及格即进入统计,所以要正确地给出条件语句。最后输出学号和人数。第一空:“{……}(1)___;”这一空出现在定义结构体时,这里使用了typedef就是很明显地要声明结构体类型,而这里则是要填写结构体类型名。这里就要知道typedef的作用了,typedef是用来命名已有类型的,相当于给已经知道的类型(如intfloat)一个新的类型名,而这里命名的是一个结构体,这不同于结构体的类型定义,大括号后面填写的不是变量名表列,而是结构体类型名,相当于给一个名称或者一种新的类型。而根据后面程序已给出的部分,我们能清楚的看到定义的结构体类型名是STU,所以这一空应该填的是“STU”。第二空:“if(std[i].score[0]<60__(2)___std[i].score[1]<60);”这一空出现在fun函数中的if条件语句中,根据if后面的执行语句我们可以看到执行的人数的统计,所以这里应该就是在判断学生学科分数是否及格的条件语句。对于一开始的结构体定义我们能够发现成员score是长度为2的数组,所以每个学生应该是有两门学科的分数需要来判定和统计的,而这两门学科中任意一门分数不够的话都定义为不及格,然后统计进入人数中,这里所填空的两边是两门学科的分数低于60分,既然前面说了是任意一门低于60即进入统计,那这里就应该是“或”符号才符合要求,所以这一空应该填“||”。第三空:“return__(3)___;”这一空出现在fun函数中,这里要填写的是fun函数执行后的返回值。根据题目的要求函数是要查找不及格的科目的学生,找到学生学号,然后返回学生的人数,这一空前面已经执行了查找,统计人数和学号的输出,所以这里应该返回的就是不及格学生的人数。而根据前面的定义,人数统计的变量名应该是k,所以这一空应该要填写的是“k”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中,函数fun的功能是判断整数n是否是“完数”。当一个数的因子之和恰好等于这个数本身时,就称这个数为“完数”。例如:6的因子包括1、2、3,而6=1+2+3,所以6是完数。如果是完数,函数返回值为1,否则函数返回值为0。数组a中存放的是找到的因子,变量k中存放的是因子的个数。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。1#include<stdio.h>2intfun(intn,inta[],int*k)3{intm=0,i,t;4t=n;5/**********found**********/6for(i=0;i<n;i++)7if(n%i==0)8{a[m]=i;m++;t=t-i;}9/**********found**********/10k=m;11/**********found**********/12if(t=0)return1;13elsereturn0;}14main()15{intn,a[10],flag,i,k;16printf(’’请输入一个整数:’’);scanf(’’%d",1&n);17flag=fun(n,a,&k);18if(flag)19{prfntf(’’%d是完数,其因子是:’’,n);20for(i=0,i<k,i++)printf(’’%d’’,a[i]);21printf(’’\n’’);}22elseprintf(’’%d不是完数.\n’’,n);23}标准答案:(1)for(i=0;i<n;i++)改为for(i=1;i<n;i++)(2)k=m;改为*k=m;(3)if(t=0)改为if(t==0)知识点解析:本题的fun函数主要功能是:是判断整数n是否是“完数”。当一个数的因子之和恰好等于这个数本身时,就称这个数为“完数”。(例如:6的因子包括1、2、3,而6=1+2+3,所以6是完数)如果是完数,函数返回值为1,否则函数返回值为0。数组a中存放的是找到的因子,变量k中存放的是因子的个数。这里是一个条件判断问题,原理上利用条件if条件语句和for循环得到结果,结果则是用数组输出完数的因子,用k变量输出因子的个数。这里fun()函数为了判定这个数字是否为完数,一定要使用正确的循环,这个判断条件还是需要一定的步骤的。最重要的就是注意细节(1)第一个错误在fun()函数的for循环中,这里的循环的就是输入数字n的因式,很明显的一个问题就是循环的起始值有问题,这从i=0开始就违反了最基本的四则运算,0不可能是其他整数的因式,也没有意义。所以这里应该将“i=0”改为“i=1”。(2)第二个错误在fun()函数中数字经过for循环过后,这里“k=m”,是为了得到“k”的值,也就是因子的个数。但是要注意的细节是在fun()函数中的参数是“k”,也就是说k只是一个指针变量,而不是我们所需要的因子个数的变量,所以这里我们应该使用的是“*k”,即将“k=m”改为“*k=m”。(3)第三个错误在fun函数第二个if条件语句中,这里“f(t=0)return1;”的t是数字减掉因子和的值,也就是说只要是t等于0就代表输入的数字是一个完数,这里原本的意图就是在得到因子的和之后判断数字是否为完数。但是又有一个细节没有注意到的就是在if条件语句中,等于号应该是“==”,而不是普通的“=”,所以这里应该将“if(t=0)”改为“if(t==0”。)三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun:在形参指针所指的4个整数中找出最大值和最小值,最大的放在a中,最小的放在d中。注意:部分源程序存在PROG1.C中,请勿改动主函数mare和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。1#include<stdio.h>2voidNONO();3voidfun(int*a,int*b,int*c,int*d)4{5}6main()7{inta,b,c,d;8printf(’’请输入4个整数:’’);9scanf(’’%d%d%d%d’’,&a,&b,&c,&d);10printf(’’原始顺序:%d,%d,%d,%d\n’’,a,b,C,d);11fun(&a,&b,&c,&d);12printf(’’处理后:%d,%d,%d,%d\n”,a,b,c,d);13NONO();14}15voidNONO()16{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/17FILE*fP,*wf;18inti,a,b,c,d;19fp=fopen(’’in.dat’’,’’r’’);20wf=fopen(’’out.dat’’,’’w’’);21for(i=0;i<5;i++)22{fscanf(fp,’’%d%d%d%d’’,&a,&b,&c,&d);23fun(&a,&b,&C,&d);24fprintf(wf,’’a=%d,d=%d\n’’,a,d);25}26fclose(fp);27fclose(wf);}标准答案:1voidfun(int*a,int*b,int*c,int*d)2{intt;3if(*a<*b){t=*a;*a=*b;*b=t;}4if(*a<*c)(t=*a;*a=*c;*c=t;}5if(*a<*d){t=*a;*a=*d;*d=t;}6if(*b<*c){t=*b;*b=*c;*c=t;}7if(*b<*d){t=*b;*b=*d;*d=t;}8if(*c<*d){t=*c;*c=*d;*d=t;}}知识点解析:本题中的函数功能主要是在形参指针所指的4个整数中找出最大值和最小值,最大的放在a中,最小的放在d中。这个题目类似于排序,但是又不是严格的排序,只要重新排序最大值和最小值的位置即可。所以类似于排序,这一题需要相互比较4个数字,然后进行位置的调换。基本思路就是比较相邻的两个数字,如果靠近a的数字比靠近d的数字要大,就不用进行交换,如果靠近a的数字比靠近d的数字小,就进行交换,这样的话最大的数字就会慢慢交换到a的位置,然后最小的数字就会慢慢交换到d的位置。所以根据分析我们就要用到if语句来进行判断和处理,只要经过几轮的if判断大小然后交换,就能实现题目条件所给出的位置的重置,得到要求的结果。首先在主函数main中我们需要的就是四个数字,这四个数字需要手动输入,件程序代码第13~15行,四个数字输入完城后就可以进入fun函数进行数据处理了。进入到fun函数中,只要从a到d进行比较,按照一开始的规则即可,如果a大于b,不变,比较a与c,若a小b,a与b交换位置,交换过后a就大于b了,这样就进行a与c的比较;a与c的比较同理,这样的循环比较,就能发现,每比较一次,较大的数字就能交换到a的位置,较小的数字就离a越来越远,也就是到了d的位置,这样就完成了题目所给出的要求了,最大的数字放在a中,最小的数字放在d中。当新的排序排好后,就可以返回主函数进行输出了。国家二级C语言机试(操作题)模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.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标准答案:(1)filename(2)fp(3)fp知识点解析:第一空:“fp=fopen(【1】,"rb+");”补充fopen的参数,fopen的调用形式是:fp=fopen(文件名,文件使用方式),因此,第一空处应填文件名“filename”。第二空:此处是补充fseek函数的参数,fseek的调用形式是:fseek~(fp,offset,position),其中,第一个参数是文件型指针,故第二空处应填文件型指针变量“fp”。第三空:fwrite的调用形式是(buffer,size,counf,fp),最后一个参数是文件型指针,故第三空处应填“fp”,将新的学生数据写在最后一个学生数据位置。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includetypedefstructaa{intdata;structaa*next;}NODE;NODE*Creatlink(intn,intm){NODE*h=NULL,*p,*s;inti;/**********found***********/p=(NODE)malloc(sizeof(NODE));h=p;p->next=NULL;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;}/**********found***********/returnp;}outlink(NODE*h){NODE*p;p=h->next;printf("\n\nTHELIST:\n\nHEAD");while(p){printf("->%d",p->data);p=p->next;}printf("\n");}main(){NODE*head;head=Creatlink(8,22);outlink(head);}标准答案:(1)p=(NODE*)malloc(sizeof(NODE));(2)returnh;知识点解析:(1)“p=(NODE)malloc(sizeof(NODE));”第一标识,maclloc函数的返回类型是void*类型,表示未确定类型的指针,因此,需要指针类型转换,而“(NODE)”不是指针类型,故第一标识下应改成“p=(NODE*)malloc(sizeof(NODE));”。(2)第二个标识下,最后将单链表返回,应该是返回头指针h指向的链表,而不是其中的一个节点p,所以“returnp;”应该改为“returnh;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#include#defineN80intfun(char*s){}main(){charline[N];intnum=0;voidNONO();printf("Enterastring:\n");gets(line);num=fun(line);printf("Thenumberofwordis:%d\n\n",num);NONO();}voidNONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,num;charline[N],*p;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fgets(line,N,rf);p=strchr(line,’\n’);if(p!=NULL)*p=0;num=fun(line);fprintf(wf,"%d\n",num);}fclose(rf);fclose(wf);}标准答案:inti,n=0;//字符统计初始值设置为0for(i=0;i=’a’&&s[i]<=’z’&&s[i+1]==’’‖s[i+1]==’\0’)//单词判断条件n++;//单词统计计数器加1}returnn;//返回统计值知识点解析:(1)首先,求得字符串的长度。(2)只要小于字符串的长度,就对字符进行循环判断。(3)根据题干要求,只要字符是小写字母,并且下一个紧靠的字符是空格或者尾符,那么单词统计计数器就加1。国家二级C语言机试(操作题)模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:计算直到<10-6若x=2.5,函数值为:1.917915o请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!.#include#includedoublefun(doublex){doublef,t,intn;f=1.0+x;/**********found**********/t=___1___;n=1;do{n++;/**********found**********/t*=(-1.0)*x/___2___;f+=t;}/**********found**********/while(___3___>=le-6);returnf;}main(){doublex,y;x=2.5;y=fun(x);printf("inTheresultis:in");print.f("x=%-12.6fy=%-12.6fin",x,y);}标准答案:(1)x(2)n(3)fabs(t)知识点解析:函数fun的功能是计算级数和。第一空:“f=1.0+x;”f的初始化为级数的前两项之和,dowhile循环从第三项x2/2开始计算,第一空处是给t赋初值,t表示级数项,“n++;t*=(-1.0)*x/__2__;”即第一次进入do循环之后n的值为2,故t的初值应该为x,第一空处应为“x”。第二空:由审题分析可知,后一项乘以(-1)*x除以n,故第二空处应为“n”。第三空:循环的终止条件是(xn/n!)的绝对值小于le-6,即只要(xn/n!)大于等于le-6,do循环就执行,故第三处应为“fabs(t)”,fabs函数的功能是求绝对值。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includelongfun(intx,intY,long*p){inti;longt=1;/**********found**********/for(i=1;i标准答案:(1)for(i=1;i<=y;i++)(2)t=t%1000;知识点解析:函数的功能是求整数x的y次方的低3位值。(1)第一个标识下的“for(i=1;i三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:计算并输出当x<0.97时下列多项式的值,直到|Sn-Sn-1|<0.000001为止。例如,在主函数中从键盘给x输入0.21后,输出为:s=1.100000。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#includedoublefun(doublex){}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;inti;doubles,x;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%1f",&x);s=fun(x);fprintf(wf,"%1f\n",s);}fclose(rf);fclose(wf);}main(){doublex,s;。printf("Inputx:");scanf("%If",&x);s=fun(x);printf("s=%f\n",s);NONO();}标准答案:intn=1;/*循环计数*/doublesn=1;/*累计数*/doublexn=1,xn1=0;/*x的n值,以及x的n-1值;*/while(fabs(xn-xn1)>=0.000001)/*绝对值是否满足条件*/{xn=xn*x*(0.5-n+1)/n;/*表达式分解以后xn=(xn-1)*x*(0.5-n+1)/n*/n+=1;sn+=xn;/*sn累加上xn*/}return(sn);知识点解析:(1)根据题干中给出的数列,推出每一项分子是在前一项分子的基础上乘以(0.5-n+1)*x,分母则为阶乘,也就是在前一项分母的基础上乘以n。(2)在循环中求得每一项,然后对其进行累加求和。国家二级C语言机试(操作题)模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是将带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN5typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*p,*q,*r;/**********found**********/P=h->【1】;/**********found**********/if(p==【2】__)return;q=p->next;p->next=NULL;while(q){r=q->next;q->next=p;/**********found**********/p=q;q=【3】;}h->next=p;}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]={2,4,6,8,10};head=creatlist(a);printf("\nTheoriginallist:\n");outlist(head);fun(head);printf("\nThelistafterinverting:\n");outlist(head);}标准答案:(1)next(2)0或NULL(3)r知识点解析:函数fun的功能是将带头结点的单向链表逆置。第一空:“p=h->1;”对结点p进行初始化,由审题分析可知,p初始化为链表的第二个结点,即p->next,故第一空处应为“next”。第二空:“if(p==【2】)return;”如果链表只有一个结点,无需逆置,即第二空处为“0”或“\0”或“NULL”。第三空:循环内完成结点的指针指向前一个结点,“r=q一>next;”r已经指向q的下一个结点,“q->next=p;”将q结点指向链表的前一个结点,“p=q;”是将p结点往后移动一个结点位置,第三空处是q结点往后移动一个结点位置,即第三空处为“r”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#include#defineN80intfun(char*s,char*t){intn;char*p,*r;n=0;while(*s){p=s;/*********found**********/r=p;while(*r)if(*r==*p){r++;p++;}elsebreak;/*********found**********/if(*r=0)n++;s++;}returnn;}main(){chara[N],b[N];intm;printf("\nPleaseenterstringa:");gets(a);printf("\nPleaseentersubstringb:");gets(b);m=fun(a,b);printf("\nTheresultis:m=%d\n",m);}标准答案:(1)r=t;(2)if(*r==0)知识点解析:函数的功能是计算字符串中含有某子串的数目。(1)根据“while(*r)if(*r=*p){r++;p++;}”可知该循环是比较r和p指向的字符串是否相等,本题的要求是计算字符串中含有某子串的数目,p指向的源字符串s,所以r应指向的是字符串t,故第一标识下应改成“r=t;”。(2)根据题意第二标识下“if(*r=0)”应该是判断r是否指向字符串尾,在C语言中,等于是用“==”标识,因此,第二标识下应改成“if(*r==0)”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。例如,字符串数组中的M个字符串为AAAABBBBBBBCC则合并后的字符串的内容应是:AAAABBBBBBBCC。提示:strcat(a,b)的功能是将字符串b复制到字符串a的串尾上,成为一个新串。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#include#defineM3#defineN20voidfun(chara[M][N],char*b){}main(){charw[M][N]={"AAAA","BBBBBBB","CC"},a[100];inti/voidNONO();printf("Thestring:\n");for(i=0;KM;i++)puts(w[i]);printf("\n");fun(w,a);printf("TheAstring:\n");printf("%s"fa);printf("\n\n");NONO();}voidNONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;charw[M][N],a[100];inti;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s%s%s",w[0],w[l],w[2]);fun(w,a);fprintf(wf,"%s\n",a);}fclose(rf);fclose(wf);}标准答案:inti,j,k=0;for(i=0;i知识点解析:(1)二维字符数组第i行j列元素a[i][j],就是指针形式的“*(*(a+i)+j)”。因此,如果字符“*(*(a+i)+j)”是串的结束符,则说明该字符串已经结束。(2)当一维字符数组存放完字符串中各字符后,必须在一维字符数组的尾字符处加一个结束符“’\0’”,才能把字符数组变成字符串。否则,字符数组就只能是非字符串的一般字符数组。国家二级C语言机试(操作题)模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:将形参a所撸数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中存放数组中数据酌个数,若n为奇数,则中间的元素不动。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为6、7、8、9、5、1、2、3、4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2#defineN93voidfun(inta[],intr1)4{inti,t,p;5/**********found**********/6p=(n%2==0)?n/2:n/2+__1__;7for(i=0;i<n/2;i++)8{9t=a[i];10/**********found**********/11a[i]=a[p+__2__];12/**********found**********/13__3___=t;14}15}16main()17{intb[N]={1,2,3,4,5,6,7,8,9},i;18printf(’’\nTheoriginaldata:\n’’);19for(i=0;i<N;i++)printf(’’%4d’’,b[i]);20printf(’’\n’’);21fun(b,N);22printf(’’\nThedataaftermoving:\n’’);23for(i=0;i<N;i++)printf(’’%4d’’,b[i]);24printf(’’\n’’);25}标准答案:(1)1(2)i(3)a[p+i]知识点解析:函数fun的功能是将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。第一空:“p=(n%2==0)?n/2:n/2+___1___;”和“a[i]=a[p+___2___];”“n%2==0”判断是否是偶数,a[i]和a[p+__2__]交换,如果n是偶数,a[0]和a[n/2]交换,如果n是奇数,那么a[0]和a[n/2+1]交换,依此类推,故n为偶数时a[i]和a[i+n/2]交换,n为奇数时a[i]和a[i+n/2+1]交换。因此,如果n是奇数的话,p应该等于n/2+1,故第一空处应为“1”。第二空:由上分析可知,a[i]和a[i+p]交换,故第二空应为“i”。第三空:“t=a[i];a[i]=a[p+i];”,故第三处应该是把a[i]赋值给a[p+i],a[i]保存在t中,故第三空应为“a[p+i]”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中,中间的放在b中。例如,输入的数为:551234,输出结果应当是:a=55.0,b=34.0,c=12.0。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。1#include<stdio.h>2voidfun(float*a,float*b,float*c)3{4/**********found**********/5float*k;6if(*a<*b)7{k=*a;*a=*b;*b=k;}8/**********found**********/9if(*a>*c)10{k=*c;*c=*a;*a=k;}11if(*b<*c)12{k=*b;*b=*c;*c=k;}13}14main()15{floata,b,c;16printf(’’Inputabc:’’);scanf(’’%f%f%f’’,&a,&b,&c);17printf(’’a=%4.1f,b=%4.1f,c=%4.1f\n\n’’,a,b,c);18fun(&a,&b,&c);19printf(’’a=%4.1f,b=%4.1f,c=%4.1f\n\n’’,a,b,c);20}标准答案:(1)floatk;(2)if(*a<*c)知识点解析:函数对三个数进行两两比较,实现判断。(1)第一个标识下的变量k是在比较过程中,临时存放数据的变量,因此k不应是指针,所以将“float*k;”改为“floatk;”。(2)分析函数中第一个if语句,如果主函数中a<b,则对调,把大数放在a中;分析第二个if语句,如果主函数中的a>c,则进行对调,又把大数放在c中,这样的逻辑显然是混乱的。因此,第二个标识下“if(*a>*c)”应该改为“if(*a<*c)”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。1#include<stdio.h>2#defineN163typedefatruct4{charnum[10];5ints;6}STREC;7intfun(STREC*a,STREC*b]8{910}11main()12{STRECs[N]=({’’GA05’’,85},{’’GA03¨,76},{’’GA02’’,69},{’’GA04’’,85},{.tGAOl”,91},{’’GA07’’,72},{’’GA08’’,64},{’’GA06”,87},{’’GAOl5’’,85},{’’GAOl3’’,91},{’’GA012’’,64),{”GAOl4”,91),{’’GA011’’,77},{’’GAOl7’’,64),{’’GA018’’,64},{’’GA016’’,72}};13STRECh[N];14inti,n;FTL

温馨提示

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

评论

0/150

提交评论