鱼C论坛

 找回密码
 立即注册
查看: 551|回复: 3

[已解决]使用指针、数组、结构体写一个代码

[复制链接]
发表于 2020-4-10 17:49:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本人刚刚学习编程语言,读代码还行,一到写代码就完蛋,555...
有个问题想要请教大神们,还望各位大神们能不辞辛苦帮菜鸟写一下这个代码

使用C语言写

要求1:在代码中使用指针、结构、数组这三者
要求2:输入:n名学生
            输入:每个学生的ID,以及物理、化学、生物成绩
            输出:每一科的最高分,以及该学生的ID

谢谢各位大神们了!!!谢谢谢谢谢谢!
最佳答案
2020-4-11 11:15:10
//这是我控制台上的运行结果,你看看是你想要的结果不

您想录入几个学生?
5
请输入如:1001     85 96 73,中间用空格隔开,依次代表id,物化生成绩



1001    45 89 100
1002    85 89 96
1003    96 75 100
1004    58 78 99
1005    96 89 100



--------------------光荣榜--------------------------


物理最高分为96分,对应学生id为----->1003  1005


化学最高分为89分,对应学生id为----->1001  1002  1005


生物最高分为100分,对应学生id为----->1001  1003  1005


请按任意键继续. . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-11 11:13:22 | 显示全部楼层
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student
{
        char id[16];                //15位数以内

        //依次为物化生成绩
        double wuScore;               
        double huaScore;
        double shengScore;
};

void maxScoreList(struct Student*,int count);
int main(void)
{
        puts("您想录入几个学生?");
        int count;
        scanf("%d",&count);
        struct Student* student = (struct Student*)malloc(sizeof(struct Student)*count); //开辟相应动态内存空间,这是为了后面的动态数组
        puts("请输入如:1001     85 96 73,中间用空格隔开,依次代表id,物化生成绩\n\n\n\n");
        for (int i = 0; i < count; i++)
        {
                scanf("%s%lf%lf%lf",student.id, &(student.wuScore), &(student.huaScore), &(student.shengScore));
                student.id[strlen(student.id)] = '\0';                //最后一位补\0,这是字符串结尾标志,不然会在打印时数组越界出现乱码
        }
        maxScoreList(student, count);

        //释放动态内存资源
        free(student);
        student = NULL;
        return 0;
}
void maxScoreList(struct Student* student, int count)
{
        //初始最大成绩, 为了能被下面替换,所以设成负数
        double maxWuScore = -1, maxHuaScore = -1, maxShengScore = -1;       
        for (int j = 0; j < count; j++)
                {
                        if (student[j].wuScore >maxWuScore)
                                {
                                maxWuScore = student[j].wuScore;
                                }

                        if (student[j].huaScore >maxHuaScore)
                                {
                                        maxHuaScore = student[j].huaScore;
                                }

                        if (student[j].shengScore >maxShengScore)
                                {
                                        maxShengScore = student[j].shengScore;
                                }
                }

        //可能多个学生并列成绩        %lg相比于%lf会舍弃末尾小数0, 如3.1和3.100的差别
        printf("\n\n\n--------------------光荣榜--------------------------\n\n\n");
        printf("物理最高分为%lg分,对应学生id为----->", maxWuScore);
        //遍历学生列表,寻找分数为maxWuScore的学生
        for (int i = 0; i < count; i++)[img][/img]
        {
                if (student.wuScore == maxWuScore)
                {
                        printf("%s  ", student.id);
                }
        }
        printf("\n\n\n");

        //同物理
        printf("化学最高分为%lg分,对应学生id为----->", maxHuaScore);
        for (int i = 0; i < count; i++)
        {
                if (student.huaScore == maxHuaScore)
                {
                        printf("%s  ", student.id);
                }
        }
        printf("\n\n\n");

        //同物理
        printf("生物最高分为%lg分,对应学生id为----->", maxShengScore);
        for (int i = 0; i < count; i++)
        {
                if (student.shengScore == maxShengScore)
                {
                        printf("%s  ", student.id);
                }
        }
        printf("\n\n\n");

}


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-11 11:15:10 | 显示全部楼层    本楼为最佳答案   
//这是我控制台上的运行结果,你看看是你想要的结果不

您想录入几个学生?
5
请输入如:1001     85 96 73,中间用空格隔开,依次代表id,物化生成绩



1001    45 89 100
1002    85 89 96
1003    96 75 100
1004    58 78 99
1005    96 89 100



--------------------光荣榜--------------------------


物理最高分为96分,对应学生id为----->1003  1005


化学最高分为89分,对应学生id为----->1001  1002  1005


生物最高分为100分,对应学生id为----->1001  1003  1005


请按任意键继续. . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 20:57:04 | 显示全部楼层
入门者 发表于 2020-4-11 11:13
#include
#include
#include

已经写出来了,谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 09:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表