| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 609 人关注过本帖
标题:结构体问题,自知有很多错误,求各位帮忙找一下
只看楼主 加入收藏
地方黑发
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-12-6
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:9 
结构体问题,自知有很多错误,求各位帮忙找一下
//定义10个学生的数据(包括学号、姓名、年龄、性别、语文成绩、数学成绩、英语成绩),要求:
//1.输出每个学生的三科平均成绩;
//2.分别输出单科最高分的学生的信息;
//3.依据数学单科成绩对学生进行排序,按从高到低的顺序输出学生信息;
//4.统计英语成绩超过90分的学生人数,分别输出其中的男生人数和女生人数。

#include <stdio.h>
#define N 10
struct student
 {int num;
  char name[20];
  int age;
  char sex;
  float score[3];
  float aver;
 };

int main()
 {void input(struct student stu[]);
  struct student max1(struct student stu[]);
  void print(struct student stu);
  struct student max2(struct student stu[]);
  struct student chao(struct student stu[]);
  struct student stu[N],*p=stu;
  input(p);
  print(max1(p));
  print(max2(p));
  chao(p);
  return 0;
 }

void input(struct student stu[])//输入信息并求平均值
  {int i;
   printf("请输入各学生的信息:学号、姓名、年龄、性别、三门课成绩:\n");
   for(i=0;i<N;i++)
   {scanf("%d %s %d %s %f %f %f",&stu[i].num,stu[i].name,
           &stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
    stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
   }
  }

struct student max1(struct student stu[])//求三科成绩最高的人
{int i,j,t1,t2,t3,i1,i2,i3;
    for(j=0;j<N;j++)
     for(i=0;i<N-j;i++)
       if(stu[i].score[0]>stu[i+1].score[0])
         {t1=stu[i].score[0];stu[i].score[0]=stu[i+1].score[0];stu[i+1].score[0]=t1;}i=i1;
       if(stu[i].score[1]>stu[i+1].score[1])
         {t2=stu[i].score[1];stu[i].score[1]=stu[i+1].score[1];stu[i+1].score[1]=t2;}i=i2;
       if(stu[i].score[2]>stu[i+1].score[2])
         {t3=stu[i].score[2];stu[i].score[2]=stu[i+1].score[2];stu[i+1].score[2]=t3;}i=i3;
  return stu[i1];stu[i2];stu[i3];
}

struct student max2(struct student stu[])//求数学并顺序输出
{int i,j,t,k;
    for(j=0;j<N;j++)
     for(i=0;i<N-j;i++)
      if(stu[i].score[1]>stu[i].score[1])
      {t=stu[i].score[1];stu[i].score[1]=stu[i+1].score[1];stu[i+1].score[1]=t;}
      i=k;
      for(k=0;k<N;k++)
 return stu[k];
}
struct student chao(struct student stu[])
{int i,j,t;
    for(j=0;j<9;j++)
     for(i=0;i<9-j;i++)
       if(stu[i].score[1]>stu[i+1].score[1])
         {t=stu[i].score[2];stu[i].score[2]=stu[i+1].score[2];stu[i+1].score[2]=t;}
    for(i=0;i<10;i++)
 return stu[i];
}   
void print(struct student stu)
 {  printf("\n成绩最高的学生是:\n");
    printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",
      stu.num,stu.name,stu.age,stu.sex,stu.score[0],stu.score[1],stu.score[2],stu.aver);
 }
搜索更多相关主题的帖子: 英语成绩 include 结构体 数学 统计 
2013-12-06 17:56
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:0 
哪里有错?不会是让一行一行看啊》?

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2013-12-06 17:57
BlackTrace
Rank: 2
等 级:论坛游民
帖 子:16
专家分:22
注 册:2013-12-5
收藏
得分:0 
能把那些排一下版,看着很痛苦
2013-12-06 18:02
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
还真没看仔细   不好意思

[ 本帖最后由 韶志 于 2013-12-6 21:08 编辑 ]

三十年河东,三十年河西,莫欺少年穷!
2013-12-06 20:15
地方黑发
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-12-6
收藏
得分:0 
我一运行,电脑就告诉我出问题了,我这也没办法
那谁能告诉我,一个函数里如何输出三个结果
就像我程序的《求三科成绩最高的人》那个函数一样
2013-12-07 16:19
ytlcainiao
Rank: 2
等 级:论坛游民
帖 子:48
专家分:74
注 册:2013-11-28
收藏
得分:0 
return stu[i1];stu[i2];stu[i3];返回三个结果,实在没见过
2013-12-07 16:53
ytlcainiao
Rank: 2
等 级:论坛游民
帖 子:48
专家分:74
注 册:2013-11-28
收藏
得分:0 
咋一看错误实在太多,单就返回值来讲。
2013-12-07 16:53
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
你这数据定义,函数调用,传参等都有问题啊,好好看看书吧
我给你写了一个,3个学生,你看看,看懂就好
#include <stdio.h>
#define N 3
struct student
{
    int num;
    char name[20];
    int age;
    char sex;
    float score[3];
    float aver;
}stu[N];
void input();
void print_aver();
void print_f();
void print_max();
void print_order_Math();
void print_E90_mn();
int main()
{
    printf("******输入学生信息***********************************************************\n");
    input();
    printf("******1.输出每个学生的三科平均成绩*******************************************\n");
    print_aver();
    printf("******2.分别输出单科最高分的学生的信息***************************************\n");
    print_max();
    printf("******3.依据数学单科成绩对学生进行排序,按从高到低的顺序输出学生信息*********\n");
    print_order_Math();
    printf("******4.统计英语成绩超过90分的学生人数,分别输出其中的男生人数和女生人数*****\n");
    print_E90_mn();
    printf("*****************************************************************************\n");
    return 0;
}
void input()
{
    int i;

    printf("请输入%d个学生的信息:学号 姓名 年龄 性别(男m女n) 三门课成绩(语文,数学,英语):\n",N);
    for(i=0;i<N;i++)
    {
       scanf("%d %s %d %c %f %f %f",
           &stu[i].num,
           stu[i].name,
           &stu[i].age,
           &stu[i].sex,
           &stu[i].score[0],
           &stu[i].score[1],
           &stu[i].score[2]);
       stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
    }
}
void print_f()
{
    int i;

    for(i=0;i<N;i++)
    {
        printf("-------------------------------------\n");
        printf("学生%d:\n",i);
        printf("学号:%d\n姓名:%s\n年龄:%d\n性别:%c\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",
             stu[i].num,
             stu[i].name,
             stu[i].age,
             stu[i].sex,
             stu[i].score[0],
             stu[i].score[1],
             stu[i].score[2],
             stu[i].aver);
    }
}
void print_aver()
{
    int i;

    for(i=0;i<N;i++)
    {
        printf("-------------------------------------\n");
        printf("学生%d:\n",i+1);
        printf("学号:%d\n姓名:%s\n平均成绩:%6.2f\n",
             stu[i].num,
             stu[i].name,
             stu[i].aver);
    }
}
void print_max()
{
    int i,x1=0,x2=0,x3=0;
    float max_Chinese=stu[0].score[0];
    float max_Math=stu[0].score[1];
    float max_English=stu[0].score[2];

    for(i=1;i<N;i++)
    {
        if(max_Chinese<stu[i].score[0])
        {
            max_Chinese=stu[i].score[0];
            x1=i;
        }
        if(max_Math<stu[i].score[1])
        {
            max_Math=stu[i].score[1];
            x2=i;
        }
        if(max_English<stu[i].score[2])
        {
            max_English=stu[i].score[2];
            x3=i;
        }
    }
    printf("-------------------------------------\n");
    printf("语文最高分学生信息:\n");
    printf("学号:%d\n姓名:%s\n年龄:%d\n性别:%c\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",
             stu[x1].num,
             stu[x1].name,
             stu[x1].age,
             stu[x1].sex,
             stu[x1].score[0],
             stu[x1].score[1],
             stu[x1].score[2],
             stu[x1].aver);
    printf("-------------------------------------\n");
    printf("数学最高分学生信息:\n");
    printf("学号:%d\n姓名:%s\n年龄:%d\n性别:%c\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",
             stu[x2].num,
             stu[x2].name,
             stu[x2].age,
             stu[x2].sex,
             stu[x2].score[0],
             stu[x2].score[1],
             stu[x2].score[2],
             stu[x2].aver);
    printf("-------------------------------------\n");
    printf("英语最高分学生信息:\n");
    printf("学号:%d\n姓名:%s\n年龄:%d\n性别:%c\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",
             stu[x3].num,
             stu[x3].name,
             stu[x3].age,
             stu[x3].sex,
             stu[x3].score[0],
             stu[x3].score[1],
             stu[x3].score[2],
             stu[x3].aver);
}
void print_order_Math()
{
    int i,j;
    struct student tmp;

    for(i=0;i<N-1;i++)
    for(j=i;j<N;j++)
    {
        if(stu[i].score[1]<stu[j].score[1])
        {
            tmp=stu[i];
            stu[i]=stu[j];
            stu[j]=tmp;
        }
    }
    for(i=0;i<N;i++)
    {
        printf("-------------------------------------\n");
        printf("学号:%d\n姓名:%s\n年龄:%d\n性别:%c\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",
             stu[i].num,
             stu[i].name,
             stu[i].age,
             stu[i].sex,
             stu[i].score[0],
             stu[i].score[1],
             stu[i].score[2],
             stu[i].aver);
    }
}
void print_E90_mn()
{
    int i,num_m=0,num_n=0;

    for(i=0;i<N;i++)
    {
        if(stu[i].score[2]>90)
        {
            if(stu[i].sex=='m')
                num_m++;
            if(stu[i].sex=='n')
                num_n++;
        }
    }
    printf("英语超过90分有%d人\n",num_m+num_n);
    printf("其中男生%d人\n",num_m);
    printf("其中女生%d人\n",num_n);
}
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

小小战士,战士中的战斗机!
2013-12-07 18:23
地方黑发
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-12-6
收藏
得分:0 
非常感谢你很耐心的看了一遍,我在发表之后也改了自己的程序,不过只能做到软件不报错,一运行就出错这种程度。
  for(i=0;i<N;i++)
    {
       scanf("%d %s %d %c %f %f %f",
           &stu[i].num,
           stu[i].name,//地址???
           &stu[i].age,
           &stu[i].sex,
           &stu[i].score[0],
           &stu[i].score[1],
           &stu[i].score[2]);
可以告诉我为什么这地方可以不用加地址
2013-12-08 11:16
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:20 
回复 9楼 地方黑发
stu[i].name为数组,数组名就是该数组的地址,也是数组元素的首地址

整形、字符型等变量,只是一个变量名,加&就是这个变量存储的内存地址

好了,认识了这些,那么当scanf输入时,要将输入的内容存放在内存中,需要内存地址,变量就要加&,数组就不需要加了

[ 本帖最后由 小小战士 于 2013-12-8 12:10 编辑 ]

小小战士,战士中的战斗机!
2013-12-08 12:09
快速回复:结构体问题,自知有很多错误,求各位帮忙找一下
数据加载中...
 
   



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

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