【代码实现】
#include<stdio.h> int main() { int array[3][3]; int sumLT2RB = 0; // 标记左上角到右下角对角线元素之和 int sumRT2LB = 0; // 标记右上角到左下角对角线元素之和 printf("请输入3行3列的矩阵:\n"); for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) scanf("%d", &array[i][j]); } // 左上角到右下角对角线 for (int i = 0; i < 3; ++i) sumLT2RB += array[i][i]; for (int i = 0, j = 2; i < 3; ++i, j--) sumRT2LB += array[i][j]; printf("左上角到右下角对角线元素之和: %d\n", sumLT2RB); printf("右上角到左下角对角线元素之和: %d\n", sumRT2LB); return 0; }【结果截屏】
4. 有一个已经排好序的数组,要求输入一个数后,按原来顺序的规律将它插入数组中【答案解析】
将数据插入到已排序的序列中,只需两步即可:
找待插入元素在数组中的插入位置
插入元素
具体如下:
注意:极端情况下,end可能会被减为-1,比如在上述序列中插入0
【代码实现】
#include<stdio.h> int main() { int num = 0; int array[10] = {1,2,3,4,5,6,7,8,9}; printf("请输入一个整数:"); scanf("%d", &num); printf("原数组序列为:\n"); for (int i = 0; i < 9; ++i) printf("%d ", array[i]); printf("\n"); // 数组为升序 // 在数组中找待插入元素的位置,具体找的方式为: // 从后往前依次与数组中元素进行比较,如果要插入元素num比end位置数据小,则num一定插在end位置之前 // 因此将end位置数据往后搬移一个位置 // 如果num大于end位置元素或者end已经在区间最左侧,则位置找到 // 最后将新元素插入到end+1的位置 int end = 8; while (end >= 0 && num < array[end]) { array[end+1] = array[end]; end--; } array[end + 1] = num; printf("插入元素%d之后的结果为:\n", num); for (int i = 0; i < 10; ++i) printf("%d ", array[i]); printf("\n"); return 0; }【结果截图】
5. 将一个数组中的值按逆序重新存放。例如:原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。【答案解析】
该题为数组的逆置,具体处理方式如下:
如果begin < end时,则循环进行一下操作
给定两个下标begin和end,begin放在数组起始的位置,end放在数组最后一个元素的位置
交换begin和end位置的元素
begin往后移动,end往前移动
【代码实现】
#include<stdio.h> int main() { int array[5] = {8,6,5,4,1}; int begin = 0, end = 4; printf("逆序之前数组为:"); for (int i = 0; i < 5; ++i) printf("%d ", array[i]); printf("\n"); // 逆序:begin在数组最左侧,end在数组最右侧 // 只要begin < end,将begin和end位置元素进行交换 // 然后begin往后移动一步,end往前移动一步 while (begin < end) { int temp = array[begin]; array[begin] = array[end]; array[end] = temp; begin++; end--; } printf("逆置之后数组为:"); for (int i = 0; i < 5; ++i) printf("%d ", array[i]); printf("\n"); return 0; }【结果截屏】