| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1148 人关注过本帖
标题:老师让写了一个题,写了一段代码,但是不对 求改正!
只看楼主 加入收藏
星星碎了
Rank: 2
等 级:论坛游民
帖 子:33
专家分:10
注 册:2013-5-6
结帖率:71.43%
收藏
已结贴  问题点数:20 回复次数:13 
老师让写了一个题,写了一段代码,但是不对 求改正!
有5个学生,每个学生的数据包括学号(int)、姓名(char [10])、3门课的成绩(double[3]),
从键盘任意输入5个学生数据,要求输出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。
(要求用input函数输入5个学生数据;用average函数求总平均分;用max函数找出最高分的学生数据;总平均分和最高分学生的数据都在主函数中输出。)
    #include <stdio.h>
    double avr(struct stu []);
    void  input(struct stu []);
    double max(struct stu []);
    struct stu
    {
      int num;
      char name[10];
      double score[3];
    };
    int  main()
    {
      struct stu s[5];
      input(s);
      printf("%lf\n",avr(s));   
    return 0;
    }
    void  input(struct stu s[])
    {
      int i,j;
     for(i=0;i<5;i++)
     {   
         printf("请输入第%d个学生的学号",i+1);
         scanf("%d",&s[i].num);
         getchar();
         printf("请输入第%d个学生的姓名",i+1);
         scanf("%c",&s[i].name);
         for(j=0;j<3;j++)
         {printf("请输入第%d个学生的第%d个成绩",i+1,j+1);
         scanf("%lf",&s[i].score[j]);}
    }
    }
    double avr(struct stu s[])
    {
      int i,j;
      double sum=0;
        for(i=0;i<5;i++)
        for(j=0;j<3;j++)
        sum+=s[i].score[j];
        return sum/5;
   
    }
搜索更多相关主题的帖子: 姓名 键盘 double include average 
2013-06-04 15:14
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:0 
到目前为止没什么错误啊

C++菜鸟
2013-06-04 15:42
Exia
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-6-4
收藏
得分:0 
scanf("%c",&s[i].name);

这一行的格式改成%s,弄成字符串会好点
2013-06-04 15:48
Exia
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-6-4
收藏
得分:0 
具体是什么地方不对,最好描述一下
2013-06-04 15:51
星星碎了
Rank: 2
等 级:论坛游民
帖 子:33
专家分:10
注 册:2013-5-6
收藏
得分:0 
恩恩   但是max函数怎么写啊 !求解啊
2013-06-04 15:55
bccn新
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:57
专家分:144
注 册:2013-5-10
收藏
得分:0 
以下是引用星星碎了在2013-6-4 15:14:49的发言:

           printf("请输入第%d个学生的姓名",i+1);
         scanf("%c",&s[i].name);
把后一句改成scanf("%s",s[i].name);因为这是要输入一个字符串,而且s[i].name已经表示地址了,不需要再用取地址符&。

[ 本帖最后由 bccn新 于 2013-6-4 16:00 编辑 ]
2013-06-04 15:58
星星碎了
Rank: 2
等 级:论坛游民
帖 子:33
专家分:10
注 册:2013-5-6
收藏
得分:0 
是的   我也是刚刚察觉到的 求max函数。
2013-06-04 16:00
bccn新
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:57
专家分:144
注 册:2013-5-10
收藏
得分:0 
struct stu *max(struct stu s[])
{int k=0,i,j;float t=0,g=0;
 for(i=0;i<5;i++)
 {for(j=0;j<3;j++)
   t+=s[i].score[j];
   if(t>g)
   k=i,g=t;
 }
  return s+i;
}
这个函数返回的是总成绩最高的学生数据的首地址,输出自己写吧。
2013-06-04 16:25
华子hear
Rank: 3Rank: 3
来 自:陕西西安
等 级:论坛游侠
帖 子:57
专家分:104
注 册:2013-6-3
收藏
得分:0 
回复 6楼 bccn新
如果想用取地址符号是可以用的,不会出错。
2013-06-05 11:15
菜鸟一支
Rank: 6Rank: 6
来 自:何美杭
等 级:侠之大者
威 望:1
帖 子:121
专家分:456
注 册:2012-10-10
收藏
得分:20 
楼主你好,在你的基础上稍改了一下,改了的地方都作出了标记,可以看一下。
#include <stdio.h>
    double avr(struct stu []);
    void  input(struct stu []);
    double max(struct stu []);
    struct stu
    {
      int num;
      char name[10];
      double score[3];
    };
    int  main()
    {
      struct stu s[5];
      input(s);
      printf("总平均分:%lf\n",avr(s));
      printf("最高分学生数据:\n");
      max(s);                                    //调用max函数
    return 0;
    }
    void  input(struct stu s[])
    {
      int i,j;
     for(i=0;i<5;i++)
     {   
         printf("请输入第%d个学生的学号",i+1);
         scanf("%d",&s[i].num);        
         getchar();
         printf("请输入第%d个学生的姓名",i+1);
         scanf("%s",&s[i].name);                    // %c改成了%s        
         for(j=0;j<3;j++)
         {printf("请输入第%d个学生的第%d个成绩",i+1,j+1);
         scanf("%lf",&s[i].score[j]);}        
    }
    }
    double avr(struct stu s[])
    {
      int i,j;
      double sum=0;
        for(i=0;i<5;i++)
        for(j=0;j<3;j++)
        sum+=s[i].score[j];
        return sum/5;
   
    }
    double max(struct stu s[])            //添加了max函数
    {    double first=0,temp;
        int i,j,flag;
        for(i=0;i<5;i++)
        {    temp=0;
            for(j=0;j<3;j++)
                temp+=s[i].score[j];
            if(temp>=first)
            {first=temp;flag=i;}
        }
        printf("学号:%d\n",s[flag].num);
        printf("姓名:%s\n",s[flag].name);
        for(j=0;j<3;j++)
            printf("第%d个成绩:%lf\n",j+1,s[flag].score[j]);
        printf("平均成绩:%lf\n",(first/3));
        return 0;
    }

小弟何美杭,所发表的都仅代表个人观点,欢迎批评指正。
2013-06-05 15:45
快速回复:老师让写了一个题,写了一段代码,但是不对 求改正!
数据加载中...
 
   



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

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