问题 问答题

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没有找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回(用于字符串比较的函数是strcmp)。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
文件PROG1.C内容如下:
#include<stdio.h>
#include<string.h>
#define N 16
typedef struet
char num[10];
int s ;
STREC ;
STREC fun( STREC * a, char * b )


void main( ) t
STREC s[N] = " GA005" ,85, " GA003" ,76 , " GA002" ,69 ," GA004" ,85,
"GA001" ,91, "GA007" ,72, "GA008" ,64, "GA006" ,87 ,
"GA015",85, "GA013" ,91, "GA012" ,64, "GA014" ,91 ,
"GA011" ,77, "GA017" ,64, "GA018" ,64, " GA016" ,72 ;
STREC h ;
char m[10];
int i ;
printf( "The original data: \n") ;
for(i=0; i<N; i++)
if(i%4==0) printf("\n");
printf("%s %3d ",s[i].num,s[i].s);

printf( " \n\nEnter the number: " ) ;
gets ( m ) ;
h=fun( s,m );
prinff( " The data : " ) ;
prinff("\n%s %4d\n",h. num,h.s);

答案

参考答案:STREC fun(STREC *a,char *b){
STREC c={"",-1};
int i:
for(i=0;i<N;i++)
if(strcmp(a[i].num,b)==0)return a[i];
return c;
}

解析: 题目要求查找指定学号的学生数据,可以采用顺序查找法,即从第一个学生记录开始,将学生的学号和指定的学号进行比较,若相等,则返回该学生的记录;若不相等,则与下一个学生的学号进行比较。如果全部比较完毕,没有找到相等的学号,则按题目要求进行数据返回。在参考答案:中,先定义一个结构体变量c,将它的学号置为空串,成绩置为-1。因为有N个学生记录,所以for循环i从0开始,循环到N,依次取出结构体变量a[i]的学号与形参b指向的学号进行比较,由于a[i]是结构体变量,所以应该用a[i].num取出学号字符串与字符串b进行相等的比较,若strcrop函数的返回值等于0,则说明两个字符串相等,返回结构体变量a[i]的值,此时通过return返回a[i],并且结束了for循环;如果始终没有相等的学号,则循环结束后返回结构体变量c的值。
[归纳总结] 本套试题的程序填空和程序设计题考查的是数据的查找。数据的查找最容易实现的算法就是顺序查找法。顺序查找法的基本思想是:从第一个数据开始依次往后进行比较,若在查找过程中找到相同的数据,则返回该数据或该数据在数组中的位置(即下标值);若所有数据比较完毕仍没有相同的数据,则在循环结束后按题目要求返回一个特殊的数据。
顺序查找法的常用程序是:
int fun(int *a,im b) /*形参a指向一个整型数组,b为要查找的数据*/
{
int i:
for(i=O;i<N;i++)
if(a[i]=b) return i;
return -1:
}
在等级考试的题目中,不仅仅是在整型数组中查找,还会将程序中的数据结构改变为字符数组或结构体数组。但是不管数据结构发生怎么样的改变,都可以采用顺序查找法查找需要的数据,只是要注意不同数据结构的引用方式。

选择题
填空题