1、二级 C 语言机试-248 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)请补充函数 proc(),该函数的功能是:求 200(不包括 200)以内能被 2 或 5 整除,但不能同时被 2 和 5 整除的自然数。结果保存在数组 bb 中,函数 proc()返回数组 bb 中的元素。注意:部分源程序已给出。请勿改动主函数 main 和其他函数中的任何内容。试题程序:#includestdlib.h#includestdio.h#define M 200int proc(int bb)int i, j;for( (1) ; i200; i+)if(
2、i % 2! =0 (3) ; void main()int i, n;int bbM;system(“CLS“);n=proc(bb);for(i=0; in; i+)if(i%10=0)printf(“n“);printf(“%4d“, bbi);(分数:30.00)填空项 1:_填空项 1:_填空项 1:_二、改错题(总题数:1,分数:30.00)1.下列给定程序中,函数 proc()的功能是找出 100m(m 不大于 1000)之间百位数字加十位数字等于个位数字的所有整数,把这些整数放在 s 所指的数组中,个数作为函数值返回。请修改程序中的错误,使它能得到正确结果。注意:不要改动 ma
3、in()函数,不得增行或删行,也不得更改程序的结构。试题程序:#includestdio.h#define M 1000int proc(int *s, int n)int i, j, k, a, b, c;j=0;for(i=100; in; i+)/*found*k=n;a=k%10;k/=10;b=k%10;c=k/10;if(a=b+c)/*found*sj=i;return j;void main()int aM, m, num=0, i;doprintf(“/nEnter m(=1000): “);scanf(“%d“, while(m1000);num=proc(a, m);pr
4、intf(“/n/nThe result: /n“);for(i=0; inum; i+)printf(“%5d“, ai);printf(“/n/n“);(分数:30.00)填空项 1:_三、编程题(总题数:1,分数:40.00)2.请编写一个函数 proc(),它的功能是:比较两个字符串的长度(不得调用 C 语言中求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相等,则返回第 1 个字符串。例如,若输入 jiangxiCRbeijingCR(CR为回车键)则函数返回 jiangxi。注意:部分源程序已给出。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 proc 的
5、花括号中填入所编写的若干语句。试题程序:#includestdio.hchar * proc(char *s, char *t)void main()char a20, b10, *p, *q;printf(“Input 1th string: “);gets(a);printf(“Input 2th string: “);gets(b);printf(“%s“, proc(a,b);(分数:40.00)_二级 C 语言机试-248 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)请补充函数 proc(),该函数的功能是:求 200(不包括 200
6、)以内能被 2 或 5 整除,但不能同时被 2 和 5 整除的自然数。结果保存在数组 bb 中,函数 proc()返回数组 bb 中的元素。注意:部分源程序已给出。请勿改动主函数 main 和其他函数中的任何内容。试题程序:#includestdlib.h#includestdio.h#define M 200int proc(int bb)int i, j;for( (1) ; i200; i+)if(i % 2! =0 (3) ; void main()int i, n;int bbM;system(“CLS“);n=proc(bb);for(i=0; in; i+)if(i%10=0)p
7、rintf(“n“);printf(“%4d“, bbi);(分数:30.00)填空项 1:_ (正确答案:i=1, j=0)解析:填空项 1:_ (正确答案:bbj+=i)解析:填空项 1:_ (正确答案:retum j)解析:解析 由函数 proc 可知,变量 i 和 j 要判断的每一个整数和能被 2 或 5 整除,但不能同时被 2和 5 整除的自然数的个数,其初始化分别为 1 和 0。因此1处填 i=1,j=0;每一个符合条件的自然树放在数组 bb 中,因此2处填 bbj+=i;题目中要求符合条件的自然数的个数要返回给主函数。因此3 return j。二、改错题(总题数:1,分数:30.
8、00)1.下列给定程序中,函数 proc()的功能是找出 100m(m 不大于 1000)之间百位数字加十位数字等于个位数字的所有整数,把这些整数放在 s 所指的数组中,个数作为函数值返回。请修改程序中的错误,使它能得到正确结果。注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。试题程序:#includestdio.h#define M 1000int proc(int *s, int n)int i, j, k, a, b, c;j=0;for(i=100; in; i+)/*found*k=n;a=k%10;k/=10;b=k%10;c=k/10;if(a=b+c)/
9、*found*sj=i;return j;void main()int aM, m, num=0, i;doprintf(“/nEnter m(=1000): “);scanf(“%d“, while(m1000);num=proc(a, m);printf(“/n/nThe result: /n“);for(i=0; inum; i+)printf(“%5d“, ai);printf(“/n/n“);(分数:30.00)填空项 1:_ (正确答案:(1)错误:k=n; 正确:k=i;(2)错误:sj=i; 正确:sj+=i;)解析:解析 要找出所有符合条件的整数,就需要对每一个 1n 之间的
10、每一个数进行检验,因此 for 循环中的“k=n;”应改为“k=i;”对于每一个符合要求的整数放在数组 s 中,因此“sj=i;”应改为“sj+=i;”。三、编程题(总题数:1,分数:40.00)2.请编写一个函数 proc(),它的功能是:比较两个字符串的长度(不得调用 C 语言中求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相等,则返回第 1 个字符串。例如,若输入 jiangxiCRbeijingCR(CR为回车键)则函数返回 jiangxi。注意:部分源程序已给出。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 proc 的花括号中填入所编写的若干语句。试题程
11、序:#includestdio.hchar * proc(char *s, char *t)void main()char a20, b10, *p, *q;printf(“Input 1th string: “);gets(a);printf(“Input 2th string: “);gets(b);printf(“%s“, proc(a,b);(分数:40.00)_正确答案:(char * proc(char * s, char*t)int i, j;for(i=0; si! =/0; i+); /i 表示的是 s 数组的长度for(j=0; tj!=/0; j+); /j 表示的是 t 数组的长度if(i=j) /当 i 大干 j,说明 s 数组的长度大,因此返回 sreturn s;else /反之则返回 treturn t;)解析:解析 题目中要求不能用 C 语言中提供求字符串长度的函数,可以通过移动字符串指针来计算字符串的长度。定义两个变量分别存放两个字符串的长度。最后比较两个字符串的长度,返回长度较长的那一个字符串。