【真题1】 已知学生的记录由学号和学习成绩构成,N 名学生的数据已存入a 结构 体中,给定程序的功能是找出成绩最低的学生记录,通过形参返回主函数。 #include < stdio.h >#include < string.h >#define N 10 typedef struct ss { char num[10]; int s; } STU; fun(STU a[], STU *s) { /**************found**************/ ___1___ h; int i ; h = a[0]; for ( i = 1; i < N; i++ ) /**************found**************/ if ( a[i].s < h.s ) ___2___ = a[i]; /**************found**************/ *s = ___3___ ; } main() { STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77}, {"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }, m ; int i; printf("***** The original data *****\n"); for ( i=0; i< N; i++ )printf("No = %s Mark = %d\n", a[i].num,a[i].s); fun ( a, &m ); printf ("***** THE RESULT *****\n"); printf ("The lowest : %s , %d\n",m.num, m.s); } (2011年2月) 解析: 本题的考核点是结构体类型变量的定义和引用。 提示思路:先从所有的学生数据中找出最低的分值,然后将所有学生分数中与 最低分值相等的学生数据放到另一数组中,最后统计分数最低的学生人数并返 回。 答案:【1】STU 【2】h 【3】h 【真题2】 给定程序modi.c 中函数fun的功能是:统计一个无符号整数中各位数 字值为零的个数,通过形参传回主函数:并把该整数中各位上最大的数字值作为函数 值返回。例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字 值最大的是8。 请改正函数fun 中指定部位的错误,使它能得出正确的结果。 注意:不要改动main 函数, #include < stdio.h >int fun(unsigned n, int *zero) { int count=0,max=0,t; do { t=n%10; /**************found**************/ if(t=0) count++; if(max< t) max=t; n=n/10; }while(n); /**************found**************/ zero=count; return max; } main() { unsigned n; int zero,max; printf("\nInput n(unsigned): "); scanf("%d",&n); max = fun( n,&zero ); printf("\nThe result: max=%d zero=%d\n",max,zero); } (2011年2月) 解析: 本题的考核点是C语言中指针变量作为函数参数和do...while 循环语 句的使用。 提示思路:先对变量count和max 初始化为0,再通过if语句判断各位数上的 数字值是否是0,若是0,则count自加1,然后将各位数上的值分别与统计的 最大值进行比较,即找出该整数中最大的数字值放到变量max中并返回。其 中,zero 形参指针变量,传回主函数的是地址。 本题中的第一个错误:关系表达式使用错误,在c 语言中,"="表示赋值运算 符,关系表达式"=="的值是一个逻辑值,即"真"或"假",所以应该将程序中的 语句"if(t=0)"改为"if(t==0)"或相同作用的语句。 本题中的第二个错误:变量引用错误,zero 为指针变量,count为整型变量, 应该将程序中的语句"zero=count;"改为"*zero=count;"或相同作用的语句。 【真题3】 函数fun 的功能是:将s 所指字符串中除了下标为奇数、同时ASCII值 也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在 t 所指的数组中。 例如,若s 所指字符串中的内容为:“ABCDEFG12345”,其中字符A 的ASCII码 值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1 的ASCII码值为 奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t 所指的 数组中的内容应是:“135”。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 #include < conio.h >#include < stdio.h >#include < string.h >void fun(char *s,char t[]) {……} main() { char s[100],t[100]; clrscr(); printf("\nPlease enter string S:");scanf("%s",s); fun(s,t); printf("\nThe result is :%s\n",t); } (2011年2月) 解析: 本题的考核点是数组、循环语句。 解题思路:使用循环语句将数组下标为奇数的元素与2 取余,如果余数不为零 则将其值存入另外一个数组中。 本评析仅供参考。 void fun(char *s, char t[]) { int i,slenth,n=0; slenth=strlen(s); /*统计字符串s中字符的个数*/ /*将字符串s 中所有下标和ASCII值同时为奇数的字符复制到数组t中*/ for(i=1;i< slenth;i+=2) if(s[i]%2!=0) t[n++]=s[i]; t[n]='\0';/*在数组t最后添加字符串结束符*/ } |