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

下载本文档

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

文档简介

国家二级C语言机试(程序设计题)模拟试卷3(共4套)(共20题)国家二级C语言机试(程序设计题)模拟试卷第1套一、程序设计题(本题共5题,每题1.0分,共5分。)1、请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:876675896101301401980431451777则输出结果为:6,980注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#inoludevoidfun(int*s,intt,int*k){}main(){inta[10]={876,675,896,101,301,401,980,431,451,777),k;voidNONO();fun(a,10,&k);printf("%d,%d\n",k,a[k]);NONO();}voidNONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inta[10],i,k,j;FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){for(j=0;j<10;j++)fscanf(rf,"%d",&a[j]);fun(a,10,&k);fprintf(wf,"%d,%d\n",k,a[k]);}fclOse(rf);fclOse(wf);}标准答案:inti,pos=0,max=*s,for(i=1;i知识点解析:(1)该程序功能是求最大元素在数组中的下标。它的解题思路是,用最大值变量max标记第一个待找数据,逐个把所有待找数据和max进行比较,并用pos标记其当前最大值所在位置,从而找出最大值。(2)从已给部分源程序的main主函数开始入手,核心函数“fun(a,10,&k);”中的参数a存放着给出的整数,fun函数实现查找最大元素的下标。2、请编写函数fun,功能是:判断形参n中的正整数是几位数(输入数据的位数不超过4位),并将结果通过函数值返回。例如:若输入的数据为123,则输出结果为:输入的数字是3位。拄意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。1#include<stdio.h>2voidNONO();3intfun(intn)4{5}6main()7{intn,place;8do{9printf(’’请输入一个4位以内的正整数:’’);10scarlf(”%d”,&n);11}while(n<0||n>9999);12place=fun(n);13printf(’’输入的数字是%d位\n’’,place);14NONO();15}16voidNONO()17{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/18FILE*fp,*wf;19inti,n,place;20fp=fopen(’’in.dat’’,’’r’’);21wf=fopen(’’out.dat’’,’’w’’);22for(i=0;i<10;i++)23{fscanf(fp,’’%d’’,&n);24place=fun(n);25fprfntf(wf,’’%d\n’’,place);26}27fclose(fp);28fclose(wf);29}标准答案:1intfun(intn)2{3intk=0;4if(n>999)k=4;5elseif(n>99)k=3;6elseif(n>9)k=2;7elsek=1;8returnk;9}知识点解析:本题fun函数的主要功能是判断形参n中的正整数是几位数(输入数据的位数不超过4位),并将结果通过函数值返回。首先我们能想到这一题主要在于判断,因为题目已经限制了条件,就是数字的大小要不超过四位数的数字,而且要求只要输出这个数字的位数,这样我们就能想到,只要判断这个数字的大小就能知道位数了,小于10位1位,大于等于10小于100为2位,大于等于100小于1000位3位,大于等于1000小于等于9999为4位。所以只需要很简单的几个判断语句就能实现函数的功能,然后输出结果。主函数中首先要定义数据,然后需要手动输入一个用来进行判断的数字,注意数字要不超过4位,见程序代码第14~16行,而且这里为了防止输入时不小心的错误或者是有人故意错误输入而引发的不好的后果,在数据进入fun函数处理之前还要一个while函数来进行判断数据是否合理在进行处理,见程序代码第17行。然后数字进入fun函数,这里很明显会出现四种情况,数字的位数为1位,2位,3位或4位,所以我们用if…elseif来区别这四种情况见程序第6~9行,在判断完之后我们就可以返回数字位数k的值然后再到主函数main函数中进行输出处理。3、函数fun的功能是:将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。例如,若s所指字符串中的内容为:”ABCDEFG123456”,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是:”246”。注意:部分源程序存在文件PROG1.C中。请勿改动主函数mam和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#includevoidfun(char*s,chart[]){}main(){chars[100],t[100];voidNONO();printf("\nPleaseenterstringS:");scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);NONO();)voiclNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/chars[100],t[100];FILE*rf,*wf;inti;rf=fopen(”in.dat","r");wf=fopen("out.dat","W");for(i=0;i<10;i++){fscanf(rf,"%s"s);fun(s,t);fprintf(wf,"%s\n",t);}fclose(rf);fclose(wf);)标准答案:1inti,j=0;2for(i=0;i知识点解析:该程序功能是将字符串中除了下标为偶数、ASCII值也为偶数的字符外,其余的全都删除。解题过程利用if条件判断表达式选择符合条件的字符,然后将符合条件的字符放入指定的字符串。(1)判断一个字符串中的某一字符下标i是否为偶数,可用“i%2=0”来判断;也可以从下标0开始,每次增2。判断字符中的ASCII码值是否为偶数,则可用“s[i]%2==0”来判定。(2)对串s中下标为偶数的字符进行考查,满足ASCII码值是偶数条件的字符就顺序放在新串s中,否则就不存放。(3)所有字符处理完后,记得在新串s的末尾加上结束符“’\of’”。字符数组和字符串、if语句及其构成的选择。4、请编写函数fun,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。1#include<stdio.h>2#include<string.h>3#defineN804intfun(char*a)5{67}8main()9{charline[N];intnum=0;voidNONO();10printf(’’Enterastring:\n’’);gets(line);11num=fun(lihe);12printf(’’Thenumberofwordis:%od\n\n’’,num);13NONO();14}15voidNONO()16{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/17FILE*rf,*wf;inti,num;charline[N],*p;18rf=fopen(’’in.dat’’,’’r’’);19wf=fopen(’’out.dat’’,’’w’’);20for(i=0;i<10;i++){21fgets(line,N,rf);22p=strchr(line,’\n’);23if(p!=NULL)*p=0;24num=fun(line);25fprintf(wf,’’%d\n’’,num);26}27fclose(rf);fclose(wf);28}标准答案:1inti,n=0;//字符统计初始值设置为02for(i=0;i<strlen(s);i++)3//小于字符串长度进行字符循环判断4{5if(s[i]>=’a’&&s[i]<=’z’&&s[i+1]=’’||s[i+1]==’\0’)//单词判断条件6n++;//单词统计计数器加17}8returnn;//返回统计值知识点解析:该程序功能是统计一行字符串中单词的个数,作为函数值返回。单词之间以空格为分割,所以,对单词个数的统计可以理解为对空格字符的统计,其中,最后一个单词以字符串的结尾符为分割。(1)首先,求得字符串的长度。(2)只要小于字符串的长度,就对字符进行循环判断。(3)根据题干要求,只要字符是小写字母,并且下一个紧靠的字符是空格或者尾符,那么单词统计计数器就加1。5、已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdlib.h>#include<stdio.h>#include<string.h>#include<conio.h>#defineN10typedefstructss/*定义结构体*/{charnHm[10];ints;}STU;fun(STUa[],STU*s){}voidmain(){STUa[N]={{"A0l",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;inti;system("CLS");printf("****Theoriginaldata****");for(i=0;i<N;i++)pr2ntf("No=%sMark=%d\n",a[i].hum,a[i].s);fun(a,&m);printf("****THERESULT****\n");printf("Thetop:%s,%d\n",m.num,m.s);}标准答案:fun(sTua[],STU*s){inti;*s=a[0]jfor(i=0;i<N;i++)/*找出成绩最高的学生记录*/if(s一>s<a[i].s)*s=a[i];}知识点解析:本题考查:成绩最高的学生记录查找;for循环语句;if条件语句。本题的流程是先使s指向第1名学生,利用循环语句遍历所有学生的成绩,利用条件语句判断当前学生成绩是否最高,所以if语句的条件是s一>s<a[i].s。此外,做题时应该熟练掌握“指向运算符”和“成员运算符”的相关知识,题中“s一>s”等价于“(*s).s”。国家二级C语言机试(程序设计题)模拟试卷第2套一、程序设计题(本题共5题,每题1.0分,共5分。)1、请编写函数fun,该函数的功能是:判断字符串是否为回文,若是,则函数返回1,主函数中输出”YES”,否则返回0,主函数中输出”NO”。回文是指顺读和倒读都一样的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:部分源程序在文件PROG1.C中。请勿改动主函数maln和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#defineN80intfun(char*str){main(){chars[N];FILE*out;char*test[]={"1234321","123421","123321","abcdCBA"};inti;printf("Enterastring:");gets(s);printf("\n\n");puts(s);if(fun(s))printf("YES\n");elseprintf("NO\n");/******************/out=fopen("out.dat"’"w");if(fun(test[i]))fprintf(out,"YES\n");elsefprintf(out,"NO\n");fclose(out);/******************/}标准答案:intfun(char*str){inti,n=0,fg=1;char*p=str;while(*p)/*将指针p置位到字符串末尾,并统计字符数*/{n++;p++;}for(i=0;i<n/2;i++)/*循环比较字符*/if(str[i]==str[n一1一1]);/*相同,什么都不作*/else/*不同,直接跳出循环*/{fg=0;break;}returnfg;}知识点解析:判断圆文就是将第一个字符与最后一个字符比较,第二个字符与倒数第二个字符进行比较,依此类推,直到中间的字符,如果比较的结果都相同,那么这个字符串就是回文,否则不是。程序中循环语句用来遍历字符串,条件语句用来判断当前字符与对应位置的字符是否相同。2、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun,该函数的功能是:将s所指字符串中ASCII码值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。例如,若s所指字符串中的内容为“ABCDEFG12345”,其中字符B的ASCII码值为偶数,字符2的ASCII码值为偶数,都应当删除,其他依此类推。最后t所指的数组中的内容应是“ACEG135”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<st(tlib.h>#include<stdio.h>#include<string.h>#include<conio.h>voidfun(char*s,chart[]){}voidmain(){chars[100],t[100];system("CLS");printf("\nPleaseenterstrings:");SCanf("%s",s);fun(s,t);print:f("\nTheresultis:%s\n",t);}标准答案:voidfun(char*s,chart[]){inti=0;for(*s!=’\0’;s++)/*找出ASCII值为奇数的字符依次存入数组t中*/if(*s%2==1)t[i++]=*s;t[i]=’\0’;/*在字符串的末尾加上串结束符*/}知识点解析:要删除ASCII码值为偶数的字符,也就是要留下ASCII码值为奇数的字符。由于最终是要求出剩余字符(即ASCII码值为奇数)形成的新串,所以本题程序的算法是对原字符串从头到尾扫描,并找出ASCII码值为奇数的字符并将其依次存人数组t中。此外,还要注意数组t的下标变化和下标的初值(初值必须为0,即i=0),t[i++]的作用是先使用t[i],然后再使i自增1。3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,其功能是:把低于平均分的学生数据放入b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#defineN8typedefstruct{charFILIm[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];inti,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");}标准答案:doublefun(STREC*a,STREC*b,int*n){inti,j=0;doubleav=0.0;for(i=0;i<N;i++)av=av+a[i].s;av=av/N;/*求平均值*/for(i=0;i<N,i++)if(a[i].s<av)b[j++]=a[i];/*将低于平均值的学生记录存入结构体数组b中*/*n=j;/*指针传回低于平均值的学生人数*/returnav;/*返回平均值*/}知识点解析:本题使用循环语句和条件判断语句来实现程序操作,第1个循环语句的作用是求出总分,然后求出平均分av。第2个循环的作用是将分数低于平均分的学生记录存入结构体数组b中。4、学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组S中。请编写函数fun,其功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。例如,输入的分数是60、69,则应当把分数在60一69的学生数据输出,包含60分和69分的学生数据。主函数中把60放在low中,把69放在heigh中。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b,int1,inth){}voidmain(){STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",96},{"GA007",72),{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},{"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};STRECh[N];inti,n,low,heigh,t;printf("Enter2integernumberlow&heigh:");scanf("%d%d",&low,&heigh);if(heigh<low){t=heigh;heigh=1ow;low=t;}n=fun(s,h,low,heigh);printf("Thestudent’sdatabetween%d一一%d:\n",low,heigh);for(i=0;i<n;i++)printf("%s%4d\n",h[i].num,h[i].s);printf("\n");}标准答案:intfun(STREC*a,STREC*b,intl,inth){inti,j=0;for(i=0;i<N;i++)if(a[i].s>=1&&a[i].s<=h)/*将分数高于1,低于h的学生记录存入结构体数组b中*/b[j++]=a[i];returnj;/*返回分数范围内的学生人数*/}知识点解析:本题考查:结构体数组操作;循环判断结构。本题使用循环判断结构实现程序操作,循环语句用于遍历结构体数组,条件语句用于判断当前元素是否符合条件,若符合条件则将其存入结构体数组b中。5、编写函数fun,它的功能是计算下列级数和,和值由函数值返回。例如,当n=10,x=0.3时,函数值为1.349859。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。1#include<stdio.h>2#include<math.h>3doublefun(doublex,intn)4{5}6main()7{voidNONO();8printf(’’%f\n’’,fun(0.3,10));9NONO();10}11voidNONO()12{/(本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/13FILE*fp,*wf;14inti,n;15doubles,x;16fp=fopen(’’in.dat’’,’’r’’);17wf=fopen(’’out.dat’’,’’w’’);18for(i=0;i<10;i++){19fscanf(fp,’’%1f,%d’’,&x,&n),20s=fun(x,n);21fprintf(wf,’’%f\n’’,s);22}23fclose(fp);24fclose(wf);}标准答案:1doubles=1.0,y=x;2inti;3longk=1;4for(i=1;i<=n;i++){5k=k*i;6s+=y/k;7y*=x;8}9returns;知识点解析:该程序功能是计算并输出多项式值。根据题干中给出的数列,首先推出每_项的表达式,然后再对多项式进行累加求和。(1)根据题干中给出的数列,推出每一项分子是在前一项的基础上乘以x,分母是每一项的阶乘,它可以在前一项的基础上乘以当前项的项数,即第n项是n。(2)在循环中求得每一项,然后对其进行累加求和。国家二级C语言机试(程序设计题)模拟试卷第3套一、程序设计题(本题共5题,每题1.0分,共5分。)1、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编一个函数floatfun(doubleh),该函数的功能是:使变量h中的值保留两位小数,并对第三位进行四舍五人(规定h中的值为正数)。例如,若h值为1234.567,则函数返回1234.570000;若h值为1234.564,则函数返回1234.560000。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>floatfun(floath){}voidmain(){FILE*wf;floata;system("CLS");printf("Entera:");scanf("%f",&a);printf("Theoriginaldatais:");printf("%f\n\n",a);printf("Theresult:%f\n",fun(a));/*********found*********/wf=fopen("out.dat","w");fprintf(wf,"%f",fun(8.32533));fclose(wf);/*********found*********/}标准答案:floatfun(floath){inttmp=(int)(h*1000+5)/10;/*单精度数h乘以1000后再加5,相当于对h中的第三位小数进行四舍五入,除以10后将其赋给一个长整型数时就把第三位小数后的数全部截去*/return(float)gmp/100.0;/*除以100,保留2位小数*/}知识点解析:注意:本题要求对h的值真正进行四舍五入运算,而不是为了输出,即不能用prinff("%7.2f",h)来直接得到结果。四舍五人算法:如果要求精确到小数点后面的第n位,则需要对第n+1位进行运算。方法是将该小数乘以10的n+1次方后加5,然后除以10并强制转换变量类型为整型,再将该数除以10的n次方,同时强制转换类型为浮点型。代码实现如下:intt;/*定义整型变量t*/t=(int)(h*10n+1+5)/10;/*对h进行操作,得到值浮点型,t取值时取整数部分。10n+1为要扩大的倍数*/h=(noat)t/10n;/*将t缩小10n倍,并转换成浮点型*/2、请编写函数fun,该函数的功能是:判断字符串是否为回文,若是,则函数返回1,主函数中输出"YES",否则返回0,主函数中输出"NO"。回文是指顺读和倒读都一样的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#defineN80intfun(char,*str){}main(){chars[N];FTLE*out;char*test[]={"1234321","123421","123321","abcdCBA"},inti;printf("Enterastring:");gets(s);printf("\n\n");puts(s);if(fun(s))printf("YES\n");elseprintf("NO\n");/******************/out=fopen("out.dat","w"),for(i=0;i<4;i++)if(fun(test[i]))fprintf(out,"YES\n");elsefprintf(out,"NO\n");fclose(out);/******************/}标准答案:intfun(char*str){inti,n=0,fg=1;char*p=str;while(*p)/*将指针p置位到字符串末尾,并统计字符数*/{n++;p++;}for(i=0;i<n/2;i++)/*循环比较字符*/if(str[i==str[n-1-1]);/*相同,什么都不作*/else/*不同,直接跳出循环*/{fg=0;break;}returnfg;}知识点解析:判断回文就是将第一个字符与最后一个字符比较,第二个字符与倒数第二个字符进行比较,依此类推,直到中间的字符,如果比较的结果都相同,那么这个字符串就是回文,否则不是。程序中循环语句用来遍历字符串,条件语句用来判断当前字符与对应位置的字符是否相同。3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun,函数的功能是查找x在s所指数组中下标的位置,并作为函数值返回,若x不存在,则返回﹣1。注意:部分源程序在文件PROG1.C文件中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<stdlib.h>#defineN15voidNONO();intfun(int*s,intx){}main(){inta[N]={29,13,5,22,10,9,3,18,22,25,14,15,2,7,27},i,x,index;printf("a数组中的数据:\n");for(i=0;i<N;i++)printf("%4d",a[i]);printf("\n");printf("给x输入待查找的数:");scanf("%d",&x);index=fun(a,x);printf("index=%d\n",index);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,j,a[10],x,index;fp=fopen("in.dat","r");wf=fopen("out.clat","w");for(i=0;i<10;i++){for(j=0;j<10;j++){fscanf(fp,"%d",&a[j]);}fscanf(fp,"%d",&x);index=fun(a,x);fprintf(wf,"%d\n",index);}fclose(fp);fclose(wf);}标准答案:intfun(int*s,intx){inti;for(i=0;i<N;i++)if(x==s[i])returni;return﹣1;}知识点解析:要找出数组中指定数据的下标,首先定义变量i用于存放数组下标,然后使用循环语句对数组进行遍历,依次取出一个数组元素与指定的数进行比较,若相等,则返回该元素的下标,否则继续判断下一个元素,直到数组结束。若数组结束时仍没有找到与指定数相等的元素,则返回﹣1。4、规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:除了字符串前导和尾部的*号外,将串中其他的*号全部删除。形参h已指向字符串中第—个字母,形参P指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。例如,若字符串中的内容为“****A*BC*DEF*G********”,删除后,字符串中的内容应当是“****ABCDEFG********”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<string.h>voidfun(char*a,char*h,char*p){}main(){chars[81],*t,*f;printf("Enterastring:\n");gets(s);t=f=s;while(*t)t++;t一一;while(*t==’*’)t一一;while(*f==’*’)f++;fun(s,f,t);printf("Thestringafterdeleted:\n");puts(s);}标准答案:voidfun(char*a,char*h,char*p){inti=0;char*q=a;/*将前导*号保存到a中*/while(q<h){a[i]=*q;q++;i++;}/*继续遍历数组*/while(q<p){if(*q!=’*’){/*如果不是*保存到a中*/a[i]=*q;i++;}q++;}/*将末尾*号保存到a中*/while(*q){}}知识点解析:本题的重点是要选择好判断条件,首先是需要判断前导*号的结束,然后判断是否指向最后一个字母,最后补充尾部*号,只要思路对了即可正确解答。5、请编写一个函数fun,它的功能是:求出1到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。例如,若传送给m的值为50,则程序输出:711142122283335424449注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#defineM100v02dfun(intm,int*a,int*n){}main(){intaa[M],n,k;voidNONO();fun(50,aa,&n);for(k=0;k标准答案:inti,j=0;*n=0;for(i=1;i<=m;i++)if(i%7==0||i%11==0){a[j]=i;j++,}*n=j;知识点解析:该题是求某范围内能被7或11整除的数。该程序的解题思路可以分解为以下几步:判断是否被7整除→判断或者是否被11整除→按要求返回计算结果。国家二级C语言机试(程序设计题)模拟试卷第4套一、程序设计题(本题共5题,每题1.0分,共5分。)1、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun,其功能是:将s所指字符串中除了下标为奇数同时ASCII码值也为奇数的字符之外,其余的所有字符全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若s所指字符串的内容为“ABCDEFG12345”,其中字符A的ASCII码值为奇数,但所在元素的下标为偶数,因此需要删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指数组中的内容应为“135”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){}main(){chars[100],t[100];printf("\nPleaseenterstrings:");Scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);}标准答案:voidfun(char*s,chart[]){inti,j=0,n;n=strlen(s);for(i=0;i<n;i++)if((i%2)&&(s[i]%2)){t[j++]=s[i];/*将下标为奇数同时ASCII码值为奇数的字符放入数组t中*/t[j]=’\0’;/*最后加上结束标识符*/}知识点解析:本题要求除了下标为奇数同时ASCII码值也为奇数的字符,其余的所有字符都删除,即要留下下标为奇数同时ASCII码值也为奇数的字符。所以if的条件语句应为:if(i%2!=0&&s[i]%2!=0)。2、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:除了字符串前导和尾部的*号外,将串中其他的水号全部删除。形参h已指向字符串中第一个字母,形参p指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。例如,若字符串中的内容为“****A*BC*DEF*G*******”,删除后,字符串中的内容应当是“****ABCDEFG********”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<string.h>voidfun(cha*a,char*h,char*p){}main(){chars[81],*t,*f;printf("Enterastring:\n");gets(s);t=f=s;while(*t)t++;t﹣﹣;while(*t==’*’)t﹣﹣;while(*f==’*’)f++;fun(s,f,t),printf("Thestringafterdeleted:\n");puts(s);}标准答案:voidfun(char*a,char*h,char*p){inti=0;char*q=a;/*将前导水号保存到a中*/while(q<h){a[i]=*q;q++;i++;}/*继续遍历数组*/while(q<p){if(*q!=’*’){/*如果不是*保存到a中*/a[i]=*q;i++;}q++;}/*将末尾*号保存到a中*/while(*q){a[i]=*q;i++;q++;}a[i]=’\0’;}知识点解析:本题的重点是要选择好判断条件,首先是需要判断前导*号的结束,然后判断是否指向最后一个字母,最后补充尾部*号,只要思路对了即可正确解答。3、编写函数fun,其功能是:将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。例如,当a=45,b=12时,调用该函数后,c=1524。注意:部分源程序给出如下。数据文件IN.DAT中的数据不得修改。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>voidfun(inta,intb,long*c){}main(){inta,b;longc;printf("Inputa,b:");fun(a,b,&c);printf("Theresultis:%ld\n",c);}标准答案:voidfun(inta,intb,lang*c){/*b%10获取b的个位,a/10获取a的十位,a%10获取a的个位,b/10获取b的十位*/*

温馨提示

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

评论

0/150

提交评论