黑马程序员技术交流社区
标题: while循环练习中,使用if和else if,计算结果不一致 ? [打印本页]
作者: Koyou 时间: 2014-12-18 00:41
标题: while循环练习中,使用if和else if,计算结果不一致 ?
while循环练习中,遇到问题。
练习题是:
/*
练习1:提示用户输入一个正整数n,计算1-2+3-4+5-6+…+n的和
*/
#include <stdio.h>
int main()
{
int n;
printf("请输入一个正整数:\n");
scanf("%d", &n);
while( n <= 0)
{
printf("您输入错误,请重新输入:\n");
scanf("%d", &n);
}
int a = 1;
int sum = 0;
while(a <= n)
{
if(a % 2 == 0)
{
sum = sum - a;
a++;
}
else if(a % 2 != 0)
{
sum = sum + a;
a++;
}
}
printf("计算结果是:%d\n", sum);
return 0;
}
以上代码执行时正常的,然后尝试 使用if不同的表达方式,机会不使用else if 而直接用 连个 if函数。
如下
#include <stdio.h>
int main()
{
int n;
printf("请输入一个正整数:\n");
scanf("%d", &n);
while( n <= 0)
{
printf("您输入错误,请重新输入:\n");
scanf("%d", &n);
}
int a = 1;
int sum = 0;
while(a <= n)
{
if(a % 2 == 0)
{
sum = sum - a;
a++;
}
if(a % 2 != 0)
{
sum = sum + a;
a++;
}
}
printf("计算结果是:%d\n", sum);
return 0;
}
输出的结果是不一样的 ?问题出在哪里 ?
作者: 从今以后 时间: 2014-12-18 00:57
if(a % 2 == 0)
{
sum = sum - a;
a++;
}
这个块a++后a的值就变了,本来a%2=0, +1后就不等了,所以下个判断就成立了也。
作者: chasedream 时间: 2014-12-18 08:30
对头。上面的elseif 后面没必要加条件了
作者: 邓明 时间: 2014-12-18 09:45
赞同上面两楼的看法
a++可以放到while循环里面,这样避免出错
放在if...else...里面确实有改变计算结果的问题
作者: zsling 时间: 2014-12-18 10:04
1.while(a <= n)
{
if(a % 2 == 0)
{
sum -= a;
}
else
{
sum += a;
}
a++;
}
2. while(a<=n)
{
}
作者: zsling 时间: 2014-12-18 10:06
1.while(a <= n)
{
sum = a%2 ? sum + a : sum - a;
a++;
}
作者: Koyou 时间: 2014-12-18 17:32
我喜欢你这个方式,使用三目运算。
晚上回去,我去写一下。
作者: Koyou 时间: 2014-12-18 17:35
是呀,a++;不是在判断里,直接在 while中循环 {:3_56:}
作者: zsling 时间: 2014-12-18 17:36
我个人觉得三目表达式简洁,我看老师视频中有好几处都是使用的if-else,想着怎么简洁就想到它了
作者: Koyou 时间: 2014-12-18 17:42
谢谢呀,使用else if的时候,if执行后 else if不会执行,但是 使用if 。。 if.。。 的时候第一个因为 都有 a++; 所以,其实 两个if 语句 都是在执行。这样导致 最终的计算总值,其实是 超过了 用户输入的 n 而是 n +1 个数进行 计算。
作者: Koyou 时间: 2014-12-18 17:43
是呀, 我懂了 :)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |