| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1085 人关注过本帖
标题:主函数有问题,但是不知道怎么调~
只看楼主 加入收藏
hllSaturn
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2015-12-20
结帖率:62.5%
收藏
已结贴  问题点数:14 回复次数:2 
主函数有问题,但是不知道怎么调~
程序代码:
#include<stdio.h>
#define N 5
struct  student
    {
          int   num;                //学号
          char  name[20];           //姓名
          char  classname[20];      //班级      
          float  score[3];           //成绩
          double  aver_score;       
     }stu[5];

double  averagescore(struct student stu[],int number)
{
     int i;
     for(i=0;i<=number;i++)
    {
        stu[i].aver_score=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
        return stu[i].aver_score;
     }
}

int max(struct student stu[], int number)
{
  int j,k=0;
  double av;
  av=stu[0].aver_score;
  for(j=0;j<number;j++)
  {
    if(av<stu[j].aver_score)
    {
      av=stu[j].aver_score;
      k=j;
    }
    return k;
  }
}

  main()
{
    struct  student stu[N];
     int i,j;
    for(i=0;i<5;i++)
    {
        printf("请输入学生信息,按学号,姓名,班级,三门分数\n");
        scanf("%d,%s,%s,%ld,%ld,%ld",&stu[i].num,&stu[i].name,&stu[i].classname,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
    }
   for(i=0;i<5;i++)
   {
        stu[i].aver_score=averagescore(stu, N);
      
   }
       j=max(stu,N);
    
    printf("\n%-5s%-10s%-15s%-10s%-10s%-10s%-20s%\n","Num","Name","Classname","Score1","Score2","Scoare3","Averagescore");
    for(i=0;i<5;i++)
    {
        printf("%-5ld%-10s%-15s%-10.3ld%-10.3ld%-10.3ld%-20.3ld%\n",
    stu[i].num,stu[i].name,stu[i].classname,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver_score);
    }
        printf("one:%d,%s,%s,%ld,%ld,%ld",stu[j].num,stu[j].name,stu[j].classname,stu[j].score[0],stu[j].score[0],stu[j].score[0]);
}


1.学生成绩管理:有5个学生,每个学生的数据包括学号、班级、姓名、三门课成绩。从键盘输入5个学生数据,要求打印出每个学生三门课的平均成绩,以及每门课程平均分、最高分学生数据(包括学号、班级、姓名、三门课成绩,平均分)。
【实验要求】
(1) 定义学生结构体。
(2) 用一个函数实现5个学生数据的输入,用另一个函数负责求每个学生三门课程的平均成绩,再用一个函数求出平均分最高的学生并输出该学生的数据。要求平均分和平均分最高的学生数据都在主函数种输出。
2016-04-08 15:40
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:7 
程序代码:
#include <stdio.h>
#define N 5

struct  student
{
    int   num;                //学号
    char  name[20];           //姓名
    char  classname[20];      //班级      
    float score[3];           //成绩
    float aver_score;       
};

void averagescore(struct student stu[],int number)
{
    int i;
    for(i=0;i<number;i++)  //下标越界
    {
        stu[i].aver_score=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
    }
}

int max(struct student stu[], int number)
{
   int j,k=0;
   float av;
  
   av=stu[0].aver_score;
   for(j=1;j<number;j++)
   {
      if(av<stu[j].aver_score)
      {
          av=stu[j].aver_score;
          k=j;
      }
   }
  
   return k;  //位置放错
}

//你这写肯定不符合题目的要求,但结果可以出来
//float用%f输出,不是%ld
//stu[i].name本身就代表地址,不用加&
int main()
{
    struct  student stu[N];
    int i,j;
    //题目要求输入独自成一个函数
    for(i=0;i<N;i++)
    {
        printf("请输入学生信息,按学号,姓名,班级,三门分数\n");
        scanf("%d,%s,%s,%f,%f,%f",&stu[i].num,stu[i].name,stu[i].classname,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);  //错误较多
    }

    j=max(stu,N);
    
    printf("\n%-5s%-10s%-15s%-10s%-10s%-10s%-20s\n","Num","Name","Classname","Score1","Score2","Scoare3","Averagescore");
    
    for(i=0;i<N;i++)
    {
        printf("%-5f%-10s%-15s%-10.3f%-10.3f%-10.3f%-20.3f\n",stu[i].num,stu[i].name,stu[i].classname,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver_score);
    }
    //题目要求输出第一名的信息放max函数里面
    printf("one:%d,%s,%s,%.3f,%.3f,%.3f\n",stu[j].num,stu[j].name,stu[j].classname,stu[j].score[0],stu[j].score[0],stu[j].score[0]);
        
    return 0;
}


[此贴子已经被作者于2016-4-8 16:37编辑过]


   唯实惟新 至诚致志
2016-04-08 16:24
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:7 
做了些修改
#include<stdio.h>
#define N 5
struct  student
{
    int   num;                //学号
    char  name[20];           //姓名
    char  classname[20];      //班级      
    float  score[3];           //成绩
    double  aver_score;
}stu[5];

double  averagescore(float score[])
{   
        return (score[0] + score[1] + score[2]) / 3.0;    //平均算的有问题,做了改动
   
}

int max(struct student stu[], int number)
{
    int j, k = 0;
    double av;
    av = stu[0].aver_score;
    for (j = 0; j<number; j++)
    {
        if (av<stu[j].aver_score)
        {
            av = stu[j].aver_score;
            k = j;
        }        
    }
    return k;
}

main()
{
    struct  student stu[N] = {0};
    int i, j;
    for (i = 0; i<5; i++)
    {
        printf("请输入学生信息,按学号,姓名,班级,三门分数\n");
        scanf("%d %s %s %f %f %f", &stu[i].num, stu[i].name, stu[i].classname, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);//输入之间用空格隔开
    }
    for (i = 0; i<5; i++)
    {
        stu[i].aver_score = averagescore(stu[i].score);

    }
    j = max(stu, N);

    printf("\n%-5s%-10s%-15s%-10s%-10s%-10s%-20s%\n", "Num", "Name", "Classname", "Score1", "Score2", "Scoare3", "Averagescore");
    for (i = 0; i<5; i++)
    {
        printf("%-5ld%-10s%-15s%-10.3lf%-10.3lf%-10.3lf%-20.3lf%\n",
            stu[i].num, stu[i].name, stu[i].classname, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].aver_score);
    }
    printf("one:%d,%s,%s,%f,%f,%f", stu[j].num, stu[j].name, stu[j].classname, stu[j].score[0], stu[j].score[1], stu[j].score[2]);
}
2016-04-08 16:46
快速回复:主函数有问题,但是不知道怎么调~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030603 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved