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
相关产品推荐
相关产品推荐

