p8
有些的结论需要直接记住
目录
矩阵转置
主对角线和次对角线
下三角 和上三角(一般是让求和)
下三角
上三角
杨辉三角
矩阵转置
不是方阵 需要用到第二个二维数组
b[i][j]=a[i][j]
是方阵 方法1 借助第二个二维数组,同上
方法2 下三角换即可(是方阵的话一般题目都是让你用第二个方法)
void main() {
int i, j,temp, arr[4][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16} };
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
printf("%4d", arr[i][j]);
}
printf("\n");
}
//开始转置
for (i = 0; i < 4; i++) {
for (j = 0; j <= i; j++) {
temp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = temp;
}
}
//转置后
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
printf("%4d", arr[i][j]);
}
printf("\n");
}
}
主对角线和次对角线
主对角线: i==j
次对角线 : i+j==数组维度-1
void main() {
int i, j, arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} }, sum1 = 0,sum2=0;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
if (i == j) sum1 += arr[i][j];//主对角线和
if (i + j == 2) sum2 += arr[i][j];//次对角线和
}
}
printf("%4d%4d", sum1, sum2);
}
下三角 和上三角(一般是让求和)
下三角
void main() {
//下三角
int i, j, arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
for (i = 0; i < 3; i++) {
for (j = 0; j <= i; j++)
printf("%4d", arr[i][j]);
printf("\n");
}
}
上三角
void main() {
//上三角
int i, j, arr[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
for (i = 0; i < 3; i++) {
for (j = 2-i; j >= 0; j--)
printf("%4d", arr[i][j]);
printf("\n");
}
}
40
杨辉三角
第0列和主对角线都是1 , 其余的元素是上一行本列的元素 + 上一行,列-1的元素
列如:打印杨辉三角形(要求打印出10行)
void main() {
int arr[10][10] = {0}, i, j;
for (i = 0; i < 10; i++) {
arr[i][0] = 1;//第一列全部为1
arr[i][i] = 1;//主对角线
}
for (i = 2; i < 10; i++) {
for (j = 1; j < i; j++) {
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
for (i = 0; i < 10; i++) {
for (j = 0; j <=i; j++) {
printf("%d\t", arr[i][j]);
}
printf("\n");
}
}