| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 716 人关注过本帖
标题:请大伙们帮忙看下,到底哪错了,我想了许久实在是找不出原因,新手请见谅, ...
只看楼主 加入收藏
新人入门
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2014-9-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
请大伙们帮忙看下,到底哪错了,我想了许久实在是找不出原因,新手请见谅,十分感谢!!
           以下代码想表达的是,假如有N位学生,然后输入学生的学号,姓名,以及三名课程的成绩,再计算出三门课程的平均分,并且将平均分最高的这位同学的相当信息都输出至屏幕!

#include<stdio.h>
#define N 5   \\定义一个宏来替代学生的位数,这里例如五位学生
struct student  \\定义一个学生的结构体
 {
    char id[10];   \\学号
    char name[10]; \\姓名
     float score[3]; \\颗目
    float ave; \\平均分
 }stu[N];
void input()  \\输入学生的信息
{
    int i;
    for(i=0;i<N;i++)
    {
    printf("请输入第%d名学生的成绩\n",i+1);
    scanf("%s%s%lf%lf%lf",stu[i].id,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
   
    stu[i].ave=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
    }
}
void output() \\输出学生的信息
{
    int i;
    for(i=0;i<N;i++)
    printf("%s\t%s\t%f\t%f\t%f\t%f\n",stu[i].id,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);
}
void sortput()  \\排序取出平均分最高的学生
{
   int i,j;
   float temp;

   for(i=0;i<N;i++)

       for(j=0;j<N-i-1;j++)
       {
           if(stu[j].ave<stu[j+1].ave)
           {
           
           temp=stu[j+1].ave;
                stu[j+1].ave=stu[i].ave;
                stu[j].ave=temp;
           }
            
       }
       printf("\n%s\t%s\t%f\t%f\t%f\t%f\n",stu[i].id,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);
           
       }
       void main()   \\引用以上函数
         
       {   
            input();
           output();
           sortput();
       }
搜索更多相关主题的帖子: include 结构体 课程 三门 信息 
2014-09-25 21:05
爱river
Rank: 2
等 级:论坛游民
帖 子:1
专家分:20
注 册:2014-9-13
收藏
得分:20 
#include<stdio.h>
#define N 5   //定义一个宏来替代学生的位数,这里例如五位学生
struct student  //定义一个学生的结构体
{
    char id[10];   //学号
    char name[10]; //姓名
     float score[3]; //颗目
    float ave; //平均分
}stu[N];

void input()  //输入学生的信息
{
    int i;
    for(i=0;i<N;i++)
    {
    printf("请输入第%d名学生的成绩\n",i+1);
   
    printf("id = ");
    scanf("%s", stu[i].id );

    printf("name = ");
    scanf("%s", stu[i].name );

    printf("score : \n");
    printf("score1 = ");
    scanf("%f", &stu[i].score[0] );
    printf("score2 = ");
    scanf("%f", &stu[i].score[1] );
    printf("score3 = ");
    scanf("%f", &stu[i].score[2] );
   
    stu[i].ave=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;

    printf("ave = %f", stu[i].ave );

    printf("\n");
    }
}
void output() //输出学生的信息
{
    int i;
    for(i=0;i< N;i++)
    printf("%s\t%s\t%f\t%f\t%f\t%f\n",stu[i].id,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);
}
void sortput()  //排序取出平均分最高的学生
{
   int i,j;
   struct student temp;

   for(i=0;i<N;i++)

       for(j=0;j<N-i-1;j++)
       {
           if(stu[j].ave<stu[j+1].ave)
           {
           
                temp = stu[j];
                stu[j] = stu[j+1];
                stu[j+1] = temp;
           }
            
       }
       printf("\n%s\t%s\t%f\t%f\t%f\t%f\n",stu[0].id,stu[0].name,stu[0].score[0],stu[i].score[1],stu[0].score[2],stu[0].ave);
           
}
       void main()  //引用以上函数
         
       {   
            input();
           output();
           sortput();
       }

首先,我也是一个刚开始学C语言。我试着的探索了一下,不知道是否正确。如果有什么错误的忘指出,我们共同进步。
我觉得主要是有这以下的不适当的地方
第一:就是输入信息,既然是三科,肯定得输入三个分数。
第二:主要是取最高平均分的时候,定义的用来交换的temp类型,应该是struct student, 因为你必有得把所有信息交换,不可能只交换分数,是吧。
2014-09-25 22:21
新人入门
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2014-9-5
收藏
得分:0 
感谢你的悉心指教,关于第一个问题,用数组代替和定义三个变量是一样的效果呀,这个在编程中替换后执行结果是一样的
                      第二个问题,我也尝试过用struct student temp 但是生成时会报错,我用的是Visual C++ 6.0
2014-09-26 17:08
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:0 
简单说说:
1 scanf是不安全的,不要连续输入这么多不同类型的 它会分不清楚的
    scanf("%s%s",stu[i].id,stu[i].name);
    scanf("%f",&stu[i].score[0]);
        scanf("%f",&stu[i].score[1]);
            scanf("%f",&stu[i].score[2]);
2;排序输出有巨大的问题 i会越界 输出一个越界的值没有意义

void sortput()
{
   int i,j;
  int temp;
temp=0;
   for(i=0;i<N;i++)
     if(stu[i].ave>stu[temp].ave)
        {
           
          temp=i;
       }
            
   i=temp;

       printf("\n%s\t%s\t%f\t%f\t%f\t%f\n",stu[i].id,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);
           
       }
2014-09-26 21:02
zhoujicheng
Rank: 1
来 自:广西
等 级:新手上路
帖 子:4
专家分:9
注 册:2014-9-26
收藏
得分:0 
你们平时看的是不是《21天学通c语言》这本书?
2014-09-26 21:56
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 楼主 新人入门
出现了中文字符   注释时可能粗心吧应该是"//"而不是"\\",
你把所有的“\\”改成“//”就不报错了
2014-09-26 23:12
快速回复:请大伙们帮忙看下,到底哪错了,我想了许久实在是找不出原因,新手请见 ...
数据加载中...
 
   



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

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