C语言计算方阵对角线元素和差 样例输出结果异常排查
问题排查与修复方案
原代码存在的问题
- 核心问题:变量
r、c未初始化就被使用。代码中已经读取了方阵阶数n,但没有给代表行数的r和代表列数的c赋值,二者是内存中的随机垃圾值,导致后续数组定义、循环遍历的边界完全错误,无法正确读取元素和计算对角线和。 - 潜在问题:调用
abs函数需要引入<stdlib.h>头文件,部分编译器缺少该头文件会出现编译错误或计算异常。
修复后的代码
#include<stdio.h> #include<stdlib.h> // 引入abs函数依赖的头文件 int main() { int n,r,c,i,j; scanf("%d",&n); r = n; // 方阵行数等于阶数n c = n; // 方阵列数等于阶数n int ar[r][c],sumd1=0,sumd2=0; for( i=0; i<r; i++) { for(j=0; j<c ; j++) { scanf("%d",&ar[i][j]); } } for( i=0; i<r; i++) { for(j=0; j<c ; j++) { if(i == j) sumd1 = sumd1+ar[i][j]; if(i == c-j-1) sumd2 = sumd2 + ar[i][j]; } } printf("%d",abs(sumd1 - sumd2)); return 0; }
样例验证
输入给定测试用例:
3 11 2 4 4 5 6 10 8 -12
计算逻辑:
- 左上到右下对角线元素和:11 + 5 + (-12) = 4
- 右上到左下对角线元素和:4 + 5 + 10 = 19
- 差值绝对值:|4 - 19| = 15,和预期输出一致。
内容的提问来源于stack exchange,提问作者Ch Divya sree
相关产品推荐
相关产品推荐

