【C++】第5章:(四)二维数组:从计算多个学生成绩并排序输出看二维数组

文章目录

二维数组

  1. 二维数组可以表示二维表格上的数据
  2. 二维数组存储形式先行后列
  3. 二维数组的处理一般采用双重循环语句

二维数组的存储

元素按先行后列的顺序存放
例如:int a[3][4];

a —>数组名a代表整个二维数组的首地址的地址常量

0a[0][0]
1a[0][1]
2a[0][2]
3a[0][3]
4a[1][0]
5a[1][1]
6a[1][2]
7a[1][3]
8a[2][0]
9a[2][1]
10a[2][2]
11a[2][3]

二维数组应用的三个基础框架

1.用双重循环给二维数组赋值

int a[3][4],i,j;
for(i=0;i<3;i++)
 for(j=0;j<4;j++)
 a[i][j]=i+j;

2.用双重循环找二维数组最大值

max=a[0][0];
for(i=0;i<3;i++)
 for(j=0;j<4;j++)
 if(max<a[i][j])
 max=a[i][j];

3.用双重循环给二维数组输出

for(i=0;i<3;i++)
 { for(j=0;j<4;j++)
  cout<<a[i][j]<<" ";
  cout<<endl;
  cout<<"该二维数组的最大值为 "<<max<<endl;

 

二维数组案例:计算多个学生的成绩并排序输出

【例】若有4个学生,请存储每个学生的语文,数学,英语三科成绩,并计算每个学生的总分并排序输出。
问题分析

语文数学英语总分
学生1***
学生2***
学生3***
学生4***

1.双重循环输入各个学生的各科成绩(如上所示的4*3表格);
2.循环累加各行的总分;
3.用一个一维数组给总分排序;
4.循环输出数组的值;

#include <iostream>
using namespace std;
int main()
{ 
 const int N=4;
 const int M=3;
 double a[N][M+1],b[N],temp;//定义一个一维数组用来对总分排序 
 int i,j,max;
 cout<<"请输入四个学生的成绩"<<endl;
 for(i=0;i<N;i++)//输入4个学生的三科成绩 
 { 
  cout<<"请输入第"<<i+1<<"个学生语文、数学和英语成绩(按次序输入):";
  for(j=0;j<M;j++)
  cin>>a[i][j];}
  //计算总分 
  for(i=0;i<N;i++)
  { 
   a[i][M]=a[i][0];//每个学生总分赋初值为语文成绩 
   for(j=1;j<M;j++)//每个学生总分累加数学和英语成绩 
   a[i][M]+=a[i][j ];
  }
  for(i=0;i<N;i++)//将总分复制给一维数组,为排序做准备 
  b[i]=a[i][M];
  //总分排序 
  //(选择排序)
  for(i=0;i<N-1;i++) 
  { 
   max=i;
   for(j=i+1;j<N;j++)
   if(b[j]>b[max])
    max=j;
    temp=b[i];
    b[i]=b[max];
    b[max]=temp;
  }
  /*(冒泡排序) for(j=1;j<N;j++) { for(i=0;i<N-j;i++) if(b[i+1]>b[i]){ temp=b[i+1]; b[i+1]=b[i]; b[i]=temp; } } */
    //循环输出总分及学号 
   for(i=0;i<N;i++)
    for(j=0;j<N;j++)
    if(b[i]==a[j][M]){ //总分复制排序了但表格里面总分的位置并没有改变
     cout<<"第"<<i+1<<"名同学学号为:"<<j<<" 总分为:"<<a[j][M]<<endl; 
  }
  return 0;
}

之前没有看过选择排序,所以总分排序那一小部分代码看了挺久也没理解,在此补充一下选择排序的内容。

补充:选择排序

选择排序算法思想 :
每趟从待排序的数据中选出最小(或最大)的元素,并记录其位置,然后和待排序的数据中第1个数进行交换,每次进行一个循环便找到一个最小(或最大)值,直至全部排序结束为止。

流程
比如在一个长度为 N 的无序数组中,在第一趟遍历 N 个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的 N-1 个数据,找出其中最小的数值与第二个元素交换…第 N-1 趟遍历剩下的 2 个数据,找出其中最小的数值与第 N-1 个元素交换,至此选择排序完成。(一共需要循环遍历N-1次)

(1)从待排序序列中,找到关键字最小的元素;

(2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;

(3)从余下的 N – 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。

    原文作者:饭要梁了
    原文地址: https://blog.csdn.net/weixin_44825297/article/details/105262421
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞