C语言矩阵对角线元素求和结果输出为0问题排查
代码问题定位与修复
核心错误点
- 矩阵赋值索引错误:双重循环中你错误使用宏定义的
row、col(固定值为3)作为数组下标,而非循环变量i、j。3x3数组的合法下标范围是0~2,Matriz[row][col]实际是访问Matriz[3][3],属于数组越界的未定义行为,你生成的随机值完全没有写入矩阵的合法位置,矩阵所有元素保留初始化的0值,因此主对角线求和结果为0。 - 随机种子未初始化:
rand()函数默认使用固定种子,每次运行程序生成的随机矩阵都会完全相同,若需要每次结果不同需手动设置随机种子。
修复后的完整代码
#include <stdio.h> #include <stdlib.h> #include <time.h> // 引入time头文件用于设置随机种子 #define col 3 #define row 3 #define MIN 200 #define MAX 600 int main() { int Matriz[col][row] = {0}; int i, j; int sum = 0; // 设置随机种子,保证每次运行生成不同随机数 srand((unsigned int)time(NULL)); for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { // 修正索引为循环变量i、j Matriz[i][j] = MIN + (rand() % (MAX - MIN + 1)); printf("%5d", Matriz[i][j]); } printf("\n"); } for (i = 0; i < row; i++) { sum = sum + Matriz[i][i]; } printf("主对角线元素和:%d", sum); return 0; }
补充说明
如果不需要每次运行生成不同的随机矩阵,可以删除srand相关代码和time.h头文件引用,仅修正索引错误即可解决求和结果为0的问题。
内容的提问来源于stack exchange,提问作者user17038012
相关产品推荐
相关产品推荐

