| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1830 人关注过本帖
标题:学生成绩,结构体问题
只看楼主 加入收藏
平凡の嫩嫩鼻
Rank: 2
来 自:郑州
等 级:论坛游民
帖 子:20
专家分:17
注 册:2010-6-8
收藏
得分:0 
/*编写程序处理10个学生的信息,每个学生的信息包括:学号、姓名、三门成绩。
要求从键盘输入学生的数据用一个函数实现,输出成绩表(包括每个学生的学号、姓名、三门成绩及平均分数)
用一个函数,再用一个函数输出平均分在前3名的学生姓名及平均分。
*/
#include<stdio.h>
#define N 10
struct student
{
    int xuehao;
    char xingming[20];
    float chengji1;
    float chengji2;
    float chengji3;
};
struct pj
{
    float pingjun;
};

int main()
{
    struct student data[N];
    struct pj chengji[N];
    int i,j;
    float m1=0,m2=0,m3=0,p;
    printf("输入学生学号、姓名、语文成绩、数学成绩、英语成绩:\n");
    for(i=0;i<N;i++)
        scanf("%d %s %f %f %f",&data[i].xuehao,&data[i].xingming,
                               &data[i].chengji1,&data[i].chengji2,&data[i].chengji3);
    printf("---------------------------------------------------------\n");
    printf("输出学生学号、姓名、三门成绩及平均分数:\n");
    for(j=0;j<N;j++)
    {   
        chengji[j].pingjun=(data[j].chengji1+data[j].chengji2+data[j].chengji3)/3;
        printf("学号:%d 姓名:%s 成绩:%-3.1f %-3.1f %-3.1f  平均分数:%-3.1f\n",data[j].xuehao,data[j].xingming,
                               data[j].chengji1,data[j].chengji2,data[j].chengji3,chengji[j].pingjun);
    }                           

    for(i=0;i<N;i++)
     {
      for(j=0;j<N-i-1;j++)
      {
      if(chengji[j].pingjun<chengji[j+1].pingjun)
      {
         p=chengji[j].pingjun;
         chengji[j].pingjun=chengji[j+1].pingjun;
         chengji[j+1].pingjun=p;
      }
      }
  }
    printf("\n\n");
for(i=0;i<3;i++)
      printf("第%d名的姓名:%s  平均成绩:%-3.1f\n",i+1,data[i].xingming,chengji[i].pingjun);


}

2010-06-09 02:13
指尖
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-6-8
收藏
得分:0 
       #include"stdio.h"
struct STUDENT
{
    char name[10];
    int cord;
    int score1;      
    int score2;
    int score3;
    float avg;
};

void main()
{
    int i,j;
    float t;
struct STUDENT student[10];
    printf("请输入学生学号 姓名 线性代数  数学分数 C语言分数:\n");
for(i=0;i<10;i++)
{

scanf("%d %s %d %d %d",&student[i].cord,&student[i].name,&student[i].score1,&student[i].score2,&student[i].score3);
    student[i].avg=1.0*((student[i].score1+student[i].score2+student[i].score3)/3);

}
for(i=0;i<10;i++)
{
printf("结果为:学生学号 姓名  线性代数   数学分数 c语言分数 平均分\n");
printf("             %d   %s       %d        %d      %d      %f\n",student[i].cord,student[i].name,student[i].score1,student[i].score2,student[i].score3,student[i].avg);
}
for(i=0;i<10;i++)
     {
      for(j=0;j<9-i;j++)
      {
      if(student[j].avg<student[j+1].avg)
      {
         t=student[j].avg;
         student[j].avg=student[j+1].avg;
         student[j+1].avg=t;
      }
      }
  }
    printf("\n\n");
for(i=0;i<3;i++)
      printf("第%d名的姓名:%s  平均成绩:%-3.1f\n",i+1,student[i].name,student[i].avg);


}
这个程序运行后得不到题目要求的结果,拜托大家帮改哈,谢啦!!!
题目是:编写程序处理10个学生的信息,每个学生的信息包括:学号、姓名、三门成绩。要求从键盘输入学生的数据用一个函数实现,输出成绩表(包括每个学生的学号、姓名、三门成绩及平均分数)用一个函数,再用一个函数输出平均分在前3名的学生的学生姓名和平均分。
2010-06-09 16:03
平凡の嫩嫩鼻
Rank: 2
来 自:郑州
等 级:论坛游民
帖 子:20
专家分:17
注 册:2010-6-8
收藏
得分:0 
/*编写程序处理10个学生的信息,每个学生的信息包括:学号、姓名、三门成绩。
要求从键盘输入学生的数据用一个函数实现,输出成绩表(包括每个学生的学号、姓名、三门成绩及平均分数)
用一个函数,再用一个函数输出平均分在前3名的学生姓名及平均分。
*/
#include<stdio.h>
#define N 10
struct student
{
    int xuehao;
    char xingming[20];
    float chengji1;
    float chengji2;
    float chengji3;
};
struct pj
{
    float pingjun;
};

int main()
{
    struct student data[N];
    struct pj chengji[N];
    int i,j;
    float m1=0,m2=0,m3=0,p;
    char *q[20];
    printf("输入学生学号、姓名、语文成绩、数学成绩、英语成绩:\n");
    for(i=0;i<N;i++)
        scanf("%d %s %f %f %f",&data[i].xuehao,&data[i].xingming,
                               &data[i].chengji1,&data[i].chengji2,&data[i].chengji3);
    printf("---------------------------------------------------------\n");
    printf("输出学生学号、姓名、三门成绩及平均分数:\n");
    for(j=0;j<N;j++)
    {   
        chengji[j].pingjun=(data[j].chengji1+data[j].chengji2+data[j].chengji3)/3;
        printf("学号:%d 姓名:%s 成绩:%-3.1f %-3.1f %-3.1f  平均分数:%-3.1f\n",data[j].xuehao,data[j].xingming,
                               data[j].chengji1,data[j].chengji2,data[j].chengji3,chengji[j].pingjun);
    }                           

    for(i=0;i<N;i++)
     {
      for(j=0;j<N-i-1;j++)
      {
      if(chengji[j].pingjun<chengji[j+1].pingjun)
      {
         p=chengji[j].pingjun;
         chengji[j].pingjun=chengji[j+1].pingjun;
         chengji[j+1].pingjun=p;
         *q=*data[j].xingming;
         *data[j].xingming=*data[j+1].xingming;
         *data[j+1].xingming=*q;
      }
      }
  }
    printf("\n\n");
for(i=0;i<3;i++)
      printf("第%d名的姓名:%s  平均成绩:%-3.1f\n",i+1,data[i].xingming,chengji[i].pingjun);


}

2010-06-09 21:19
平凡の嫩嫩鼻
Rank: 2
来 自:郑州
等 级:论坛游民
帖 子:20
专家分:17
注 册:2010-6-8
收藏
得分:0 
昨天太晚没仔细看运行结果、、、
  我调你的了、不着咋回事、弄不出来、先看看我的吧、、、希望给你有启发、、、
2010-06-09 21:22
平凡の嫩嫩鼻
Rank: 2
来 自:郑州
等 级:论坛游民
帖 子:20
专家分:17
注 册:2010-6-8
收藏
得分:0 
       #include<stdio.h>
struct STUDENT
{
    char name[10];
    int cord;
    int score1;      
    int score2;
    int score3;
    float avg;
};

void main()
{
    int i,j;
    float t;
    char r[20];
struct STUDENT student[10];
    printf("请输入学生学号 姓名 线性代数  数学分数 C语言分数:\n");
for(i=0;i<10;i++)
{

scanf("%d %s %d %d %d",&student[i].cord,&student[i].name,&student[i].score1,&student[i].score2,&student[i].score3);
    student[i].avg=1.0*((student[i].score1+student[i].score2+student[i].score3)/3);

}
for(i=0;i<10;i++)
{
printf("结果为:学生学号 姓名  线性代数   数学分数 c语言分数 平均分\n");
printf("             %d   %s       %d        %d      %d      %f\n",student[i].cord,student[i].name,student[i].score1,student[i].score2,student[i].score3,student[i].avg);
}
for(i=0;i<10;i++)
     {
      for(j=0;j<9-i;j++)
      {
      if(student[j].avg<student[j+1].avg)
      {
         t=student[j].avg;
         student[j].avg=student[j+1].avg;
         student[j+1].avg=t;
         r[20]=*student[j].name;
         *student[j].name=*student[j+1].name;
         *student[j+1].name=r[20];
      }
      }
  }
    printf("\n\n");
for(i=0;i<3;i++)
      printf("第%d名的姓名:%s  平均成绩:%-3.1f\n",i+1,student[i].name,student[i].avg);


}
2010-06-09 21:31
平凡の嫩嫩鼻
Rank: 2
来 自:郑州
等 级:论坛游民
帖 子:20
专家分:17
注 册:2010-6-8
收藏
得分:0 
上面的是你的、
  我又弄了一下、弄好的、  你试试?
2010-06-09 21:32
指尖
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-6-8
收藏
得分:0 
太感谢啦!!!
2010-06-09 23:05
halababy
Rank: 2
等 级:论坛游民
帖 子:5
专家分:15
注 册:2010-6-9
收藏
得分:5 
电脑上没编译器,思路大致这样吧,你自己调试下,最好是别用全局的,本来想定义一个局部用指针传递参数的,老婆催睡觉了,要不一会拧耳朵
#include <stdio.h>
struct STUDENT  /定义结构体/
{
    char name[10];///结构体变量
    int cord;
    int score1;      
    int score2;
    int score3;
    float avg;
}stu[10];
void input()
{
    for(int i=0;i<10;i++)
    {
        printf("请输入学生学号 姓名 线性代数  数学分数 C语言分数:\n");
        scanf("%d %s %d %d %d",&student[i].cord,&student[i].name,&student[i].score1,&student[i].score2,&student[i].score3);
    }
}

void output()
{
    for(int i=0;i<3;i++)
    {
    printf("结果为:学生学号 姓名  线性代数   数学分数 c语言分数 平均分\n");
    printf("           %d    %s       %d        %d      %d       %f\n",student[i].cord,student[i].name,student[i].score1,student[i].score2,student[i].score3,student[i].avg);
    }
}

//选择排序,只要求输出前3个,我就只排了前3个,要求全部排的话把红色的改成9吧!
void sort()
{
    struct STUDENT temp;
    for (int i=0; i<3; i++)
    {
        for (int j=i+1; j < 10; j++)
        {
            if (stu[i].avg < stu[j].avg)
            {
                temp = stu[i];
                stu[i] = stu[j];
                stu[j] = temp;
            }
        }
    }
}

void main()
{
    input(student[10]);
    sort(student[10]);
    output(student[10]);
}
2010-06-09 23:06
halababy
Rank: 2
等 级:论坛游民
帖 子:5
专家分:15
注 册:2010-6-9
收藏
得分:0 
修改下,函数调用错了
#include <stdio.h>
struct STUDENT  /定义结构体/
{
    char name[10];///结构体变量
    int cord;
    int score1;      
    int score2;
    int score3;
    float avg;
}stu[10];
void input()
{
    for(int i=0;i<10;i++)
    {
        printf("请输入学生学号 姓名 线性代数  数学分数 C语言分数:\n");
        scanf("%d %s %d %d %d",&student[i].cord,&student[i].name,&student[i].score1,&student[i].score2,&student[i].score3);
    }
}

void output()
{
    for(int i=0;i<3;i++)
    {
    printf("结果为:学生学号 姓名  线性代数   数学分数 c语言分数 平均分\n");
    printf("           %d    %s       %d        %d      %d       %f\n",student[i].cord,student[i].name,student[i].score1,student[i].score2,student[i].score3,student[i].avg);
    }
}

//选择排序,只要求输出前3个,我就只排了前3个,要求全部排的话把红色的改成9吧!
void sort()
{
    struct STUDENT temp;
    for (int i=0; i<3; i++)
    {
        for (int j=i+1; j < 10; j++)
        {
            if (stu[i].avg < stu[j].avg)
            {
                temp = stu[i];
                stu[i] = stu[j];
                stu[j] = temp;
            }
        }
    }
}

void main()
{
    input();
    sort();
    output();
}
2010-06-09 23:08
指尖
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-6-8
收藏
得分:0 
谢谢大家热心的帮助,问题解决啦!!!
2010-06-09 23:16
快速回复:学生成绩,结构体问题
数据加载中...
 
   



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

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