数组的输入方式
一维数组的输入
#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(){//定义数组arrayint array[]={1,2,3,4,5,6,7,8,9};//accumulate ( 数组首地址 , 数组末尾地址, 数组累加的起始位 )int sum = accumulate(array,array+size(array),0);cout << "数组的和 = " << sum << endl;//结果为45system("pause");return 0;}
#include <iostream>using namespace std;//传统的基本方法int main(){ //定义数组arrayint 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;//先认定一个最大值为0for(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;}
