题目:把下列同学的成绩保存到二维数组a[5][3]中,并求全员分科的平均成绩和总平均成绩
张 王 李 赵 周
Math 80 61 59 85 76
C 75 65 63 87 77
Foxpro 92 71 70 90 85
答案:
#include <stdio.h>
void main()
{
int i, j, sum = 0, average, v[i]; //sum是求和
int a[5][3] = { {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} };
for (i = 0; i < 3;i++) //表示科目
{
for (j = 0; j < 5; j++) //表示学生
{
sum = sum + a[j][i];
}
v[i] = sum / 5;
sum = 0;
}
average = (v[0] + v[1] + v[2]) / 3;
printf("math:%d\nc:%d\nFoxpro:%d\n", v[0], v[1], v[2]);
printf("total:%d\n", average);
}
题目2:转置,把a[2][3]转化为b[3][2]
思路:化繁为简,无论多少维数组,分解成一位数组进行转换
a[0][j] => b[j][0]
a[i][0] => b[0][i]
答案:
#include <stdio.h>
void main()
{
int a[2][3] = { {1,2,3},{4,5,6} }; //定义a两行三列
int b[3][2], i, j;
printf("array a: \n"); //把数组a输出
for (i = 0; i <= 1; i++)
{
for (j = 0; j <= 2; j++)
{
printf("%5d", a[i][j]);
b[j][i] = a[i][j];
}
printf("\n");
}
printf("array b: \n");
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 1; j++)
{
printf("%5d", b[i][j]);
}
printf("\n");
}
}
运行结果:
题目3: 3×4矩阵,求出最大的元素值,以及其所在的行号和列号
答案:
#include <stdio.h>
void main()
{
int i, j, row = 0, colum = 0, max;
int a[3][4] = { {1,2,3,4},{9,8,7,6},{-10,10,-5,2} };
max = a[0][0];
for (i = 0; i <= 2; i++) //这里是行
{
for (j = 0; j <= 3; j++) //这里是列
{
if (a[i][j] > max)
{
max = a[i][j];
row = i;
colum = j;
}
}
}
printf("max=%d,row=%d,colum=%d\n", max, row, colum);
}
运行结果:
题目4:从键盘上输入9个正数,(对照九宫格的形式,输入三行,每行输入三个数)保存在二维数组中,按数组原来位置输出第一行和第一列的所有元素
提示:C语言习惯从0开始计算,所谓第一行第一列其实是第二行第二列
答案:
#pragma warning(disable:4996)
#include <stdio.h>
void main()
{
int i, j, a[3][3];
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("a[%d][%d]=", i, j);
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
if (i == 1 || j == 1) //如果是第一行第一列 (即第二行第二列)
{
printf("%-6d", a[i][j]);
}
else
{
printf("%-6c", ' '); // ' '里面打印空格
}
}
printf("\n");
}
}
运行结果: