| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1225 人关注过本帖
标题:结构体数组,定义第一个函数时候就有错误,有好多错。。。
只看楼主 加入收藏
c语言总虐我
Rank: 2
等 级:论坛游民
帖 子:112
专家分:66
注 册:2014-11-22
结帖率:91.67%
收藏
已结贴  问题点数:34 回复次数:13 
结构体数组,定义第一个函数时候就有错误,有好多错。。。
觉得写的好乱,写到后面都快写哭了,实在写不下去了,磨叽快一天了。。。成绩排名次
 (学了结构体数组,没学过指针)
某班期末考试科目为数学 (MT) 、 英语 (EN)和物理(PH) ,有最多不超过 30 人参加考试, 学号可以用输入的序号代替。考试后要求:1)计算每个学生的总分和平均分;(2)按总分成绩由高到低排出成绩的名次;(3)打印出名次表,表格内包括学生编号、各科分数、 总分和平均分;(4)任意输入一个学号, 能够查找出该学生在班级中的排名及其考试分数。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct grade
{
    int num;
    double MT,EN,PH;
    double sum;
    double ave;
};

/*功能:输入学生的学号及三门成绩;
参数:定义结构体数组stu[],n代表学生人数
无返回值*/
void input(grade stu[],int n)
{
    int i;
    for(i=0;i<n;++i)
    {
        scanf("%d",&stu[i].num);
        scanf("%lf",&stu[i].MT,&stu[i].EN,&stu[i].PH);
    }
}
/*功能:计算学生的总分及均分
参数:结构体数组stu[],sum总分,Ave均分
*/
void getsa(grade stu[],int n)
{
    int i;
    for(i=0;i<n;++i)
    {
        stu[i].sum=stu[i].MT+stu[i].EN+stu[i].PH;
        stu[i].ave=stu[i].sum/3;
    }
}
/*功能:按总分的成绩由高到低排列序号
参数:结构体数组stu[],n为学生人数
*/
void sort(grade stu[],int n)
{
    int i,j,k,why;
    for(i=0;i<n-1;++i)
    {
        for(j=1;j<n;++j)
        {
            k=i;
            if(stu[k].sum<stu[j].sum)
            {
                j=k;
            }
            if(k!=i)
            {
                why=stu[i];
                stu[i]=stu[k];
                stu[k]=why;
            }
        }
    }
}
/*功能:打印出名次表,包括学号,三门成绩,总分及均分
参数:结构体数组stu[],n为学生人数。
*/
void line(grade stu[],int n)
{
    int i;
    printf("学号   MT   EN   PH   sum   ave");
    for(i=0;i<n;++i)
    {
        printf("%d",&stu[i].num);
        printf("%.2lf%.2lf%.2lf",&stu[i].MT,&stu[i].EN,&stu[i].PH);
        printf("%.2lf",&stu[i].sum);
        printf("%.2lf",&stu[i].ave);
    }
}
/*功能:输入一个学生的学号,能找出这个人的信息
参数:结构体数组stu[],n代表学生人数,x表示学号
*/
int search(grade stu[],int n,int x)
{
    int i;
    for(i=0;i<n;++i)
    {
        if(stu[i]==x)
            return i;
    }
    return -1;
}

int main()
{
    int n,number,x;
    grade stu[30];
    printf("输入参加考试的学生人数:");/*输入考试人数*/
    scanf("%d",&n);

    printf("输入学号和学生成绩MT,EG,MT:");/*输入学生学号及成绩*/
    input(stu,n);

    getsa(stu,n);/*计算总分及均分*/
    printf("");

    sort(stu,n);/*排名次*/

/*就是那些函数吧,我不知道怎么办了。。。。。这里写的想哭。。。*/


    printf("请输入你要查询的学号;");/*输入学号查信息*/
    scanf("%d",&x);
    number=search(stu,n,x);
    if(number!=-1)
    {
        printf("num\t   MT\t   EG\t   PH\t   sum\t   ave\t\n");
        printf("%d%lf%lf%lf%lf%lf",1+number,stu[number].MT,stu[number].PH,stu[number].sum,stu[number].ave);
    }
    system("pause");
    return 0;
}
搜索更多相关主题的帖子: include 考试科目 结构体 英语 数学 
2014-11-30 18:33
liao06550107
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:111
专家分:696
注 册:2011-10-2
收藏
得分:5 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct grade
{
    int num;
    // double MT,EN,PH;//修改
    double cousres[3]; //存储分别为数学,英语,物理
    double sum;
    double ave;
};

/*功能:输入学生的学号及三门成绩;
  参数:定义结构体数组stu[],n代表学生人数
  无返回值*/
void input(struct grade stu[],int n)//修改
{
    int i;
    for(i=0;i<n;++i)
    {
    scanf("%d",&stu[i].num);
    scanf("%lf%lf%lf",&stu[i].cousres[0],&stu[i].cousres[1],&stu[i].cousres[2]); //修改
    fflush(stdin); //清空缓冲区
    }
}
/*功能:计算学生的总分及均分
  参数:结构体数组stu[],sum总分,Ave均分
*/
void getsa(struct grade stu[],int n) //修改
{
    int i;
    for(i=0;i<n;++i)
    {
    stu[i].sum=stu[i].cousres[0]+stu[i].cousres[1]+stu[i].cousres[2];//修改
    stu[i].ave=stu[i].sum/3;
    }
}
/*功能:按总分的成绩由高到低排列序号
  参数:结构体数组stu[],n为学生人数
*/
void sort(struct grade stu[],int n) //修改
{
    int i,j,k;
    for(i=0;i<n-1;++i)
    {
    k = i; //调整位置
    for(j=i;j<n;++j)//修改
    {
        if(stu[k].sum<stu[j].sum)
        {
        //j=k;
        k = j;
        }
    }
    if(k!=i) //调整位置
    {
        struct grade why; //增加变量声明
        why=stu[i];
        stu[i]=stu[k];
        stu[k]=why;
    }
    }
}
/*功能:打印出名次表,包括学号,三门成绩,总分及均分
  参数:结构体数组stu[],n为学生人数。
*/
void line(struct grade stu[],int n) //修改
{
    int i;
    printf("\t学号\tMT\tEN\tPH\tsum\tave\n");//加上\t为制表符对齐,去掉也行,下面同理
    for(i=0;i<n;++i)
    {
    printf("\t%d",stu[i].num);//修改
    printf("\t%.2lf\t%.2lf\t%.2lf",stu[i].cousres[0],stu[i].cousres[1],stu[i].cousres[2]); //修改
    printf("\t%.2lf",stu[i].sum); //修改
    printf("\t%.2lf\n",stu[i].ave); //修改
    }
}
/*功能:输入一个学生的学号,能找出这个人的信息
  参数:结构体数组stu[],n代表学生人数,x表示学号
*/
int search(struct grade stu[],int n,int x) //修改
{
    int i;
    for(i=0;i<n;++i)
    {
    if(stu[i].num == x) //修改
        return i;
    }
    return -1;
}

int main()
{
    int n,number,x;
    struct grade stu[30]; //修改
    printf("输入参加考试的学生人数:");/*输入考试人数*/
    scanf("%d",&n);

    printf("输入学号和学生成绩,输入格式为:学号 MT,EG,MT\n");/*输入学生学号及成绩*/
    input(stu,n);

    getsa(stu,n);/*计算总分及均分*/
    line(stu,n); //输出未排名前所有信息

    sort(stu,n);/*排名次*/
    printf("排名后的信息\n");
    line(stu,n);//输出排名之后的信息

    printf("请输入你要查询的学号;");/*输入学号查信息*/
    scanf("%d",&x);
    number=search(stu,n,x);
    if(number!=-1)
    {
    printf("该同学的排名为:%d\n",number+1);
    printf("\tnum\tMT\tEG\tPH\tsum\tave\n");
    printf("\t%d\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",stu[number].num,stu[number].cousres[0],stu[number].cousres[1],stu[number].cousres[2],stu[number].sum,stu[number].ave);
    }
    else{
    printf("没有找到你输入的学号\n");
    }
    //system("pause");
    getchar();
    return 0;
}


听不同的音乐,看不同的书,游历不同的城市,邂逅不同的人,走的多了,站的高了,自然就看的远了。
2014-11-30 20:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
前一个问题帖已经让人心淡

授人以渔,不授人以鱼。
2014-11-30 21:54
c语言总虐我
Rank: 2
等 级:论坛游民
帖 子:112
专家分:66
注 册:2014-11-22
收藏
得分:0 
回复 3 楼 TonyDeng
那个有没学过的,然后下午也在看,就是有点看不进去啊。现在也再看啊。看了的,不是没看。太长了。。。而且有的问题我都觉得太低级了,就要百度啊。最近不太舒服,明后天看完就把不会的问你好吧。。。表桑心

连渣都不是——5.8
要拜雍正,专治八阿哥  b u g——6.27
2014-11-30 22:00
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:5 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct grade
{
    int num;
    double MT;
    double EN;
    double PH;
    double sum;
    double ave;
};
typedef struct grade gr;
gr stu[30];

void px(gr *stu, int num);

int main (void)
{
    int i, nQuery;
    srand((unsigned int)time(NULL));
    for(i=0;i<30;i++)
    {
        stu[i].num=i;
        stu[i].MT= 1 + (100.0 * rand() / (RAND_MAX + 1.0));
        stu[i].EN= 1 + (100.0 * rand() / (RAND_MAX + 1.0));
        stu[i].PH= 1 + (100.0 * rand() / (RAND_MAX + 1.0));
        stu[i].sum=stu[i].MT+stu[i].EN+stu[i].PH;
        stu[i].ave=stu[i].sum/3;
    }

    px(stu, 30);
    printf("编号\t\t总分\t\t平均分\n");
    for(i=0;i<30;i++)
    {
        printf("%02d\t\t", stu[i].num + 1);
        printf("%.2lf\t\t", stu[i].sum);
        printf("%.2lf\n", stu[i].ave);
    }

    printf("请输入要查询的学员编号: ");
    scanf("%d",&nQuery);
    for(i=0;i<30;i++)
    {
        if(stu[i].num==nQuery-1)
        {
            printf("编号\t\t排名\t\t总分\t\t平均分\n");
            printf("%02d\t\t", stu[i].num + 1);
            printf("%02d\t\t", i+1);
            printf("%.2lf\t\t", stu[i].sum);
            printf("%.2lf\n", stu[i].ave);
        }
    }

    return 0;
}

void px(gr *stu, int num)
{
    int x, y, num_t;
    double sum_t,MT_t,EN_t,PH_t,ave_t;
    for (x = 0; x < num; x++)
        for (y = 0; y < (num -1 - x); y++)
        {
            if (stu[y].sum < stu[y + 1].sum)
            {
                num_t = stu[y].num;
                stu[y].num = stu[y + 1].num;
                stu[y + 1].num = num_t;

                sum_t = stu[y].sum;
                stu[y].sum = stu[y + 1].sum;
                stu[y + 1].sum = sum_t;

                MT_t = stu[y].MT;
                stu[y].MT = stu[y + 1].MT;
                stu[y + 1].MT = MT_t;

                EN_t = stu[y].EN;
                stu[y].EN = stu[y + 1].EN;
                stu[y + 1].EN = EN_t;

                PH_t = stu[y].PH;
                stu[y].PH = stu[y + 1].PH;
                stu[y + 1].PH = PH_t;

                ave_t = stu[y].ave;
                stu[y].ave = stu[y + 1].ave;
                stu[y + 1].ave = ave_t;
            }
        }
}

Only the Code Tells the Truth             K.I.S.S
2014-11-30 22:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
你说上一个超纲,这个比那个超得更厉害。上一个那样的都说超纲,晕。上一个弄不来,这个也弄不来,因为两个是同质的,解决的手段一样。

授人以渔,不授人以鱼。
2014-11-30 22:11
c语言总虐我
Rank: 2
等 级:论坛游民
帖 子:112
专家分:66
注 册:2014-11-22
收藏
得分:0 
回复 6 楼 TonyDeng
酱啊,我们才学了结构体数组,留那个题的时候还没学。。。。。。我先洗澡,回来看,好多事要做。。。艾玛

连渣都不是——5.8
要拜雍正,专治八阿哥  b u g——6.27
2014-11-30 22:21
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:5 
重新排了一下打印格式
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct grade
{
    int num;
    double MT;
    double EN;
    double PH;
    double sum;
    double ave;
};
typedef struct grade gr;
gr stu[30];

void px (gr *stu, int num);

int main (void)
{
    int i, nQuery;
    srand ( (unsigned int) time (NULL));

    for (i = 0; i < 30; i++)
    {
        stu[i].num = i;
        stu[i].MT = 1 + (100.0 * rand() / (RAND_MAX + 1.0));
        stu[i].EN = 1 + (100.0 * rand() / (RAND_MAX + 1.0));
        stu[i].PH = 1 + (100.0 * rand() / (RAND_MAX + 1.0));
        stu[i].sum = stu[i].MT + stu[i].EN + stu[i].PH;
        stu[i].ave = stu[i].sum / 3;
    }

    px (stu, 30);
    printf ("排名 \t编号 \t数学 \t英语 \t物理 \t总分 \t平均分\n");

    for (i = 0; i < 30; i++)
    {
        printf ("%4d \t", i + 1);
        printf ("%4d \t", stu[i].num + 1);
        printf ("%.1lf\t", stu[i].MT);
        printf ("%.1lf\t", stu[i].EN);
        printf ("%.1lf\t", stu[i].PH);
        printf ("%.1lf\t", stu[i].sum);
        printf ("%.1lf\n", stu[i].ave);
    }

    printf ("请输入要查询的学员编号: ");
    scanf ("%d", &nQuery);

    for (i = 0; i < 30; i++)
    {
        if (stu[i].num == nQuery - 1)
        {
            printf ("编号 \t排名 \t数学 \t英语 \t物理 \t总分 \t平均分\n");
            printf ("%4d \t", stu[i].num + 1);
            printf ("%4d \t", i + 1);
            printf ("%.1lf\t", stu[i].MT);
            printf ("%.1lf\t", stu[i].EN);
            printf ("%.1lf\t", stu[i].PH);
            printf ("%.1lf\t", stu[i].sum);
            printf ("%.1lf\n", stu[i].ave);
        }
    }

    return 0;
}

void px (gr *stu, int num)
{
    int x, y, num_t;
    double sum_t, MT_t, EN_t, PH_t, ave_t;

    for (x = 0; x < num; x++)
        for (y = 0; y < (num - 1 - x); y++)
        {
            if (stu[y].sum < stu[y + 1].sum)
            {
                num_t = stu[y].num;
                stu[y].num = stu[y + 1].num;
                stu[y + 1].num = num_t;
                sum_t = stu[y].sum;
                stu[y].sum = stu[y + 1].sum;
                stu[y + 1].sum = sum_t;
                MT_t = stu[y].MT;
                stu[y].MT = stu[y + 1].MT;
                stu[y + 1].MT = MT_t;
                EN_t = stu[y].EN;
                stu[y].EN = stu[y + 1].EN;
                stu[y + 1].EN = EN_t;
                PH_t = stu[y].PH;
                stu[y].PH = stu[y + 1].PH;
                stu[y + 1].PH = PH_t;
                ave_t = stu[y].ave;
                stu[y].ave = stu[y + 1].ave;
                stu[y + 1].ave = ave_t;
            }
        }
}

Only the Code Tells the Truth             K.I.S.S
2014-11-30 23:25
c语言总虐我
Rank: 2
等 级:论坛游民
帖 子:112
专家分:66
注 册:2014-11-22
收藏
得分:0 
回复 8 楼 longwu9t
给你个赞,我要断网了,看完不明白的明天问你好吧。好

连渣都不是——5.8
要拜雍正,专治八阿哥  b u g——6.27
2014-11-30 23:33
c语言总虐我
Rank: 2
等 级:论坛游民
帖 子:112
专家分:66
注 册:2014-11-22
收藏
得分:0 
回复 8 楼 longwu9t
哥啊,没学过指针啊。。。。

连渣都不是——5.8
要拜雍正,专治八阿哥  b u g——6.27
2014-12-01 12:58
快速回复:结构体数组,定义第一个函数时候就有错误,有好多错。。。
数据加载中...
 
   



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

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