文章目录
二维数组
- 二维数组可以表示二维表格上的数据
- 二维数组存储形式先行后列
- 二维数组的处理一般采用双重循环语句
二维数组的存储
元素按先行后列的顺序存放
例如:int a[3][4];
a —>数组名a代表整个二维数组的首地址的地址常量
0 | a[0][0] |
---|---|
1 | a[0][1] |
2 | a[0][2] |
3 | a[0][3] |
4 | a[1][0] |
5 | a[1][1] |
6 | a[1][2] |
7 | a[1][3] |
8 | a[2][0] |
9 | a[2][1] |
10 | a[2][2] |
11 | a[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)步,直到排序结束。