标题:散分求助,关于函数调用
只看楼主
纯情小郎君
Rank: 2
等 级:论坛游民
帖 子:84
专家分:80
注 册:2011-12-12
结帖率:100%
已结贴  问题点数:20 回复次数:10 
散分求助,关于函数调用
原题:有五个学生,每个学生的数据包括学号,姓名,3门课程的成绩,从键盘输入5个学生数据,要求打印出3门课的总平均分,已经最高分的学生的数据,要求用input函数
输入,用average函数求平均分,用max函数找出最高分的学生的数据;总平均分和最高分学生数据都在主函数中输出。
下面是我编的代码,无错误,可以求出总平均分,但是求最高分学生的数据有误
程序代码:
#include<stdio.h>
void input(int*a);
void average(int*a);
void max(int*a);
typedef struct data
{
    long unsigned id;
    char name[20];
    double gre1;
    double gre2;
    double gre3;
    double sum;
}dt;
void input(dt *a)
{ 
    int i;
    for(i=0;i<5;i++)
    {
        scanf("%lu%s%lf%lf%lf",&a[i].id,&a[i].name,&a[i].gre1,&a[i].gre2,&a[i].gre3);
    }
}
void average(dt *a)
{
    int i;
    double sum=0,average=0;
    for(i=0;i<5;i++)
    {
    sum=a[i].gre1+a[i].gre2+a[i].gre3;
    }
    average=sum/5;
    printf("%.2lf\n",average);
}
void max(dt *a)
{
    int k;
    double max;
    max=a[0].sum;
    for(k=0;k<5;k++)
    {
        if(max<a[k].sum)
        max=k;
    }
    printf("%lu%s%.2lf%.2lf%.2lf\n",a[k].id,a[k].name,a[k].gre1,a[k].gre2,a[k].gre3);
}
int main()
{
    dt a[5];
    input(a);
    average(a);
    max(a);
    return 0;

}
    
搜索更多相关主题的帖子: average 函数 数据 课程 
2012-03-05 21:05
纯情小郎君
Rank: 2
等 级:论坛游民
帖 子:84
专家分:80
注 册:2011-12-12
得分:0 
不是嫌分少吧?木有人的啊

老师说,2B是通向梦想的第一步
2012-03-05 21:22
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
可爱的小女孩   鉴于你的头像非常可爱  这个简单的问题还是交给你自己解决吧

                                         
===========深入<----------------->浅出============
2012-03-05 21:24
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
得分:0 
找个人教教你单步调试

技术问题,请不要以短消息方式提问
2012-03-05 21:27
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:5 
for(i=0;i<5;i++)
    {
    sum=a[i].gre1+a[i].gre2+a[i].gre3;  
    }
 average=sum/5;//  而且貌似求得的平均值只能是最后一个结构体的吧。

int k j; // 辅助变量存放下标
    double max;
    max=a[0].sum;     // max关系着结构体元素 用去标志下标吗?
    for(k=0;k<5;k++)
    {
        if(max<a[k].sum)
         j = k;   // ^^^^
     }
    printf("%lu%s%.2lf%.2lf%.2lf\n",a[j].id,a[j].name,a[j].gre1,a[j].gre2,a[j].gre3);  // k是循环变量 不是下标标志 换成j


梅尚程荀
马谭杨奚







                                                       
2012-03-05 21:28
纯情小郎君
Rank: 2
等 级:论坛游民
帖 子:84
专家分:80
注 册:2011-12-12
得分:0 
回复 3楼 laoyang103
不是吧?老杨大哥,您这话真是让我蛋疼啊,我找了很久了也找不出哪里的问题,差点就成深闺怨男了
注:我可是投了您神圣的一票啊!

老师说,2B是通向梦想的第一步
2012-03-05 21:30
纯情小郎君
Rank: 2
等 级:论坛游民
帖 子:84
专家分:80
注 册:2011-12-12
得分:0 
回复 5楼 有容就大
好像不行啊,max=a[0].sum是把结构数组的第一个和sum赋给max,把j取代max后输出第二个结果时直接停止运行了

老师说,2B是通向梦想的第一步
2012-03-05 21:52
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
{
        if(max<a[k].sum)
       {
         max = a[k].sum;
         j = k;   // ^^^^
       }
     }
漏写了个赋值。

梅尚程荀
马谭杨奚







                                                       
2012-03-05 21:56
纯情小郎君
Rank: 2
等 级:论坛游民
帖 子:84
专家分:80
注 册:2011-12-12
得分:0 
回复 8楼 有容就大
还是不行呢,我再重新编过一次看看,稍微有点纠结了

老师说,2B是通向梦想的第一步
2012-03-05 23:12
luchar
Rank: 9Rank: 9Rank: 9
来 自:南京
等 级:蜘蛛侠
帖 子:279
专家分:1263
注 册:2011-11-3
得分:15 
帮你改了下,自己对比下吧,至少能正确运行了,还有些小问题,自己改改吧
程序代码:
#include<stdio.h>
void input(int*a);
void average(int*a);
void max(int*a);
typedef struct data
{
    long unsigned id;
    char name[20];
    double gre1;
    double gre2;
    double gre3;
    double sum;
}dt;
void input(dt *a)
{ 
    int i;
    printf("please input id,name and gres:\n");
    for(i=0;i<5;i++)
    {
        scanf("%lu%s%lf%lf%lf",&a[i].id,&a[i].name,&a[i].gre1,&a[i].gre2,&a[i].gre3);
    }
}
void average(dt *a)
{
    int i;
    double sum=0,average=0;
    printf("id   average\n");
    for(i=0;i<5;i++)
    {
    a[i].sum=a[i].gre1+a[i].gre2+a[i].gre3;
    
    average=a[i].sum/5;
    printf("%d  %.2lf\n",i+1,average);
    }
}
void max(dt *a)
{
    int j=0,k;
    double max;
    max=a[0].sum;
    printf("得分最高的人\n");
    for(k=0;k<5;k++)
    {
        if(max<a[k].sum)
        {
            max=a[k].sum;
            j=k;
        }
    }
    printf("%lu %s %.2lf %.2lf %.2lf\n",a[j].id,a[j].name,a[j].gre1,a[j].gre2,a[j].gre3);
}
int main()
{
    dt a[5];
    input(a);
    average(a);
    max(a);
    return 0;

}
2012-03-05 23:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-362294-1-1.html




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

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