二级c语言母题(机试加笔试)_第1页
二级c语言母题(机试加笔试)_第2页
二级c语言母题(机试加笔试)_第3页
二级c语言母题(机试加笔试)_第4页
免费预览已结束,剩余228页可下载查看

下载本文档

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

文档简介

第一部分程序填空题字符类:弟1-2题7、函数fun的功能是进行数字字符转换。若形参ch中是数字字符‘0'〜'9',贝『0'转换成'9',若是其它字符则保持不变;并将转换后的T'转换成'8','2'转换成'7',……,’9'转换成'0'若是其它字符则保持不变;并将转换后的结果作为函数值返回。使程序得出正确的结果。我们处在同一条起跑线上,每位学员应做好考前冲刺的良好淮备.请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。我们处在同一条起跑线上,每位学员应做好考前冲刺的良好淮备.注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>/**********found**********/_1 fun(charch)/**********found**********/if(ch>二'O'&&_2—)return (ch・_3_);returnch;}main(){charcl,c2;printf("\nTheresult:\n");cl=2;c2=fiin(cl);printf(Hc1=%c c2=%c\nn,c1,c2);cl-8*;c2=fun(c1);printf(Hc1=%c c2=%c\nH,c1,c2);cl=fa';c2=fun(cl);printf(Hc1=%c c2=%c\nH,c1,c2);[3]'0'答案:[1]char[2]<=95[3]'0'山主函数中的语句"c2=ftm(cl);"知:函数fun的返回类型为字符,故第一空应填char;在题面中要求对数字字符进行转换,故第二空的目的是判断字符ch是否为一数字字符,即ch是否在。〜9之间故第二空应填ch<=9或其等效形式;第三空处语句的目的是返回转换后的结果,即返回一字符,其所对应的数字与转换前字符所对应的数字的和为9,故第三空应填。或其等效形式。2、给定程序的功能是将大写字母转换为对应小写字母之后的第五个字母;若小写字母为v〜z,使小写字母的值减21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换为小写字母f;若形参是字母W,则转换为小写字母b。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<ctype.h>charfun(charc){if(c>='A'&&c<=,Z*)c=c+32;if(c>=,a&&c<=,u*)

/**************found**************/c=c+ 1 ;elseif(c>=,v*&&c<=,z)c=c-21;/**************found**************/return 2 ;)mainO{charcl,c2;printf(*\nEnteraletter(A-Z):");cl=getchar();if(isupper(cl)){/**************found**************/c2=fun(3 );printf(*\n\nTheletter\'%c\'changeto\'%c\'\n",cl,c2);}elseprintfC*\nEnter(A-Z)!\n");)答案:【1[5 [2]c [3]cl本题着重考察考生对C语言中一些简单算法的掌握情况。解题思路:先判断输入的字母是否是大写字母,若是大写字母,将其转化为相应的小写字母,方法是该大写字母对应的ASCII码值加上32就是其小写字母的ASCII码值,再判断该小写字母是否是a〜u,若是转化为其后的第5个字母。若该小写字母是v〜z,则将其ACSH码值减去21,转换后的小写字母作为函数值返回。题中第一个空填C语言中,字母从a〜z或A〜Z的ASCII码值是依次递增的,所以将其转换为其后的第5个字母应该是〃c=c+5;〃或相同作用的语句。题中第二个空填通过return语句将被调用函数中c的值带回主调函数中去。题中第三个空填飞1〃:此句是调用fun()函数,括弧中是其实际参数。本评析仅作参考。递归类:邪3—4题难者不会,会者不难,难易之间并没有严格的界限,相信大家对此深有体会。让我们携起手来,共同努力,向全国计箪机等级考试全面冲刺吧!3、下列给定程序中,函数ftm()的功能是:用递归算法计算斐波拉契级数列中第n项的值。从第一项起,斐波拉契级数序列为1,1,2,3,5,8,13,21,……,例如,若给n输入7,该项的斐波拉契级数值为13o试题程序:♦include<stdio.h>longfun(int难者不会,会者不难,难易之间并没有严格的界限,相信大家对此深有体会。让我们携起手来,共同努力,向全国计箪机等级考试全面冲刺吧!switch(g){case0:return0;case1: 1_:return1;)return( 2_);}main()(longfib;intn;printf(nInputn:n);scanf("%d”, 3 );printf(nn=%d\nM,n);fib=fun(n);printf("fib=%d\n\n",fib);

答案:【1】case2 [2]fun(g-l)+fun(g-2) [3]&n【解析】填空】:根据题目的意思,这里应该是对于值为1和2的时候的处理,注意case语句常量后应用的是冒号,而且不同的case对应同一个值可以连续写(像题目中那样)。填空2:根据题目的意思,此处是求值的递归部分,由递推公式可以很容易的得到答案的形式,对于这种简单的递归考生一定要掌握。填空3:山算法可以看出,此处是输入数列的项数n,使用了scanf函数,其参数应该是变量的地址,即使用符号。4、下列给定程序中,函数fun()的功能是:应用递归算法求某数a的平方根。求平方根的迭代公式如下:如,2的平方根为1.414214♦include<math.h>#include<stdio.h>1fun(doublea,doublexO){doublexl,y; 2 ;if(fabs(xl-xO)>=0.00001) 3 ;elsey=xl;returny;}main(){doublex;printf("Enterx:n);scanf(H%lfnz&x);printf(nThesquarerootof%lfis%lf\nM,x,fun(xz1.0));}答案:[1]double [2]xl=(x0+a/x0)/2.0 [3]y=fiin(a,xl)【解析】填空1:这里要问的是函数的类型,由主函数main()对函数的调用可以得到函数的类型是double型的,当然也可以由函数的返回值语句得到。填空2:我们看到在下一条语句中已经开始对变量xl的值进行比较了,所以这里要对xl进行赋值,由题意可知xl=(x0+a/x0)/2.0。填空3:用C语言求平方根的方法一般有两种经典的算法,它们分别是迭代法和递归法,本题要求用递归法。该程序采用了if语句,程序的含义是当迭代结果差小于误差时进行循环。文件疾写类:第5—9题5、给定程序的功能是:从犍盘输入若干行文件(每行不超过80个字符),写到文件myfile4.txt中,用T作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include <stdio.h>#include <string.h>^include <stdlib.h>voidWriteText(FILE*);voidReadText(FILE*);-E- 朦过关只有:main(){if((fp=fopenC/myfile4.txt","w"))=NULL){printf(*openfail!!\n,z);exit(0);}WriteText(fp);fclose(fp);if((fp=fopenC*myfi1e4.txt","r"))=NULL){printf("openfail!!\nz/);exit(0);}ReadText(fp);fclose(fp);}/**********found**********/voidWriteText(FILE—1—){charstr[81];printf(,z\nEnterstringwith-1toend:\n");gets(str);while(strcmp(str,^-1*)!=0){/**********found**********/fputs( 2 ,fw);fputs('\n",fw);gets(str);})voidReadText(FILE*fr){charstr[81];printf('\nReadfileandoutputtoscreen:\n");fgets(str,81,fr);while(!feof(fr)){/**********found**********/printf 3 );fgets(str,81,fr);}}本题考核点为:文件的读写函数等。答案:[1]*fw[2]str [3]str题中第一个空填"*fw":fw是一个文件指针,从键盘上读入数据,输入其所指向的文件中。题中第二空填"str":fputs函数向文件中写数据,其函数原型为:fputs(ch,fp)其中ch是要输出的字符,它可以是一个字符常量,也可以是一个字符变量。fp是文件指针变量。题中第三个空填"str":printf函数的一般格式为:printf(格式控制,输出表列)1、〃格式控制〃是用双引号括起来的字符串,也称“转换控制字符串〃,它包括两种信息:格式说明:由"%"和格式字符组成,如%山%£等。它的作用是将输出的数据转换为指定的格式输出。格式说明总是山级”字符开始的。普通字符,即需要原样输出的字符。2、〃输出表列":是需要输出的一些数据,可以是表达式。6、给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值是1,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程序的结构!ftinclude <stdio.h>ftinclude <stdlib.h>intfun(char*source,char*target){FILE*fs,*ft;charch;/**********found**********/if((fs=fopen(source, 1 ))==NULL)return0;if((ft=fopen(target,"w"))==NULL)return0;printf(*\nThedatainfile:\n");ch=fgetc(fs);/**********found**********/while(!feof(—2—)){putchar(ch);/**********found**********/fputc(ch, 3 );ch=fgetc(fs);}fclose(fs);fclose(ft);printf('\n\n");return1;)main(){charsfname[20]=*myfile1*,tfname[20]=,/myfile2*;FILE*myf; inti;charc;myf=fopen(sfname,z/w/z);printf(*\nTheoriginaldata:\n");for(i=l;i<30;i++){c='A'+rand()%25;fprintf(myf,"%c”,c);printfc);}fclose(myf);printf('\n\n");if(fun(sfname,tfname))printf("Succeed!”);elseprintf("Fail!");}答案:[2]fs[3]ft本题的考核点是文件的读写函数等。题中第一个空填"r":"r”是文件的使用方式之一,其含义是为输入打开一个文件用于输入。题中第二个空填〃fs”:此语句是设置循环退出条件,即判断是否到文件末尾。题中第三个空填"ft":fputc函数功能是把一个字符写到磁盘文件上去。其一般调用形式为:fputc(ch,fp);其中ch是要输出的字符,它可以是一个字符常量,也可以是一个字符变量。fp是文件指针变量。7、给定程序中,函数fun的功能是:将自然数1〜10以及它们的平方根写到名为myfile3.txt的文本文件中,然后再顺序读出显示在屏幕匕请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程序的结构!ftinclude <math.h>#include<stdio.h>intfun(char*fname){FILE*fp;inti,n;floatx;if((fp=fopen(fname,〃w"))=NULL)return0;for(i=l;i<=10;i++)/**********found**********/fprintf(」 ,*%d%f\n”,i,sqrt((double)i));printf(/z\nSucceed!\n,z);/**********found**********/_2—;printf(*\nThedatainfile:\n");/**********found**********/if((fp=fopen( 3 ,"r"))==NULL)return0;fscanf(fp, &n,&x);while(!feof(fp)){printf("%d%f\n”,n,x); fscanf(fp,"%d%f”,&n,&x);}fclose(fp);return1;}main(){charfname口=“myfile3.txt”;fun(fname);)答案:【1】fp[2]fclose(fp)[3]fname本题考核点为:文件的打开,关闭和读写操作。题中第一个空填"fp”:是向文件指针fp所指向的文件中写数据。题中第二个空填〃fclose(fp);〃:此语句是文件的关闭操作。题中第三个空填〃fname〃:fopen函数用于文件的打开操作,其调用形式一般为:fopen(文件名,使用文件方式)。“fname”为所要打开的文件名。8、给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include <stdio.h>#include <stdlib.h>#defineN5typedefstruct{intnum;charname[10];chartel[10];}STYPE;voidcheck();/**********found**********/intfun( 1 *std){/**********found**********/_2_*fp;inti;if((fp=fopen(/rmyfile5.dat","wb"))=NULL)return(0);printf(*\nOutputdatatofile!\n");for(i=0;i<N;i++)/**********found**********/fwrite(&std[i],sizeof(STYPE),1, 3 );fclose(fp);return(1);}main(){STYPEs[10]={{1,"aaaaa","111111”},{2,“bbbbb","222222”},{3,"ccccc","333333”},{4,"ddddd","444444”},{5,"eeeee","555555”}};intk;k=fun(s);if(k==l){printf("Succeed!");check();}elseprintf("Fail!");)voidcheck(){FILE*fp;inti;STYPEs[10];if((fp=fopen(/zmyfile5.dat","rb"))==NULL){printf(*Fail!!\n");exit(0);)printf(*\nReadfileandoutputtoscreen:\n");printf(*\nnumnametel\n,z);for(i=0;i<N;i++){fread(&s[i],sizeof(STYPE),1,fp);printf("%6d %s%s\n”,s[i].num,s[i].name,s[i].tel);}fclose(fp);}答案:【1】STYPE[2]FILE[3]fp本题考核点为结构体和文件的操作等。题中第一空填〃STYPE":typedef可以用来声明新的类型名来代替已有的类型名,此题用"STYPE〃来代替未命名的结构体。题中第二空填"FILEFILE〃关键字用于声明文件指针。题中第三空填"fp〃:fwrite函数的一般调用形式为:fwrite(buffer,size,count,fp);其中buffer:是一个指针,是要输出数据的地址;size:是要写的字节数;count:要进行读写多少个size字节的数据项;fp:文件型指针。9、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>ttdefineN5typedefstructstudent{longsno;charname[10];floatscore[3];}STU;voidfun(char*filename){FILE*fp;inti,j;STUs[N],t;/**********found**********/fp=fopen(filename,—1—);fread(s,sizeof(STU),N,fp);fclose(fp);for(i=0;i<NT;i++)for(j=i+l;j<N;j++)/**********found**********/if(s[i].sno—2—){t=s[i];s[i]=s[j];s[j]=t;}fp=fopen(filename,"wb");/**********found**********/_3_(s,sizeof(STU),N,fp);fclose(fp);}main(){STUt[N]={{10005,"ZhangSan",95,80,88},{10003, 85,70,78},{10002,"CaoKai*,75,60,88},{10004,"FangFang",90,82,87},{10001/MaChao",91,92,77}},ss[N];inti,j;FILE*fp;fp=fopen("student,dat","wb");fwrite(t,sizeof(STU),5,fp);fclose(fp);printf(zz\n\nTheoriginaldata:\n\n");for(j=0;j<N;j++){printf(z/\nNo:%ldName:%-8sScores:",t[j].sno,t[j],name);for(i=0;i<3;i++)printf(*%6.2f",t[j].score[i]);printf("\n");)fun("student,dat");printf(,z\n\nThedataaftersorting:\n\n");fp=fopen("student,dat","rb");fread(ss,sizeof(STU),5,fp);fclose(fp);for(j=0;j<N;j++)(printf("\nNo:%ldName:%-8sScores:ss[j].sno,ss[j].name);for(i=0;i<3;i++)printf("%6.2f”,ss[j].score[i]);printf('\n");答案:【l】“rb" [2]s[j].sno[3]fwrite本题的考核点是结构体类型变量的定义和引用以及文件函数的应用。fopen函数的作用是打开一个文件,在fun函数中为输入打开一个二进制文件,所以第一个空填:〃rb”或与此语句功能相同的语句;利用嵌套循环语句按学号从小到大排序,所以第二个空填:>s[j].sno或与此语句功能相同的语句;再用二进制方式把排序后的数据输出到指定文件中,fwrite函数的作用是往文件的当前位置写入指定字节的数据块,所以第三个空填:fwriteo字符串类:第70—38题10.给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组中共有M个字符串,且串长〈N。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程序的结构!#include <stdio.h>ttinclude <string.h>#define M 5itdefine N 20voidfun(char(*ss)[N]){inti,j,k=0,n,m,len;for(i=0;i<M;i++){len=strlen(ss[i]);if(i==0)n=len;if(len>n){/**********found**********/n=len; 1 =i;)}for(i=0;i<M;i++)if(i!=k){m=n;len=strlen(ss[i]);/**********found**********/for(j=_2_;j>=0;j—)ss[i][m-]=ss[i][j];for(j=0;j<n-len;j++)/**********found**********/—3—T)}mainO{charss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};inti;printf(/z\nTheoriginalstringsare:\n");for(i=0;i<M;i++)printf("%s\n”,ss[i]);printf('\n");fun(ss);printf(*\nTheresult:\n*);for(i=0;i<M;i++)printf(*%s\n*,ss[i]);

答案:【1答案:【1】“rb”s[j].snofwrite本题考查的是字符串中字符的插入。在ftm函数中,第一个for循环的作用是求出所有字符串中,长度最长的字符串的长度n,并记下此字符串在数组中的下标k,故第一空应填k。在第二个for循环中,如果当前字符串不是最长字符串,则计算其长度len,并将从下标0到len的字符向右移动n-len位,故第二空为len;最后,再通过一个for循环语句在当前字符串前面补充len・n个”,故第三空应为ss[i][j]或其等效形式。11、下列给定的程序中,fun()函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写(这里的〃单词”是指有空格隔开的字符串)。例如,若输入:Iamastudenttotaketheexamination则应输出:IaMAstudenTtOtakEthEexaminatioN试题程序:ttinclude<conio.h>#include<ctype.h>ttinclude<stdio.h>#include<string.h>voidfun(char*p)(intk=0;for(;*p;p++)if(k)(if(*p==,')2=toupper(*(p-1));})elsek=l;}main(){charchrstr[64];intd;printf(*\nPleaseenteranEnglishsentencewithin63letters:");gets(chrstr);d=strlen(chrstr);chrstr[d]=,';chrstr[d+l]=0;printf(^XnBoforechanging:\n%s”,chrstr);_3. ;printf(*\nAfterchanging:\n%s”,chrstr);}答案:【1】k=0 [2]*(p-l) [3]fun(chrstr)【解析】填空1:根据题目的意思,这里应该是以变量k作为判断标志,如果标志为1并且当前指针指向空格就应该把标志返回0,以便下一次检测。填空2:根据题目的意思,此处进行的是将p所指单词的最后一个字母改成大写,但是此时p已经循环到了单词后面的那个空格,所以应该对p-1进行操作。填空3:由算法可以看出,这里应该是进行函数调用,根据前面的子函数定义可以知道,参数是一个指向向字符串的指针,所以应该把数组的名字(也可以认为是指向数组首地址的指针)作为参数。12、str是一个由数字和字母字符组成的字符串,由变量num传入字符串长度。请补充函数fUn(),该函数的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。例如:sti="Bcdl23e456hui890”,结果为:123456890.注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fUn()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#defineN80intbb[N];intfun(chars[]rintbb[],intnum)(intirn=0;for(i=0;i<num;i++)(if([1]){bb[n]=[2];n++;}}return[3];}main(){charstr[N];intnum=0,n,i;printf(nEnterastring:\nn);gets(str);while(str[num])num++;n=fun(strrbb,num);printf(n\nbb=");for(i=0;i<n;i++)printf(H%dn,bb[i]);}答案:[1]s[i]>=,0,&&s[i]<=<9,[2]s[i]-'O'[3]n【解析】填空1:如果当前字符的ASCH码大于字符。的ASCII码,而小于字符9的ASCH码,则说明当前字符是数字字符。填空2:将数字字符转换为数字的方法是,用当前数字字符的ASCII码减去字符'0'的ASCH码。填空3:题目要求函数返回数组bb的长度,而变量n记录了数字字符的个数,也就是数组bb的长度,所以函数应该返回n。73、请补充函数该函数的功能是:把一个整数转换成字符串,并倒序保存在字符数组str中。例如:当n=13572468时,str="86427531”。注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<conio.h>#defineN80charstr[N];voidfun(longintn){inti=0;while([[]){str[i]=[2];n/=10;i++;main(){longintn=13572468;clrscr();printf(n***theorigialdata***\nn);printf(nn=%ldH,n);fun(n);printf(n\n%sn,str);)答案:【l】n>0 [2]n%10+'0' 【3】str[i]=,\0'【解析】填空1:while循环的执行条件是n>0,当n等于0时,说明已经将整数的各位数字都转换为数字字符并存入字符串中了。填空2:n对10求余,得到整数n的个位数字,在加上字符。的ASCII码,得到对应的数字字符,并存入字符串str中。填空3:将整数转换为字符串并倒序存放入字符数组str中后,还要在str最后加上字符串结束标记符14、下列给定程序中,函数fiin()的功能是:从字符串s中,删除所有小写字母,c,。试题程序:1<stdio.h>voidfun(char*s){inti,j;for(i=j=0;_2=;i++)if(s[i]!=*c1) 3 ;s[j]=,\Ot;}main(){chars[80];printf(w\nEnterastring: M);gets(s);printf(nTheoriginalstring: ");puts(s);fun(s);printf(nThestringafterdeleted:puts(s);printf(n\n\nn);)答案:【1】include [2]s[i]!=W [3]s[j++]=s[i]【解析】填空1:由我们对C语言的掌握和学习知道,这是程序对头文件的声明,根据C语言的规定头文件要用关键字include来声明,并用"#"开始。填空2:这里考查的是对循环结束语句的掌握和字符串的结束标志的理解,我们知道字符串由'O'作为结束标志,由题意知,i一直增加到字符串结束,因此循环结束判断语句使用s[i]!=W。填空3:由本题选择条件if(s[i]!=e)可知,如果字符串中的字符不是"c",则执行循环,根据题目的意思这句应该执行的是sU-H-]=s[i],这里考查了自加运算符的灵活使用。15、请补充main函数,该函数的功能是:从一个字符串中截取前面若干个给定长度的子字符串。其中,strl指向原字符串,截取后的字符存放在str2所指的字符数组中,n中存放需截取的字符个数。例如:当strl="cde埴hij”,然后输入4,则str2="cdef’。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:♦include<stdio.h>#include<conio.h>#defineLEN80main(){charstrl[LEN],str2[LEN];intn,i;clrscr();printf("Enterthestring:\n");gets(strl);printf("Enterthepositionofthestringdeleted:");scanf([1]);for(i=0;i<n;i++)[2]str2[i]='\0';printf("Thenewstringis:%s\n",[3]);}【答案】【1】"%d",&n[2]str2[i]=strl[i];[3]str2【解析】填空1:本题考查对标准输入函数scanf()的调用格式,由后面的程序可以知道,变量n保存了要截取的字符数,注意在n前面不要忘了取址符'填空2:截取前n个字符,就是将字符串strl的前n个字符依次赋给字符串str2的前n个字符。填空3:本题考查对标准输出函数printf()的调用格式,根据题意,应输出截取后的字符串,即字符串str2。76、给定程序的功能是判断字符ch是否与串str中的某个字符相同;若相同,什么也不做,若不同,则插在串的最后。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!ttinclude<stdio.h>^include<string.h>voidfun(char*str,charch){while(*str&&*str!=ch)str++;/**********found**********/if(*str 1 ch)

{str[0]=ch;/**********found**********/2__=0;)}main(){chars[81],c;printf("\nPleaseenterastring:\n^);gets(s);printf("\nPleaseenterthecharactertosearch;c=getchar();/**********found**********/fun( 3 );printf("\nTheresultis%s'n”,s);)答案:【1】!= [2]str[l][3]str2本题着重考察考生对C语言中函数的调用以及一些简单算法的掌握情况。题中第一空填"!=":从题意得知,若字符ch与字符串str中的某个字符相同,什么也不做;若不同,则插在str的最后。因此fun函数中先设置了一个循环从字符串str中寻找字符ch,如果找到则中断循环并保留字符ch的地址,否则一宜循环到串尾。因此通过判断*str的内容即可判断是否已找到字符ch。题中第二个空填”str[1]":如果没有找到字符ch,则在while循环后str指针指向串结束符0x00,此时应将字符ch写入这里并在下一地址写入一个串结束符0x00,所以应该是"str[l]=0;”语句。题中第三个空填"s,c":此句是调用fun()函数,括弧中是其实际参数。77、给定程序的功能是将在字符串s中出现、而未在字符串t中出现的字符形成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符。例如:当5="1如345",t="2467"时,u中的字符串为"1135"。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!Sinclude<stdio.h>ttinclude<string.h>voidfun(char*s,char*t,char*u){inti,j,si,tl;si=strlen(s);tl=strlen(t)for(i=0;i<sl;i++){for(j=0;j<tl;j++)版褊M殿#版褊M殿#if(s[i]==t[j])_1_if(j>=tl)/************「ound************/*u++= 2 ;)/************found************/―3—二,\0';}main(){chars[100],t[100],u[100];printf("\nPleaseenterstrings:");scanf("%s”,s);printf(*XnPleaseenterstringt:");scanf("%s”,t);fun(s,t,u);printf("theresultis:%s\n”,u);)答案:【1】break[2]s[i] [3]*u本题考核点为字符串的查找,赋值操作。题中第一空填"break;〃:break为跳出循环的语句。〃if(s[i]=t[j])break;〃语句是指当即t[j]中的字符已经在字符指针s[j]所指向的字符数组中存在时,循环就结束。题中第二空填”和++=s[i];〃是将s[i]赋给*U,然后U加1。题中第三空填〃*u〃:"*(!='\0';〃,字符串的最后一个字符应该是'\0'的。%、请补充函数ftin(),该函数的功能是:把字符下标为非素数的字符从字符串str中删除,把字符下标为素数的字符重新保存在字符串str中。字符串str从键盘输入,其长度作为参数传入函数fun()o例如,输入“abcdefjghijkl”,输出“cdfhl”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>♦defineN80voidfun(chars[]rintn)(inti,j,kfflag;Q];for(i=0;i<n;i++){if(i>l)s[k++]=s[i];flag=l;for([2];j<i&&flag;j++)if(i%j==0){flag=0;[3];)}s[k]=,\0,;}main(){inti=0zstrlen=0;charstr[N];clrscr();printf(n\nInputastring:\n,f);gets(str);while(str[i]!=*\01)strlen++;i++;}fun(str,strlen);printf(n\n***displaystring***\nn);puts(str);)【答案】【l】k=o [2]j=2 [3]k-【解析】填空1:变量k声明时没有初始化,所以要在使用前初始化为0。填空2:如果一个数能被除了1和其自身之外的数整除,即余数为0,则这个数不是素数。所以除数j从2开始取数。填空3:如果当前字符的下标为非素数,则应将此字符删除,所以变量k减1,使下一个字符覆盖它,达到删除的目的。19、给定程序的功能是把s串中所有的字符前移一个位置,串中的第一个字符移到最后。例如:s串中原有的字符串为:Mn.123xyZ,则调用该函数后,s串中的内容为:n.123xyZM。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>ttdefineN81fun(char*s){charb[N];fprintf(b, s+1,*s);/**************found**************/strcpy( 1 );}main(){chara[N];printf("Enterastring:");gets(a);printf("Theoriginalstringis:");puts(a);/**************f'ound**************/fun(—2—);printf("Thestringaftermodified:");/**************found**************/一3一(a);)答案:【l】a [2]s,b [3]puts本题的考核点是c语言中循环语句的使用。立人教育提示思路:先保存原字符串的第一个字符,然后将后面的字符依次向前移一位,最后将原字符串的第一个字符添加到新字符串的最后。20、请补充函数fun(),该函数的功能是:按,0'到,9,统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。注意:不能使用字符串库函数。例如:输入“x=l12385713.456+0.909*bc”,结果为:1=3,3=2,5=2,7=1,9=2。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#defineN1000voidfun(char*ttrintnum[])inti,j;intbb[10];char*p=tt;for(i=0;i<10;i++)(num[i]=0;bb[i]=0;}while([1])(if(*p>=,0,&&*p<=,9,)P++;}for(i=l,j=0;i<10;i=i+2zj++)[3];main(){charstr[N];intnum[10],k;printf(n\nPleaseenteracharstring:H);gets(str);printf(n\n**Theoriginalstring**\nn);puts(str);fun(strznum);printf(n\n**Thenumberofletter**\nM);for(k=0;k<5;k++){printf(”\n");printf(M%d=%dMr2*k+lrnum[k]);}printf(n\nn);return;)【答案】【1]*p[2]bb[*p-'0']++[31num[j]=bb[i]【解析】填空1:通过移动指针p,指向字符串tt中的各个字符,当指针p所指的字符为‘\0'时,即指向字符串tt的最后一个字符,while循环结束。填空2:将字符串中的数字字符'0'到'9'的个数都保存在数组bb[10]中。*p-'0‘实现将字符'0'的个数保存在bb[0]中,将字符’1'的个数保存在bb[l]中,依此类推,直到将字符'9'的个数保存在bb[9]中。填空3:由于奇数数字字符的个数存于bb[l]、bb[3]、bb[5]、bb[7]、bb[9]中,所以for循环的目的是将这些元素分别赋给num[0]、num[1]^num[2]>num[3],num[4]o21.下列给定程序中,函数fun()的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。试题程序:ttinclude<string.h>#include<stdio.h>itdefineN5ttdefineM811fun(char(*sq)[M]){inti;char*sp;―2;for(i=0;i<N;i++)if(strlen(sp)<strlen(3))sp=sq[i];returnsp;)mainO{charstr[N][M],*longest;inti;printf("Enter%dlines:\n",N);for(i=O;i<N;i++)gets(str[i]);printf(zz\nThe%dstring:\n",N);for(i=0;i<N;i++)puts(str[i]);longest=fun(str);printf(zz\nThelongeststring:\n");puts(longest);}答案:【1】char* [2]sp=sq[0] [3]sq[i]【解析】填空1:从C语言的学习中我们知道,这里应该是对子函数返回值类型的定义,由卜面返回的指针型变量sp可以知道,应该定义成char*,注意中间的空格。填空2:根据题目的意思,此处应该是先假设指针数组的第1个元素所指的字符串最长,之后对字符串指针数组进行遍历,即给sp赋初值。填空3:由算法可以看出,这里应该是把二维数组的每一行作为一个字符串的首地址进行长度比较,所以若遇字符串长度大于待定最长字符串,则令该字符串为待定最长字符串,如此循环直至指针数组末尾,即可得到最长字符串的地址。22、下列给定程序中,函数fun()的功能是:将字符串p中所有字符复制到字符串b中,要求每复制3个字符之后插入一个空格。例如,在调用fun()函数之前给字符串a输入ABCDEFGHIJK,调用函数之后,字符串b中的内容则为ABCDEFGHIJK。试题程序:♦include<stdio.h>voidfun(char*prchar*b){inti,k=0;while( ){i=0;while( 2&&*0){b[k]=*p;k++;p++;i++;)if(*p){b[_3 ]='»;}}b[k]=*\0*;main()

{chara[80],b[80];printf(nEnterastring:n);gets(a);printf(nTheoriginalstring: puts(a);fun(a,b);printf(n\nThestringafterinsertspace:n);puts(b);printf(n\n\n");)答案:【l】*p [2]i<3 [3]k++【解析】填空1:根据题目的意思,这里应该是利用wile循环处理字符串,因为字符串的结束标志\0可以作为循环结束的判断条件,所以C语言中很多情况都这样使用,考生要注意。填空2:根据题目的意思,此处是对于写入的字符个数进行计数,如果到3就应该结束这个循环插入空格,所以应该和是否到达串结尾为逻辑与的关系。填空3:由算法可以看出,此处是在输出结果中置入空格字符,注意插入空格后指针应该后移。23、给定程序功能是用冒泡法对6个字符串进行排序。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>#defineMAXLINE20fun(char*pstr[6]){inti,j;char*p;for(i=0;i<5;i++){for(j=i+1;j<6;j++){/**************found**************/if(strcmp(*(pstr+i), 1 )>0)(p=*(pstr+i);/**************found**************/pstr[i]= 2 ;/**************found**************/*(pstr+j)=—3—;main(){inti;char*pstr[6],str[6][MAXLINE];for(i=0;i<6:i++)pstr[i]=str[i];printf(*\nEnter6string(lstringateachline):\n")for(i=0;i<6;i++)scanfpstr[i]);fun(pstr);printf(,zThestringsaftersorting:\n/z);for(i=0;i<6;i++)printf("%s\n”,pstr[i]);答案:【1】答案:【1】*(pstr+j)【2】pstr[j][3]p首先,我们必须先读懂题中程序的大致意思,这是正确填空的重要前提。程序中的重要思想如下:1、建立了一个二维字符串数组,用于存放用户输入的6个字符串;2、建立了一个指针数组,目的是用6个指针分别指向6个字符串;3、函数fun()的形参只有一个,即指针数组pstr口,这表明要想在函数fun()中对6个字符串进行操作,只能通过pstr口中的6个指针。题中第一个空填"*(pstr+j广:观察源程序可以发现,在程序中使用strcmpO函数是为了判断字符串str[i]与str[i+l]两者的大小,在fun()函数中只能通过指针来表达各个字符串,所以应当填"*(pstr+j)”。题中第二个空填"pstr[j/:对两个字符进行比较后,若pstr[i]中的字符比pstr[j]中的字符大,则将pstr[j]中的字符赋给pstr[i]。题中第三个空填"p":对两个字符进行比较后,若pstr[i]中的字符比pstr[j]中的字符大,则将pstr[j]和pstr[i]的内容进行交换。24、给定程序的功能是分别统计字符串中大写字母和小写字母的个数。例如,给字符串ss输入:AaaaBBbl23CCccccd,则输出结果应为:upper=5,lower=9请在程序的下划线处填入正确的内容并把下划线删除,注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>voidfun(char*s,int*a,int*b){while(*s){if(*s>='A'&&*s<='Z')/**********found**********/_1—;if(*s>='a'&&*s<='z')/**********found**********/―2—;s++;main(){chars[100];intupper=0,lower=0;printf(*\nPleaseastring:");gets(s);fun(s,&upper,&lower);/**********found**********/printf("\nupper=%dlower=%d\n", 3 );}upper,lower答案:[1](*a)++ [2](*b)++ [3]upper,lower本题的考核点是C语言中输入输出函数及指针的使用。题中第一个空填”(柏)++“:程序中,a是一个整型指针,要使a指向的数据实现递增,则要把指针改为实际数据。同样道理,题中第二个空填〃(*b)++〃或相同作用的语句。题中第三个空填“upper,lower”:根据题义要求输出统计的字符串中大写字母和小写字母的个数。25、给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!ttinclude <stdio.h>ttinclude <string.h>#defineM5ttdefineN20intfun(char(*ss)[N],int*n){inti,k=0,len=N;/**********found**********/for(i=0;i< 1 ;i++){len=strlen(ss[i]);if(i==0)*n=len;/**********found**********/if(len 2 *n){*n=len;k=i;}}/**********found**********/return( 3 );)main(){charss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing");intn,k,i;printfCAnTheoriginalstringsare:\n");for(i=0;i<M;i++)puts(ss[i]);k=fun(ss,&n);printf(*\nThelengthofshorteststringis:%d\n”,n);printf(zz\nTheshorteststringis:%s\n”,ss[k]);}答案:[1]M[2]< [3】k本题考查的是字符串长度的比较。由于在fun函数中要对字符串数组中的每个字符串(共有M个)都要求其长度,故在外层循环中,其循环条件应为i<M,故第一空应填M:在比较时,先使长度的初始值*n为第一个字符串的长度,然后逐个比较其它字符串的长度len,如果长度len小于*n,则将len赋值给*n,并记录下此时字符串在字符串数组中的下标i»故第二空应为<或<=;最后要返回数组的下标,即代码中的k,故第三空应为k。26、下列给定程序中,函数fun()的作用是:将字符串tt中的大写字母都改为对应的小写字母,其他字符不变。例如,若输入"Ab,cD",则输出"ab,cd"。试题程序:ttinclude<stdio.h>#include<string.h>#include<conio.h>char1fun(chartt[]){inti;for(i=0;tt[i];i++)

if((tt[i]>=,A')&&(tt[i]<= 2 ))tt[i]+=32;)return(tt);main()(chartt[81];printf("\nPleaseenterastring:");gets(tt);printf("\nTheresultstringis:\n%s*,fun( 3 ));)答案:【1】* 【21'Z' [3]tt【解析】填空1:由return语句可以看出,该函数的返回值类型是指向字符串的指针,所以应该使用符号填空2:从ASCH码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII码值大32,根据ASCII码值判断该字母是不是大写字母,判断的标准是ASCII码值是否介于A和Z之间。填空3:根据题目的意思这里应该调用函数fun对字符串tt进行转换,所以应该使用tt作为函数的参数。27、给定程序的功能是将在字符串s中出现、而未在字符串t中出现的字符,构成一个新的字符串放在u中,u中字符按原字符串中字符顺序的逆序排列,不去掉重复字符。例如,当5=例如34当,t="2467"时,u中的字符是:"5311"。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程ftinclude<stdio.h>#include<string.h>voidfun(char*s,char*t,char*u){inti,j,si,tl,ul;charr,*up=u;si=strlen(s);tl=strlen(t);for(i=0;i<sl;i++){for(j=0;j<tl;j++)/************found************/if(s[i]==t[j])—1—/************found************/if(j—2—tl)*u++=s[i];}*u='\0';ul=strlen(up);for(i=0;i<ul/2;i++){/************found************/r=—3—;up[i]=up[ul-l-i];up[ul-l-i]=r;mainO{chars[100],t[100],u[100];printf("\nPleaseenterstrings:");scanf("s”,s);printf("\nPleaseenterstringt:");scanf('s”,t);fun(s,t,u);printf(*Theresultis:%s\n*,u);)答案:【1】break [2]>= [3]up[i]题中第一个空填"break;":break语句可以作为循环跳出语句,常与if语句结合使用。题中第二个空填">=":"if(j>=tl)*u++= 是和上面循环语句"for(j=0;j<tl;j++)if(s[i]=t[j])break;”结合起来的。如果循环一直进行下去,则最后j和tl是相等的。题中第三个空填”up[i/:两个数的交换通常用一个中间变量。28、下列给定程序中函数ftin()的功能是:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。例如:当s中的字符串为ABCDE时,则t中的字符串应为EDCBAABCDEo试题程序:♦include<conio.h>♦include<stdio.h>♦include<string.h>voidfun(char*s,char*t){inti,si;sl=1_;for(i=0;i<sl;i++)t[i]=s[_2_];for(i=0;i<sl;i++)t[sl+i]=s[i];t-i='\ot}main(){chars[100]zt[100];printf(n\nPleaseenterstrings:");scanf(M%snzs);fun(s,t);printf("Theresultis:%s\nnzt);)答案:【1】strlen(s) [2]sl-l-i [3]2*sl【解析】填空1:根据题目的意思,这里应该是对于变量si进行赋值,由下面的算法可以看出si是纪录变量s指向的字符串长度的,即应该调用字符串函数strlen(s)。填空2:根据题目的意思,此处是算法要求的第一步,进行逆序输入,这个并不困难,关键是找到逆序的规律,即t的下标为i时,s的下标为sl-1-i。填空3:由算法可以看出,这里应该是给新产生的字符串加上结束标志,其下标应该是2*sl。29、下列给定程序中,函数firn。的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转化为A,z转化为a),其他字符不变。试题程序:#include<stdio.h>♦include<ctype.h>#include<conio.h>voidfun(char*s){while( 1_){if(*s>=,A*&&*s<=*Z*||*s>=*a*&&*s<=*z*)(if(*S==»Z•) *s=,A,elseif(*s==1z*) *s=1a*;else*s+=2 ;)_3_;))main(){chars[80];printf(n\nEnterastringwithlength<80:\n\nM);gets(s);printf(n\nThestring:\n\nM);puts(s);fun(s);printf(n\n\nTheCords:\n\nM;puts(s);}答案:【1】*s [2]1 [3]s++【解析】填空1:从C语言的学习中我们知道,while语句的结束条件是括号中的式子结果为0,而一个字符串的结尾标志为、0’,即满足循环的结束条件,所以一般情况下C语言中使用字符串的结尾作为结束循环的标志;s为指向一个数组的指针,*s为取出s指向的内容。填空2:根据题目的意思,若该字母不是N或Z,则该字母的ASCII码值加1°填空3:根据题目的意思,要对字符串所有字母进行遍历,使用指针进行这一过程应该使用循环,即每次都对该指针进行加一操作。30、给定程序的功能是把s串中所有的字母改写成该字母的下一个字母,字母z改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其它的字符不变。例如:s串中原有的字符串为:Mn.123Zxy,则调用该函数后,s串中的内容为:No.123Ayz。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<string.h>#include<stdio.h>ttinclude<ctype.h>#defineN81fun(char*s){/**************found**************/char*p= 1 ;while(*p){/**************found**************/if(*p==fZf)*p= 2 ;/**************found**************/elseif(*p==9z)*p= 3 ;elseif(isalpha(*p))*p=(*p)+1;p++;printf("Thefun(a);printf("Theputs(a);答案:printf("Thefun(a);printf("Theputs(a);答案:【1】s[2]'A'{chara[N];printf("Enterastring:〃);gets(a);originalstringis:");puts(a);stringaftermodified:");本题的考核点是C语言中的循环语句和条件判断语句的使用。解题思路:从本题的要求来看,我们应该采用循环条件判断的算法。本参考函数使用while循环从头到尾扫描字符串,并在扫描时进行条件判断,对'z','Z'和其它字符进行不同的处理。本评析仅供参考。3人请补充函数fun,该函数的功能是比较字符串strl和str2的大小,并返回比较的结果。例如:当strl="cde『,str2="cde”时,函数fun()返回注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fim()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<conio.h>#defineN80char*fun(char*strl,char*str2){char*pl=strlz*p2=

温馨提示

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

最新文档

评论

0/150

提交评论