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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:36:03