| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 402 人关注过本帖
标题:小白请教下 为什么输出的d的值总是不正确 本来想输出的是输入范围区间内所有 ...
只看楼主 加入收藏
grayhooo
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2018-10-11
结帖率:100%
  问题点数:0  回复次数:10   
小白请教下 为什么输出的d的值总是不正确 本来想输出的是输入范围区间内所有奇数的立方和
#include<stdio.h>
int main()
{
    int n,i,a,b,s=0,d=0;
    while(scanf("%d %d",&a,&b)!=EOF)
    {
        
        for(i=0;i<=b-a;i++)
        {
            if(a%2==0)
            {s=s+a*a;}
            else
            {d=d+a*a*a;}
            a++;
        }
    printf("%d ",s);
    printf("%d\n",d);
    s=0;
    d=0;
    }
   
}
2018-10-12 22:09
grayhooo
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2018-10-11
  得分:0 
呃..发现输入数字增大之后s也不是偶数的平方和..
2018-10-12 22:17
拉拉面
Rank: 1
来 自:广州
等 级:新手上路
帖 子:26
专家分:5
注 册:2018-9-22
  得分:0 
我已经帮你改好啦!你看一下吧!
#include<stdio.h>
int main()
{
    int i,a,b,s,d;
    while(scanf("%d %d",&a,&b)!=EOF)
    {
        s=0;
        d=0;
        for(i=a;i<=b;i++)
//这里是你的主要错因,那个a其实可有可无,我们暂时把它去掉,用i可以直接替代;还有你要算的是a到b之间的平方和,可不能只要他们的循环次数,要从a开始算,
//如果你从1开始就会算到2,4...或者1,3...之类的平方和!不论你输多大的数都会!
        {
            if(i%2==0)
                s+=(i*i);//这里是简写,像a+=1同等于a=a+1
            else
                d+=(i*i);
        }
        printf("%d ",s);
        printf("%d\n",d);
    }
    return 0;
}
如果还有什么不知道的,欢迎来找我问~~QQ:3244982757 //路人不要加!这不是广告。。

哈哈哈哈哈啦啦啦
2018-10-12 23:52
grayhooo
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2018-10-11
  得分:0 
非常感谢 但是我还想知道原来的那一部分为什么会出错..
2018-10-13 08:45
grayhooo
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2018-10-11
  得分:0 
for(i=0;i<=b-a;i++)
        {
            if(a%2==0)
            {s=s+a*a;}
            else
            {d=d+a*a*a;}
            a++;
        }
      与   
         for(i=a;i<=b;i++)
        {
            if(i%2==0)
                s+=(i*i);//这里是简写,像a+=1同等于a=a+1
            else
                d+=(i*i);
        }
为什么不等价..
2018-10-13 08:48
no1xijin
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:江西
等 级:版主
威 望:19
帖 子:190
专家分:1126
注 册:2015-7-8
  得分:0 
我理解为你的代码是输入 1   6;然后求1 2 3 4 5 6中偶数的平方和s,奇数的立方和d,并将s和d输出。
以下是实现代码,是在你的代码上修改的,修改处有红色标记,

程序代码:
#include<stdio.h>
int main()
{
    int n,i,a,b,s=0,d=0;  //  n i 可以删掉不定义
    while(scanf("%d %d",&a,&b)!=EOF)
    {
//        for(i=0;i<=b-a;i++)
        for(;a<=b;)   // 没必要再加一个变量i来控制循环变量,直接用a和b控制就可以了。
        {
            if(a%2==0)
            {s=s+a*a;}
            else
            {d=d+a*a*a;}
            a++;   
        }
        printf("s=%d ",s);   // 输出直观
        printf("d=%d\n",d);
//        s=0;    // 存在无意义
//        d=0;
    }
   
}
2018-10-13 09:22
grayhooo
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2018-10-11
  得分:0 
回复 6楼 no1xijin
非常感谢,但是s=0和d=0若是删去的话 多次输入的话 后面的输出都会错误..我明白了i放入程序没有必要..但是我不明白为什么放入i之后程序会错误..我认为这两个应该是等价的..
2018-10-13 10:06
no1xijin
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:江西
等 级:版主
威 望:19
帖 子:190
专家分:1126
注 册:2015-7-8
  得分:0 
回复 7楼 grayhooo
红色字体为新加内容
#include<stdio.h>
int main()
{
    int n,i,a,b,s=0,d=0;  //  n i 可以删掉不定义
    while(scanf("%d %d",&a,&b)!=EOF)  // ctrl + c 退出程序
    {
//        for(i=0;i<=b-a;i++)  
        /*
        因为b一直不变,但是a每次都在变,因此i<=b-a 也就一直在变,简单举个例子如下
        输入 1 6
        i=0 时 a=0 b-a=6-0=6
        i=1 时 a=1 b-a=6-1=5
        i=2 时 a=2 b-a=6-2=4
        i=3 时 a=3 b-a=6-3=3
        i=4 时 a=4 b-a=6-4=2   此时 i<=b-a 不成立,跳出for循环。
        因此你的结果算的范围不是1-6,而是1-3
        */

        for(;a<=b;)   // 没必要再加一个变量i来控制循环变量,直接用a和b控制就可以了。
        {
            if(a%2==0)
            {s=s+a*a;}
            else
            {d=d+a*a*a;}
            a++;  
        }
        printf("s=%d ",s);   // 输出直观
        printf("d=%d\n",d);
        s=0;  // 为下次循环运行做准备,是我对while条件没理解清,受教了,谢谢。
        d=0;
    }
   
}
2018-10-13 10:53
grayhooo
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2018-10-11
  得分:0 
回复 8楼 no1xijin
非常感谢 一直没注意到b-a中的a是在改变的 谢谢
2018-10-13 11:45
拉拉面
Rank: 1
来 自:广州
等 级:新手上路
帖 子:26
专家分:5
注 册:2018-9-22
  得分:0 
回复 4楼 grayhooo
但你的循环是从0开始的呀,已经不是a到b之间的了。

哈哈哈哈哈啦啦啦
2018-10-13 23:48







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026074 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved