题面
请根据程序中的要求完善程序——注意,**除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理**。
程序的功能是:已知5名学生信息,从键盘输入学生姓名,根据姓名查找该学生是否存在,如果存在则输出学生信息,否则输出不存在提示。
程序的运行效果应类似地如图1所示,图1中的红色部分是从键盘输入的内容。
请输入你要查找的学生姓名: 李云龙
查找的学生信息为: 1002 李云龙 92.5 67.5 81.5
原码
#include <stdio.h>
#include <string.h>
int main(void)
{
STUD sTranscript[] = { {1001, "张三丰", 69.5, 61.5, 91.5}, {1002, "李云龙", 92.5, 67.5, 81.5},
{1003, "郭 靖", 79.5, 67.5, 86.5 }, {1004, "苗翠花", 83.0, 75.5, 84.0},
{1005, "张无忌", 65.5, 81.5, 71.0} };
STUD *stu;
char name[16];
printf("请输入你要查找的学生姓名: ");
gets(name);
stu = FindByName(sTranscript, 5, name);
if (stu)
{
printf("\n查找的学生信息为: ");
printf("%d %s %.1f %.1f %.1f\n", stu->iNum, stu->cName, stu->fCh, stu->fMath, stu->fEng);
}
else
{
printf("\n你要查找的学生不存在!\n");
}
return 0;
}
改后
#include <stdio.h>
#include <string.h>
typedef struct STUD
{
int iNum;
char cName[7];
float fCh;
float fMath;
float fEng;
} STUD;
STUD *FindByName(STUD *stu, int N, char *name);
int main(void)
{
STUD sTranscript[] = { {1001, "张三丰", 69.5, 61.5, 91.5}, {1002, "李云龙", 92.5, 67.5, 81.5},
{1003, "郭 靖", 79.5, 67.5, 86.5 }, {1004, "苗翠花", 83.0, 75.5, 84.0},
{1005, "张无忌", 65.5, 81.5, 71.0} };
STUD *stu;
char name[16];
printf("请输入你要查找的学生姓名: ");
gets(name);
stu = FindByName(sTranscript, 5, name);
if (stu)
{
printf("\n查找的学生信息为: ");
printf("%d %s %.1f %.1f %.1f\n", stu->iNum, stu->cName, stu->fCh, stu->fMath, stu->fEng);
}
else
{
printf("\n你要查找的学生不存在!\n");
}
return 0;
}
STUD *FindByName(STUD *stu, int N, char *name)
{
int i;
for(i=0;i<N;i++)
{
if(strcmp(stu[i].cName,name)==0)
{
return stu+i;
}
}
return NULL;
}
知识点
- 按变量和数组的情况,反推结构体的定义,注意typedef的别名使用
- 按FindByName函数调用,反推函数声明和函数定义
- 按printf格式化打印,反推结构体里的成员的类型和精度,长度等,主要是结构体的成员命名
- 按测试数据,姓名最多三个汉字,7个字节即可
- 按姓名查找,姓名是字符串,比较时,需要用库函数strcmp(name1,name2)来进行,而不是==
- 找到了,返回该学生结构的指针
- 未找到,返回NULL
- 测试时,要注意,“李云龙”前后,不要有空格