数组的输入方式
一维数组的输入
#include<iostream>
using namespace std;
//数组声明;写在外面是为了方便使用
int a[100]//由于数组的个数是个常量定义,所以无法输入变量来修改,但定义一个数据较大的数组就可以修改数组的个数;但还有更好的办法
//一维数组的输入
int main()
{
//数组的输入方式
int n = 0;
//输入数组的数据个数
cin >> n;
//输入每个数据
for(int i = 0; i < n; i++)
{
cin >> a[i];
}
//查看输入结果
for(int i = n-1; i >=0; i++)
{
cout << a[i] << endl;
}
return 0;
}
二维数组的输入
#include<iostream>
using namespace std;
//二维数组的输入
int main()
{
int a[6][6];
//输入数组的每个数据
for(int i = 0; i < 6; i++)
{
for(int j = 0; j < 6; j++)
{
cin >> a[i][j];
}
}
cout << endl;
//正对角线和反对角线上的数加10的计算
for(int i = 0; i < 6; i++)
{
for(int j = 0; j < 6; j++)
{
if(i == j || i + j == 5)
{
a[i][j] += 10;
}
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
数组求和:
一维数组求和
#include <iostream>
#include <numeric>//accumulate所在的头文件
using namespace std;
//用accumulate函数求和
int main()
{
//定义数组array
int array[]={1,2,3,4,5,6,7,8,9};
//accumulate ( 数组首地址 , 数组末尾地址, 数组累加的起始位 )
int sum = accumulate(array,array+size(array),0);
cout << "数组的和 = " << sum << endl;//结果为45
system("pause");
return 0;
}
#include <iostream>
using namespace std;
//传统的基本方法
int main()
{ //定义数组array
int array[]={1,2,3,4,5,6,7,8,9};
//初始化
int sum = 0;
for ( auto x : array )//auto为自动判断变量类型
{
sum += x; // sum = sum + x
}
cout << "数组的和 = " << sum << endl;
system("pause");
return 0;
}
二维数组求和
行列求和
#include <iostream>
using namespace std;
//二维数组和各行列求和:
int main()
{
int i, j, a[6][6], sum, m, n;
cin >> m >> n;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
//二维数组各行求和
for (i = 0; i < m; i++)
{
sum = 0;
for (j = 0; j < n; j++)
{
sum += a[i][j];
}
cout << "第" << i << "行和 " << sum << endl;
}
//二维数组各列求和
for (i = 0; i < n; i++)
{
sum = 0;
for (j = 0; j < m; j++)
{
sum += a[j][i];
}
cout << "第" << i << "列和 " << sum << endl;
}
return 0;
}
与数组有关的数学问题:
输入:1 2 3 4 5,输出:5 1 2 3 4
#include<iosteram>
using namespace std;
int main()
{
int n = 0;
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> a[i];
}
//先把a[0]的数存放在temp中
temp = a[0];
//遍历:a[i+1]赋值给a[i]的过程
for(int i = 0; i < n-1; i++)
{
a[i] = a[i + 1] << " ";
}
//把之前a[0]取出来,存放的a[5]上
a[n - 1] = temp;
for(int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
return 0;
}
数组元素逆置
请声明一个5个元素数组,并且将元素逆置
(如元素组为:1,3,2,5,4;逆置后:4,5,2,3,1)
#include<iostream>
using namespace std;
int main() {
//创建数组
int arr[5] = { 1,3,2,5,4 };
cout << "数组逆置前:";
for (int i = 0; i < 5; i++)
{
cout << arr[i];
}
cout << endl;
/*实现逆置
1.记录起始下标位置
2.记录结束下标位置
3.其实下标与结束下标元素互换
4.起始位置++,结束位置--
5.执行循环操作,直到起始位置>=结束位置*/
int start = 0;//起始下标
int end = sizeof(arr) / sizeof(arr[0])-1;// 结束下标
while (start < end)
{
//元素互换代码
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
//下标更新
start++;
end--;
}
cout << "数组逆置后:";
//打印逆置后的数组
for (int i = 0; i < 5; i++)
{
cout << arr[i];
}
cout << endl;
system("pause");
return 0;
}
求数组最大值
输出数组int arr[5] = {300,350,200,400,250};的最大值
#include<iostream>
using namespace std;
int main() {
//创建5个数的数组
int arr[5] = { 300,350,200,400,250 };
//从数组中找到最大值
int max = 0;//先认定一个最大值为0
for(int i = 0; i < 5; i++ )
{
if(arr[i]>max)
{
//如果访问的数组中的元素比认定的最大值还大,更新最大值
max = arr[i]
}
}
//打印最大值
cout << "数组最大值:" << max << endl;
system("pause");
return 0;
}
二维数组应用案例
考试成绩统计:
案例描述,有三名同学(张三,李四,王五),在一次考试中的成绩分别为如下表,请分别输出三名同学的总成绩
语文 | 数学 | 英语 | |
---|---|---|---|
张三 | 100 | 100 | 100 |
李四 | 90 | 50 | 100 |
王五 | 60 | 70 | 80 |
#include<iostream>
using namespace std;
#include<string>
int main() {
int score[][3] = { 100,100,100,90,50,100,60,70,80 };
string name[3] = { "张三","李四","王五" };
for (int i = 0; i < 3; i++)
{
int sum = 0;
for (int j = 0; j < 3; j++)
{
sum += score[i][j];
//cout << score[i][j] << " ";//这个是输出每个人每科的分数
}
cout << name[i] << "的总分为:" << sum << endl;
}
system("pause");
return 0;
}
#include<iostream>
using namespace std;
//二维数组的输入
int main()
{
int a[6][6];
//输入数组的每个数据
for(int i = 0; i < 6; i++)
{
for(int j = 0; j < 6; j++)
{
cin >> a[i][j];
}
}
cout << endl;
//正对角线和反对角线上的数加10的计算
for(int i = 0; i < 6; i++)
{
for(int j = 0; j < 6; j++)
{
if(i == j || i + j == 5)//正方形二维数组,正对角规律:行==列;反对角规律:行+列==行-1
{
a[i][j] += 10;
}
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
回型数组问题
题目:输入一个正整数n,输出n*n回型方阵。
样例输入:
5
样例输出:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
规律:
for(i=0;i
for(i=1;i
for(i=2;i
=>
for(i=k;i
=>
for(k=0;k<(n+1)/2 ;k++)
{
for(i=k;i
#include <iostream>
using namespace std;
const int Max = 110;
int a[100][100];
int main()
{
int n,i,j,k;
cin >> n;
for (k = 0; k < (n + 1) / 2; k++)
{
for (i = k; i < n - k; i++)
for (j = k; j < n - k; j++)
a[i][j] = k + 1;
}
for(i=0;i<n;i++)
{
for (j = 0; j < n; j++)
printf("%5d", a[i][j]);
cout << endl;
}
return 0;
}