C语言使用for循环与switch语句计算不同参数等比数列和求助
原代码问题汇总
- 变量作用域与初始化错误:for循环判断条件
i <= f中的f未初始化,是随机垃圾值,导致循环根本不会执行,自然没有输出;循环体内重新定义的局部f、sum会覆盖外层变量,逻辑完全错误。 - 多余变量冗余:你要循环1~3对应3组参数,直接用循环变量
i作为switch的判断条件即可,不需要额外定义sum变量累加计数。 - switch分支缺失
break:每个case执行完如果没有break,会依次执行后续所有case的代码,不符合你分组测试的需求。 return 0位置错误:放在for循环体内部,第一次循环执行完就会直接终止程序,就算循环能正常运行也只会执行一次。- 等比数列公式错误:标准等比数列前n项和公式为
a*(1 - r^n)/(1 - r),原代码写的r^(n-1)会少算一项,导致公式法和迭代法结果不一致。 - 编译注意事项:代码中使用了
pow数学函数,编译时需要链接数学库,例如gcc编译命令为gcc 你的文件名.c -o 输出文件名 -lm
修正后的完整代码
#include <stdio.h> #include <math.h> // 迭代法计算等比数列和 float sumgeometric1 (float a, float r, int n) { float sum = 0; for (int i = 0; i < n; i++) { sum = sum + a; a = a * r; } return sum; } // 公式法计算等比数列和 float sumgeometric2 (float a, float r, int n) { return a * (1 - pow(r, n)) / (1 - r); } int main (){ // 循环1到3对应三组参数 for (int i = 1; i <= 3; ++i) { switch (i) { case 1: printf("=== 第一组参数测试 ===\n"); float a1 = 0.01; float r1 = 1.1; int n1 = 10000; printf("迭代法结果:%f\n", sumgeometric1(a1, r1, n1)); printf("公式法结果:%f\n", sumgeometric2(a1, r1, n1)); break; case 2: printf("=== 第二组参数测试 ===\n"); float a2 = 2.0; float r2 = 0.01; int n2 = 500; printf("迭代法结果:%f\n", sumgeometric1(a2, r2, n2)); printf("公式法结果:%f\n", sumgeometric2(a2, r2, n2)); break; case 3: printf("=== 第三组参数测试 ===\n"); float a3 = 0.0001; float r3 = 2.0; int n3 = 100; printf("迭代法结果:%f\n", sumgeometric1(a3, r3, n3)); printf("公式法结果:%f\n", sumgeometric2(a3, r3, n3)); break; } } return 0; }
内容的提问来源于stack exchange,提问作者postpunkcrumpet
相关产品推荐
相关产品推荐

