C++笔记:使用字符数组和实型数组分别存储学生姓名和成绩,并使用冒泡排序法排序

升序输出

/*
使用"字符数组"和"实型数组"分别存储学生姓名和成绩,并通过对学生成绩的排序(由小到大),按照名次输出字符数组中对应的学生姓名
*/
#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;
}

输出:
在这里插入图片描述

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值