c语言上机编程模拟题10套_第1页
c语言上机编程模拟题10套_第2页
c语言上机编程模拟题10套_第3页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、c 语言上机编程模拟题 10套模拟试题 (一)1. 填空题请补充函数 fun (), 该函数的功能是:把从主函数中输入的字符串 str2 接在字 符串 strl 的后面。例如: strl= “How do" , str2= “you do?", 结果输出: How do you do? 注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数fun的横 线上填入所编写的若干表达式或语句。试题程序: #include<stdio. h> #include<conio. h> ftdefine N 40 void fun(cha

2、r *strl, char *str2)int i=0:char *pl=strl;char *p2 二 str2; while(【1】)i+; for( ; 2 ;i+)*(pl+i)= 3;*(pl+i) 二'0'main()char strlN, str2N: clrscr (); printf("*Input the string strl & str2*n");printf (” nstrl:");gets (strl);printf(" nstr2:");gets (str2);printf ("*

3、The string strl & str2*n");puts(strl);puts (str2);fun(strl, str2);printf ("*The new string *n");puts (strl);答案及评析:1 *(pl+i) 2 *p2 3 *p2+【解析】填空 1:变量 i 用来记录字符串 strl 的长度,当指针指到 字符串 strl 结束标志符, 0' 时, while 循环结束,变量 i 停止累加。 填空 2:指针 p2 指向字符串 str2, 通过 for 循环将字符串 str2 接在 strl 后面,循环结束的 条

4、件是指针p2所指的字符是字符串结束标志 符'0'。填空3:指针p2最初指 向字符串str2的首字符,通过自 加1,使指针P2依次向后移动,指向str2的 各个字符,实现将字符 串 str2 接在 strl 后面的功能。2. 改错题下列给定程序中,函数 fun() 的作用是:将字符串 tt 中的小写字母 都改为对应 的大写字母,其他字符不变。例如,若输入 edS, dAd, 则输出 "EDS, DAD。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:ftinclude <stdio. h>f

5、tinclude <string. h> ftinclude <conio. h>/ XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs ? TX? IX *TX *TX char fun (char tt )int i;for(i=0;tti : i+)/ xt# xt# xt# xt# xt# xt# MXMX XL#/ ZTs ZTs ZTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XT* XT* XT* XT* XT* XT*XL# xtx

6、xt# -4I f 11 I I I I *TX *TX *TX *TX XTX*lx *lx *lx *lx *lx *lx *lx *lx *lx *lx /XTs ZTs ZTs /if (tti>=,A,)&&(tti<= 'Z')tt i-=32;return (tt);main()int i;char tt 81; clrscr ();printf ("nPlease enter a string:"); gets (tt); printf ("nThe result string is: n%s"

7、, fun(tt);答案及评析:(1) 错误: char fun (char tt )正确: char *fun(char tt )(2) 错误: if (tti>=,A,)&&(tti<= 'Z')正确: if (tti>=,a )&&(tti<= 'z')【解析】 错误 1:函数的返回值是字符串的首地址,是指针类型,所以在函数名前要加 '*' 号。错误 2:题目要求将小写字母改为大写字母,所以 if 语句的判断条 件是小写字 母。3. 编程题请编写函数 fun(), 该函数的功能是:移动

8、一维数组中的内容,若数 组中有 n 个 整数,要求把下标从 p 到 n-1 (pWn-1) 的数组元素平移 到数组的前面。 例如,一维数组中的原始内容为 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, p 的值为 6。移动后,一维数组中的内容应为 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 1, 2, 3, 4, 5, 6。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花 括号中填 入所编写的若干语句。试题程序: ftinclude <stdio. h&g

9、t; 駅 efine N 80void fun(int *w, int p, int n) main()int aN = l, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15; inti, p, n=15:printf ("The original data:n/z): for (i=0;i<n;i+)printf ("%3d", ai); printf (/z nnEnter p:"); scanf ("%d", &p);fun (a, p, n);printf (&quo

10、t;nThe data after moving: nz,): for (i=0:i<n;i+)printf ("%3d", ai);printf( nrT);答案及评析:void fun(int *w, int p, int n) int i, j, t;/* 循环右移 n-p 次*/) /* 实现循环右移 */for (i=p: i<=n-l: i+)t=wn-l;for (j=n-2 : j>=0; j wj+l=wj;w0=t;是,一个是整型数组,一个是字符型数组模拟试题 ( 二)1. 填空题请补充函数 fun(), 该函数的功能是求一维数组 xN

11、 的平均值,并对 所得结果 进行四舍五入 (保留两位小数 )。例如:当 x10 = 15. 6, 19. 9, 16. 7, 15. 2, 18. 3, 12. 1, 15. 5, 11.0,10.0,16.0, 结果为: avg=15. 030000o 注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横 线上填入 所编写的若干表达式或语句。 试题程序:#include<stdio. h>#include<conio. h>double fun(double x10)int i;long t;double avg=0. 0

12、:double sum=0. 0:for(i=0;i<10;i+)11 ;avg=sum/10;avg= 2;t= 3;avg= (double)t/100;return avg;main()double avg, x10 = 15. 6, 19. 9, 16. 7, 15. 2, 18. 3, 12. 1, 15.5, 11. 0, 10. 0, 16. 0;int i;clrscr ();printf ("nThe original data is :n"); for (i=0;i<10;i+)printf ("%6. If", xi);

13、printf( nn ) ; avg=fun(x); printf("average=%fnn", avg);答案及评析:1 sum+=xi 2 avg*10003 (avg+5)/IO【解析】填空 1:通过 for 循环求出 10个数的累加和,存于变量 sum 中。填空 2:为了实现四舍五入保留两位小数的功能,应将平均值先扩大 1000 倍。填空 3:将平均值加上 5, 再除以 10, 实现四舍五入 的功能。2. 改错题下列给定程序中,函数 fun() 的功能是:先从键盘上输入一个 3 行 3 列的矩阵 的各个元素的值,然后输出主对角线元素之积。请改正函数 fun() 中

14、的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结 构。 试题程序:ftinclude <stdio. h> int fun ()int a33, mul;int i, j;mul=l;for (i=0;i 3;i+)/ xt# xt# xt# xt# xt# xt# MXMX XL#XL# xtxxt# -4 1 r/ ZTs ZTs ZTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XT* XT* XT* XT* XT* XT*I f 11 I I I I/XTX XTs ZT

15、s ZTs /for (i=0;j<3;j+) scanf ("%d", &ai j);for(i=0;i<3:i+)/ xt# xt# xt# xt# xt# xt# MXMX XL#XL# xtxxt# -4 1 r/ ZTs ZTs ZTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XT* XT* XT* XT* XT* XT*I f 11 I I I IXTXXTs ZTs ZTs /mul=mul*ai j;printf("Mul=%dn",mul);main()fun(

16、);答案及评析:(1)错误: for (i=0; j<3; j+)正确:for (j=0; j<3; j+)(2)错误: mul=mul*ai j:正确:mul=mul*ai i:【解析】错误 1:循环结构中,要给变量 j 赋初值 0。错误2:主对角元素的行号和列号相等,所以参加乘法的是aii,而不是ai j o3.编程题学生的记录由学号和成绩组成, N 名学生的数据已在主函数中放入结构体数组s 中,请编写函数 fun (), 它的功能是:把分数最低的学生数据放在h 所指的数组中。注意:分数低的学生可能不只一个,函数 返回分数最低学生的人数。 注意:部分源程序给出如下。请勿改动主函

17、数 main 和其他函数中的任何内容,仅在函数 fun 的花 括号中填 入所编写的若干语句。试题程序: ftinclude <stdio. h> 駅 efine N 16 typedef struct char num10:int s ;STREC;int fun (STREC *a, STREC *b)main ()STRECsN二"GA005", 82, "GA003",75, "GA002",85, "GA004", 78,"GA001", 95, "GA007&qu

18、ot;, 62, "GA008", 60, "GA006", 85,"GA015", 83, "GA013", 94, "GA012", 78, "GA014", 97,"GAO11", 60, "GA017", 65, "GAO18", 60, "GA016", 74;STREC hN;int i, n;FILE *out;n=fun (s, h);printf("The %d low

19、est score :n",n);for (i=0: i<n; i+)printf ("%s %4dn, ) hi. num, hi. s) :/* 输出最低分学生的学号和成绩 */printf( n ) ;out=fopen ("outl9. dat", "w");fprintf (out, "%dn", n);for(i=0: i<n; i+):fprintf(out, "%4dn ",hi.s);fclose (out);答案及评析:int fun (STREC *a, STR

20、EC *b)int i, j=0, min=a0. s:for (i=0;i<N;i+)/* 找出最小值 */if (min>ai. s) min=ai. s :for (i=0;i<N;i+)if (min=ai. s)bj+=ai ;/*找出成绩与min相等的学生的记录,存入结构体 b 中 */return j :/* 返回最低成绩的学生人数【解析】 该程序使用循环嵌套,第 1 个 for 语句的作用是找出最小值。 第 2 个循环的作用是找出与 min 相等的成绩,也即最低成绩的学生记 录,并存入 b 中。模拟试题 ( 三)1. 填空题请补充函数fun(),该函数的功能是

21、:从'a,到'z,统计一个字符 串中所有字母 字符各自出现的次数,结果保存在数组 alf 中。注意: 不区分大小写,不能使 用字符串库函数。例如,输入: "A=abc+5*c", 结果为: a=2, b=l, c=20 注意:部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数fun的横 线上填入所编写的若干表达式或语句。试题程序: #include<conio. h> #include<stdio. h> ftdefine N 100 void fun (char *tt, int alf )int i;ch

22、ar *p=tt: for(i=0;i<26;i+)while(*p)if (*p>= A &&*p 二'Z')2 ;if (*p>= a &&*p二'z') alf*p_ , a +;3 ;main()char strN;char a 二' a ;int alf26, k;clrscr ();printf ( /z nPlease enter a char string:/z): scanf ("%s", str);printf("n*The original string

23、*n"); puts (str);fun (str, alf);printf ( /zn*The number of letter*n");for (k=0;k<26;k+)if (k%5=0)printf( n);printf ( /z %c=%d”, a+k, alf k);答案及评析:1 alfi=O 2 *p+=32 3 p+【解析】填空 1:数组 alf26 用来存放字母字符出现的次数,在使 用之前需 要清零。填空 2:题目要求不区分大小写,所以可以先将所有的大写字母都转换为对应的小写字母,然后一并记录出现的次数。 将大写字母转换为对应的小 写字母,只需将

24、ASCII 码加上 32 就可以了。填空 3:指针 p 指向字符串 tt, 通 过p自加1来移动指针,访问 字符串中的所有字符。下列给定程序中函数 fun() 的功能是:从低位开始取出长整型变量 s 中奇数位 上的数,依次构成一个新数放在 t 中。例如,当 s 中的数为 4576235 时, t 中 的数为 4725。请改正程序中的错误,使它能得到正确结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结 构 试题程序:#include<stdio. h> ftinclude <conio. h>/XL# xt# xt# xt#xt# Mxxtxxt#

25、 XL# xt# xt# Mxxt# -4 1 r Z-J/ ZTs ZTs ZTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XT* XT* XT* XT* XT* XT*I f 11 I I I I/XTX XTs ZTs ZTs /int fun (long s, long *t)long sl=10: *t=s%10;while (s>0)/XTX XTs ZTs ZTs / XL# xt# xt# xt#xt# Mxxtxxt# XL#xt# xt# Mxxt# -4 r Z-J/ ZTs ZTs ZTs XTs XTs X

26、Ts XTs XTs XTs XTs XTs XTs XTs XTs XTs XT* XT* XT* XT* XT* XT*I f 11 I I I Is=s%100;*t=s%10*sl+*t; sl=sl*10;main()long s, t; clrscr ();printf ("nPlease enter s:"); scanf&s);fun(s, &t);printf("The result is: %ldn ”, t);答案及评析:(1) 错误: int fun (long s, long *t)正确: void fun (long s

27、, long *t)(2) 错误: s=s%100;正确: s=s/100;【解析】错误 1:函数由指针来完成参数的传递,所以没有返回值,应定义函数的类型为 voido错误 2:此处要注意特殊运算符号 %一取余和 7一整除的区别。将 一个数 整除 100 则可得到由其百位数以上的数组成的新数字,将一个 数整除 100 取余 则可得到由十位数和个位数组成的新数。3. 编程题请编写一个函数fun(),它的功能是:求出一个4XM整型二维数组中最小元素的 值,并将此值返回调用函数。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花 括号中填 入所编写的若

28、干语句。试题程序:切 efine M 4ftinclude <stdio. h>fun (int a M) main()intarr4 M = 11, 3, 9, 35, 42, -4, 24, 32, 6, 4& -32, 7, 23, 34, 12,-7; printf("min=%dn", fun(arr);答案及评析:fun (int a M)int i, j, min=a0 0;for (i=0;i<4;i+)for (j=0;j<M;j+)if (min>ai j)min=ai j :/* 求出二维数组的最小值 */retu

29、rn min;【解析】 此类求最大值或最小值的 C 语言问题,我们可以采用逐个比 较的方 式。要求数组中的所有元素走动一遍,并从中找出最大、最小 值,要注意一开 始应使 min 存放数组中的第一个元素的值。可按逐行 查找也可按逐列查找的方 式,本题采用的是逐行查找的方式。即行下 标在外层循环,列下标在内层循 环,因为在循环的嵌套中越在内层循 环,循环变化就越快。模拟试题 ( 四)请补充函数 fun (), 该函数的功能是:分类统计一个字符串中元音字 母和其他 字符的个数 (不区分大小写 ) 。例如,输入 aeiouAOUpqrt, 结果为 A:2 E:1 1:1 0:2 U:2 other:4

30、o 注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun() 的 横线上填入 所编写的若干表达式或语句。试题程序:#include<stdio. h> #include<conio. h> ftdefine N 100 void fun (char * str, int bb )char *p=str:int i=0: for(i=0;i<6;i+)11 ;while(*p)switch(*p)case ' U'case 'A1casebbO+;breakcase'E1Jcasebbl+;br

31、eakcase'I1Jcasebb2+;breakcase'O1Jcase1bb3+;breakcase ' u' :bb4+;break; default: 2;main()char strN, ss6="AEIOU"int i;int bb6;clrscr (); printf("Input a string: n");gets (str);printf ( /z the string is: n");puts(str);fun (str, bb); for(i=0;i<5;i+) printf(&qu

32、ot;n%c:%d", ssi, bbi);printf ("nother:%d", bbi);答案及评析:1 bbi=0 2 bb5+3 p+;【解析】 填空 1:数组 bb6 用来存放 5 个元音字母和其他字符的个 数,在使 用之前需要清零。填空 2:数组元素 bb5 用来存放其他字符的个数,当指针 p 所指的 字符不是 元音字母时,则认为是其他字符, bb5 加 1。填空 3:指针 P 指向字符串 str,通 过 p 自 加 1 来 移 动 指 针 , 访 问 字 符 串 中 的 所 有 字 符下列给定的程序中,函数fun()的功能是:计算并输出k以内最大的

33、6个能被7 或11整除的自然数之和。K的值由主函数传入,若k的值为500,则函数的值 为 29250请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#in cludevstdio. h>ftin elude vconio. h> int fun (i nt k)int m=0, mc=0, j ;/ xt# xt# xt# xt# xt# xt# MXMX XL# XL# xtxxt # -4 1 r/ ZTs ZTs ZTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs

34、XTs XT* XT* XT* XT* XT* XT* I f 11 III IXTXXTs ZTs ZTs /while(k>=2)&&(mc<6)XTs ZTs ZTs /XTs ZTs ZTs / xt# xt# xt# xt# xt# xt# MX *Jx xt# xt# *Jx *JxMX XL# *Jx XL# xtxxt # -41 r , *lx *lx *lx *lx *lx *lx *lx *lx *lx *lx *lx *lx *lx *lx *lx *lx *lx *lx *lx *lx *lx *lx *lx / ZTs ZTs ZTs X

35、Ts XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XT* XT* XT* XT* XT* XT* *TX I f 11 I I I I *TX *TX *TX *TX XTXif(k%7=0) |(k%ll=0)/ xt# xt# xt# xt# xt# xt# MXMX XL#XL# xtxxt # -4 1 r/ ZTs ZTs ZTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XT* XT* XT* XT* XT* XT* I f 11 I I I I *TX *TX *TX *TX XTX

36、m=k;mc+;return m;mai n()clrscr ();printf (/z%dn “,fun(500);答案及评析:(1) 错误:while (k>=2)&& (mc<6)正确:while(k>=2)&&(mc<6)(2) 错误: if (k%7=0) | (k%ll=O)正确: if (k%7=0) | (k%ll= =0)(3) 错误: m=k;正确: m=m+k:【解析】 错误 1: C 语言规定 while 语句后的表达式两侧必须要有圆 括号。 错误 2: if 语句的判断条件应用关系运算符,而不是赋值运算符。错误

37、3:根据题意,将满足条件的数求累加和。3. 编程题请编写一个函数 fun (), 它的功能是:将 ss 所指字符串中所有下标 为偶数位置 的字母转换为小写 ( 若该位置上不是字母,则不转换 )。 例如,若输入 ABC4efG, 则应输出 aBc4efgo 注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花 括号中填 入所编写的若干语句。试题程序:#include<conio. h>#include<stdio. h> #include<string. h> void fun(char *ss) main() c

38、hartt 81;clrscr ();printf ("nPlease enter an string within 80 characters: n/z); gets(tt);printf ( /z nnAfter changing, the stringn %s", tt); fun (tt);printf ( /z nbecomesn %sn", tt);答案及评析:void fun(char *ss)int i ;for (i=0; ssi !=,0' ; i+)/* 将 ss 所指字符串中所有下标为偶数位置的字母转换为小写 */ssi=ssi+3

39、2;【解析】从C语言的学习中我们知道,只要将小写字母减去 32则转 成大写字 母,将大写字母加上 32 则转成小写字母。该程序是用 if 语 句实现该功能转化 的。模拟试题 (五)1. 填空题str是全部由小写字母字符和空格字符组成的字符串,由num传入字 符串的长度。请补充函数 fun(), 该函数的功能是:统计字符串 str 中的单词个数,结果 由变量num传回。每个单词之间都由空格隔开,并且字符串str开始不存在空格。例如: str= "how do you do",结果为: num=4。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数

40、fun()的 横线上填入所编写的若干表达式或语句。 试题程序:#include<stdio. h>駅 efine N 80void fun(char *s, int *num)int i, n=0:for (i=0: 1 ;i+)if (si>=,a &&si< =,z' &&(si+l = ''I |si+i='o')2; main()char strN;int num=0:printf ("Enter a string:n/z ): gets(str);while(str num)nu

41、m+;z/, num);fun (str, &num);printf("The number of word is : %dnn答案及评析:1 i *num 2 n+ 3 *num=n【解析】填空 1: *num 传入字符串的长度,所以 for 循环中变量 i 的 变化范 围是从0至Fnum-lo填空2:如果当前判断的字符是小写字母,并且它的下一 个字符是空格或者是字符串结束标记符,则表示当前字 符是一个单词的最后一 个字母,统计单词数的变量 n 要加上 1。填空 3 :题目要求结果由变量 num 传 回,所以要将n的值赋给指针num所 指的单元。2. 改错题F列给定程序中,

42、fun()函数的功能是:根据形参 m,计算下列公式的值t=l-l/2 + l/3-l/4HF (-1) (m+1) /m例如,若输入 5, 则应输出 0. 783333o 请改正程序中的错误,使它能得到正确结果 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结 构试题程序:ftinclude <conio. h> ftinclude <stdio. h>/XL# xt# xt# xt#xt# Mxxtxxt# XL#xt# xt# Mxxt# -4 1 r Z-J/ ZTs ZTs ZTs XTs XTs XTs XTs XTs XTs XTs XTs

43、 XTs XTs XTs XTs XT* XT* XT* XT* XT* XT*I f 11 I I I I/XTX XTs ZTs ZTs /int fun(int m)double t=l. 0, j=l. 0; int i ;/XL# xt# xt# xt#xt# Mxxtxxt# XL#xt# xt# Mxxt# -4/ ZTs ZTs ZTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XTs XT* XT* XT* XT* XT* XT*r Z-JI f 11 I I I I/XTX XTs ZTs ZTs /for (i=l;i<

44、m;i+) j=-l*j;t+=j/i; return t;int m;clrscr ();printf("nPlease enter 1 integer number:"); scanf ("%d", &m);printf ("nThe result is %lfn", fun(m): 答案及评析:(1)错误: int fun(int m)正确:double fun(int m)(2)错误: for (i=l: i<m; i+)正确:for (i=2; i<=m; i+)【解析】错误:函数的返回值为实型数,所以应

45、定义为 double 类型。错误2:根据题目的公式,参加运算的数应从2到m,包括m3. 编程题请编写函数 fun(), 它的功能是:求出 1到 1000之内能被 5或13整 除、但不能 同时被5和13整除的所有整数并将它们放在 a所指的数 组中,通过n返回这 些数的个数。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花 括号中填 入所编写的若干语句。试题程序:ftinclude <conio. h>ftinclude <stdio. h> void fun(int *a, int *n)int aa1000, n, k:

46、clrscr();fun(aa, &n);for (k=0;k<n;k+)if (k+l)%10=0)printf ( /?%5d z/, aak):printf ( z/n ”) ;/* 行写 10 个数*/elseprintf ("%5dz/, aak):答案及评析:void fun(int *a, int *n)int i,j=0;for(i=l;i<=1000;i+) /* 求 1 到 1000 之内能 被 5 或 13 整 除、但不能同时被5和13整除的所有整数,并放入数组 a中*/if(i%5=0|i%13=0)&&i%65!=0)aj

47、+=i;*n=j;/* 传回满足条件的数的个数 */【解析】注意本题题目是找出能被 5或13整除但不能同时被 5和13 整除的所 有整数。能同时被 5 和 13整除的整数一定能被 65 整除,且 不能被 65 整除的 数不一定就是能被 5 或 13整除的数。所以可得出程 序中的 if 0 o 按运算优先 级可知(i%5=01 | i%13=0),注意,两边必 须要有小括号。模拟试题 ( 六)1. 填空题str是一个由数字和字母字符组成的字符串,由变量num传入字符串长度。请补充函数 fun(), 该函数的功能是:把字符串 str 中的数字 字符转换成数字并存 放到整型数组bb中,函数返回数组b

48、b的长度。 例如:str= “Ecdl23e456hui890 ”,结果为: 123456890。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun() 的 横线上填入 所编写的若干表达式或语句。试题程序:#include<stdio. h>駅 efine N 80int bbN;int fun (char s , int bb , int num)int i, n=0:for (i=0;i <num:i+) if( 11 )bbn= 2; n+;return 3;main()char strN;int num=0, n, i ;pr

49、intf ("Enter a string: n/z ):gets(str);while(str num) num+;n=fun(str, bb, num);printf ( /z nbb= ) ;for(i=0;i<n;i+)printf("%d",bbi);答案及评析:1 si>= ' O' &&si<= '9' 2 si- ' O' 3 n【解析】 填空 1:如果当前字符的 ASCII 码大于字符 ' 0'的 ASCII 码,而小于 字符 '9, 的 A

50、SCII 码,则说明当前字符是数字字符。填 空 2:将数字字符转换为 数字的方法是,用当前数字字符的 ASCII 码 减去字符 ' 0'的 ASCII 码。填空 3:题目要求函数返回数组 bb 的长 度,而变量 n 记录了数字字符的个数,也就 是数组 bb 的长度,所以 函数应该返回 no2. 改错题下列给定程序中,函数 fun () 的功能是:从 n 个学生的成绩中统计出 高于平均 分的学生人数,人数由函数值返回,平均分存放在形参 aver 所指的存储单元 中。例如输入 8 名学生的成绩:85 65.5 69 95.5 87 55 62.575则高于平均分的学生人数为 4 (

51、 平均分为 74. 312500) 。 请改正程序中的错误,使它能得到正确结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结 构。 试题程序:ftinclude <stdio. h> ftinclude <conio. h>駅 efine N 20int fun(float *s, int n, float *aver)、 X、 X、X7#7*!? 7*7*7* 、!> 、!?* 、L*7*4- /Xr r w? z-1L* 、 L*K*7*7*7*7* 、 1*7* 、 L* 、 t*7<>K*X*7<*X* 、 /Xj%

52、XjX XjX XjX XJX XJX XjXXjX XjXl*7<1< /I ( ) I I I I ( 1Xj% XJX ZJ*?y* ? Y? >p? Xp* XjX XjX XjX/int ave , t=0;int count=0, k, i ; for (k=0;k<n;k+) t+=sk;ave=t/n;for (i=0;i<n;i+)/*found*/if (s i <ave)count+;/ 、L?、l*、L?、!>、!* 、L?、!x、!x、! x、L?、!?、!?、l*、L?、L?7*、!x、t?4- z-x -t -t zl 7

53、* L* 、 L* 、 !<* 7<* 、 t* 、 l*l*7*7* 、L* 、L* 、l*7< 、l*7< 、L* 、L* 、L* 、 l*7!*7!*7?* /aver=ave;return count;main ()float s30,aver;int m, i;clrscr ();printf ("nPlease enter m:");scanf ("%d", &m);printf ( /z nPlease enter %d mark : n",m);for(i=0;i<m;i+)scanf (&

54、quot;%f", s+i);printf ( z/ nThe number of students :%dn", fun(s, m, &aver): printf ("Ave=%fn", aver);答案及评析:(1) 错误: int ave , t=0: 正确: float ave , t=0. 0:(2) 错误: if(si<ave)正确: if(si>ave)(3) 错误: aver=ave:正确: *aver 二 ave;【解析】错误 1: ave 和 t 分别用来存放成绩的平均值和总分,应为 实型 数。错误 2:根据题意,

55、找出高于平均分的数,所以此处的关系运算符应为 > 错误 3: aver 是指针,而 ave 是一个数,不能将一个数赋值给一个指 针,而 要用符号3. 编程题请编写一个函数fun(),它的功能是:比较两个字符串的长度,(不 得调用C语 言提供的求字符串长度的函数 ),函数返回较短的字符串。 若两个字符串长度 相等,则返回第 1 个字符串。例如,输入 nanjing <CR> nanchang <CR> (<CR> 为回车键 ) ,函数将 返回 nanjingo注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的

56、花 括号中填 入所编写的若干语句。试题程序:#include<stdio. h>char *fun(char *s, char *t) main()char a20, b10, *p, *q;int i ;printf("Input 1th string:");gets(a);printf("Input 2th string:");gets (b);printf ("%s", fun (a, b);char *fun(char *s, char *t)int i, j;for (i=0; si != ' 0'

57、; ; i+) ;/* 求字符串的长度 */for (j=O;tj !=0 , ; j+);if(i<=j)/* 比较两个字符串的长度 */return s:/* 函数返回较短的字符串,若两个字符串长度相等,则返回第 1 个字符串 */elsereturn t;【解析】 本题中,第 1 个 for 循环的作用是求出 s 的字符个数 i, 第 2 个 for 循环的作用是求出 t 的字符个数 j, 因为任何循环都要控制 一条语句,所以在每 一个 for 循环条件后面必须要有一个分号。本题也可用如下技巧:#include<string. h> /* 一定要注意在最前面加#include<string. h>*/char *fun(char *s, char *t) if (strlen(s) >=strlen(t)return s;else return t;模拟试题 (

温馨提示

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

评论

0/150

提交评论