黑马程序员技术交流社区

标题: 问题求助,求大神 ,求详细 [打印本页]

作者: wg592930    时间: 2015-4-26 10:34
标题: 问题求助,求大神 ,求详细
程序1:实现  1-2+3-4+5-4................n
#include<stdio.h>

int main()
{
    int n =0;;
   while(n  <=0)
   {
   printf("请输入一个正整数:");
   scanf("%d",&n );
   }

    int sum = 0;
    int i = 0;
    while(i <n )
    {

        i++;
        if (i %2 == 0)
        {
            sum=sum-i;   ///////////////////////////问题  把这里改成  i= 0-i ; 为什么会出现死循环,执行错误。我的思路是 每当出现偶数 就将i 变为 相反数,请问这样有什么错误。
        }
        sum =sum + i ;

    }

    printf("sum 的值为 : %d\n" ,sum);
    return 0;

}



作者: So然后    时间: 2015-4-26 10:51
提示: 作者被禁止或删除 内容自动屏蔽
作者: wg592930    时间: 2015-4-26 10:57
So然后 发表于 2015-4-26 10:51
你应该是 if + else  按照你的就变成了 1 -2 +2 +3 -4 +4.。。。。

可否把你认为正确的程序贴出来,谢谢,(按照我的思路)
作者: So然后    时间: 2015-4-26 11:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: 霸王睡别姬    时间: 2015-4-26 11:06
你这个“1-2+3-4+5-4......n”好像没规律,我猜后面一个写错了;我再猜,我给你写了一个
  1. #include <stdio.h>
  2. int main()
  3. {       
  4.         int n;
  5.         int sum=0;
  6.         int i=1;
  7.         int count=0;

  8.         printf("请输入一个正整数:");
  9.         scanf("%d",&n);
  10.         while (i<=n)
  11.         {
  12.                 count=i;
  13.                 if(i%2==0)
  14.                 {
  15.                         count=-i;
  16.                 }
  17.                 sum=sum+count;
  18.                 i++;
  19.         }
  20.         printf("sum的值为:%d\n",sum);
  21.         getchar();
  22.         getchar();
  23. }
复制代码

看看可能有点帮助
作者: wg592930    时间: 2015-4-26 11:13
霸王睡别姬 发表于 2015-4-26 11:06
你这个“1-2+3-4+5-4......n”好像没规律,我猜后面一个写错了;我再猜,我给你写了一个

看看可能有点帮助 ...

谢谢  看来我得必须再加一个变量

作者: 程序小白猿    时间: 2015-4-26 11:55
这个基础视频里的作业里是有的,看下答案
作者: shao    时间: 2015-4-26 13:08
死循环???
作者: irobort    时间: 2015-4-27 20:51
死循环,,,,,,,
作者: mony    时间: 2015-4-27 21:00
我觉得这样更简单
  1. int main(int argc, const char * argv[]) {
  2.     int n = 0,total = 0;
  3.     while (n <= 0) {
  4.         printf("输入一个正整数\n");
  5.         scanf("%d",&n);
  6.     }
  7.     for (int i = 0; i <= n; i++) {
  8.         total += (i % 2 == 0 ? -i : i);
  9.     }
  10.     printf("总和为%d",total);
  11.     return 0;
  12. }
复制代码

作者: mony    时间: 2015-4-27 21:01
下面那个可以不加括号,重发
  1. int main(int argc, const char * argv[]) {
  2.     int n = 0,total = 0;
  3.     while (n <= 0) {
  4.         printf("输入一个正整数\n");
  5.         scanf("%d",&n);
  6.     }
  7.     for (int i = 0; i <= n; i++) {
  8.         total += i % 2 == 0 ? -i : i;
  9.     }
  10.     printf("总和为%d",total);
  11.     return 0;
  12. }
复制代码

作者: shenxian88    时间: 2015-4-30 11:40
你这个题,你用断点调试一下就好了,那样你就能看出是哪里出了问题,
作者: MllWing    时间: 2015-4-30 14:04
奇数前面是加,偶数前面是减      i=0-i,i是0或负数,n是正数,死循环
作者: wg592930    时间: 2015-5-1 18:03
MllWing 发表于 2015-4-30 14:04
奇数前面是加,偶数前面是减      i=0-i,i是0或负数,n是正数,死循环

谢谢 你   已经解决了  感谢你的帮助
作者: 吾爱SF    时间: 2015-5-1 19:13
路过,,看看,
作者: zhangxiaodonghi    时间: 2015-8-17 17:42
共同学习 学习
作者: 408205555    时间: 2015-8-17 20:09
1-2+3-4+5-6................n  你都写错了,6要是4就没规律了,无解
规律就是奇数和减去偶数和。
void main()
{
   int num;
   scanf("%d",&num);
   //奇数的和
   int oddNumber=0;
   //偶数的和
   int evenNumber=0;
   //结果=奇数的和-偶数的和
   int result=0;
   for(int i=1;i<=num;i++){
        if(i&1==1){ //奇数,使用逻辑&可以让程序执行的快一些
            oddNumber=oddNumber+i;
        }else{
            evenNumber=evenNumber+i;
        }
   }
   result=oddNumber-evenNumber;
   printf("result=%d",result);
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2