#include <iostream>
#include <algorithm>
using namespace std;
void sumrange(int x, int y) {
int sum;
cout << "Enter the first number: ";
cin >> x;
cout << "Enter the second number: ";
cin >> y ;
int bnum = max(x,y);
int snum = min(x,y);
int i = snum;
while (i < bnum) { sum = i; i ; }
cout << sum;
}
int main() {
int x, y;
sumrange(x,y);
return 0;
}
我無法從我的輸入中得到正確答案 我嘗試了 1 和 4,答案是 3,但它應該是 1 2 3 4,也就是 10。
uj5u.com熱心網友回復:
幾個觀察:
- 不要使用
using namespace std;它是一種不好的做法,可能會導致名稱沖突 - 變數
int sum在使用前需要顯式初始化 sum = i應該sum = i<=如果要包含上限,則需要使用- 看一下等差數列
sumrange函式不需要引數,SICE他們是按值傳遞int x, y;從main沒有在所有使用
以下代碼應該做你想做的:
#include <iostream>
#include <algorithm>
void sumrange()
{
int x;
int y;
int sum = 0;
std::cout << "Enter the first number: ";
std::cin >> x;
std::cout << "Enter the second number: ";
std::cin >> y ;
int bnum = std::max(x,y);
int snum = std::min(x,y);
int i = snum;
while (i <= bnum) { sum = i; i ; }
std::cout << sum;
}
int main() {
sumrange();
return 0;
}
uj5u.com熱心網友回復:
您已將 = 符號反轉為 = 它應該是sum = i。
sum = i 將數字分配給自己
編輯:您還應該初始化總和,在評論中說明
uj5u.com熱心網友回復:
您給定的代碼片段有3 個問題。
問題1: = 應該 =在陳述句中:
sum = i; //= should be =
問題2:變數sum是未初始化,因此它有一個垃圾值。使用該垃圾值會導致未定義的行為。
問題 3:應該在陳述句中使用<=而不是<
while (i < bnum) //should be i<=bnum
所以修改后的(更正的)程式如下所示:
#include <iostream>
#include <algorithm>
void sumrange(int x, int y) {
int sum=0;///INITIALIZE sum
std::cout << "Enter the first number: ";
std::cin >> x;
std::cout << "Enter the second number: ";
std::cin >> y ;
int bnum = std::max(x,y);
int snum = std::min(x,y);
int i = snum;
while (i <= bnum) //USED <=
{
sum = i; //USED =
i ;
}
std::cout << sum;
}
int main() {
int x, y;
sumrange(x,y);
return 0;
}
替代方案
請注意,您可以在不使用回圈的情況下找到總和,如下所示:
#include <iostream>
#include <algorithm>
void sumrange(int x, int y) {
int sum=0;//initialize sum
std::cout << "Enter the first number: ";
std::cin >> x;
std::cout << "Enter the second number: ";
std::cin >> y ;
sum = (std::abs(x - y) 1) * (x y) / 2; //ADDED THIS
std::cout << sum;
}
int main() {
int x, y;
sumrange(x,y);
return 0;
}
uj5u.com熱心網友回復:
C 20 解決方案:
#include <algorithm>
#include <iostream>
#include <numeric>
#include <ranges>
int main()
{
int a{ 0 };
int b{ 0 };
std::cout << "Enter the first number: ";
std::cin >> a;
std::cout << "Enter the second number: ";
std::cin >> b;
auto lower_bound = std::min(a, b);
auto upper_bound = std::max(a, b) 1; // iota view is exclusive so add 1
auto view = std::ranges::iota_view{ lower_bound , upper_bound };
auto sum = std::accumulate(view.begin(), view.end(), 0);
std::cout << "sum = " << sum << "\n";
return 0;
}
uj5u.com熱心網友回復:
constexpr auto sumrange(const int x, const int y) noexcept {
auto sum = 0;
if (x < y) for (auto i = x; i <= y; i) sum = i; else
if (y < x) for (auto i = y; i <= x; i) sum = i;
return sum;
}
int main() {
constexpr auto x = 1;
constexpr auto y = 3;
constexpr auto r = sumrange(x, y); // 1 2 3
std::cout << r << '\n'; // 6
}
uj5u.com熱心網友回復:
此呼叫中不使用函式引數的值
int x, y;
sumrange(x,y);
所以這樣的呼叫是沒有意義的。
您需要在 main 中要求用戶輸入一個數字范圍并將該范圍傳遞給函式。
該函式的任務是回傳 main 中指定范圍的計算總和。
在函式內sumrange,變數sum未初始化。
int sum;
您需要將其初始化為 0。
在這個while回圈中
while (i < bnum) { sum = i; i ; }
^^
有一個錯字。 =您使用的是賦值運算子=和一元 運算符,而不是復合賦值運算符
此外,根據您的評論,您還需要將 的值添加bnum到sum.
所以回圈應該至少看起來像
while (i <= bnum) { sum = i; i ; }
請注意,通常可能會發生溢位。因此最好將變數宣告sum為具有型別long long int。
函式和程式可以如下圖
#include <iostream>
#include <utility>
#include <algorithm>
long long int range_sum( int x, int y )
{
long long int sum = 0;
auto [first, last] = std::minmax( { x, y } );
do
{
sum = first;
} while (first != last);
return sum;
}
int main()
{
int x = 0, y = 0;
std::cout << "Enter the first number: ";
std::cin >> x;
std::cout << "Enter the second number: ";
std::cin >> y;
std::tie( x, y ) = std::minmax( { x, y } );
std::cout << "The sum of numbers in the range ["
<< x << ", " << y << "] is equal to "
<< range_sum( x, y )
<< '\n';
}
程式輸出可能看起來像
Enter the first number: 1
Enter the second number: 10
The sum of numbers in the range [1, 10] is equal to 55
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/394359.html
上一篇:回圈只列印最后一個值
下一篇:R函式在每一行增加數字
