数组的输入方式

一维数组的输入

  1. #include<iostream>
  2. using namespace std;
  3. //数组声明;写在外面是为了方便使用
  4. int a[100]//由于数组的个数是个常量定义,所以无法输入变量来修改,但定义一个数据较大的数组就可以修改数组的个数;但还有更好的办法
  5. //一维数组的输入
  6. int main()
  7. {
  8. //数组的输入方式
  9. int n = 0;
  10. //输入数组的数据个数
  11. cin >> n;
  12. //输入每个数据
  13. for(int i = 0; i < n; i++)
  14. {
  15. cin >> a[i];
  16. }
  17. //查看输入结果
  18. for(int i = n-1; i >=0; i++)
  19. {
  20. cout << a[i] << endl;
  21. }
  22. return 0;
  23. }

二维数组的输入

  1. #include<iostream>
  2. using namespace std;
  3. //二维数组的输入
  4. int main()
  5. {
  6. int a[6][6];
  7. //输入数组的每个数据
  8. for(int i = 0; i < 6; i++)
  9. {
  10. for(int j = 0; j < 6; j++)
  11. {
  12. cin >> a[i][j];
  13. }
  14. }
  15. cout << endl;
  16. //正对角线和反对角线上的数加10的计算
  17. for(int i = 0; i < 6; i++)
  18. {
  19. for(int j = 0; j < 6; j++)
  20. {
  21. if(i == j || i + j == 5)
  22. {
  23. a[i][j] += 10;
  24. }
  25. cout << a[i][j] << " ";
  26. }
  27. cout << endl;
  28. }
  29. return 0;
  30. }

数组求和:

一维数组求和

  1. #include <iostream>
  2. #include <numeric>//accumulate所在的头文件
  3. using namespace std;
  4. //用accumulate函数求和
  5. int main()
  6. {
  7. //定义数组array
  8. int array[]={1,2,3,4,5,6,7,8,9};
  9. //accumulate ( 数组首地址 , 数组末尾地址, 数组累加的起始位 )
  10. int sum = accumulate(array,array+size(array),0);
  11. cout << "数组的和 = " << sum << endl;//结果为45
  12. system("pause");
  13. return 0;
  14. }
  1. #include <iostream>
  2. using namespace std;
  3. //传统的基本方法
  4. int main()
  5. { //定义数组array
  6. int array[]={1,2,3,4,5,6,7,8,9};
  7. //初始化
  8. int sum = 0;
  9. for ( auto x : array )//auto为自动判断变量类型
  10. {
  11. sum += x; // sum = sum + x
  12. }
  13. cout << "数组的和 = " << sum << endl;
  14. system("pause");
  15. return 0;
  16. }

二维数组求和

行列求和

  1. #include <iostream>
  2. using namespace std;
  3. //二维数组和各行列求和:
  4. int main()
  5. {
  6. int i, j, a[6][6], sum, m, n;
  7. cin >> m >> n;
  8. for (i = 0; i < m; i++)
  9. {
  10. for (j = 0; j < n; j++)
  11. {
  12. cin >> a[i][j];
  13. }
  14. }
  15. //二维数组各行求和
  16. for (i = 0; i < m; i++)
  17. {
  18. sum = 0;
  19. for (j = 0; j < n; j++)
  20. {
  21. sum += a[i][j];
  22. }
  23. cout << "第" << i << "行和 " << sum << endl;
  24. }
  25. //二维数组各列求和
  26. for (i = 0; i < n; i++)
  27. {
  28. sum = 0;
  29. for (j = 0; j < m; j++)
  30. {
  31. sum += a[j][i];
  32. }
  33. cout << "第" << i << "列和 " << sum << endl;
  34. }
  35. return 0;
  36. }

与数组有关的数学问题:

输入:1 2 3 4 5,输出:5 1 2 3 4

  1. #include<iosteram>
  2. using namespace std;
  3. int main()
  4. {
  5. int n = 0;
  6. cin >> n;
  7. for(int i = 0; i < n; i++)
  8. {
  9. cin >> a[i];
  10. }
  11. //先把a[0]的数存放在temp中
  12. temp = a[0];
  13. //遍历:a[i+1]赋值给a[i]的过程
  14. for(int i = 0; i < n-1; i++)
  15. {
  16. a[i] = a[i + 1] << " ";
  17. }
  18. //把之前a[0]取出来,存放的a[5]上
  19. a[n - 1] = temp;
  20. for(int i = 0; i < n; i++)
  21. {
  22. cout << a[i] << " ";
  23. }
  24. return 0;
  25. }

数组元素逆置

请声明一个5个元素数组,并且将元素逆置
(如元素组为:1,3,2,5,4;逆置后:4,5,2,3,1)

  1. #include<iostream>
  2. using namespace std;
  3. int main() {
  4. //创建数组
  5. int arr[5] = { 1,3,2,5,4 };
  6. cout << "数组逆置前:";
  7. for (int i = 0; i < 5; i++)
  8. {
  9. cout << arr[i];
  10. }
  11. cout << endl;
  12. /*实现逆置
  13. 1.记录起始下标位置
  14. 2.记录结束下标位置
  15. 3.其实下标与结束下标元素互换
  16. 4.起始位置++,结束位置--
  17. 5.执行循环操作,直到起始位置>=结束位置*/
  18. int start = 0;//起始下标
  19. int end = sizeof(arr) / sizeof(arr[0])-1;// 结束下标
  20. while (start < end)
  21. {
  22. //元素互换代码
  23. int temp = arr[start];
  24. arr[start] = arr[end];
  25. arr[end] = temp;
  26. //下标更新
  27. start++;
  28. end--;
  29. }
  30. cout << "数组逆置后:";
  31. //打印逆置后的数组
  32. for (int i = 0; i < 5; i++)
  33. {
  34. cout << arr[i];
  35. }
  36. cout << endl;
  37. system("pause");
  38. return 0;
  39. }

数组小记 - 图1

求数组最大值

输出数组int arr[5] = {300,350,200,400,250};的最大值

  1. #include<iostream>
  2. using namespace std;
  3. int main() {
  4. //创建5个数的数组
  5. int arr[5] = { 300,350,200,400,250 };
  6. //从数组中找到最大值
  7. int max = 0;//先认定一个最大值为0
  8. for(int i = 0; i < 5; i++ )
  9. {
  10. if(arr[i]>max)
  11. {
  12. //如果访问的数组中的元素比认定的最大值还大,更新最大值
  13. max = arr[i]
  14. }
  15. }
  16. //打印最大值
  17. cout << "数组最大值:" << max << endl;
  18. system("pause");
  19. return 0;
  20. }

二维数组应用案例

考试成绩统计:
案例描述,有三名同学(张三,李四,王五),在一次考试中的成绩分别为如下表,请分别输出三名同学的总成绩

语文 数学 英语
张三 100 100 100
李四 90 50 100
王五 60 70 80
  1. #include<iostream>
  2. using namespace std;
  3. #include<string>
  4. int main() {
  5. int score[][3] = { 100,100,100,90,50,100,60,70,80 };
  6. string name[3] = { "张三","李四","王五" };
  7. for (int i = 0; i < 3; i++)
  8. {
  9. int sum = 0;
  10. for (int j = 0; j < 3; j++)
  11. {
  12. sum += score[i][j];
  13. //cout << score[i][j] << " ";//这个是输出每个人每科的分数
  14. }
  15. cout << name[i] << "的总分为:" << sum << endl;
  16. }
  17. system("pause");
  18. return 0;
  19. }
  1. #include<iostream>
  2. using namespace std;
  3. //二维数组的输入
  4. int main()
  5. {
  6. int a[6][6];
  7. //输入数组的每个数据
  8. for(int i = 0; i < 6; i++)
  9. {
  10. for(int j = 0; j < 6; j++)
  11. {
  12. cin >> a[i][j];
  13. }
  14. }
  15. cout << endl;
  16. //正对角线和反对角线上的数加10的计算
  17. for(int i = 0; i < 6; i++)
  18. {
  19. for(int j = 0; j < 6; j++)
  20. {
  21. if(i == j || i + j == 5)//正方形二维数组,正对角规律:行==列;反对角规律:行+列==行-1
  22. {
  23. a[i][j] += 10;
  24. }
  25. cout << a[i][j] << " ";
  26. }
  27. cout << endl;
  28. }
  29. return 0;
  30. }

回型数组问题

题目:输入一个正整数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(j=0;j a[i][j]=1;
for(i=1;i for(j=1;j a[i][j]=2;
for(i=2;i for(j=2;j a[i][j]=3;
=>
for(i=k;i for(j=k;j a[i][j]=k+1;

=>
for(k=0;k<(n+1)/2 ;k++)
{
for(i=k;i for(j=k;j a[i][j]=k+1;

  1. #include <iostream>
  2. using namespace std;
  3. const int Max = 110;
  4. int a[100][100];
  5. int main()
  6. {
  7. int n,i,j,k;
  8. cin >> n;
  9. for (k = 0; k < (n + 1) / 2; k++)
  10. {
  11. for (i = k; i < n - k; i++)
  12. for (j = k; j < n - k; j++)
  13. a[i][j] = k + 1;
  14. }
  15. for(i=0;i<n;i++)
  16. {
  17. for (j = 0; j < n; j++)
  18. printf("%5d", a[i][j]);
  19. cout << endl;
  20. }
  21. return 0;
  22. }