关于循环要注意的小问题

错误示范1:#include
using namespace std;
int main(){
    int m,n,sum=0;
    while(cin>>m>>n&&n>0&&m>0){
        for(int i=m;i<=n;i++){
            if(m>n)swap(m,n);
            cout<             sum=(m+n)*(m-n+1)/2;
            cout<<"Sum="<         }
        cout<     }
    return 0;}

分析

1. swap 位置错误

在 for 循环内部进行 swap 操作是不合适的。swap 应该在进入 for 循环之前执行,这样才能确保 m 始终是较小值,n 始终是较大值,保证后续的等差数列能正确输出。

2. 求和公式使用错误

sum=(m + n) * (m - n + 1) / 2; 这个求和公式是错误的。等差数列求和公式为 Sn​=2n(a1​+an​)​,其中 n 是项数,a1​ 是首项,an​ 是末项。在本题中,项数应该是 n - m + 1,所以正确的求和公式应该是 sum = (m + n) * (n - m + 1) / 2;

3. 求和位置错误

当前代码将求和操作放在 for 循环内部,这会导致每次循环都重新计算并输出一次和,不符合题目要求。求和操作应该在 for 循环结束后进行,并且只输出一次和。

修正

#include 
using namespace std;
int main() {
    int m, n;
    while (cin >> m >> n && n > 0 && m > 0) {
        if (m > n) swap(m, n);  
// 在进入循环前, m 是较小值,n 是较大值
        int sum = 0;
        for (int i = m; i <= n; i++) {
            cout << i << ' ';
            sum += i;  
        }
        cout << "Sum=" << sum << endl;  // 循环结束后输出总和
    }
    return 0;
}

你可能感兴趣的:(C++学习记录,c++)