c - 在我编写的这段 C 代码中我做错了什么
问题描述
问题:给定两个整数 a 和 b,可以是正数也可以是负数,求它们之间的所有整数之和并返回它。如果两个数字相等,则返回 a 或 b。
我对以下解决方案的期望答案是 14。但无论我改变什么,它总是显示 5
我的解决方案:
int get_sum(int a , int b)
{
int d = a;
if ( a > b)
{
for ( int i = b; i == a; i++)
{
d = d + i ;
}
return d;
}
if ( a < b )
{
for ( int i = a; i == b; i++)
{
d = d + i;
}
return d;
}
return 0;
}
int main (void)
{
printf("%i", get_sum(5,-1));
}
解决方案
正确解决您的问题:
int get_sum(int a , int b)
{
int d;
if ( a > b)
{
d = b;
for ( int i = b+1; i <= a; i++)
d = d + i ;
return d;
}
else if ( a < b )
{
d = a;
for ( int i = a+1; i <= b; i++)
d = d + i;
return d;
}
else return a;
}
int main (void)
{
printf("%i", get_sum(5,-1));
}
您的代码有错误的地方是:
您已初始化
d=a
,但在您的情况下 a > b,所以它应该是d=b
。如果 a < b,那么它应该是d=a
。因此,您需要在if-else
条件中进行正确的初始化。您将
for
循环用作for (int i = b; i==a; i++)
. 由于您已经d=b
在内部进行了初始化if
,因此初始化i=b
错误会增加b
两次d
。所以初始化i=b+1
或i=a+1
。您在循环中使用的条件
for
是i==a
ori==b
,在循环开始时不正确,这意味着您的循环根本不会运行。所以把它改成i<=a
ori<=b
。
我还在return a
最后添加了,以防万一a==b
。
推荐阅读
- html - 出现在 CSS 幻灯片后面的文本
- javascript - php数组中未定义的索引,当索引实际上存在时
- python - 如何在 OpenCV 中重用 Grabcut 中的模型?
- php - 编码问题postgresql
- .net-core - 排查iis第一次请求响应时间后recycle
- asp.net-core - 3rd 方 Nuget 包开发人员应该针对哪个 `AspNetCore` 包版本?
- r - 使用特定于组的样本大小从数据框中采样
- reactjs - React-Router 6 的 useBlocker 阻止在应用程序外导航
- python - python3中字节()的快速连接
- apache-nifi - 阿帕奇尼菲。基于现有的修改添加新的 CSV 字段