希望可以写出完整程序参考一下,特别是数组保留下标那一部分,还有按学生学号出成绩那一块
#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;
}
}
你题目的解答代码如下:
#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;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!