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

下载本文档

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

文档简介

国家二级C语言机试(操作题)模拟试卷26(共9套)(共24题)国家二级C语言机试(操作题)模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:计算NXN矩阵的主对角线元素和反向对角线元素之和,并作为函数值返回。要求先累加主对角线元素中的值,再累加反向对角线元素中的值。例如,若N=3,有下列矩阵:123456789首先累加1、5、9,然后累加3、5、7,函数返回值为30。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN4fun(intt[][N],intn){inti,sum;/**********found***********/【1】;for(i=0;i<n,i++)/**********found***********/sum+=【2】;for(i=0;i<n;i++)/**********found***********/sum+=t[i][n—i—【3】];Eeturnsum;}main(){inti,j,t[][N]={21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10);printf(“\nTheoriginaldata:\n”);for(i=0;i<N;i++){for(j=0;j<N;j++)printf(“%4d”,t[i][j]);printf(“\n”),}printf(“Theresultis:%d”,fun(t,N));}标准答案:(1)sum=0(2)t[i][i](3)1知识点解析:填空1:变量sum用来储存“和”结果,所以将其初始化为0。填空2:从题目中可以了解到,主对角线元素的行和列下标是相同的,所以应填入t[i][i]。填空3:对于反向对角线元素的行和列的下标,它们的关系是相加和为n—1,所以应填入1。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:先将s所指字符串中的宁符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序连接到t所指串之后。例如,当s所指的字符串为“ABCDE”时,t所指的字符串应为“EDCBAABCDE”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,char*t){/**********found***********/inti;s1=strlen(s);for(i=0;i<s1;i++)/**********found***********/t[i]=s[s1一i];for(i=0;i<=s1;i++)t[s1+i]=s[i];t[2*s1]=‘\0’;}voidmain(){chars[100],t[100],system(“CLS”);printf(“\nPleaseenterstrings:”),scanf(“%S”,s);fun(s,t);printf(“Theresultis:%s\n”,t),}标准答案:(1)inti,s1;(2)t[i]=s[s1—i—1];知识点解析:(1)变量s1没有定义。(2)该循环实现将s串中的字符逆序存入t串中,t[i]对应s串中的s[s1—i一1]。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,其功能是:将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的卜位和个位数依次放在c数的十位和千位上。例如,当a=45,b=12时,调用该函数后c=2514。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容。仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>voidfun(inta,intb,long*c){}main(){inta,b;longc;printf(“Inputa,b:”),scanf(“%d%d”,&a,&b);fun(a,b,&c);printf(“Theresultis:%ld\n”,c);}标准答案:voidfun(inta,intb,long*c)(/*b%10获取b的个位,a/10获取a的十位,a%10获取a的个位,b/10获取b的十位*/*c=a/10+(b/10)*10+(a%10)*100+(b%10)*1000;}知识点解析:本题的主要问题是如何取出a和b的个位数和十位数,取出后如何表示成c中相应的位数。由于a和b都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。得到后对应乘以1000、100、10、1,就可得到c的千位数、百位数、十位数和个位数。注意使用c时要进行指针运算。国家二级C语言机试(操作题)模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算下式前n项的和,并作为函数值返回。例如,当形参n的值为10时,函数返回-0.204491。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2doublefun(intn)3{inti,k;doubles,t;4s=0;5/*********found*********/6k=【1】;7for(i=1;i<n;i++){8/*********found*********/9t=【2】;10s=s+k*(2*i-1)*(2*i+1)/(t*t);11/*********found*********/12k=k*【3】;13}14returns;15}16main()17{intn=-1;18while(n<0)19{printf(’’Pleaseinput(n>0):’’);scanf(’’%d’’,&n);}20printf(’’\nTheresultis:%f\n’’,fun(n));21}标准答案:(1)1(2)2*i(3)(-1)知识点解析:填空1:由fun函数整体结构可以看出k的作用是赋值,并累加各项前边的正负号,由于第一项是正的,因此赋给k的值为1。填空2:此空下一行的表达式k*(2*i-1)*(2*i+1)/(t*t)累加的通项,k为正负号,由题目中的公式可知t=2*i。填空3:由于通项前边的正负号每次都要发生变化,因此k=k*(-1)。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:根据以下公式求π值,并作为函数值返回。例如,当给指定精度的变量eps输入0.0005时,应输出Pi=3.140578。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<conio.h>2#include<stdio.h>3#include<math.h>4doublefun(doubleeps)5{6doubles,t;intn=1;7s=0.0;8/*********found*********/9t=0;10while(t>eps)11{12s+=t;13t=t*n/(2*n+1);14n++;15}16/*********found*********/17return(s);18}19voidmain()20{21doublec;22printf(’’\nPleaseenteraprecision:’’);23scanf(’’%1f’’,&x);24printf(’’\nPi=%if\n’’,fun(x));25}标准答案:(1)t=1.0;(2)return(s*2);知识点解析:该题中,首先检查变量数据类型前后是否一致,因为变量t定义为double型,所以赋值时要赋以实型数值。return(s)是一个数学错误,应该返回return(s*2);。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最大元素在数组中的下标并存放在k所指向的存储单元中。例如,输入如下整数:87667589610130140l98043l451777则输出结果为6,980。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:1#include<conio.h>2#include<stdio.h>3#include<stdlib.h>4intfun(int*s,intt,int*k)5{67}8voidmain()9{10FILE*Wf;11inta[10]={876,675,896,101,301,401,980,431,451,777},k;12system(’’CLS’’);13fun(a,10,&k);14printf(’’%d,%d\n’’,k,a[k]);15/*****************/16wf=fopen(’’out.dat’’,’’w’’);17fprintf(wf,’’%d,%d’’,k,a[k]);18fclose(wf);19/*****************/20}标准答案:1intfun(int*s,intt,int*k)2{3inti;4*k=0;/*k所指的数是数组的下标值*/5for(i=0;i知识点解析:本题中直接使用指针变量k,使用时要注意对k进行指针运算。程序一开始让k指向数组中的第一个元素,即*k=0。国家二级C语言机试(操作题)模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中,再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中,依此类推。例如,若a所指数组中的数据最初排列为:1、4、2、3、9、6、5、8、7,按规则移动后,数据排列为:9、1、8、2、7、3、6、4、5。形参n中存放a所指数组中数据的个数。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.n>#defineN9/*********found*********/voidfun(int【1】,intn){inti,j,max,min,px,pn,t;/*********found*********/for(i=0;i<n一1;i+=【2】){max=min=a[i];px=pn=i;/*********found*********/for(j=【3】;j<n;j++){if(max<a[j]){max=a[j];px=j;}if(min>a[j]){min=a[j];pn=j;)}if(px!=i){t=a[i];a[i]=max;a[px]=t;if(pn==i)pn=px;}if(pn!=i+1){t=a[i+1];a[i+1]=min;a[pn]=t;)}}main(){intb[N]={1,4,2,3,9,6,5,8,7),i;printf("\nTheoriginaldata:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n");fun(b,N);printf("\nThedataaftermoving:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n");}标准答案:(1)a[](2)2(3)i+1知识点解析:填空1:由main中的函数调用语句确定函数定义的形式参数。填空2:for循环语句中,循环变量增值为2。填空3:确定for语句循环变量的初值。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定函数中,函数fun的功能是:统计字符串中各元音字母(即A、E、I、O、U)的个数。注意:字母不分大小写。例如,输入”THIsisaboot”,则应输出是10220。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdlib.h>2#include<conio.h>3#include<stdio.h>4/*********found*********/5fun(char*s,intnum[5])6{intk,i=5;7for(k=0;k<i;k++)8/*********found*********/9num[i]=0;10for(;*s;s++)11{i=-1;12/*********found*********/13switch(s)14{case’a’:case’A’:15{i=0;break;}16case’e’:case’E’:17{i=1;break;}18case’i’:case’I’:19{i=2;break;}20case’o’:case’O’:21{i=3;break;}22case’u’:case’U’:23{i=4;break;)24}25if(i>=0)26num[i]++;27}28}29voidmain()30{charsl[81];~ntnuml[5],i;31system(”CLS”);31printf("\nPleaseenterastring:");32gets(s1);33fun(s1,num1);34for(i=0;i<5;i++)35printf("%d",num1[i]);36printf("\n");37}标准答案:(1)voidfun(char*s,intnum[5])(2)num[k]=0;(3)switch(*s)知识点解析:switch语句说明如下:(1)switch后的表达式,可以是整型或字符型,也可以是枚举类型。在新的ANSIC标准中允许表达式的类型为任何类型。(2)每个case后的常量表达式只能是由常量组成的表达式,当switch后表达式的值与某一个常量表达式的值一致时,程序就转到此case后的语句开始执行。如果没有一个常量表达式的值与switch后的值一致,就执行default后的语句。(3)各个case后的常量表达式的值必须互不相同。(4)各个case的次序不影响执行结果,一般情况下,尽量将出现概率大的case放在前面。(5)在执行完一个case后面的语句后,程序会转到下一个case后的语句开始执行,因而必须使用break语句才能跳出。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。例如,若n为1000时,程序输出应为:s=153.909064。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<math.h>#include<stdio.h>doublefun(intn){}main()/*主函数*/{voidNONO()jprintf("S=%f\n",fun(1000));NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,n;doubles;fp=fopen("in.dat","r");wf=fopen("out.dat","W");for(i=0;i<10;i++){fscanf(fp,"%d",&n);s=fun(n);fprintf(wf,"%f\n",s);}fclose(fp);fclose(wf);}标准答案:doublefun(intn){doublesum=0.0;inti;for(i=21;i<=n;i++)if((i%3==0)&&(i%7==0))sum+=i;returnsqrt(sum);}知识点解析:本题考查算术运算的算法,首先利用一个for循环判断小于n且能同时被3和7整除的整数,并将满足条件的整数累加到sum,之后调用sqrt函数计算sum的平方根,并作为函数的返回值。国家二级C语言机试(操作题)模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:在带有头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回0值。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN8typedefstructlist{intdata;struerliSt*next;}SLIST;SLIST*creatlist(char*);voidoutlist(STIST*);intfun(SLIST*h,charch){STIST*P;intn=0;p=h一>next;/**********found***********/while(p!=___1____){n++;/**********found***********/if(P一>data==ch)return___2___;elseP=P一>next;}return0;}main(){SLIST*head;intk;charch;chara[N]:{‘m’,‘P’,‘g’,‘a’,‘w’,‘X’,‘r’,‘d’};head=crearliSt(a);outlist(head);printf(“Enteraletter:”);scarlf(“%C”,&ch);/**********found***********/k=fun(___3____);if(k==0)printf(“\nNotfound!\n”);elseprintf(“Thesequencenumberis:%d\n”,k);}SLIST*Crearlist(char*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(“一>%C”,P一>data);p=p一>next;)while(P!=NULL);printf(“一>End\n”);}}标准答案:(1)0或NULL(2)n(3)head,ch知识点解析:函数fun的功能是查找数据域中值为ch的结点。第一空:这里是补充循环结束条件,链表是单向有限的,最后一个结点的指针域指向NULL,因此可以用这个来作为循环结束条件,在p指向的结点的指针域不是NULL时表明还有下一个结点,因此第一空处应该是“while(p!=NULL)”。第二空:在循环当中n用来记录顺序号,如果“if(p->data==ch)”成立,则已经找到数据域中值为ch的结点,返回顺序号,即“returnn:”。第三空:fun函数的调用形式是:fun(SLIST*h,charch),第一个参数是头结点地址,第二个参数是需要寻找的ch值,因此第三空处应该是“k=fun(head,ch):”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#inc2ude#include#include#defineN10typedefstructSS{charnum[10];intS;}STU;STU*fun(STUa[],intm){STUb[N],*t;inti,j,k;/**********found***********/t=(STU*)calloc(Sizeof(STU),m)for(i=0;ib[j].S)j=i;/**********found***********/t(k)=b(j);b[j].s=0;}returnt;}outresu2t(STUa[],FTLE*pf){inti;for(i=0;i10){printf(“\nGivethenumberoftheStudentswhohavebetterscore:”);scanf(“%d”,&m);}pOrder=fun(a,m);printf("******THERESULT*****\n");printf("Thetop:\n");for(i=0;i标准答案:(1)t=(STU*)calloc(sizeof(STU),m);(2)t[k]=b[j];知识点解析:本题中函数的功能是按学习成绩从高到低的顺序找出前m(m≤10)名学生。利用循环结构实现对定义的结构体中的成绩域进行排序。[解题思路](1)题干中要求结构体STU类型的m个学生放在动态分配的连续存储区中,“t=(STU*)calloc(sizeof(STU),m)”语句没有使用分号“;”结束,因此需要在语句结尾处加分号。calloc函数是C语言的动态分配函数,分配存储空间。(2)第二个标识下是将b数组拷贝到t数组,在C语言中,数组元素的访问使用中括号“[]”而不是元括弧“()”,因此第二标识下应改成“t[k]=b[i];”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组S中,请编写函数fun,它的功能是:把分数最低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#defiheN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b){}main(){STRECs[N]={{“GA05”,85),{“GA03”,76),{“GA02”,69},{“GA04”,85),{“GA01”,91},{“GA07”,72),{“GA08”,64},{“GA06”,87},{“GA015”,85),{“GA013”,91),{“GA012”,64},{“GA014”,91),{“GAO11”,91},{“GA017”,64),{“GA018”,64},{“GA016”,72}};STRECh[N];inti,n;FILE*out;n=fun(s,h);printf(“The%dlowestscore:\n”,n);for(i==0;i标准答案:inti,j=0,min=a[0].s;for(i=0;ia[i].s){j=0;b[j++]=a[i];min=a[i].s;}elseif(min==a[i].s)b[j++]=a[i];}returnj;知识点解析:该程序功能是把分数最低的学生数据放在b所指的数组中。本题是关于求解结构体中某些成员的最小值,首先将第一个值设定为最小值,并在循环中将其他所有值与该值进行比较,求得最小值。然后将最小值与所有值进行比较,求得所有的最小值。[解题思路](1)要把最低分数的学生数据放在数组中,首先求出最低分数,再使用一个for循环把所有的成绩进行比较,找出最低的分数来。(2)找出所有与最低分数相等的学生,并将最低分数的人数累加。国家二级C语言机试(操作题)模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是将带头结点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BIANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>#defineN6typeclefstructnode{intdata;structnode*next;}NODE;voidfun(NODE,lch){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一>nexL=NULL;for(i=0;i<N;i++){q=(NODE*)malloc(sizeof(NODE));q一>data=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一>nexL;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("\nThelistaftersotting:\n");outlist(head);}标准答案:(l)h一>next(2)p一>next(3)>知识点解析:填空1:本题考查了指针变量p赋初值,使p指向链表的头结点的下一个结点,因此本空应该填写h一>next。填空2:本空考查了q的作用,q代表p的下一个数,因此次空应该填写p一>next。填空3:if判断句是比较链表中相邻两个数的大小,如果p一>data>q一>data就交换这两个数的值,因而此空填写>。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序的功能是:建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。请改正函数fun中的错误,使它能得出正确的结果。注意:部分源程序在文件NODll.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>typedefstructaa{intdata;structaa*next;)NODE;fun(NODE*h){intmax=一1;NODE*p;/*********found*********/p=h;while(P){if(P一>data>max)max=P一>data;/*********found*********/P=h一>next;}returnmax;}outresult(ints,FILE*pf){iprintf(pf,"\nThemaxinlink:%d\n",s);}NODE*creatlink(intn,intm)(NODE*h,*p,*s;inti;h=p=(NODE*)malloc(Sizeof(NODE));h一>data=9999;for(i=1;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;EetuEnh;}outlink(NODE*h,FILE*pf){NODE*p;p=h一>next;fprintf(pf,"\nTheLIST:\n\nHEAD");while(p){fprintf(pf,"->%d",p->data);p=p一>next;}fprintf(pf,"\n");}main(){NODE*head;intm;system("CLS");head=creatlink(12,100);outlink(head,stdout);m=fun(head);printf("\nTheRESULT:\n");outresult(m,stdout);}标准答案:(1)p=h一>next;(2)p=p一>next;知识点解析:(1)因为链表的头结点没有数据域,所以对指针p进行初始化时,要将p指向头结点的下一个结点。(2)通过指针p的移动遍历链表,因此此处应改为p=p一>next;。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,该函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。例如,若二维数组中的数据为:333333334444444455555555则一维数组中的内容应该是:333333334444444455555555。注意:部分源程序在文件PROGl.C中。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>voidfun(int(*s)[10],int*b,int,*n,intmrn,intnn){}voidmain(){FILE*wf;intw[10][10]={{33,33,33,33),{44,44,44,44},f55,55,55,55}},i,j;inta[100]={0},n=0;printf("Thematrix:\n");for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%3d",w[i][j]);printf("\n");}fun(w,a,&n,3,4);printf("TheAarray:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");/******************/wf=fopen("out.dat","w");for(i=0;i<n;i++)fprintf(wf,"%3d",a[i]);fclose(wf);/******************/}标准答案:voiclfun(int(*s)[10],int*b,int*n,intmm,intnn){inti,j,k=0;for(i=0;i<mm;i++)/*将二维数组s中的数据按行的顺序依次放到一维数组b中*/for(j=0;j<nn;j++)b[k++]=s[i][j];*n=k;/*通过指针返回元素个数*/}知识点解析:本题可以用两个循环来处理,由于是按行的顺序取出,所以第1个循环用于控制行下标,第2个循环用于控制列下标;若改成按列的顺序取出,则循环应改成:for(i=0;i<nn;i++)for(j=0;j<mm;j++)b[k++]=8[j][i];要注意8[j][i]的下标,不能用s[i][j]。若按行取出则列标变化较快,若按列取出则行标变化较陕,即循环嵌套时,越在内层的循环,其循环变量变化就越快。国家二级C语言机试(操作题)模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是对形参b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。例如:b所指变量t中的学号、姓名、和三门课的成绩依次是:10002、"ZhangQi"、93、85、87,修改后输出t中的数据应为:10004、"Lijie"、93、85、87。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#includestructstudent{longsno;charname[10];floatscore[3];};voidfun(structstudent*b){/**********found**********/b____1____=10004;/**********found**********/strcpy(b____2____,"Lijie");main(){structstudentt={10002,"ZhangQi",93,85,87};inti;printf("\n\nTheoriginaldata:\nf’);printf("\nNo:%ldName:%s\nScores:",t.sno,t.name);for(i=0;i<3;1++)printf("%6.2fprintf("\n");/**********found**********/fun(____3____)fprintf("\nThedataaftermodified:printf("\nNo:ooldName:%s\nScores:",t.sno,t.name);for(i=0;i<3fi++)printf("%6.2fprintf("\n");}二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:应用递归算法求形参a的平方根。求平方根的迭代公式如下:例如,a为2时,平方根值为:1.414214。请改正程序中的错误,使它能得出正确结果。注意:不要改动mam函数,不得增行或删行,也不得更改程序的结构。#include#include/**********found**********/doublefun(doublea,dounlex0){doublex1,y;x1=(x0+a/x0)/2.0;/**********found**********/if(fabs(x1—x0)>0.00001)y=fun(a,x1);elsey=x1;returny;}main(){doublex;printf("Enterx:");scanfprintf("Thesquarerootof%1fis%lf\n",x,fun(x,1.0));}三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数劬,它的功能是:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#defineN12typedefstruct{charnum[10];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n){}main(){STRECsENJ={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},{"GA09",60},{"GA11",79},{"GA12",73},{"GA10",90}};STRECh[N],t;FILE*out;inti,j,n;doubleave;ave=fun(s,h,&n);printf("The%dstudentdatawhichishigherthano07.3f:\n",n,ave);printf("%s%4.1f\n",h[i].num,printf("\n");out=fopen("out.dat","w");fprintf(out,"%d\no07.3f\nl’,n,ave);for(i=0;i国家二级C语言机试(操作题)模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。例如,有10个正数:47、30、32、40、6、17、45、15、48、26,其平均值为30.500000。移动后的输出为:30、6、17、15、26、47、32、40、45、48。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<stdio.h>#defineN10doublefun(double*x){inti,j;doubleav,y[N];av=0;for(i:0;i<N;i++)/*********found*********/av+=【1】;for(i=j=0;i<N;i++)if(x[i]<av){y[j]=x[i];x[i]=一1;/*********found*********/【2】;}i=0;while(i<N)【3】;}for(i=0;i<N;i++)x[i]=y[i];returnav;}main(){inti;doublex[N];for(i=0;i<N;i++){x[i]=rand()%50;print:f("%4.0f",x[i]);)printf("\n");printf("\nTheaverageis:%f\n",fun(x));printf("\nTheresult:\n",fun(x));for(i=0;i<N;i++)printf("%5.Of",x[il);printf("\n");}标准答案:(1)x[i]/N(2)j++或++j(3)i++或++i知识点解析:填空1:av代表平均值,本题考查了怎样求平均值,因此本空应该填写x[i]/N。填空2:通过for循环和if判断找到x[i]中比平均值小的数,并把这些值赋值给y[j],因此本空应该填写j++或者++j。填空3:通过while循环语句,把x[i]中比平均值大的数放在数组y的后半部分,因此本空应该填写i++或者++i。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定函数中,函数fun的功能是:统计字符串中各元音字母(即A、E、I、O、U)的个数。注意:字母不分大小写。例如,输入"THIsisaboot”,则应输出是10220。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>/*********found*********/fun(char*s,intnum[5]){intk,i=5;for(k=0;k<i;k++)/*********found*********/num[i]=0;for(;*s;s++){i=一1;/*********found*********/switch(s){case’a’:case’A’:{i=0;break;}case’e’:case’E’:{i=1;break;}case’i’:case’I’:{1=2;break;}case’o’:case’O’:{1=3;break;}case’u’:case’U’;{1=4;break;}}if(i>=0)num[i]++;}voidmain(){chars1[81];intnuml[5],1;system("CLS");printf("\nPleaseenterastring:");gets(s1);fun(s1,numl);for(i=0;1<5;i++)printf("%d",numl[i]);printf("\n");}标准答案:(1)voidfun(char*s,intnum[5])(2)num[k]=0;(3)switch(*s)知识点解析:switch语句说明如下:(1)switch后的表达式,可以是整型或字符型,也可以死枚举类型。式的类型为任何类型。(2)每个case后的常量表达式只能是由常量组成的表达式,当switch后表达式的值与某一个常量表达式的值一致时,程序就转到此case后的语句开始执行。如果没有一个常量表达式的值与switch后的值一致,就执行default后的语句。(3)各个case后的常量表达式的值必须互不相同。(4)各个case的次序不影响执行结果,一般情况下,尽量将出现概率大的case放在前面。(5)在执行完一个case后面的语句后,程序会转到下一个case后的语句开始执行,因而必须使用break语句才能跳出。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,该函数的功能是:求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如,若二维数组中的值为:13579299946999813570则函数值为61。注意:部分源程序在文件PROGl.C中。请勿改主动函数nwn和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<stdlib.h>#defineM4#defineN5intfun(inta[M][N]){}voidmain(){FILE*wf;intaa[M][N]={{1,3f5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}};inti,j,y;system("CLS");printf("Theoriginaldatais:\n");{for(j=0;j<N;j++)printf("%6d",aa[i][j]);printf("\n");}y=fun(aa);printf("\nThesun:%d\n"y);printf("\n");/******************/wf=fopen("out.dat","w");fprintf(wf,"%d",y);fclose(wf);/******************/}标准答案:intfun(inta[M][N]){inti,j,sum=0;for(i=0;i<M;i++)for(j=0;j<N;j++)if(i==0||i==M-1||i==0||j==N一1)/*只要下标中有一个为0或M-1或N-1,则它一定是周边元素*/sum=sum+a[i][j];/*将周边元素相加*/returnsum;}知识点解析:本题采用逐一判断的方式。二维数组周边元素的规律是,其两个下标值中一定有一个是0或M-1或N-1。程序中循环语句用来控制数组的行和列,条件语句用来判断数组元素是否为周边元素。国家二级C语言机试(操作题)模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#defitieN5typedefstructstudent{longsno;charname[10];floatScore[3];}STU;voidfun(char*filename,STUn){FILE*fp;/**********found**********/fp=fopen(_____1_____,"rb+");/**********found**********/fseek(_____2_____,一(long)sizeof(STU),SEEKEND);/**********found**********/fwrite(&n,sizeof(STU),1,_____3_____);fclose(fp);}main(){STUt[N]={{1000l,"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,"7,haoSi",55,70,68},ss[N];inti,j;FILE*fp;fp=fopen("Student.dat","wb");fwrite(t,Sizeof(STU),N,fp);fciose(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的调用形式是(bu*ffer,size,count,fp),最后一个参数是文件型指针,故第三空处应填“fp”,将新的学生数据写在最后一个学生数据位置。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m.1的值。请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includetypedefstructaa{intdata;structaa*next;)NODE;NODE*CreatIink(intn,intm){NODE*h=NULL,*p,*s;inti;/**********found**********/p=(NODE)malloc(sizeof(NODE));h=P;P->next=NULL;for(i=1;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s->data=rand()%mjs->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*)ms1loc(sizeof(NODE));(2)returnh;知识点解析:(1)第一标识下“p=(NODE)malloc(sizeof(NODE));”,maclloc函数的返回类型是void*类型,表示未确定类型的指针,因此需要指针类型转换,而“(NODE)”不是指针类型,故第一标识下应改成“p=(NODE*)malloc(sizeof(NODE));”。(2)第二个标识下,最后将单链表返回,应该是返回头指针h指向的链表,而不是其中的一个节点p,所以“returnp;”应该改为“retumh;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开一行的开始没有空格。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#include#defineN80intfun(char*s){}main(){charline[N];intnum=0;voidNONO();printf("Enterastring:\n");gets(line);num=fun(lime);printf("Thenumberofwordis:%d\n\n",num);NONO();}voidNONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,num;char1ine[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",mum);}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语言机试(操作题)模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:在带有头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回0值。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN8typedefstruerlist{inLdata;structlist*next;}SLIST;SLIST*creatlist(char*);voidoutlist(SLIST*);intfun(SLIST*h,charch){SLIST*p;intn=0;p=h->next;/**********found**********/while(p!=____1____){n++;/**********found**********/if(p->data==ch)return____2____;elsep=p->next;

温馨提示

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

评论

0/150

提交评论