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

C语言如何统计多维数组指定行中的素数个数

实现方案

C语言中二维数组的每一行本质就是一段连续存储的一维数组,你已经掌握一维数组素数统计逻辑的话,只要固定目标行的索引,遍历该行所有列做判断即可,不需要额外的特殊处理。

你现有代码存在几个需要修正的问题:

  • scanf 用法错误:scanf 返回值是成功读取的参数个数,不是读取到的数值,读取整数的正确写法是 scanf("%d", &目标变量)
  • 函数参数设计不合理:统计行素数需要传入数组本身、列长度信息,你框架里写的start、end参数不需要,每行的遍历范围固定为0到列数减1
  • 缺少输入合法性校验:必须判断用户输入的行号是否在合法范围内,否则会出现数组越界访问

完整可运行代码
#include <stdio.h>
#include <stdbool.h>

// 素数判断辅助函数,和一维数组用的判断逻辑完全一致
bool isPrime(int num) {
    if (num < 2) return false;
    for (int i = 2; i * i <= num; i++) {
        if (num % i == 0) return false;
    }
    return true;
}

/**
 * 统计二维数组指定行的素数个数
 * @param arr 目标二维数组
 * @param cols 数组总列数
 * @param rownumber 要统计的行索引(从0开始计数)
 */
void findRowPrime(int arr[][4], int cols, int rownumber) {
    int primeCount = 0;
    // 固定行索引,遍历所有列,逻辑和遍历一维数组完全相同
    for (int col = 0; col < cols; col++) {
        if (isPrime(arr[rownumber][col])) {
            primeCount++;
        }
    }
    // 输出时行号转成用户习惯的从1开始计数
    printf("第%d行的素数总个数为:%d\n", rownumber + 1, primeCount);
}

int main() {
    int arr[3][4] = {
        { 1,  2,  3,  4 },
        { 5,  6,  7,  8 },
        { 9, 10, 11, 12 }
    };
    int rows = sizeof(arr) / sizeof(arr[0]); 
    int cols = sizeof(arr[0]) / sizeof(arr[0][0]);

    int inputRow;
    printf("enter the row number to find prime numbers(1-%d):", rows);
    // 校验输入是否为有效整数
    if (scanf("%d", &inputRow) != 1) {
        printf("输入无效,请输入整数类型的行号\n");
        return 1;
    }
    // 用户输入从1开始计数,转成数组0开始的索引
    int targetRow = inputRow - 1;
    // 校验行号范围
    if (targetRow < 0 || targetRow >= rows) {
        printf("行号超出合法范围,有效行号为1-%d\n", rows);
        return 1;
    }

    findRowPrime(arr, cols, targetRow);
    return 0;
}

关键逻辑说明
  • 二维数组访问指定行元素的方式为arr[行索引][列索引],arr[行索引]等价于该行一维数组的数组名,可以直接复用你之前写的一维数组遍历逻辑
  • 注意行号的计数转换:C语言数组索引从0开始,普通用户习惯从1开始计数,输入后要做减1转换,同时必须做边界校验
  • 二维数组作为函数参数时,必须指定列的长度,或者额外传入列数信息,否则编译器无法正确计算元素地址

内容的提问来源于stack exchange,提问作者Farkhad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.08 16:15:16