zsh669 2021-11-22 20:23 采纳率: 87.5%
浏览 29
已结题

关于结构体的程序,刚学习,可能一些写法会有问题,请求帮助

程序要求:

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就出现了问题

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-11-22 20:33
    关注

    scanf("%s",&maxnum);
    改为
    scanf("%d",&maxnum)
    仔细一看,错误很多啊。
    int num=inputScore(&s,maxnum); 第一个参数传递类型错误,&s是指针的指针啊。
    另外,inputScore参数定义的不行,s指针不能在函数内部修改指针地址,而且指向一个函数内的局部变量也是错误的
    有点千疮百孔了,还有很多错误啊......

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月1日
  • 已采纳回答 11月23日
  • 创建了问题 11月22日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀