




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C语言)机试模拟试卷21(共9套)(共27题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。例如,从主函数输入一个整数:27638496,函数返回值为:26846。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)1(2)s(3)i*10知识点解析:本题中函数fun的功能是将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,n%10可求得n的个位数,如果将n缩小10倍再次n%10就得到了n的十位数,依此类推变可得到n的百位、千位…。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数。fun的功能是:从3个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!标准答案:(1)for(i=1;i<=3;i++)(2)if(k>=0&&k<=6)知识点解析:本题中函数的功能是从3个红球、4个白球、5个黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。其实就是实现这三种球的组合取值。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把O至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1],把20至29岁年龄段的人数放在d[2]中,其余依此类推,把100岁(含100)以上年龄的人数都放在d[10]中。结果在主函数中输出。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。标准答案:知识点解析:该程序功能是统计各年龄段的人数。本题中采用的是多if选择语句,实现了不同年龄段的分支选择。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。例如,形参s所指的字符串为:abs5defl26jkm8,程序执行后的输出结果为:22。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)48或‘0’(2)s++(3)sum知识点解析:本题中函数fun的功能是将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回,字符转换对应的字符在其ASCII码上减去字符“`0ˊ”对应的ASCII码值即可,比如6=`6ˊ-`0ˊ。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:计算n!。例如,给n输入5,则输出120.000000。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!标准答案:(1)if(n==0)(2)result*=n--;知识点解析:本题中函数的功能是计算阶乘,其中,阶乘的计算公式分为参数n是1和大于1两种情况,例如,1的阶乘1!=1;5的阶乘5!=5×4×3×2×1。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。标准答案:知识点解析:该程序功能是按分数的高低排列学生的记录。首先从数组中挑选一个最大的元素,把它和第一元素交换,接着从剩下的n-1个元素中再挑出一个最大的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:统计长整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量c1,c2,c3返回主函数。例如:当n=123114350时,结果应该为:c1=3c2=lc3=2。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includeintc1,c2,c3;voidfun(10ngn){c1=c2=c3=0;whi1e(n){/**********found************/switch(【1】){/**********found************/casel:C1++;【2】;/**********found************/case2:c2++;【3】;case3:c3++;}n/=10;}}main(){longn=123114350L;fun(n);printf("\nTheresult:\n");printf("n=%ldcl=%dc2=%dc3=%d\n",n,c1,c2,c3);}标准答案:(1)n%10(2)break(3)break知识点解析:第一空:switch内部是统计数字1、2、3的个数,因此switch条件是n的一位数。由“n/=10;"在循环中,n每次减小为以前的1/10,即n逐步往左边移出一个整数位,移出的整数位可由n%10可求得,故第一空处应填“n%10"。第二空:c语言中,case语句后都要加“break"语句,否则会执行多个case语句,因此第二空处应为“brcak"。第三空:理由同上,第三空处应填“break"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容。例如,若字符串为abed,则应输出:dcba。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include/*****************found****************/fun(chara){if(*a){fun(a+1);/***************found*****************/printf("%c"*a);}}main(){chars[10]="abed";printf("处理前字符串=%s\n处理后字符串=",s);fun(s);printf("\n");}标准答案:(1)voidfun(char*a)(2)printf("%c",*a);知识点解析:(1)主函数中“fun(s);"语句中的s是数组名,所以在:fun函数中参数的定义应该是指针型,“fun(chara)"改为“voidfun(char*a)"。(2)pdntf函数的调用形式是:pfintf(格式字符串,输出项表),在格式字符串和输出项表之间有“,",因此第二个标识处应该是“printf("%c",*a);"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。例如,分别输入下面两个字符串:FirstString--SecondString程序输出:FirstStdng--SecondString注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(charp1[],charp2[]){}main(){chars1[80],s2[40];voidNONO();printf("Enters1ands2:\n");Scarlf("%s%s",s1,s2);printf("s1=%s\n",s1);printf("s2=%s\n",s2);printf("Invokefun(s1,s2):\n");fun(s1,s2);printf("Afterinvoking:\n");printf("%s\n",s1);NONO();}voidNONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti;FTLE*rf,*wf;chars1[80],s2[40];rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",s1);fscanf(rf,"%s",s2);fun(s1,s2);fprintf(wf,"%s\n",s1);}fclose(rf);fclose(wf);}标准答案:char*p=p1;while(*p)p++;while(*p2)*p++=★p2++;*p=0;知识点解析:(1)先求出串1的元素个数。(2)然后把串2的元素放到串l最后的位置,依次把串2中的所有字符全部放到串1之后。国家二级(C语言)机试模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充main函数,该函数的功能是:输入两个正整数m和n,求这两个数的最大公约和最小公倍数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>main(){inta,b,n,m,t;clrscr();printf("\nInputtwonumbers:\n");scanf("%d,%d",&n,&m);if(n<m){a=m;b=n;}else{a=n;b=m;}while(【】){t=【】a=b;b=t;}printf("greatestcon.nondivisor:%d\n",a);printf("leastcommonmultiple:%d\n",【】);}标准答案:b!=0a%b;n*m/a知识点解析:第一空:本题考查求最大公约数和最小公倍数的方法。变量a保存两数中较大着,变量b保存较小者,采用循环的方法求解最大公约数,循环结束条件是b等于0。第二空:求解最大公约数的思路是,将a对b求余,如果余数为0,则b即为两数的最大公约数,如果余数不为0,则将b赋给a,余数赋给b,继续将a对b求余,如此循环,直到余数为0。第三空:最小公倍数等于两数的乘积除以最大公倍数。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:根据输入的3个边长(整型值),判断能否构成三角形:若能构成等边三角形,则返回3,若是等腰三角形,则返回2,若能构成三角形则返回1,若不能,则返回0。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<math.h>intfun(inta,intb,intc){if(a+b>c&&b+c>a&&a+c>b){if(a==b&&b==c)/*************found**************/return1;elseif(a==b||b==c||a==c)return2;/*************found**************/elsereturn3;}elsereturn0;}main(){inta,b,c,shape;printf("\nInputa,b,c:");scanf("%d%d%d",&a,&b,&c);printf("\na=%d,b=%d,c=%d\n",a,b,c);shape=fun(a,b,c);printf("\n\nTheshape:%d\n",shape);}标准答案:(1)错误:return1;正确:return3;(2)错误:return3;正确:return1;知识点解析:该题只要理解了if语句中的条件,并能读懂题目定义就可轻松解决,函数返回值搭配错误,是一个简单的数学逻辑问题。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun(),该函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<string.h>#include<stdio,h>#defineN80intfun(char*s){}main(){charline[N];intnum=0;printf("Enterastring:\n");gets(line);num=fun(line);printf("Thenumberofwordis:%d\n\n",num);}标准答案:intfun(char*s){inti,j=0;for(i=0;s[i]!=’\0’;i++)if(s[i]!=’’&&(s[i+l]==’’||s[i+1]==’\O’))/*如果一个字母的下一个字符为空格或者结束标记,则表示一个单词结束*/j++;returnj;/*返回单词个数*/}知识点解析:判断单词的个数,我们首先想到的是程序怎样识别是一个单词,也即循环语句中的fir(i=0;s[i]!="\0";i++),本题重点是if句中的条件表达方式。国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充fun函数,该函数的功能是:判断一个年份是否为闰年。例如,1900年不是闰年,2004是闰年。[注意]部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。[试题源程序]#include<stdio.h>#include<conio.h>intfun(intn){intfiag=0;if(n%4==0){if((1))fiag=1;}if((2))flag=1;return(3);}voidmain(){intyear;clrscr();printf("Inputtheyear:");scanf("%d",&year);if(fun(year))printf("%disaleapyear.\n",year);elseprintf("%disnotaleapyear.\n",year);}标准答案:[1]n%100!=0[2]n%400==0[3]flag知识点解析:题的关键是要知道闰年的定义,如果年份能被4整除但不能被100整除,或者能被400整除,这两种情况满足之一都是闰年。填空1:显然此处属于第一种情况,能被4整除但不能被100整除。所以这里应该填n%100!=0,只有满足这个条件,flag才能被赋值1。填空2:此处属于第二种情况,能被400整除,所以应该填n%400==0。填空3:从程序中可以知道,当满足以上两种情况之一时,flag就被赋值1,显然flag属于标志单元。再看主函数中对fun()函数的调用,显然需要返回的值不是真就是假,即函数fun()中标志单元flag的内容。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:将s所指字符串中的字母转换为按字母序列后续字母(但Z转换为A,z转换为a),其他字符不变。请改正程序指定部位的错误,使它能得到正确结果。[注意]不要改动main函数,不得增行或删行,也不得更改程序的结构。[试题源程序]#include<stdio.h>#include<ctype.h>voidfun(char*s){/**********found**********/while(*s!=’@’){if(*s>=’A’&&*s<=’Z’||*s>=’a’&&’s<=’z’){if(*s==’Z’)*s=’A’;elseif(*s==’z’)*s=’a’;else*s+=1;}/**********found**********/(*s)++;}}voidmain(){chars[80];printf("\nEnterastringwithlength<80.:\n\n");gets(s);printf("\nThestring:\n\nt");puts(s);fun(s);printf("\n\nTheCords:\n\n");puts(s);}标准答案:(1)错误:while(*s!=’@’)正确:while(*s)或while(*s!=0)或while(*s!=’0’)(2)错误:(*s)++;正确:s++;或-s++;知识点解析:错误1:while循环的结束条件是查找完字符串,即指向字符串结尾标志’\0’。由于字符’\0’的ASCAII码值为0,因而*s指向串尾’\0’时,*s的值为0,结束循环。所以while(*s!=’@’)应改为while(*s)或while(*s!=0)或while(*s!=’\0’)。错误2:s为字符指针,*s为指针所指的字符,要处理完字符串中的所有字符,指针必须向字符串的后面移动,即s++或*s++,而不是字符值增加(*s)++。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已存放在主函数的结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。[注意]部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的花括号中填入所编写的若干语句。[试题源程序]#include<stdio.h>#defineN8typedefstruct{charnum[10];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n){}voidmain(){STRECs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}};STRECh[N],t;FILE*out;inti,j,n;doubleave;ave=fun(s,h,&n);printf("The%dstudentdatawhichislowerthan%7.3f:\n",n,ave);for(i=0;i<n;i++)printf("%s%4.1f\n",h[i].num,h[i].s);printf("\n");out=fopen("out.dat","W");fprintf(out,"%d\n%7.3f\n",n,ave);for(i=0;2<n-1;i++)for(j=i+1;j<n;j++)if(h[i].s>h[j].s){t=h[i];h[i]=h[j];h[j]=t;}for(i=0;2<n;i++)fprintf(out,"%4.1f\n",h[i].s);fclose(out);}标准答案:intfun(STREC*a,STREC*b,int*n){doubleave=0.0;inti,j=0;*n=0;for(i=0;i<N;i++)ave+=a[i].s;ave/=N;for(i=0;i<N;i++)if(a[i].s<ave){b[j]=a[i];(*n)++;j++;}returnave;}知识点解析:本题的设计思路是:(1)定义两个变量,分别用于保存总分和平均值,定义循环变量并赋初值:(2)利用循环语句遍历所有学生的分数,累加求和并计算初值;(3)再次遍历结构体数组,找出低于平均分的分数,把该学生的记录保存在形参数组b中,并记录其个数;(4)用return语句返回平均值。国家二级(C语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKI.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN8typedefstructlist{intdata;struct1ist*next;}SLIST;voidfun(SLIST*p){SLIST*t,*s;t=p->next;s=p;while(t->next!=NULL){s=t;/************found***********/t=t->【1】;}/**********found************/printf(”%d”,【2】);s->next=NULL;/***********found****************/free(【3】);}SLIST*Crearlist(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;inta[N]={11,12,15,18,19,22,25,29};head=creatlist(a);printf(”\nOutputfromhead:\n”);outlist(head);printf(”\nOutputfromtail:\n”);while(head->next!=NULL){fun(head);printf(”\n\n”);print(”\nOutputfromheadagain:\n”),outlist(head);}}标准答案:(1)next(2)t一>data(3)t知识点解析:第一空:fun函数中的循环“while(I->next!=NULL)"目的是找到尾结点,利用结点变量s和t,s指向当前节点,t不断指向下一个结点,因此第一空处应该是“t=t->next;"。第二空:这里是输出尾结点中的数据,已经利用循环找到了尾结点t,t的数据是t->data,因此第二空处应该为“printf("%d",t->dam);"。第三空:输出尾结点数据之后删除尾结点,使用free,又因为尾结点是t,因此第三空处应该为“free(t);"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODII.C中函数fun的功能是:计算S=f(-n)+f(一n+1)+…+f(0)+f(1)+f(2)+…+fi(n)的值。例如,当n为5时,函数值应为:10.407143。f(x)函数定义如下:请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#include/************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(){printf("%f\n",fun(5));}标准答案:doublef(doublex)returns;知识点解析:(1)第一个标识下f函数的定义缺少返回值类型,所以将“f(doublex)”改为“doublef(doublex)”。(2)第二个标识下返回语句没有分号结束。所以,第二个标识下“returns”应该改为“returns;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:计算并输出给定10个数的方差:(即:10个数的平均值)其中例如,给定的10个数为95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、90.0、56.0,输出为s=11.730729。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#includedoublefun(doublex[10]){}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf*wf;inti,j;doubles,x[10];rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<5;i++){for(j=0;j<10;j++)fscanf(rf,"%lf",&x[j]);s=fun(x);fprintf(wf,"%lf\n",s);}fclose(rf);fclose(wf);}main(){doubles,x[10]={95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0};inti;printf("\nTheoriginaldatais:\n");for(i=0;i<10;i++)print;f("%6.1f",X[i]);print:f("\n\n");s=furl(x);printf("s=%f\n\n",s);NONO();}标准答案:inti;doubleavg=0.0,sum=0.0,abs=0.0,fc;for(i=0;i<10;i++)sum+=x[i];avg=sum/10;/*计算平均值*/for(i=0;i<10;i++)abs+=(x[i]-aVg)*(x[i]一avg);fc=sqrt(abs/10);returnfc;知识点解析:(1)首先计算x’的值,它的值是所有值累加求和的十分之一。(2)根号下的部分是前面求得x’与当前项差的平方的累加和的十分之一。(3)最后可以利用C语言库函数pow来计算平方根。国家二级(C语言)机试模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、数组str全由大小写字母字符组成。请补充函数fun(),该函数的功能是:把str中的字母转换成紧接着的下一个字母,如果原来的字母为‘z’或‘Z’,则相应地转换成‘a’或‘A’,结果仍保存在原数组中。例如,输入“StudentZz”,则输出“TuvefouAa”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#defineN80voidfun(chars[]){inti;for(i=0;【】;i++){if(s[i]==’z’||s[i]=’Z’)s[i]-=【】;elses[i]+=【】;}}main(){charstr[N];clrscr();printf("\nInputastring:\n");gets(str);printf("\n***originalstring***\n");puts(str);fun(str);printf("\n***newstring***\n");puts(str);}标准答案:s[i]!=’\0’251知识点解析:第一空:for循环的执行条件是当前字符不为’\0’,即还没有到字符串的最后一个字符’\0’。第二空:如果原来的字母是‘z’或‘Z’,则要转换成‘a’或‘A’。也就是把ASCII码减去25。第三空:除了字母‘z’或‘Z’,其他字母都转换成下一个字母,所以把ASCII码加上1。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是;将s所指字符串中的字母转换为按字母序列的后续字母(但Z转化为A,z转化为a),其他字符不变。请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<ctype.h>#include<conio.h>voidfun(char*s)/*************found**************/{while(*s!=’@’){if(*s>=’A’&*s<=’z’||*s>=’a’&&*s<=’z’){if(*s==’Z’)*S=’A’;elseif(*S==’z’)*s=’a’;else*s+=1;}/*************found**************/(*s)++;}}main(){chars[80];clrscr();printf("\nEnterastringwithlength<80:\n\n");gets(s);printf("\nThestring:\n\n");puts(s);fun(s);printf("\n\nTheCords:\n\n");puts(s);}标准答案:(1)错误:while(*s!=’@’)正确:while(*s)(2)错误:(*s)++;正确:s++;知识点解析:根据题目要求,可对字符串所有字母进行遍历。对每一个字母,若该字母为’z’或’Z’,将该字母改成’a’或’A’,即ASCII码值减25,当然也可以用题目中的if语句来实现转换。若该字母不是’z’或’Z’,则该字母的ASCII码值加1;对字符串所有字符重复以上过程即可得到题目要求的结果,可用循环语句和条件语句来实现。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构件数组s中,请编写函数fun(),它的功能是:把分数最高的学生数据放在h所指的数组中。注意:分数高的学生可能不只一个,函数返回分数最高学生的人数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b){}main(){STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85),("GA013",91},{"GA012",64},{"GA014",91),{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};STRECh[N];inti,n;FILE*out;n=fun(s,h);printf("The%dhighestscore:\n",n);for(i=0;i<n;i++)printf("%s%4d\n",h[i].num,h[i].s);/*输出最高分学生的学号和成绩*/printf("\n");out=fopen("out45.dat","w");fprintf(out,"%d\n",n);for(i=0;i<n;i++)fprintf(out,"%4d\n",h[i].s);fclose(out);}标准答案:intfun(STREC*a,STREC*b){inti,j=0,max=a[0].s;for(i=0;i<N;i++)if(max<a[i].s)max=a[i].s;/*找出最大值*/for(i=0;i<N;i++)if(max==a[i].s)b[j++]=a[i];/*找出成绩与max相等的学生的记录,存入结构体b中*/returnj;/*返回最高成绩的学生人数*/}知识点解析:该程序使用循环嵌套,第1个for语句的作用是找出最大值。第2个循环的作用是找出与max相等的成绩,也即最高成绩的学生记录,并存入b中。国家二级(C语言)机试模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun(),函数fun()的功能是求7的阶乘。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>longfun(intn){if(【】)return(n*fun(【】);elseif(【】)return1;}main(){intk=7;printf("%d!=%ld\n",k,fun(k));}标准答案:n>1n-1n==1知识点解析:第一空:求阶乘时采用递归的算法,n>1和n==1这两种情况的处理方法不同,需要分开考虑。第二空:阶乘的算法是,当n>1时,n!=n*(n-1)!,即fun(n)=n*fun(n-1)。第三空:n==1是递归的终止条件,因为1!=1,所以当n=1时,返回1。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是;求出两个数的最大公约数,并作为函数值返回。例如,若给num1和num2输入49和21,则输出的最大公约数为7:若给num1和num2分别输入27和81,则输出最大公约数为27。请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>intfun(inta,intb){intr,t;if(a<b)/******************found*****************/{t=a;b=a;a=t;}r=a%b;while(r!=0){a=b;b=r;r=a%b;}/******************found*****************/return(a);}main(){intnum1,num2,a;printf("Inputnum1num2:");scanf("%d%d",&num1,&num2);printf("num1=%dnum2=%d\n\n",num1,num2);a=fun(num1,num2);printf("Themaximuncommondivisoris%d\n\n",a);}标准答案:(1)错误:{t=a;b=a;a=t;}正确:{t=a;a=b;b=t;}(2)错误:return(a);正确:return(b);知识点解析:若求两个数的最大公约数,如果b除a的非零余数能够整除a,那么该余数就是最大公约数;若余数为0,则最大公约数为a。该题程序中采用了循环语句,若b除以a的余数不等于0,则继续用a除以所得余数,直至余数为0,如此可以得到a,b的最大公约数。关于“交换原则”我们在前面已经讲述过了,这里就不再赘述。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun(),它的功能是:求出一个2×M整型二维数组中最大元素的值,并将此值返回调用函数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fan的花括号中填入所编写的若干语句。试题程序:#defineM4#include<stdio.h>fun(inta[][M]){}main(){intarr[2][M]={5,8,3,45,76,-4,12,82};printf("max=%d\n",fun(arr));}标准答案:fun(inta[][M]){inti,j,max=a[0][0];for(i=0;i<2;i++)for(j=0;j<M;j++)if(max<a[i][j])max=a[i][j];/*求出二维数组的最大值*/returnmax;}知识点解析:此类求最大值或最小值的C语言问题,我们可以采用逐个比较的方式。要求数组中的所有元素走动一遍,并从中找出最大、最小值,要注意一开始应使max存放数组中的第一个元素的值。可按逐行查找也可按逐列查找的方式,本题采用的是逐行查找的方式。即行下标在外层循环列下标在内层循环,因为在循环的嵌套中越在内层循环,循环变化就越快。国家二级(C语言)机试模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数proc(),该函数的功能是:分类统计一个字符串中元音字母和其他字符的个数(不区分大小写)。例如,输入imnIaeouOWC,结果为:A:1E:1I:2O:2U:1other:4。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填人所编写的若干表达式或语句。试题程序:#include#include#include#defineM100voidproc(char*str,intbb[]){char*p=str;inti=0;for(i=0;i<6;i++)【1】;while(*p){switch(*p){case’A’;case’a’:bb[0]++;break;case’E’:case’e’:bb[1]++;break;case’I’:case’i’:bb[2]++;break;case’O’:case’o’:bb[3]++;break;case’U’:case’u’:bb[4]++;break;default:【2】;}【3】}}voidmain(){charstr[M],ss[6]="AEIOU";inti;intbb[6];system("CLS");printf("Inputastring:\n");gets(str);printf("thestringis:\n");puts(str);proc(str,bb);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阿巴嘎旗2025年数学四年级第二学期期末学业质量监测试题含解析
- 陇南地区西和县2024-2025学年小升初全真数学模拟预测卷含解析
- 陕西中医药大学《食品分析概论》2023-2024学年第一学期期末试卷
- 陕西国际商贸学院《分析化学I》2023-2024学年第二学期期末试卷
- 陕西电子信息职业技术学院《口译训练》2023-2024学年第二学期期末试卷
- 学校日常管理制度
- 陕西省咸阳市礼泉县2025届高考模拟最后十套:物理试题(十)考前提分仿真卷含解析
- 陕西省四校2024-2025学年高三5月测试(一卷)历史试题试卷含解析
- 企业风险管理制度
- 陕西省榆林市吴堡县子洲县2025届数学四下期末监测模拟试题含解析
- JBT 3997-2011 金属切削机床灰铸铁件 技术条件
- 云南省建筑工程结构实体检验检测技术规程
- 机械制图与CAD (第3版) 课件 任务4.3 减速器从动轴零件图的识读与绘制
- 中等职业学校公共基础课程 数学《对数》教学课件
- 河南省新郑市2023-2024学年七年级下学期6月期末生物试题
- 中国联通2020年中级IT专业能力认证-需求分析试题题库
- 一年级下册《读读童谣和儿歌》试题及答案共10套
- QBT 3653-1999 羽毛球拍行业标准
- 犬的品种-犬的品种类型及外貌鉴定
- 山东省济宁市嘉祥县2023-2024学年八年级下学期期中数学试题
- 小学科学2024版课标培训
评论
0/150
提交评论