C++中的数组
一一维数组
1.数组的定义
数组的定义方式和变量类似。
2 数组的初始化
3 访问数组元素
strong text
二多维数组
多维数组就是数组的数组。
依次嵌套,最后一个括号代表变量
三例题求解
1.行号 2.起点 3.终点
课内例题
**1.数组替换 **
#include <cstdio>
int main()
{
int x[10];
for (int i = 0; i < 10; i ++ ) scanf("%d", &x[i]);
for (int i = 0; i < 10; i ++ )
if (x[i] <= 0)
x[i] = 1;
for (int i = 0; i < 10; i ++ ) printf("X[%d] = %d\n", i, x[i]);
return 0;
}
2.数组填充
#include <cstdio>
int main()
{
int n[10];
int v;
scanf("%d", &v);
n[0] = v;
for (int i = 1; i < 10; i ++ ) n[i] = n[i - 1] * 2;
for (int i = 0; i < 10; i ++ ) printf("N[%d] = %d\n", i, n[i]);
return 0;
}
3.数组选择
#include <cstdio>
int main()
{
double a[100];
for (int i = 0; i < 100; i ++ ) scanf("%lf", &a[i]);
for (int i = 0 ; i < 100; i ++ )
if (a[i] <= 10)
printf("A[%d] = %.1lf\n", i, a[i]);
return 0;
}
4.数组中的行
#include <cstdio>
int main()
{
double a[12][12];
int l;
char t;
scanf("%d\n%c", &l, &t);
for (int i = 0; i < 12; i ++ )
for (int j = 0; j < 12; j ++ )
scanf("%lf", &a[i][j]);
double s = 0;
for (int i = 0; i < 12; i ++ ) s += a[l][i];
if (t == 'S') printf("%.1lf\n", s);
else printf("%.1lf\n", s / 12);
return 0;
}
5.数组的右上半部分
#include <cstdio>
int main()
{
char t;
scanf("%c", &t);
double a[12][12];
for (int i = 0; i < 12; i ++ )
for (int j = 0; j < 12; j ++ )
scanf("%lf", &a[i][j]);
int c = 0;
double s = 0;
for (int i = 0; i < 12; i ++ )
for (int j = i + 1; j < 12; j ++ )
{
c ++ ;
s += a[i][j];
}
if (t == 'S') printf("%.1lf\n", s);
else printf("%.1lf\n", s / c);
return 0;
}
6.数组的左上半部分
#include <cstdio>
int main()
{
double a[12][12];
char t;
scanf("%c", &t);
for (int i = 0; i < 12; i ++ )
for (int j = 0; j < 12; j ++ )
scanf("%lf", &a[i][j]);
int c = 0;
double s = 0;
for (int i = 0; i < 12; i ++ )
for (int j = 0; j <= 10 - i; j ++ )
{
c ++ ;
s += a[i][j];
}
if (t == 'S') printf("%.1lf\n", s);
else printf("%.1lf\n", s / c);
return 0;
}
7.数组的上方区域
#include <cstdio>
int main()
{
char t;
double a[12][12];
scanf("%c", &t);
for (int i = 0; i < 12; i ++ )
for (int j = 0; j < 12; j ++ )
scanf("%lf", &a[i][j]);
double s = 0, c = 0;
for (int i = 0; i < 5; i ++ )
for (int j = i + 1; j <= 10 - i; j ++ )
{
c += 1;
s += a[i][j];
}
if (t == 'S') printf("%.1lf\n", s);
else printf("%.1lf\n", s / c);
return 0;
}
8.数组的左方区域
#include <cstdio>
int main()
{
char t;
scanf("%c", &t);
double q[12][12];
for (int i = 0; i < 12; i ++ )
for (int j = 0; j < 12; j ++ )
scanf("%lf", &q[i][j]);
double s = 0, c = 0;
for (int i = 1; i <= 5; i ++ )
for (int j = 0; j <= i - 1; j ++ )
{
s += q[i][j];
c += 1;
}
for (int i = 6; i <= 10; i ++ )
for (int j = 0; j <= 10 - i; j ++ )
{
s += q[i][j];
c += 1;
}
if (t == 'S') printf("%.1lf\n", s);
else printf("%.1lf\n", s / c);
return 0;
}
9.平方矩阵
#include <iostream>
using namespace std;
int main()
{
int n;
while (cin >> n, n)
{
for (int i = 1; i <= n; i ++ )
{
for (int j = 1; j <= n; j ++ )
{
int up = i, down = n - i + 1, left = j, right = n - j + 1;
cout << min(min(up, down), min(left, right)) << ' ';
}
cout << endl;
}
cout << endl;
}
return 0;
}
课间习题
1.数组变换
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int a[20], b[20];
for (int i = 0; i < 20; i ++ ) cin >> a[i];
for (int i = 19, j = 0; i >= 0; i --, j ++ ) b[j] = a[i];
for (int i = 0; i < 20; i ++ ) printf("N[%d] = %d\n", i, b[i]);
return 0;
}
2.斐波那契数列
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
long long f[61];
f[0] = 0, f[1] = 1;
for (int i = 2; i <= 60; i ++ ) f[i] = f[i - 1] + f[i - 2];
int n;
cin >> n;
while (n -- )
{
int x;
cin >> x;
printf("Fib(%d) = %lld\n", x, f[x]);
}
return 0;
}
3.最小数和它的位置
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int a[1001];
int n;
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i];
int p = 0;
for (int i = 1; i < n; i ++ )
if (a[i] < a[p])
p = i;
printf("Minimum value: %d\n", a[p]);
printf("Position: %d\n", p);
return 0;
}
**4.数组中的列 **
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int c;
char t;
double q[12][12];
cin >> c >> t;
for (int i = 0; i < 12; i ++ )
for (int j = 0; j < 12; j ++ )
cin >> q[i][j];
double s = 0;
for (int i = 0; i < 12; i ++ ) s += q[i][c];
if (t == 'S') printf("%.1lf\n", s);
else printf("%.1lf\n", s / 12);
return 0;
}
5.数组的右下半部分
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
char t;
cin >> t;
double q[12][12];
for (int i = 0; i < 12; i ++ )
for (int j = 0; j < 12; j ++ )
cin >> q[i][j];
double s = 0, c = 0;
for (int i = 1; i <= 11; i ++ )
for (int j = 12 - i; j <= 11; j ++ )
{
s += q[i][j];
c += 1;
}
if (t == 'S') printf("%.1lf\n", s);
else printf("%.1lf\n", s / c);
return 0;
}
6.数组的左下半部分
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
char t;
cin >> t;
double q[12][12];
for (int i = 0; i < 12; i ++ )
for (int j = 0; j < 12; j ++ )
cin >> q[i][j];
double s = 0, c = 0;
for (int i = 0; i < 12; i ++ )
for (int j = 0; j <= i - 1; j ++ )
{
s += q[i][j];
c += 1;
}
if (t == 'S') printf("%.1lf\n", s);
else printf("%.1lf\n", s / c);
return 0;
}
7.数组的下方区域
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
char t;
cin >> t;
double q[12][12];
for (int i = 0; i < 12; i ++ )
for (int j = 0; j < 12; j ++ )
cin >> q[i][j];
double s = 0, c = 0;
for (int i = 7; i <= 11; i ++ )
for (int j = 12 - i; j <= i - 1; j ++ )
{
s += q[i][j];
c += 1;
}
if (t == 'S') printf("%.1lf\n", s);
else printf("%.1lf\n", s / c);
return 0;
}
**8.数组的右方区域 **
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
char t;
cin >> t;
double q[12][12];
for (int i = 0; i < 12; i ++ )
for (int j = 0; j < 12; j ++ )
cin >> q[i][j];
double s = 0, c = 0;
for (int i = 1; i <= 5; i ++ )
for (int j = 12 - i; j <= 11; j ++ )
{
s += q[i][j];
c += 1;
}
for (int i = 6; i <= 10; i ++ )
for (int j = i + 1; j <= 11; j ++ )
{
s += q[i][j];
c += 1;
}
if (t == 'S') printf("%.1lf\n", s);
else printf("%.1lf\n", s / c);
return 0;
}
9.平方矩阵
#include <iostream>
using namespace std;
int q[100][100];
int main()
{
int n;
while (cin >> n, n)
{
for (int i = 0; i < n; i ++ )
{
q[i][i] = 1;
for (int j = i + 1, k = 2; j < n; j ++, k ++ ) q[i][j] = k;
for (int j = i + 1, k = 2; j < n; j ++, k ++ ) q[j][i] = k;
}
for (int i = 0; i < n; i ++ )
{
for (int j = 0; j < n; j ++ ) cout << q[i][j] << ' ';
cout << endl;
}
cout << endl;
}
return 0;
}
10.平方矩阵
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n;
while (cin >> n, n)
{
for (int i = 0; i < n; i ++ )
{
for (int j = 0; j < n; j ++ )
{
int v = 1;
for (int k = 0; k < i + j; k ++ ) v *= 2;
cout << v << ' ';
}
cout << endl;
}
cout << endl;
}
return 0;
}
**11.蛇形矩阵 **
#include <iostream>
using namespace std;
int res[100][100];
int main()
{
int n, m;
cin >> n >> m;
int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
for (int x = 0, y = 0, d = 0, k = 1; k <= n * m; k ++ )
{
res[x][y] = k;
int a = x + dx[d], b = y + dy[d];
if (a < 0 || a >= n || b < 0 || b >= m || res[a][b])
{
d = (d + 1) % 4;
a = x + dx[d], b = y + dy[d];
}
x = a, y = b;
}
for (int i = 0; i < n; i ++ )
{
for (int j = 0; j < m; j ++ ) cout << res[i][j] << ' ';
cout << endl;
}
return 0;
}
学习资源 《语法基础》