| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1561 人关注过本帖
标题:二维数组、函数和常用算法综合编程练习
只看楼主 加入收藏
郭阳yang
Rank: 1
等 级:新手上路
帖 子:24
专家分:9
注 册:2020-10-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
二维数组、函数和常用算法综合编程练习
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。考试后要求:
(1)计算每个学生的总分和平均分;
(2)按总分成绩由高到低排出成绩的名次;
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;
(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数
谢谢
搜索更多相关主题的帖子: 总分 二维数组 练习 考试 学生 
2020-12-06 10:53
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:10 
回复 楼主 郭阳yang
若不要求用结构体的话,这个题目难度不大。现在没时间做了,要去上班了。先列个思路放这里,明天再做:
定义一个数组 array[][7] // 第0列名次,第1列学号,第2列数学(MT)、第3列英语(EN)、第4列物理(PH)、第5列总分(tatol)、第6列平均(ave)
输入时直接计算总分和平均分:tatol = array[][2] + array[][3] + array[][4],输入到 array[][5],array[][5] / 3 输入到 array[][6]
对总分列 array[][5] 进行排序,排序时,整行都得移动(这个不是问题,定义数组时多定义一行就是了),排序完成后,对第0列进行赋值
输出数组
循环遍历第1列学号,输出该行
2020-12-06 16:41
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:10 
回复 楼主 郭阳yang
正确的程序如下:
程序代码:
#include<stdio.h>

int main()
{
    int maopao(int p[], int m);
    int i, m, n, *p, ask;           // ask 为访问变量
    int SS[11][7] = { 0 };          // 多定义一行,作为排序时的临时行

    for (n = 0;n < 10;n++)
    {
        for (i = 1;i < 5;i++)       // 输入“学号、数学、英语、物理”成绩
        {
            scanf("%d", &SS[n][i]);
        }
        SS[n][5] = SS[n][2] + SS[n][3] + SS[n][4];
        SS[n][6] = SS[n][5] / 3.0;
    }
    printf("\n");
    m = n + 1;
    p = SS[0];
    maopao(p, m);

    for (i = 0;i < n;i++)           // 对第0列赋名次值
        SS[i][0] = i + 1;

    while (1)                       // 查询成绩
    {
        printf("查询成绩,请输入学生学号:");
        scanf("%d", &ask);
        for (i = 0;i < m;i++)
        {
            if (SS[i][1] == ask)
            {
                printf("%d 号学生是第 %d 名: MT = %d,EN = %d,PH = %d,tatol = %d,ave = %d\n", SS[i][1], SS[i][0], SS[i][2], SS[i][3], SS[i][4], SS[i][5], SS[i][6]);
            }
        }
    }
    return 0;
}

int maopao(int p[], int m)
{
    int i, j;
    for (i = 0;i <= m;i++)
    {
        for (j = 0;j <= m - 1;j++)
        {
            if (p[j * 7 + 5] < p[(j + 1) * 7 + 5])   // 由大到小排序
            {
                p[m * 7 + 5] = p[j * 7 + 5];
                p[j * 7 + 5] = p[(j + 1) * 7 + 5];
                p[(j + 1) * 7 + 5] = p[m * 7 + 5];

                p[m * 7 + 1] = p[j * 7 + 1];
                p[j * 7 + 1] = p[(j + 1) * 7 + 1];
                p[(j + 1) * 7 + 1] = p[m * 7 + 1];

                p[m * 7 + 2] = p[j * 7 + 2];
                p[j * 7 + 2] = p[(j + 1) * 7 + 2];
                p[(j + 1) * 7 + 2] = p[m * 7 + 2];

                p[m * 7 + 3] = p[j * 7 + 3];
                p[j * 7 + 3] = p[(j + 1) * 7 + 3];
                p[(j + 1) * 7 + 3] = p[m * 7 + 3];

                p[m * 7 + 4] = p[j * 7 + 4];
                p[j * 7 + 4] = p[(j + 1) * 7 + 4];
                p[(j + 1) * 7 + 4] = p[m * 7 + 4];

                p[m * 7 + 6] = p[j * 7 + 6];
                p[j * 7 + 6] = p[(j + 1) * 7 + 6];
                p[(j + 1) * 7 + 6] = p[m * 7 + 6];
            }
        }
    }
    return 0;
}


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


[此贴子已经被作者于2020-12-8 14:27编辑过]

2020-12-07 10:51
郭阳yang
Rank: 1
等 级:新手上路
帖 子:24
专家分:9
注 册:2020-10-24
收藏
得分:0 
回复 3楼 风过无痕1989
谢谢
2020-12-08 10:46
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:0 
回复 楼主 郭阳yang
程序已经调试好,请查看。不好意思,没能一气呵成哈~~
2020-12-08 14:29
快速回复:二维数组、函数和常用算法综合编程练习
数据加载中...
 
   



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

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