这个数组是真滴不会,希望尽快

img

希望可以写出完整程序参考一下,特别是数组保留下标那一部分,还有按学生学号出成绩那一块


#include<iostream>
#include<string>
using namespace std;
void sort(int* grade, int* sno,int n);
void display(int* grade,int *sno, int n);
void display(int* math,int *phys,int *total, int n);
int main()
{

    cout << "输入学生人数" << endl;
    int n;
    cin >> n;
    int* math = new int[n];
    int* phys = new int[n];
    int* total = new int[n];
    int* sno = new int[n];
    memset(sno, 0, n);
    cout << "输入数学物理成绩" << endl;
    for (int i = 0; i < n; ++i)
    {
        cin >> math[i] >> phys[i];
        total[i] = math[i] + phys[i];
    }
    while (1)
    {
        cout << "1数学排\n" << "2物理排\n" << "3总分排\n"<<"4学号显示\n"<<"0退出\n";
        
        int key;
        cin >> key;
        if (key == 0)
        {
            break;
        }
        switch (key)
        {
        case 1:
            sort(math, sno, n);
            display(math, sno, n);
            break;
        case 2:
            sort(phys, sno, n);
            display(phys, sno, n);
            break;
        case 3:
            sort(total, sno, n);
            display(total, sno, n);
            break;
        case 4:
            cout <<"学号" <<"数学" << ' ' << "物理" << ' ' << "总分" << endl;
            display(math, phys, total, n);
        default:
            break;
        }
    }
}
void sort(int* grade, int* sno,int n)
{
    int Max;
    int index;
    int* book = new int[n];
    memset(book, 0, n);
    for (int i = 0; i < n; ++i)
    {
        Max=-1, index = -1;
        for (int j = 0; j < n; ++j)
        {
            if (book[j] != 1&&grade[j]>Max)
            {
                Max = grade[j];
                index = j;
            }
        }
        sno[i] = index;
        book[index] = 1;
    }
}
void display(int* grade, int* sno, int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << sno[i] << ' ' << grade[sno[i]]<<endl;
    }
}

void display(int* math, int* phys, int* total, int n)
{
    for (int i = 0; i < n; i++)
    {
        cout <<i<<"   "<< math[i] << "   " << phys[i]<< "   " <<total[i]<<"   " << endl;
    }
}

img

你题目的解答代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define MAX_NUN 1000//最大学号
int score1[MAX_NUN] = {0};
int score2[MAX_NUN] = {0};
int allscore[MAX_NUN] = {0};
int ind[MAX_NUN] = {0}, len=0;

void add()
{
    int n;
    while (1)
    {
        printf("输入学号(输入-1结束):");
        scanf("%d", &n);
        if (n==-1)
            break;
        printf("输入数学成绩:");
        scanf("%d", &score1[n]);
        printf("输入物理成绩:");
        scanf("%d", &score2[n]);
        allscore[n] = score1[n] + score2[n];
        ind[len++] = n;
    }
}

void sort1(int a[],int n)
{
    int i,j;
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(a[j] > a[j+1])
            {
                int t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
}

void sort2(int a[],int n,int v[])
{
    int i,j;
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(v[a[j]] < v[a[j+1]])
            {
                int t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
}

void out()
{
    int i;
    printf("学号\t数学\t物理\t总分\n");
    for (i = 0; i < len; i++)
    {
        printf("%d\t%d\t%d\t%d\n", ind[i],score1[ind[i]],score2[ind[i]],allscore[ind[i]]);
    }
}

int main()
{
    int n,i;
    printf("1 输入成绩\n");
    printf("2 按学号顺序输出成绩\n");
    printf("3 按数学成绩顺序输出成绩\n");
    printf("4 按物理成绩顺序输出成绩\n");
    printf("5 按总成绩顺序输出成绩\n");
    printf("6 退出\n");
    while (1)
    {
        printf("请输入1-6:");
        scanf("%d", &n);
        if (n==1)
        {
            add();
        }
        else if (n==2)
        {
            sort1(ind,len);
            out();
        }
        else if (n==3)
        {
            sort2(ind,len,score1);
            out();
        }
        else if (n==4)
        {
            sort2(ind,len,score2);
            out();
        }
        else if (n==5)
        {
            sort2(ind,len,allscore);
            out();
        }
        else if (n==6)
        {
            break;
        }
    }

    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img