可以运行 但运行啥也没有?

题目:编程求sum=1-1/2+1/3-1/4...+1/99-1/100的值并输出。

img

img

参考如下:

#include<stdio.h>

int main() 
{
    int i, sign = 1;
    double sum = 0;

    i = 1;
    while (i <= 100)
    {
        sum += 1.0 * sign / i++;
        sign = -sign;
    }

    printf("%lf\n", sum);

    return 0;
}

看看你的输出

出现了死循环,while(sign<=100)不写{ }默认循环体中只有一行代码,即i=-i,导致程序无法退出循环

#include <stdlib.h>
 
int main()
{
    int i, sign=1;
    double sum=0; 
    i = 1;
    while (i <= 100) {
        sum += 1.0f/(sign*i);
        sign = -sign;
        i++;
    }
    printf("%lf", sum);
    return 0;
}

img

修改如下,供参考:

img

存在一些问题导致结果无法正确输出。下面是代码中存在的问题和需要进行改进的地方:
在循环内部,缺少对变量i和sign的更新操作。在每次循环迭代时,需要根据当前的循环次数来更新i的符号和sign的值。


int sign = 1;
double sum = 0.0;

for (int i = 1; i <= 100; i++) {
    double c = (i * 1.0) / sign;
    sum = sum + c;
    sign = -sign;  // 更新符号
    
    // 输出每一次迭代的结果
    printf("当前迭代结果: %f\n", sum);
}

// 输出最终的累加和
printf("最终结果: %f\n", sum);

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7413110
  • 这篇博客也不错, 你可以看下计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的sum(3种)
  • 除此之外, 这篇博客: 编程练习题中的 计算1/1-1/2+1/3-1/4+1/5…+1/99-1/100 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include<iostream>
    using namespace std;
    int main()
    {
    	double sum = 0;
    	for (int i = 1; i <= 100; i++)
    	{
    		if (i % 2 == 0)
    		{
    			sum = sum - 1.0 / i;
    		}
    		else
    			sum = sum + 1.0 / i;
    	}
    	cout << sum << endl;
    	return 0;
    }
    
  • 以下回答来自chatgpt:

    解决方案如下所示:

    #include <iostream>
    using namespace std;
    
    int main() {
        int num;
        double sum = 0;
        cout << "请输入数列的项数:";
        cin >> num;
        for (int i = 1; i <= num; i++) {
            if (i % 2 == 0) {
                sum -= 1.0 / i;
            } else {
                sum += 1.0 / i;
            }
        }
        cout << "数列的和为:" << sum << endl;
        return 0;
    }
    

    代码解释:

    1. 首先需要输入数列的项数,这里使用了cout和cin进行输入输出操作;
    2. 然后使用double类型的变量sum来保存数列的和,初始值为0;
    3. 在for循环中,当i为奇数时,累加1/i;当i为偶数时,累减1/i;
    4. 最后输出数列的和,注意要使用endl换行符。

    另外,由于本题给出的参考资料存在误导性,建议不要查看参考资料。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^