C语言程序调试求助:正整数平方等于前N个奇数和代码报错
问题排查与修复
你的程序核心逻辑错误,导致无法正确计算前N个奇数的和,具体问题和修复方案如下:
核心错误点
- 错误的判断条件:
if (N%i==1)这个语句是在筛选“能让N除以它余1”的数,和“奇数”完全无关,这是逻辑的根本错误。 - 循环逻辑偏差:你需要累加的是前N个奇数(1、3、5...直到第N个),当前循环的逻辑完全没有围绕这个目标展开。
修复后的代码
方案一:直接生成前N个奇数累加
这种方式效率更高,直接遍历N次,每次生成对应的奇数:
#include <stdio.h> int main(int argc, const char * argv[]) { int N; int S = 0; int i; printf("donner un entier >0: "); scanf("%d", &N); // 遍历N次,每次生成第i个奇数:2*i -1 for (i = 1; i <= N; i++) { S += 2 * i - 1; } printf("le carré de l'entier est égal a %d", S); return 0; }
方案二:遍历并筛选奇数,直到收集够N个
这种方式更直观,筛选出奇数并累加,直到达到N个:
#include <stdio.h> int main(int argc, const char * argv[]) { int N; int S = 0; int i = 1; int count = 0; printf("donner un entier >0: "); scanf("%d", &N); while (count < N) { // 判断当前数是否为奇数 if (i % 2 == 1) { S += i; count++; } i++; } printf("le carré de l'entier est égal a %d", S); return 0; }
验证逻辑
前N个奇数的和公式为 (N^2),比如输入N=3,前3个奇数是1+3+5=9=3²,修复后的程序会正确输出这个结果。
内容的提问来源于stack exchange,提问作者Hichem
相关产品推荐
相关产品推荐

