二级C上机题库分类解析版_第1页
二级C上机题库分类解析版_第2页
二级C上机题库分类解析版_第3页
二级C上机题库分类解析版_第4页
二级C上机题库分类解析版_第5页
已阅读5页,还剩302页未读 继续免费阅读

下载本文档

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

文档简介

1、 PAGE 2 第306页考生注意事项1、本资料汇集了2009年及以前所有的全国计算机等级考试二级C语言的上机考试真题,具有很高的真实性、权威性和全面性,也具有较强的参考价值,是备战全国计算机等级考试二级C语言的良师益友,衷心希望本资料能为大家考试成功加油助力。2、本资料在每道题的后面都有参考答案和详细分析,精讲考点,分析题眼,详解重点和难点并给出应试技巧,为你轻松过关铺路垫石。3、本资料内容全面,对100套题做了详细归类,望各位学员能够举一反三,在短时间内提高等级应试能力。4、机试考试有三道大题,第一题是程序填空,占分30分,第二题是程序修改,占分30分,第三题是程序编写,占分40分,整个上

2、机考试分值100分,考试时间60分钟。5、上机考试的题目每年变化不大,考生只要平时基础知识扎实,在考前强化时多做些上机考试模拟题,见多识广,上机考试时就会遇到跟自己考前上机练习极其类似的题目,从而顺利通过考试。6、考试中计算机出现故障、死机、死循环、电源故障等异常情况(即无法进行正常考试时),应举手示意与监考人员联系,不得擅自关机和做出其它自行处理。7、上机考试时应明确,考生目录位于考试环境界面的左上角,每一个题目对应的程序文件都存放在考生目录下,要做每一道题时,应先按平时掌握的打开文件的方法在考生目录下打开每一道题所对应的程序文件,然后再做题,做题的过程应注意保存文件。8、上机考试做每一道题

3、时,应尽量使用C编译系统自身的编译、连接功能调试程序,以便很快发现语法错误,解决语法错误,编译、连接完成后,对得到的程序结果还应认真分析,确保程序没有逻辑错误为止。9、机试填空题应注意:(1)一般设置3个填空;(2)填空后应将填空序号和填空下划线删除,防止编译出错。 10、机试修改题应注意:(1)错误一般有2个或3个;2(2)错误一般位于每个found之下一行或两行范围之内。11、机试编程题应注意:(1)编程题一般都是在被调用的函数之内编写;(2)所编写的被调用的函数要与调用函数保持和谐统一,符合被调用与调用的关系。第一部分 程序填空题字符类:第1-2题1、函数fun的功能是进行数字字符转换。

4、若形参ch中是数字字符09,则0转换成9,1转换成8,2转换成7,9转换成0;若是其它字符则保持不变;并将转换后的结果作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include /*found*/_1_ fun(char ch)/*found*/ if (ch=0 & _2_)/*found*/ return 9- (ch- _3_ ); return ch ;main() char c1, c2; printf(nThe result :n); c1=2; c2

5、 = fun(c1); printf(c1=%c c2=%cn, c1, c2); c1=8; c2 = fun(c1); printf(c1=%c c2=%cn, c1, c2); c1=a; c2 = fun(c1); printf(c1=%c c2=%cn, c1, c2);答案: 【1】char【2】ch=9 【3】0由主函数中的语句c2=fun(c1);知:函数fun的返回类型为字符,故第一空应填char;在题面中要求对数字字符进行转换,故第二空的目的是判断字符ch是否为一数字字符,即ch是否在09之间故第二空应填ch=9或其等效形式;第三空处语句的目的是返回转换后的结果,即返回一字

6、符,其所对应的数字与转换前字符所对应的数字的和为9,故第三空应填0或其等效形式。2、给定程序的功能是将大写字母转换为对应小写字母之后的第五个字母;若小写字母为vz,使小写字母的值减21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换为小写字母f;若形参是字母W,则转换为小写字母b。#include #include char fun(char c) if( c=A & c=a & c=v&c=z) c=c-21;/*found*/ return _2_ ;main() char c1,c2; printf(nEnter a letter(A-Z): ); c1=getchar()

7、; if( isupper( c1 ) ) /*found*/ c2=fun( _3_); printf(nnThe letter %c change to %cn, c1,c2); else printf(nEnter (A-Z)!n);答案: 【1】5【2】c 【3】c1【解析】:本题着重考察考生对C语言中一些简单算法的掌握情况。先判断输入的字母是否是大写字母,若是大写字母,将其转化为相应的小写字母,方法是该大写字母对应的ASCII码值加上32就是其小写字母的ASCII码值,再判断该小写字母是否是au,若是转化为其后的第5个字母。若该小写字母是vz,则将其ACSII码值减去21,转换后的小

8、写字母作为函数值返回。 题中第一个空填5:C语言中,字母从az或AZ的ASCII码值是依次递增的,所以将其转换为其后的第5个字母应该是c=c+5;或相同作用的语句。 题中第二个空填c:通过return语句将被调用函数中c的值带回主调函数中去。题中第三个空填c1:此句是调用fun()函数,括弧中是其实际参数。递归类:第34题3、下列给定程序中,函数fun()的功能是:用递归算法计算斐波拉契级数列中第n项的值。从第一项起,斐波拉契级数序列为1,1,2,3,5,8,13,21,例如,若给n输入7,该项的斐波拉契级数值为13。#include long fun(int g) switch(g) cas

9、e 0: return 0; case 1: _1_: return 1; return (_2_);main() long fib; int n; printf(Input n:);scanf(%d,_3_);printf(n=%dn,n); fib=fun(n); printf(fib=%dnn,fib); 答案:【1】case 2【2】fun(g-1)+fun(g-2)【3】&n【解析】填空1:根据题目的意思,这里应该是对于值为1和2的时候的处理,注意case语句常量后应用的是冒号,而且不同的case对应同一个值可以连续写(像题目中那样)。填空2:根据题目的意思,此处是求值的递归部分,由

10、递推公式可以很容易的得到答案的形式,对于这种简单的递归考生一定要掌握。填空3:由算法可以看出,此处是输入数列的项数n,使用了scanf函数,其参数应该是变量的地址,即使用符号& 。4、下列给定程序中,函数fun()的功能是:应用递归算法求某数a的平方根。求平方根的迭代公式如下: 。例如,2的平方根为1.414214。#include #include _1_ fun(double a,double x0) double x1,y; _2_; if(fabs(x1-x0)=0.00001) _3_; else y=x1; return y;main() double x; printf(Ente

11、r x: ); scanf(%lf,&x); printf(The square root of %lf is %1fn,x, fun(x,1.0);答案: 【1】double【2】x1=(x0+a/x0)/2.0【3】y=fun(a,x1)【解析】填空1:这里要问的是函数的类型,由主函数main()对函数的调用可以得到函数的类型是double型的,当然也可以由函数的返回值语句得到。填空2:我们看到在下一条语句中已经开始对变量x1的值进行比较了,所以这里要对x1进行赋值,由题意可知x1=(x0+a/x0)/2.0。填空3:用C语言求平方根的方法一般有两种经典的算法,它们分别是迭代法和递归法,本

12、题要求用递归法。该程序采用了if语句,程序的含义是当迭代结果差小于误差时进行循环。文件读写类:第59 题5、给定程序的功能是:从键盘输入若干行文件(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。#include #include #include void WriteText(FILE *);void ReadText(FILE *);FILE *fp; main() if(fp=fopen(myfile4.txt,w)=NULL) printf(

13、open fail!n); exit(0); WriteText(fp); fclose(fp); if(fp=fopen(myfile4.txt,r)=NULL) printf( open fail!n); exit(0); ReadText(fp); fclose(fp);/*found*/void WriteText(FILE _1_ ) char str81; printf(nEnter string with -1 to end :n); gets(str); while(strcmp(str,-1)!=0) /*found*/ fputs( _2_ ,fw); fputs(n,fw

14、); gets(str); void ReadText(FILE *fr) char str81; printf(nRead file and output to screen :n); fgets(str,81,fr); while( !feof(fr) ) /*found*/ printf(%s,_3_); fgets(str,81,fr); 答案: 【1】*fw【2】str【3】str【解析】本题考核点为:文件的读写函数等。题中第一个空填*fw:fw是一个文件指针,从键盘上读入数据,输入其所指向的文件中。 题中第二空填str:fputs函数向文件中写数据,其函数原型为:fputs(ch,

15、fp) 其中ch是要输出的字符,它可以是一个字符常量,也可以是一个字符变量。fp是文件指针变量。 题中第三个空填str:printf函数的一般格式为: printf(格式控制,输出表列) 1、格式控制是用双引号括起来的字符串,也称转换控制字符串,它包括两种信息: 格式说明:由%和格式字符组成,如%d,%f等。它的作用是将输出的数据转换为指定的格式输出。格式说明总是由%字符开始的。普通字符,即需要原样输出的字符。 2、输出表列:是需要输出的一些数据,可以是表达式。6、给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值是1,失败时返回值为0。在复制的过

16、程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中。 #include #include int fun(char *source, char *target) FILE *fs,*ft; char ch;/*found*/ if(fs=fopen(source, _1_)=NULL) return 0; if(ft=fopen(target, w)=NULL) return 0; printf(nThe data in file :n); ch=fgetc(fs);/*found*/ while(!feof(_2_) putchar(

17、ch );/*found*/ fputc(ch,_3_); ch=fgetc(fs); fclose(fs); fclose(ft); printf(nn); return 1;main() char sfname20 =myfile1,tfname20=myfile2; FILE *myf; int i; char c; myf=fopen(sfname,w); printf(nThe original data :n); for(i=1; i30; i+) c=A+rand()%25;fprintf(myf,%c,c); printf(%c,c); fclose(myf);printf(n

18、n); if (fun(sfname, tfname) printf(Succeed!); else printf(Fail!);答案: 【1】“r”【2】fs【3】ft本题的考核点是文件的读写函数等。 题中第一个空填r:r是文件的使用方式之一,其含义是为输入打开一个文件用于输入。 题中第二个空填fs:此语句是设置循环退出条件,即判断是否到文件末尾。 题中第三个空填ft:fputc函数功能是把一个字符写到磁盘文件上去。其一般调用形式为: fputc(ch,fp);其中ch是要输出的字符,它可以是一个字符常量,也可以是一个字符变量。fp是文件指针变量。7、给定程序中,函数fun的功能是:将自然数

19、110以及它们的平方根写到名为myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。 #include #include int fun(char *fname ) FILE *fp; int i,n; float x; if(fp=fopen(fname, w)=NULL) return 0; for(i=1;i=10;i+)/*found*/ fprintf(_1_,%d %fn,i,sqrt(double)i); printf(nSucceed!n);/*found*/ _2_; printf(nThe data in file :n); /*found*/ if(fp=fop

20、en(_3_,r)=NULL) return 0; fscanf(fp,%d%f,&n,&x); while(!feof(fp) printf(%d %fn,n,x); fscanf(fp,%d%f,&n,&x); fclose(fp); return 1;main() char fname=myfile3.txt; fun(fname);答案: 【1】fp 【2】fclose(fp) 【3】fname 本题考核点为:文件的打开,关闭和读写操作。 题中第一个空填fp:是向文件指针fp所指向的文件中写数据。 题中第二个空填fclose(fp);:此语句是文件的关闭操作。 题中第三个空填fname

21、:fopen函数用于文件的打开操作,其调用形式一般为:fopen(文件名,使用文件方式)。fname为所要打开的文件名。8、给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。 #include #include #define N 5typedef struct int num; char name10; char tel10;STYPE;void check();/*found*/int fun(_1_ *std)/*found*/ _2_ *fp

22、; int i; if(fp=fopen(myfile5.dat,wb)=NULL) return(0); printf(nOutput data to file !n); for(i=0; iN; i+)/*found*/ fwrite(&stdi, sizeof(STYPE), 1, _3_); fclose(fp); return (1);main() STYPE s10= 1,aaaaa,111111,2,bbbbb,222222,3,ccccc,333333, 4,ddddd,444444,5,eeeee,555555; int k; k=fun(s); if (k=1) print

23、f(Succeed!); check(); else printf(Fail!);void check() FILE *fp; int i; STYPE s10; if(fp=fopen(myfile5.dat,rb)=NULL) printf(Fail !n); exit(0); printf(nRead file and output to screen :n); printf(n num name teln); for(i=0; iN; i+) fread(&si,sizeof(STYPE),1, fp); printf(%6d %s %sn,si.num,,si.tel)

24、; fclose(fp);答案: 【1】STYPE 【2】FILE 【3】fp本题考核点为结构体和文件的操作等。 题中第一空填STYPE:typedef可以用来声明新的类型名来代替已有的类型名,此题用STYPE来代替未命名的结构体。 题中第二空填FILE:FILE关键字用于声明文件指针。 题中第三空填fp:fwrite函数的一般调用形式为: fwrite(buffer,size,count,fp);其中buffer:是一个指针,是要输出数据的地址;size:是要写的字节数;count:要进行读写多少个size字节的数据项;fp:文件型指针。9、程序通过定义学生结构体变量,存储了学生的学号、姓名

25、和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。 #include #define N 5typedef struct student long sno; char name10; float score3; STU;void fun(char *filename) FILE *fp; int i, j; STU sN, t;/*found*/ fp = fopen(filename, _1_); fread

26、(s, sizeof(STU), N, fp); fclose(fp); for (i=0; iN-1; i+) for (j=i+1; jN; j+)/*found*/ if (si.sno _2_) t = si; si = sj; sj = t; fp = fopen(filename, wb);/*found*/ _3_(s, sizeof(STU), N, fp); fclose(fp);main() STU tN= 10005,ZhangSan, 95, 80, 88, 10003,LiSi, 85, 70, 78, 10002,CaoKai, 75, 60, 88, 10004,

27、FangFang, 90, 82, 87, 10001,MaChao, 91, 92, 77, ssN; int i,j; FILE *fp; fp = fopen(student.dat, wb); fwrite(t, sizeof(STU), 5, fp); fclose(fp); printf(nnThe original data :nn); for (j=0; jN; j+) printf(nNo: %ld Name: %-8s Scores: ,tj.sno, ); for (i=0; i3; i+) printf(%6.2f , tj.scorei); printf

28、(n); fun(student.dat); printf(nnThe data after sorting :nn); fp = fopen(student.dat, rb); fread(ss, sizeof(STU), 5, fp); fclose(fp); for (j=0; jN; j+) printf(nNo: %ld Name: %-8s Scores: ,ssj.sno, ); for (i=0; isj.sno或与此语句功能相同的语句;再用二进制方式把排序后的数据输出到指定文件中,fwrite函数的作用是往文件的当前位置写入指定字节的数据块,所以第三个空填:f

29、write。字符串类:第1038题10、给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组中共有M个字符串,且串长N。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 不得增行或删行,也不得更改程序的结构!#include #include #define M 5#define N 20void fun(char (*ss)N) int i, j, k=0, n, m, len; for(i=0; in) /*found*/ n=len; _1_=i; for(i=0; i=0;

30、j-) ssim-=ssij; for(j=0; jn-len; j+)/*found*/ _3_=*; main() char ssMN=shanghai,guangzhou,beijing,tianjing,cchongqing; int i; printf(nThe original strings are :n); for(i=0; iM; i+) printf(%sn,ssi); printf(n); fun(ss); printf(nThe result:n); for(i=0; iM; i+) printf(%sn,ssi);答案: 【1】“rb” 【2】sj.sno 【3】fw

31、rite本题考查的是字符串中字符的插入。 在fun函数中,第一个for循环的作用是求出所有字符串中,长度最长的字符串的长度n,并记下此字符串在数组中的下标k,故第一空应填k。在第二个for循环中,如果当前字符串不是最长字符串,则计算其长度len,并将从下标0到len的字符向右移动n-len位,故第二空为len;最后,再通过一个for循环语句在当前字符串前面补充len-n个*,故第三空应为ssij或其等效形式。11、下列给定的程序中,fun()函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写(这里的单词是指有空格隔开的字符串)。例如,若输入:I am a student to tak

32、e the examination则应输出:I aM A studenT tO takE thE examinatioN试题程序:#include #include #include #include void fun(char *p) int k=0; for ( ;*p;p+) if (k) if (*p= ) _1_; _2_=toupper(*(p-1); else k=1;main()char chrstr64; int d; printf(nPlease enter an English sentence within 63 letters: ); gets(chrstr); d=

33、strlen(chrstr); chrstrd= ; chrstrd+1=0; printf(nBofore changing:n %s,chrstr); _3_; printf(nAfter changing:n %s,chrstr);答案:【1】k=0【2】*(p-1)【3】fun(chrstr)【解析】填空1:根据题目的意思,这里应该是以变量k作为判断标志,如果标志为1并且当前指针指向空格就应该把标志返回0,以便下一次检测。填空2:根据题目的意思,此处进行的是将p所指单词的最后一个字母改成大写,但是此时p已经循环到了单词后面的那个空格,所以应该对p-1进行操作。填空3:由算法可以看出,这

34、里应该是进行函数调用,根据前面的子函数定义可以知道,参数是一个指向向字符串的指针,所以应该把数组的名字(也可以认为是指向数组首地址的指针)作为参数。12、str是一个由数字和字母字符组成的字符串,由变量num传入字符串长度。请补充函数fun(),该函数的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。例如:str=“Bcd123e456hui890”,结果为:123456890。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include#define N

35、80int bbN;int fun(char s,int bb,int num) int i,n=0; for(i=0;inum;i+) if(【1】)bbn=【2】;n+; return 【3】;main() char strN; int num=0,n,i; printf(Enter a string:n); gets(str); while(strnum)num+; n=fun(str,bb,num); printf(nbb= ); for(i=0;i= 0 &si= 9【2】si- 0【3】n【解析】填空1:如果当前字符的ASCII码大于字符0的ASCII码,而小于字符9的ASCII码

36、,则说明当前字符是数字字符。填空2:将数字字符转换为数字的方法是,用当前数字字符的ASCII码减去字符0的ASCII码。填空3:题目要求函数返回数组bb的长度,而变量n记录了数字字符的个数,也就是数组bb的长度,所以函数应该返回n。13、请补充函数fun(),该函数的功能是:把一个整数转换成字符串,并倒序保存在字符数组str中。例如:当n=13572468时,str=“86427531”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include#include#define N 80char strN

37、;void fun(long int n) int i=0; while(【1】) stri=【2】;n/=10;i+; 【3】;main() long int n=13572468; clrscr(); printf(* the origial data *n); printf(n=%ld,n); fun(n); printf(n%s,str);答案:【1】n0【2】n%10+0【3】stri= 0【解析】填空1:while循环的执行条件是n0,当n等于0时,说明已经将整数的各位数字都转换为数字字符并存入字符串中了。填空2:n对10求余,得到整数n的个位数字,在加上字符0的ASCII码,得到

38、对应的数字字符,并存入字符串str中。填空3:将整数转换为字符串并倒序存放入字符数组str中后,还要在str最后加上字符串结束标记符0。14、下列给定程序中,函数fun()的功能是:从字符串s中,删除所有小写字母c。试题程序:_1_void fun(char *s)int i, j; for(i=j=0;_2_;i+) if(si!= c) _3_; sj=0;main() char s80; printf(nEnter a string: ); gets(s); printf(The original string: ); puts(s); fun(s); printf(The string

39、 after deleted: ); puts(s); printf(nn ); 答案:【1】#include 【2】si!= 0【3】sj+=si【解析】填空1:由我们对语言的掌握和学习知道,这是程序对头文件的声明,根据语言的规定头文件要用关键字include来声明,并用#开始。填空2:这里考查的是对循环结束语句的掌握和字符串的结束标志的理解,我们知道字符串由0作为结束标志,由题意知,i一直增加到字符串结束,因此循环结束判断语句使用si!= 0。填空3:由本题选择条件if(si!=c)可知,如果字符串中的字符不是c,则执行循环,根据题目的意思这句应该执行的是sj+=si,这里考查了自加运算符

40、的灵活使用。15、请补充main函数,该函数的功能是:从一个字符串中截取前面若干个给定长度的子字符串。其中,str1指向原字符串,截取后的字符存放在str2所指的字符数组中,n中存放需截取的字符个数。例如:当str1=“cdefghij”,然后输入4,则str2=“cdef”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include #include#define LEN 80main() char str1LEN,str2LEN; int n,i; clrscr(); printf(Enter

41、the string:n); gets(str1); printf(Enter the position of the string deleted:); scanf(【1】); for(i=0;in;i+)【2】 str2i=0; printf(The new string is:%sn,【3】);【答案】【1】%d,&n【2】str2i=str1i;【3】str2【解析】填空1:本题考查对标准输入函数scanf()的调用格式,由后面的程序可以知道,变量n保存了要截取的字符数,注意在n前面不要忘了取址符 &。填空2:截取前n个字符,就是将字符串str1的前n个字符依次赋给字符串str2的前n

42、个字符。填空3:本题考查对标准输出函数printf()的调用格式,根据题意,应输出截取后的字符串,即字符串str2。16、给定程序的功能是判断字符ch是否与串str中的某个字符相同;若相同,什么也不做,若不同,则插在串的最后。 #include #include void fun(char *str, char ch ) while ( *str & *str != ch ) str+;/*found*/ if ( *str _1_ ch ) str 0 = ch;/*found*/ _2_ = 0; main( ) char s81, c ; printf( nPlease enter a

43、string:n ); gets ( s ); printf (n Please enter the character to search : ); c = getchar();/*found*/ fun(_3_) ; printf( nThe result is %sn, s);答案: 【1】!=【2】str1【3】str2本题着重考察考生对C语言中函数的调用以及一些简单算法的掌握情况。 题中第一空填!=:从题意得知,若字符ch与字符串str中的某个字符相同,什么也不做;若不同,则插在str的最后。因此fun函数中先设置了一个循环从字符串str中寻找字符ch,如果找到则中断循环并保留字符c

44、h的地址,否则一直循环到串尾。因此通过判断*str的内容即可判断是否已找到字符ch。 题中第二个空填str1:如果没有找到字符ch,则在while循环后str指针指向串结束符0 x00,此时应将字符ch写入这里并在下一地址写入一个串结束符0 x00,所以应该是str1 = 0;语句。题中第三个空填s,c:此句是调用fun()函数,括弧中是其实际参数。17、给定程序的功能是将在字符串s中出现、而未在字符串t中出现的字符形成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符。 例如:当s=112345,t=2467时,u中的字符串为1135。 #include #includ

45、e void fun (char *s,char *t, char *u) int i, j, sl, tl; sl = strlen(s); tl = strlen(t); for (i=0; isl; i+) for (j=0; j=tl)/*found*/ *u+ = _2_; /*found*/ _3_ = 0;main() char s100, t100, u100; printf(nPlease enter string s:); scanf(%s, s); printf(nPlease enter string t:); scanf(%s, t); fun(s, t, u); p

46、rintf(the result is: %sn, u);答案: 【1】break 【2】si 【3】*u本题考核点为字符串的查找,赋值操作。 题中第一空填break;:break为跳出循环的语句。 if (si = tj) break;语句是指当si = tj,即tj中的字符已经在字符指针sj所指向的字符数组中存在时,循环就结束。 题中第二空填si:*u+ = si;是将si赋给*u,然后u加1。题中第三空填*u:*u=0;,字符串的最后一个字符应该是0的。18、请补充函数fun(),该函数的功能是:把字符下标为非素数的字符从字符串str中删除,把字符下标为素数的字符重新保存在字符串str中

47、。字符串str从键盘输入,其长度作为参数传入函数fun()。例如,输入“abcdefghijkl”,输出“cdfhl”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include #define N 80void fun(char s,int n) int i, j, k, flag; 【1】; for(i=0; i1)sk+=si;flag=1;for(【2】; ji&flag; j+)if(i%j=0)flag=0;【3】; sk=0;main() int i=0,strlen=0; char st

48、rN; clrscr(); printf(n Input a string:n); gets(str); while(stri!=0) strlen+;i+; fun(str, strlen); printf(n* display string *n); puts(str); 【答案】【1】k=0 【2】j=2 【3】k-【解析】填空1:变量k声明时没有初始化,所以要在使用前初始化为0。填空2:如果一个数能被除了1和其自身之外的数整除,即余数为0,则这个数不是素数。所以除数j从2开始取数。填空3:如果当前字符的下标为非素数,则应将此字符删除,所以变量k减1,使下一个字符覆盖它,达到删除的目的。

49、19、给定程序的功能是把s串中所有的字符前移一个位置,串中的第一个字符移到最后。 例如:s串中原有的字符串为:Mn.123xyZ,则调用该函数后,s串中的内容为:n.123xyZM。 #include #define N 81fun ( char *s ) char bN ; fprintf(b, %s%c, s + 1, *s) ;/*found*/ strcpy(_1_) ;main( ) char a N ; printf ( Enter a string : ); gets ( a ); printf ( The original string is : ); puts( a );/*

50、found*/ fun ( _2_ ); printf ( The string after modified : );/*found*/ _3_ ( a );答案: 【1】a 【2】s,b 【3】puts本题的考核点是c语言中循环语句的使用。提示思路:先保存原字符串的第一个字符,然后将后面的字符依次向前移一位,最后将原字符串的第一个字符添加到新字符串的最后。20、请补充函数fun(),该函数的功能是:按0到9统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。注意:不能使用字符串库函数。例如:输入“x=112385713.456+0.909*bc”,结果为:13,32,52

51、,71,92。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include#define N 1000void fun(char *tt,int num) int i,j; int bb10; char *p=tt; for(i=0;i=0&*p=9)【2】;p+; for(i=1,j=0;i10;i=i+2,j+)【3】;main() char strN; int num10,k; printf(nPlease enter a char string:); gets(str); printf(n*T

52、he original string*n); puts(str); fun(str,num); printf(n*The number of letter*n); for(k=0;k5;k+) printf(n);printf(%d=%d,2*k+1,numk); printf(n); return;【答案】【1】*p【2】bb*p-0+【3】numj=bbi【解析】填空1:通过移动指针p,指向字符串tt中的各个字符,当指针p所指的字符为0时,即指向字符串tt的最后一个字符,while循环结束。填空2:将字符串中的数字字符0到9的个数都保存在数组bb10中。*p-0实现将字符0的个数保存在bb

53、0中,将字符1的个数保存在bb1中,依此类推,直到将字符9的个数保存在bb9中。填空3:由于奇数数字字符的个数存于bb1、bb3、bb5、bb7、bb9中,所以for循环的目的是将这些元素分别赋给num0、num1、num2、num3、num4。21、下列给定程序中,函数fun()的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。试题程序:#include #include #define N 5#define M 81_1_fun(char (*sq)M)int i; char *sp; _2_; for(i=0;iN;i+)

54、 if(strlen(sp)strlen(_3_) sp=sqi; return sp;main()char strNM, *longest; int i; printf(Enter %d lines:n ,N); for(i=0;iN;i+) gets(stri); printf(nThe %d string :n ,N); for(i=0;iN;i+) puts(stri); longest=fun(str); printf(nThe longest string :n ); puts(longest); 答案:【1】char *【2】sp=sq0【3】sqi【解析】填空1:从C语言的学习

55、中我们知道,这里应该是对子函数返回值类型的定义,由下面返回的指针型变量sp可以知道,应该定义成char *,注意中间的空格。填空2:根据题目的意思,此处应该是先假设指针数组的第1个元素所指的字符串最长,之后对字符串指针数组进行遍历,即给sp赋初值。填空3:由算法可以看出,这里应该是把二维数组的每一行作为一个字符串的首地址进行长度比较,所以若遇字符串长度大于待定最长字符串,则令该字符串为待定最长字符串,如此循环直至指针数组末尾,即可得到最长字符串的地址。22、下列给定程序中,函数fun()的功能是:将字符串p中所有字符复制到字符串b中,要求每复制3个字符之后插入一个空格。例如,在调用fun()函

56、数之前给字符串a输入ABCDEFGHIJK,调用函数之后,字符串b中的内容则为ABC DEF GHI JK。试题程序:#include void fun(char *p,char *b) int i, k=0; while(_1_) i=0; while(_2_&*p) bk=*p; k+;p+;i+; if(*p) b_3_= ; bk= 0;main() char a80,b80; printf(Enter a string: ); gets(a); printf(The original string: ); puts(a); fun(a,b); printf(nThe string a

57、fter insert space: ); puts(b); printf(nn );答案:【1】*p【2】i3【3】k+【解析】填空1:根据题目的意思,这里应该是利用wile循环处理字符串,因为字符串的结束标志0可以作为循环结束的判断条件,所以C语言中很多情况都这样使用,考生要注意。填空2:根据题目的意思,此处是对于写入的字符个数进行计数,如果到3就应该结束这个循环插入空格,所以应该和是否到达串结尾为逻辑与的关系。填空3:由算法可以看出,此处是在输出结果中置入空格字符,注意插入空格后指针应该后移。23、给定程序功能是用冒泡法对6个字符串进行排序。 #include #define MAXLI

58、NE 20fun ( char *pstr6) int i, j ; char *p ; for (i = 0 ; i 5 ; i+ ) for (j = i + 1; j 0) p = *(pstr + i) ;/*found*/ pstri = _2_ ;/*found*/ *(pstr + j) = _3_ ; main( ) int i ; char *pstr6, str6MAXLINE ; for(i = 0; i 6 ; i+) pstri = stri ; printf( nEnter 6 string(1 string at each line): n ) ; for(i =

59、 0 ; i 6 ; i+) scanf(%s, pstri) ; fun(pstr) ; printf(The strings after sorting:n) ; for(i = 0 ; i 6 ; i+) printf(%sn, pstri) ;答案:【1】*(pstr+j)【2】pstrj【3】p首先,我们必须先读懂题中程序的大致意思,这是正确填空的重要前提。 程序中的重要思想如下: 1、建立了一个二维字符串数组,用于存放用户输入的6个字符串; 2、建立了一个指针数组,目的是用6个指针分别指向6个字符串; 3、函数fun()的形参只有一个,即指针数组pstr,这表明要想在函数fun()

60、中对6个字符串进行操作,只能通过pstr中的6个指针。 题中第一个空填*(pstr+j):观察源程序可以发现,在程序中使用strcmp()函数是为了判断字符串stri与stri+1两者的大小,在fun()函数中只能通过指针来表达各个字符串,所以应当填*(pstr+j)。 题中第二个空填pstrj:对两个字符进行比较后,若pstri中的字符比pstrj中的字符大,则将pstrj中的字符赋给pstri。题中第三个空填p:对两个字符进行比较后,若pstri中的字符比pstrj中的字符大,则将pstrj和pstri的内容进行交换。24、给定程序的功能是分别统计字符串中大写字母和小写字母的个数。 例如,

温馨提示

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

评论

0/150

提交评论