A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© WANGJIAO 中级黑马   /  2014-10-20 16:10  /  1592 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 WANGJIAO 于 2014-10-20 16:16 编辑

题目是:提示用户输入一个正整数n,计算1-2+3-4+5-6+…+n的和
我写的是:

   
  1. printf("请输入一个正整数:\n");
  2.      int num;
  3.      scanf("%d",&num);
  4.      while (num <= 0) {
  5.          printf("请输入一个正整数:\n");
  6.          scanf("%d",&num);

  7.      }

  8.      int sum=0,i=0;
  9.      while (i<num) {

  10.          if (i%2==0) {
  11.              i=-i;
  12.          }
  13.              i++;
  14.              sum+=i;

  15.          }
  16.          printf("%d\n",sum);
复制代码



    为什么算不出来?终端也用不了一直回车没有结果,怎么回事?






评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

12 个回复

倒序浏览
真心求教,老师说很简单就不讲了,让自己做自己想,可是我不会做,想很久了,求大神给指点下好吗
回复 使用道具 举报
你的 i 的值弄混了吧,一会变  if 里面变成负值了 你后面再加不是你想要的吧!

if(i<num)
{
    i=-i;
}
sum+=i;
i=-i;//这个地方i要变回正数吧
i++;

点评

哈哈,泡论坛呢。准备第4期?  发表于 2014-10-20 16:38
回复 使用道具 举报
  1. #import <Foundation/Foundation.h>

  2. int main(int argc, const char * argv[])
  3. {
  4.     int num;
  5.     int sum;
  6.     int i;
  7.    
  8.     printf("请输入一个正整数\n");
  9.     scanf("%d" , &num);
  10.    
  11.     i = 0;
  12.     sum = 0;
  13.    
  14.     while(i <= num)
  15.     {
  16.         if(i%2 == 0)
  17.         {
  18.             sum -= i; //直接减去i,而不是把变换i的符号后相加
  19.         }
  20.         else
  21.         {
  22.             sum += i;
  23.         }
  24.         i++;
  25.     }
  26.      
  27.     /*
  28.      int tmp; //可以多定义一个变量,用来保存i或-i的值
  29.      while(i <= num)
  30.      {
  31.         if(i%2 == 0)
  32.         {
  33.             tmp = -i;
  34.         }
  35.         else
  36.         {
  37.             tmp = i;
  38.         }
  39.         sum += tmp;
  40.         i++;
  41.      }
  42.      */
  43.    
  44.     /*
  45.      //如果不多定义一个变量的话,把i改成了-i后,要在下一个循环之前把i的值改回来
  46.      while(i <= num)
  47.      {
  48.         if(i%2 == 0)
  49.         {
  50.             i = -i;
  51.         }
  52.         sum += i;
  53.         if(i < 0) //在i++之前把i的值改回来
  54.         {
  55.             i = -i;
  56.         }
  57.         i++;
  58.      }
  59.      */
  60.    
  61.    
  62.     printf("%d\n" , sum);
  63.    
  64.     return 0;
  65. }
复制代码

评分

参与人数 1黑马币 +1 收起 理由
WANGJIAO + 1 赞一个!

查看全部评分

回复 使用道具 举报
页面老是出错,网站维护,我以为没回复成功。
回复 使用道具 举报

除了赞你没别的办法表达我对你的感谢~我的黑马币也不多哈,还要攒技术分,理解心意哈~谢谢~
回复 使用道具 举报
WANGJIAO 发表于 2014-10-20 19:59
除了赞你没别的办法表达我对你的感谢~我的黑马币也不多哈,还要攒技术分,理解心意哈~谢谢~ ...

你的黑马币留着自己用,能帮的我会尽量帮的
回复 使用道具 举报
崔石炫 发表于 2014-10-20 20:04
你的黑马币留着自己用,能帮的我会尽量帮的

谢谢谢谢谢谢~
回复 使用道具 举报
int num = (n % 2 == 0) ? ( n / 2 * (-1)) : ( n / 2 * (-1) + n);
回复 使用道具 举报
coyote 中级黑马 2014-10-20 22:09:57
10#
int main()
{
    //printf("请输入一个正整数:\n");
    int num = 0;
    //scanf("%d",&num);
    while (num <= 0) {
        printf("请输入一个正整数:\n");
        scanf("%d",&num);
        
    }
   
    int sum = 0,i = 1;
    while (i<=num) {
        
        if (i%2==0) {
            
            sum -=i;
            
        }else{
            
            sum +=i;
        }
        
        i++;
        
    }
    printf("%d\n",sum);
   
    return 0;
}
回复 使用道具 举报
用递归试试吧,这个方案是最容易想出来的
回复 使用道具 举报
楼主的逻辑不清楚,代码好乱
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马