1. 请问下边代码是初始化一个几行几列的二维数组?
01. int a[][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
答:是一个 3 行 4 列的二维数组。由于我们这里只初始化了 10 个元素,并指定了该数组有 4 列,a[2][4] 是不够放
了,只能用 a[3][4] 来存放,剩余的空间初始化为 0。
2. 假设有一个五维数组,如果要遍历其中的每一个元素,应该使用几层循环嵌套合适?
答:五层,每一层一个维数,简单好记。
3. 下边用二维数组来存放 5 句口号,请问需要使用几层循环嵌套将它们打印出来?
01. #include <stdio.h>
02.
03. #define NUM 5
04.
05. int main()
06. {
07. char slogans[NUM][100] = {
08. "I love FishC.com!",
09. "Keep moving!",
10. "Impossible is nothing!",
11. "Just do it!",
12. "I am what I am!"};
答:一层(不用嵌套),请看下边代码。
01. #include <stdio.h>
02.
03. #define NUM 5
04.
05. int main()
06. {
07. char slogans[NUM][100] = {
08. "I love FishC.com!",
09. "Keep moving!",
10. "Impossible is nothing!",
11. "Just do it!",
12. "I am what I am!"};
13. int i;
14.
15. for (i = 0; i < NUM; i++)
16. {
17. printf("%s\n", slogans);
18. }
19.
20. return 0;
21. }
复制代码
问:那为啥上边的空白这么一大块?版权属于:bbs.fishc.com
YqpnTWkAjJK, No'`s(m_*C;
答:哇哈哈哈,这特么的都是套路呐!
4. 如何获取二维数组 a 的长度?
答:sizeof(a) / sizeof(a[0][0]),这是最好的方法,没有之一。
5. 请问二维数组 a[4][5] 是 4 行 5 列还是 5 行 4 列呢?
答:其实两种答案都是正确的。因为几行几列实际上只是我们为了方便大家理解和想象而构造出来的概念模型。实际上
在内存中,它的存储方式仍然一维数组的线性方式扩展开而已。但无论你的程序采用哪一种解释方法,都请坚持使用同
一种方法。
#include <stdio.h>
int main()
{
int a[4][5] = {
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20}};
int i, j;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 5; j++)
{
printf("%2d ", a[j]);
if (i + j == 3)
{
printf("\n");
}
}
}
printf("\n");
return 0;
}
#include <stdio.h>
#define M 2
#define N 2
#define P 3
int main()
{
int a[M][P] = {
{1, 2, 3},
{4, 5, 6}};
int b[P][N] = {
{1, 4},
{2, 5},
{3, 6}};
int c[M][N] = {0};
int i, j, k, row;
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
for (k = 0; k < P; k++)
{
c[j] += a[k] * b[k][j];
}
}
}
//row 取行数最大值
row = M > P ? M : P;
for (i = 0; i < row; i++)
{
//打印 A
printf("| ");
for (j = 0; j < P; j++)
{
if (i < M)
{
printf("\b%d", a[j]);
printf("|");
}
else
{
printf("\b\b\b ");
}
}
//打印 * 号
if (i == row / 2)
{
printf(" * ");
}
else
{
printf(" ");
}
printf("| ");
// 打印B
for (j = 0; j < N; j++)
{
if (i < P)
{
printf("\b%d ", b[j]);
printf("|");
}
else
{
printf("\b\b\b ");
}
}
//打印 = 号
if (i == row / 2)
{
printf(" = ");
}
else
{
printf(" ");
}
//打印c
printf("| ");
for (j = 0; j < N; j++)
{
if (i < M)
{
printf("\b%d ", c [j]);
printf("\n");
}
else
{
printf("\b\b\b ");
}
}
printf("\n");
}
return 0;
}
#include <stdio.h>
#include <string.h>
#define NUM 5
int main()
{
char slogan[NUM][100];
int i, j, ch, min, max, temp;
for ( i = 0; i < NUM; i++)
{
printf("请输入%d句话: ", i + 1);
for (j = 0; (ch = getchar()) !='\n'; j++)
{
slogan[j] = '\0';
}
slogan[j] = '\0';
}
min = 0;
max = min;
printf("你输入了下边%d句话:\n", NUM);
//打印每句口号,同时比较长度
for (i = 0; i < NUM; i++)
{
printf("%s\n", slogan);
temp = strlen(slogan);
min = temp < strlen(slogan[min]) ? i : min;
max = temp > strlen(slogan[max]) ? i : max;
}
printf("其中最长的是: %s\n", slogan[max]);
printf("其中最短的是: %s\n", slogan[min]);
return 0;
}
|