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

编写C程序:输入两数生成范围、验证正数及统计素数与合数

我来帮你搞定这个C程序,完全实现你要的功能:让用户输入两个正整数,先验证合法性,再生成区间序列,最后统计素数、合数的列表和数量。先上完整代码,再给你拆解细节:

完整实现代码
#include <stdio.h>
#include <stdbool.h>

// 判断一个数是否为素数的函数
bool isPrime(int num) {
    if (num <= 1) {
        return false; // 1及以下不是素数
    }
    for (int i = 2; i * i <= num; i++) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}

int main() {
    int num1, num2, start, end;
    
    // 提示用户输入两个正整数
    printf("请输入两个正整数(用于生成区间序列):\n");
    scanf("%d %d", &num1, &num2);
    
    // 验证输入是否为正数
    if (num1 <= 0 || num2 <= 0) {
        printf("错误:请输入大于0的正整数!\n");
        return 1;
    }
    
    // 确定区间的起始和结束值(处理第一个数大于第二个数的情况)
    start = (num1 < num2) ? num1 : num2;
    end = (num1 > num2) ? num1 : num2;
    
    // 生成并输出区间序列
    printf("生成的区间序列:");
    for (int i = start; i <= end; i++) {
        printf("%d", i);
        if (i != end) {
            printf(", ");
        }
    }
    printf("\n");
    
    // 初始化统计变量
    int primeCount = 0, compositeCount = 0;
    int primes[1000], composites[1000]; // 假设区间长度不超过1000,可按需调整
    
    // 遍历区间,分类素数和合数
    for (int i = start; i <= end; i++) {
        if (i == 1) {
            continue; // 1既不是素数也不是合数,跳过统计
        }
        if (isPrime(i)) {
            primes[primeCount++] = i;
        } else {
            composites[compositeCount++] = i;
        }
    }
    
    // 输出素数统计结果
    printf("\n素数列表(共%d个):", primeCount);
    for (int i = 0; i < primeCount; i++) {
        printf("%d", primes[i]);
        if (i != primeCount - 1) {
            printf(", ");
        }
    }
    printf("\n");
    
    // 输出合数统计结果
    printf("合数列表(共%d个):", compositeCount);
    for (int i = 0; i < compositeCount; i++) {
        printf("%d", composites[i]);
        if (i != compositeCount - 1) {
            printf(", ");
        }
    }
    printf("\n");
    
    // 特殊说明1的情况
    if (start <= 1 && end >= 1) {
        printf("\n注意:数字1既不是素数也不是合数\n");
    }
    
    return 0;
}
代码细节拆解

1. 输入合法性验证

  • 首先检查用户输入的两个数是否都大于0,如果有任意一个非正,直接输出错误并退出程序
  • 额外处理了用户输入的第一个数大于第二个数的情况(比如输入10和1),自动交换确定区间的起始和结束,保证序列是从小到大的

2. 素数判断函数

  • isPrime函数负责判断一个数是否为素数:
    • 小于等于1的数直接返回false
    • 从2遍历到该数的平方根(这样比遍历到num-1更高效),如果能被整除就不是素数
    • 遍历结束没找到因数,就返回true说明是素数

3. 统计与输出

  • 用两个数组分别存储素数和合数,同时用计数器记录数量
  • 特别注意数字1的处理:它既不属于素数也不属于合数,所以遍历的时候直接跳过它
  • 最后分别输出素数、合数的列表和数量,如果区间包含1,还会给出特殊说明

看你之前写了部分输入相关的代码,我把它整合到了完整逻辑里,还修正了提示文字的表述,让用户更容易理解要输入什么~

内容的提问来源于stack exchange,提问作者Francisco P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:00:07