1、国家二级 C语言机试(操作题)模拟试卷 468及答案与解析 一、程序填空题 1 人员的记录由编号和出生年、月、日组成, N名人员的数据已在主函数中存入结构体数组 std中,且编号唯一。 函数 fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include string h #define N 8 typedef struct char num
2、10; int year, month, day; STU; /*found*/ 【 1】 fun(STU*std, char*hum) int i; STU a=“, 9999, 99, 99; for(i=0; i N; i+) /*found*/ if(strcrnp(【 2】 , hum)=0) /*found*/ return(【 3】 ); retUrn a; main() STU stdN=“11 1111“, 1984, 2, 15, “222222“, 1983, 9, 21), “333333“, 1984, 9, 1, “4 4 4 4 4 4“, 198 3, 7, 1
3、 5, “5555 55”, 198 4, 9, 2 8, “6 6 6 6 6 6“, 198 3, 11, 15, “7 7 7 7 7 7“, 1 98 3, 6, 22, “8 8 8 8 8 8“, 1984, 8, 19); STU P; char r11 0=“66 6 6 6 6“; P=fun(std, n); if(p num0=0) printf(“nNot found!n“); plse printf(“nSucceed!n“); print; f(“ s d一 d一 dn“, p num, P year, p month, p day); 二、程序修改题 2 下列给定
4、程序中,函数 fun的功能是:从 s所指字符串中,找出 t所指字符串的个数作为函数值返回。例如,当 s所指字符串中的内容为 “abcdabfab”, t所指字符串的内容为 “ab”,则函数返回整数 3。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include conio h #include stdio h #include string h 2nt fun(char*s, char*t) int n; char*p, *r; n=0; while(*s) p=s; r
5、=t; while(*r) /*found*/ if(*r=*p)r+; p+) else break; /*found*/ if(r=0) n+; s+; return n; void main() char s100, t100; int m; system(“CLS“); printi(“nPlease enter string s: “); scanf(“ s”, s); printf(“nPlease enter sudstring t: “); scanf(“ s“, t); m=fun(s, t); printf f“nThe result is: m = dn“, m); 三、
6、程序设计题 3 请编写函数 fun,该函数的功能是: 将 s所指字符串中 ASCII码值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。 例如,若 s所指字符串中的内容为 “ABeDEFG12345”,其中字符 B的 ASCII码值为偶数,字符 2的 ASCII码值为偶数,都应当删除,其他依此类推。最后 t所指的数组中的内容应是 “ACEGl35”。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdlib h #include stdio h #include str
7、ing h #include conio h void fun(char* s, char t) void main() char s100, t100; system(“CLS“); printf(“nPlease enter string s: “); scanf(“ s“, s); fun(s, t); printf(“nThe result is: sn“, t); 国家二级 C语言机试(操作题)模拟试卷 468答案与解析 一、程序填空题 1 【正确答案】 (1)STU (2)stdi num (3)stdi 【试题解析】 本题考查: if条件表达式;比较字符串函数 strcmp;指针
8、变量的使用;函数定义及函数返回值。 strcmp函数用来比较两个字符数组的大小,其格式为: strcmp(字符数组 1,字符数组 2)。若字符数组 1 字符数组 2,函数值大于 0(正数);若字符数组 1=字符数组 2,函数值等于 0;若字符数组 1 字符数组 2,函数值小于 0(负数)。 填空 1:根据函数 fun的返回值类型可知,函数类型标识符应该是结构体类型的,所以填入 STU。 填空 2:根据题目说明,找出指定编号人员,并将其数据返回。通过 strcmp函数比较编号,若相同则函数值为 0,所以填入 stdi num。 填空 3:由题目可知,假如编号对应,则返回其编号对应数据,所以填入数
9、据stdi。 二、程序修改题 2 【正确答案】 (1)if( *r=*p) r+; p+;) (2)if( *r=0) 【试题解析】 本题考查: if语句,考生需要根据题意确定 if语句的判断条件;字符串结束标识,所有的字符串都要以 0结尾,上机考试常考知识点,考生一定要牢记;复合赋值运算,常用于循环控制和变量的累加、累乘。 从字符串 s中找出子串 t的方法是:从第 1个字符开始,对字符串进行遍历,若 s串的当前字符等于 t串的第 1个字符,两个字符串的指针自动加 1,继续比较下一个字符;若比较至字符串 t的结尾,则跳出循环;若 s串的字符与 t串的字符不对应相同,则继 续对 s串的下一个字符
10、进行处理。 三、程序设计题 3 【正确答案】 void fun (char*s,char t) int i=0; for(; *s!=0; s+) / *找出 ASCII值为奇数的字符依次存入数组 t中 */ if( *s002=1) ti+=*s; ti=0; /*在字符串的末尾加上串结束符 */ 【试题解析】 本题要求将 s所指字符串中 ASCII码值为偶数的字符删除,因此本题要求采用一个 for循环来找出 ASCII码值为奇数的字符依次存入数组 t中, 并使用 if条件句来判断 s所指字符串中 ASCII码值是否为奇数。用 0加在字符串的末尾来表示字符串的结束。 要删除 ASCII码值为偶数的字符,也就是要留下 ASCII码值为奇数的字符。由于最终是要求出剩余字符(即 ASCII码值为奇数)形成的新串,所以本题程序的算法是对原字符串从头到尾扫描,并找出 ASCII码值为奇数的字符并将其依次存入数组 t中。 此外,还要注意数组 t的下标变化和下标的初值(初值必须为 0,即 i=0), ti+的作用是先使用 ti,然后再使 i自增 1。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1