升序输出
/*
使用"字符数组"和"实型数组"分别存储学生姓名和成绩,并通过对学生成绩的排序(由小到大),按照名次输出字符数组中对应的学生姓名
*/
#include<iostream>
using namespace std;
#include<cstring>
#include<windows.h>
int main(){
SetConsoleOutputCP(65001);
char name[10][10];//存储十个学生的姓名,每个学生姓名不超过10个字符
strcpy(name[0],"Mary");//strcpy函数实质上是用字符数组2中的字符串覆盖字符数组1中内容,此处用于初始化
strcpy(name[1],"Jam");
strcpy(name[2],"Jack");
strcpy(name[3],"Jose");
strcpy(name[4],"Hery");
strcpy(name[5],"Mark");
strcpy(name[6],"Dobbs");
strcpy(name[7],"Steven");
strcpy(name[8],"Stanly");
strcpy(name[9],"John");
cout<<"开始输入每个学生的分数:"<<endl;
int score[10][2];//存储十个学生的分数
for(int i=0;i<10;i++){
score[i][0]=i;//第一列为编号
cout<<name[i]<<endl;
cin>>score[i][1];//第二列为用户输入的分数
}
for(int i=1;i<10;i++){//冒泡排序循环(由小到大),难点
for(int j=9;j>=i;j--){//循环第一次,确定最小的数;循环第二次,确定第二小的数;......
if(score[j][1]<score[j-1][1]){//从score二维数组最后一个下标开始,如果二维数组score分数列的前一个元素大于后一个元素,则交换
int scoretmp=score[j-1][1];//存放score二维数组分数列(较大的)
int idtmp=score[j-1][0];//存放score二维数组编号列(较大的)
score[j-1][1]=score[j][1];//将较小的分数列赋值给前一个数组元素
score[j-1][0]=score[j][0];//将较小的编号列赋值给前一个数组元素
score[j][1]=scoretmp;
score[j][0]=idtmp;
}
}
}
for(int j=0;j<10;j++){//输出循环
cout<<name[score[j][0]];
cout << ": "<<score[j][1] << endl;
}
return 0;
}
输出:
降序输出
/*
使用"字符数组"和"实型数组"分别存储学生姓名和成绩,并通过对学生成绩的排序(由大到小),按照名次输出字符数组中对应的学生姓名
*/
#include<iostream>
using namespace std;
#include<cstring>
#include<windows.h>
int main(){
SetConsoleOutputCP(65001);
char name[10][10];//存储十个学生的姓名,每个学生姓名不超过10个字符
strcpy(name[0],"Mary");//strcpy函数实质上是用字符数组2中的字符串覆盖字符数组1中内容
strcpy(name[1],"Jam");
strcpy(name[2],"Jack");
strcpy(name[3],"Jose");
strcpy(name[4],"Hery");
strcpy(name[5],"Mark");
strcpy(name[6],"Dobbs");
strcpy(name[7],"Steven");
strcpy(name[8],"Stanly");
strcpy(name[9],"John");
cout<<"开始输入每个学生的分数:"<<endl;
int score[10][2];//存储十个学生的分数
for(int i=0;i<10;i++){
score[i][0]=i;//第一列为编号
cout<<name[i]<<endl;
cin>>score[i][1];//第二列为用户输入的分数
}
for(int i=1;i<10;i++){//冒泡排序循环(由大到小),难点
for(int j=9;j>=i;j--){//循环从数组地址最后开始,循环第一次,确定最小的数;循环第二次,确定第二小的数;......
if(score[j][1]>score[j-1][1]){//从score二维数组最后一个下标开始,如果二维数组score分数列的后一个元素大于前一个元素,则交换
int scoretmp=score[j][1];//存放score二维数组分数列(较大的)
int idtmp=score[j][0];//存放score二维数组编号列(较大的)
score[j][1]=score[j-1][1];//将较小的分数列赋值给后一个数组元素
score[j][0]=score[j-1][0];//将较小的编号列赋值给后一个数组元素
score[j-1][1]=scoretmp;//将较大的分数列赋值给前一个数组元素
score[j-1][0]=idtmp;将较大的编号列赋值给前一个数组元素
}
}
}
for(int j=0;j<10;j++){//输出循环
cout<<name[score[j][0]];
cout<<": "<<score[j][1]<<endl;
}
return 0;
}
输出: