C语言10x10随机矩阵故障排查:行/列求和、重新生成随机数异常
问题排查与修复方案
1 功能异常原因说明
a、b选项总和显示错误
你的行列求和逻辑本身是正确的,问题出在输出格式:打印行/列序号和总和时没有添加任何分隔符,导致两个数字拼接在一起,被误认为计算错误。比如第2行总和为93时,现有代码会输出293,看起来是结果错误,实际只是缺少分隔标识。
f选项无法生成新随机数集合
存在两个问题:
- 没有初始化随机数种子:
rand()函数默认使用固定种子,每次程序运行时生成的随机数序列是固定的,即使重新赋值也会复用同一段序列,看起来没有更新。 - 生成新矩阵后没有重新打印内容,用户无法直观感知矩阵已经更新。
2 修复方案
改动点说明
- 引入
<time.h>头文件,在main函数开头添加随机种子初始化代码:srand((unsigned int)time(NULL)); - 调整a、b选项的输出格式,添加分隔说明文字。
- 封装矩阵打印函数,初始化和f选项执行后都调用该函数打印矩阵,方便用户查看结果。
完整修复代码
#include<stdio.h> #include<stdlib.h> #include<time.h> // 质数判断函数 int isPrime(int n) { int c=0; for(int i=1;i<n;i++) { if(n%i==0) c+=1; } return c==1 ? 1 : 0; } // 封装矩阵打印函数 void printMatrix(int arr[10][10]) { for(int i=0;i<10;i++) { for(int j=0;j<10;j++) printf("%d\t ",arr[i][j]); printf("\n"); } } int main() { // 初始化随机种子 srand((unsigned int)time(NULL)); int my_array[10][10]; // 初始化矩阵 for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { my_array[i][j]=rand()%20; } } // 打印初始矩阵 printMatrix(my_array); while(1) { char ch; printf("\n操作选项 \na.) 计算每列总和\nb.) 计算每行总和\nc.) 横向输出所有奇数\nd.) 横向输出所有偶数\ne.) 横向输出所有质数\nf.) 生成新的随机矩阵\ng.) 退出程序"); printf("\n\n请输入选项:"); scanf(" %c",&ch); if(ch=='a') { for(int i=0;i<10;i++) { int sum=0; for(int j=0;j<10;j++) { sum+=my_array[j][i]; } printf("第%d列总和:%d\n",i+1,sum); } } else if(ch=='b') { for(int i=0;i<10;i++) { int sum=0; for(int j=0;j<10;j++) { sum+=my_array[i][j]; } printf("第%d行总和:%d\n",i+1,sum); } } else if(ch=='c') { printf("所有奇数:"); for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(my_array[i][j]%2==1) printf("%d ",my_array[i][j]); } } printf("\n"); } else if(ch=='d') { printf("所有偶数:"); for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(my_array[i][j]%2==0) printf("%d ",my_array[i][j]); } } printf("\n"); } else if(ch=='e') { printf("所有质数:"); for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(isPrime(my_array[i][j])==1) printf("%d ",my_array[i][j]); } } printf("\n"); } else if(ch=='f') { // 重新生成矩阵 for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { my_array[i][j]=rand()%20; } } printf("新矩阵已生成:\n"); printMatrix(my_array); } else if(ch=='g') { break; } else { printf("输入选项无效,请重新输入\n"); } } return 0; }
内容的提问来源于stack exchange,提问作者Simone
相关产品推荐
相关产品推荐

