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

C语言序列统计程序计数少1问题求助

解决C程序统计数字序列时少统计第一个数字的问题

你的程序统计结果比实际输入少1的核心原因是第一个输入的数字未被纳入正负、奇偶的统计逻辑——你仅将第一个数字赋值给precedente用于序列趋势判断,却没有对它执行任何计数操作,循环里只处理了剩下的N-1个数字,最终统计总数自然少1。

修复方案:纳入第一个数字的统计逻辑

在读取第一个数字后,立即添加对应的统计代码,将其纳入计数范围,同时保持序列趋势判断逻辑正常运行。

修改后的完整代码:

// Scrivi un programma in C che data una sequenza di numeri stampa i positivi, i negativi, i nulli
// se è pari, se è dispari e di che tipo è la sequenza (crescente, decrescente, indefinita)
#include <stdio.h>
#include <stdlib.h>

int main() {
    int N;

    // Chiedi all'utente il numero di elementi nella sequenza
    printf("Inserisci il numero di elementi nella sequenza: ");
    scanf("%d", &N);

    // Dichiarazione delle variabili
    int numero, positivi = 0, nulli = 0, negativi = 0, pari = 0, dispari = 0;
    int precedente, crescente = 1, decrescente = 1;

    // Leggi il primo numero并完成统计
    printf("Inserisci il primo numero: ");
    scanf("%d", &precedente);
    // 统计第一个数字的正负属性
    positivi += (precedente > 0) ? 1 : 0;
    nulli += (precedente == 0) ? 1 : 0;
    negativi += (precedente < 0) ? 1 : 0;
    // 统计第一个数字的奇偶属性
    pari += (precedente % 2 == 0) ? 1 : 0;
    dispari += (precedente % 2 != 0) ? 1 : 0;

    // Loop per leggere gli N-1 numeri successivi
    for (int i = 1; i < N; i++) {
        printf("Inserisci il prossimo numero: ");
        scanf("%d", &numero);

        // Conta positivi, nulli e negativi
        positivi += (numero > 0) ? 1 : 0;
        nulli += (numero == 0) ? 1 : 0;
        negativi += (numero < 0) ? 1 : 0;

        // Conta pari e dispari
        pari += (numero % 2 == 0) ? 1 : 0;
        dispari += (numero % 2 != 0) ? 1 : 0;

        // Verifica se la sequenza è crescente o decrescente
        crescente = (numero > precedente) ? crescente : 0;
        decrescente = (numero < precedente) ? decrescente : 0;

        // Aggiorna il valore precedente per il prossimo confronto
        precedente = numero;
    }

    system("cls");
    // Stampa dei risultati
    printf("\nRisultati:\n");
    printf("Numeri positivi: %d\n", positivi);
    printf("Numeri nulli: %d\n", nulli);
    printf("Numeri negativi: %d\n", negativi);
    printf("Numeri pari: %d\n", pari);
    printf("Numeri dispari: %d\n", dispari);

    // Stampa della condizione sulla sequenza
    printf((crescente) ? "La sequenza e' crescente.\n" : (decrescente) ? "La sequenza e' decrescente.\n" : "La sequenza non e' ne crescente ne decrescente.\n");

    return 0;
}

关键修改说明

  • 在读取第一个数字后,新增了对precedente的正负、奇偶统计代码,将第一个数字正式纳入计数范围;
  • 序列趋势判断逻辑保持不变,precedente依然作为第一个元素与后续输入的数字进行比较。

可选优化方案:统一循环处理所有数字

你也可以调整逻辑,让所有数字都在循环内处理,避免单独处理第一个数字的冗余代码,同时优化提示信息的可读性:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int N;

    printf("Inserisci il numero di elementi nella sequenza: ");
    scanf("%d", &N);

    int positivi = 0, nulli = 0, negativi = 0, pari = 0, dispari = 0;
    int precedente, numero, crescente = 1, decrescente = 1;

    // 读取第一个数字并统计
    printf("Inserisci il numero 1: ");
    scanf("%d", &precedente);
    positivi += (precedente > 0) ? 1 : 0;
    nulli += (precedente == 0) ? 1 : 0;
    negativi += (precedente < 0) ? 1 : 0;
    pari += (precedente % 2 == 0) ? 1 : 0;
    dispari += (precedente % 2 != 0) ? 1 : 0;

    // 循环处理剩余N-1个数字
    for (int i = 2; i <= N; i++) {
        printf("Inserisci il numero %d: ", i);
        scanf("%d", &numero);

        // 统计当前数字
        positivi += (numero > 0) ? 1 : 0;
        nulli += (numero == 0) ? 1 : 0;
        negativi += (numero < 0) ? 1 : 0;
        pari += (numero % 2 == 0) ? 1 : 0;
        dispari += (numero % 2 != 0) ? 1 : 0;

        // 直观判断序列趋势
        if (numero <= precedente) crescente = 0;
        if (numero >= precedente) decrescente = 0;

        precedente = numero;
    }

    system("cls");
    printf("\nRisultati:\n");
    printf("Numeri positivi: %d\n", positivi);
    printf("Numeri nulli: %d\n", nulli);
    printf("Numeri negativi: %d\n", negativi);
    printf("Numeri pari: %d\n", pari);
    printf("Numeri dispari: %d\n", dispari);

    // 更清晰的趋势输出逻辑
    if (crescente) {
        printf("La sequenza e' crescente.\n");
    } else if (decrescente) {
        printf("La sequenza e' decrescente.\n");
    } else {
        printf("La sequenza non e' ne crescente ne decrescente.\n");
    }

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:18:11