You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言10x10随机矩阵故障排查:行/列求和、重新生成随机数异常

问题排查与修复方案

1 功能异常原因说明

a、b选项总和显示错误

你的行列求和逻辑本身是正确的,问题出在输出格式:打印行/列序号和总和时没有添加任何分隔符,导致两个数字拼接在一起,被误认为计算错误。比如第2行总和为93时,现有代码会输出293,看起来是结果错误,实际只是缺少分隔标识。

f选项无法生成新随机数集合

存在两个问题:

  • 没有初始化随机数种子:rand()函数默认使用固定种子,每次程序运行时生成的随机数序列是固定的,即使重新赋值也会复用同一段序列,看起来没有更新。
  • 生成新矩阵后没有重新打印内容,用户无法直观感知矩阵已经更新。

2 修复方案

改动点说明

  1. 引入<time.h>头文件,在main函数开头添加随机种子初始化代码:srand((unsigned int)time(NULL));
  2. 调整a、b选项的输出格式,添加分隔说明文字。
  3. 封装矩阵打印函数,初始化和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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:54:09