程序要求:
a) 用结构体定义以下学生信息,结构体名:struct student
学号、姓名和成绩 (包括3门课程的成绩,可用一个数组表示);
b) 编写函数来用键盘输入所有学生的信息/inputScore
原型:int inputScore(struct student *s, int maxnum);
输入:struct student *s; 结构体指针
int maxnum; 系统允许输入的最大的学生数量
返回:实际输入的学生人数
提示:先输入学生数量(不允许超出maxnum),然后输入每一个学生信息
c) 编写函数输出一个学生的所有信息/printScore
原型:void printScore(struct student *s);
输入:struct student *s; 结构体指针
返回:无
d) 编写学生信息排序函数,对学生信息按姓名排序/sortScore
原型:void sortScore(struct student *s, int n);
输入:struct student *s; 结构体指针
int n; 需排序的个数
返回:无
提示:姓名的比较,需要使用strcmp函数
e) 编写二分查找函数,根据姓名查找学生
f) 编写主函数
定义结构体变量数组(局部变量);
调用inputScore函数,从键盘获得学生信息,以及学生个数;
调用sortScore函数,对学生信息排序;
用for循环,输出每个学生的所有信息,使用printScore函数
输入学生姓名,查找相应的成绩
#include<stdio.h>
#include<string.h>
struct student{
int ID;
char name[10];
int grade[3];
};
//键入所有学生信息
int inputScore(struct student* s,int maxnum)
{
int i=0,k=0,num;
scanf("%d",&num);
struct student a[10];
for(i=0;i<num;i++){
scanf("%d%s",&a[i].ID,&a[i].name);
for(k=0;k<3;k++){
scanf("%d",&a[i].grade[k]);
}
if(i>maxnum-1){
break;
}
}
s=a;
return num;
}
void printScore(struct student *s){
int i,k;
struct student a[10];
s=a;
for(i=0;a[i].name!=0;i++){
printf("%d,%s",a[i].ID,a[i].name);
for(k=0;k<3;k++){
printf("%d",a[i].grade[k]);
}
printf("\n");
}
}
//从小到大
void sortScore(struct student *s,int n)
{
int i,j,k;
struct student *t;
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
k=strcmp((s+i)->name,(s+j)->name);
if(k>0){
*t=*(s+i);
*(s+i)=*(s+j);
*(s+j)=*t;
}
}
}
}
int bsearch(struct student *s,int n,char name[])
{
int max=n-1,min=0,mid=(max+min)/2;
int i=0,k,rank;
for(i=0;i<=max;i++){
k=strcmp(name,(s+mid)->name);
if(k==0){
rank=mid;
}
if(k>0){
min=mid;
}
if(k<0){
max=mid;
}
}
return rank;
}
int main()
{
struct student *s;
int maxnum;
scanf("%s",&maxnum);
int num=inputScore(&s,maxnum);
printScore(&s);
sortScore(s,num);
char name[10];
scanf("%s",name);
int rank=bsearch(s,num,name);
printf("%d",(s+rank)->grade);
return 0;
}
从printScore就出现了问题