生如夏花133 发表于 2019-10-7 16:37:11

C语言_代码求助

对应于鱼C指针当中的最后一个作业
请问以下代码的写法错在哪里了?
为什么运行后,输入y后没有结果显示出来?(第二幅图)
顺带问问为啥命令提示符中运行的时候会出现乱码?{:5_111:}

#include <stdio.h>

int main()
{
        int a,iSum = 0,i,j,k,cubed;
        char b;
        printf("请输入一个整数:");
        scanf("%d", &a);
        printf("经验证,3 - %d 之间所有的整数均符合尼科彻斯定理!", a);

        printf("是否打印所有式子(y/n):");
        getchar();
        scanf("%c", &b);
        //cubed = (a * a*a);

        if (b == 'y')
       
                for (k = a; k < 3; k -= 1)
                {
                        cubed = (k*k*k);

                                for (j = 1; j < (cubed); j += 2)

                                        for (i = j; i <= (cubed);)
                                        {
                                                iSum += i;

                                                if (iSum == cubed)
                                                {
                                                        printf("%d ^3 = %d + %d ... + %d", k, j, j + 2, i);
                                                        return 0;
                                                }
                                                if (iSum > cubed)
                                                {
                                                        iSum = 0;            //这里遗漏了将iSum清零的步骤
                                                        break;
                                                }
                                                i += 2;
                                        }
                }
        else
        {
                return 0;
        }


       
}

superbe 发表于 2019-10-7 18:36:50

本帖最后由 superbe 于 2019-10-7 18:53 编辑

#include <stdio.h>

int main()
{
        int a,iSum = 0,i,j,k,cubed;
        char b;
        printf("请输入一个整数:");
        scanf("%d", &a);
        printf("经验证,3 - %d 之间所有的整数均符合尼科彻斯定理!", a);

        printf("是否打印所有式子(y/n):");
        getchar();
        scanf("%c", &b);
        //cubed = (a * a*a);

        if (b == 'y')

                for (k = a; k >= 3; k -= 1)    //改前k<3
                {
                        cubed = (k*k*k);

                        for (j = 1; j < (cubed); j += 2)

                                for (i = j; i <= (cubed);)
                                {
                                        iSum += i;

                                        if (iSum == cubed)
                                        {
                                                printf("%d ^3 = %d + %d ... + %d\n", k, j, j + 2, i);
                                                break;    //改前return 0
                                        }
                                        if (iSum > cubed)
                                        {
                                                iSum = 0;            //这里遗漏了将iSum清零的步骤
                                                break;
                                        }
                                        i += 2;
                                }
                        }
        else
        {
                return 0;
        }
}

控制台乱码应该是文件编码和控制台编码不一致的原因,百度了下有个chcp命令是设置控制台编码的
chcp             #显示当前代码页
chcp 65001   #换成utf-8代码页
chcp 936       #换成默认的gbk
chcp 437       #美国英语
我的控制台是936,你试试能不能解决问题。

生如夏花133 发表于 2019-10-7 19:58:26

superbe 发表于 2019-10-7 18:36
#include

int main()


非常感谢!for循环那里的确是犯了不该犯的错误呢
至于控制台乱码,我的控制台也是936,尝试了chcp 65001 后就可以正常显示啦~{:5_109:}

生如夏花133 发表于 2019-10-7 20:06:03

superbe 发表于 2019-10-7 18:36
#include

int main()


默默的再追问一下下,就是按照以上代码能够获取结果,可是还是会出现若干个结果,如下。那么我该如何设置跳出循环的方法才能够得到每个数的立方的式子只有一个呢?
10 ^3 = 31 + 33 ... + 69
10 ^3 = 91 + 93 ... + 109
10 ^3 = 247 + 249 ... + 253
10 ^3 = 499 + 501 ... + 501
9 ^3 = 73 + 75 ... + 89
9 ^3 = 241 + 243 ... + 245
8 ^3 = 17 + 19 ... + 47
8 ^3 = 57 + 59 ... + 71
8 ^3 = 125 + 127 ... + 131
8 ^3 = 255 + 257 ... + 257
7 ^3 = 43 + 45 ... + 55
6 ^3 = 7 + 9 ... + 29
6 ^3 = 31 + 33 ... + 41
6 ^3 = 51 + 53 ... + 57
6 ^3 = 107 + 109 ... + 109
5 ^3 = 21 + 23 ... + 29
4 ^3 = 1 + 3 ... + 15
4 ^3 = 13 + 15 ... + 19
4 ^3 = 31 + 33 ... + 33
3 ^3 = 7 + 9 ... + 11

superbe 发表于 2019-10-7 20:23:05

本帖最后由 superbe 于 2019-10-7 20:45 编辑

可以这样:
#include <stdio.h>
int main()
{
        int a,iSum = 0,i,j,k,cubed;
        char b;
        printf("请输入一个整数:");
        scanf("%d", &a);
        printf("经验证,3 - %d 之间所有的整数均符合尼科彻斯定理!", a);

        printf("是否打印所有式子(y/n):");
        getchar();
        scanf("%c", &b);
        //cubed = (a * a*a);

        if (b == 'y')
                for (k = a; k >= 3; k -= 1)
                {
                        int found=0;
                        cubed = (k*k*k);
                        for (j = 1; j < (cubed); j += 2){
                                for (i = j; i <= (cubed);)
                                {
                                        iSum += i;
                                        if (iSum == cubed)
                                        {
                                                printf("%d ^3 = %d + %d ... + %d\n", k, j, j + 2, i);
                                                found = 1;
                                                break;
                                        }
                                        if (iSum > cubed)
                                        {
                                                iSum = 0;
                                                break;
                                        }
                                        i += 2;
                                }
                                if(found) break;
                        }
                }
        else
        {
                return 0;
        }
}

或者这样,用goto:
#include <stdio.h>
int main()
{
        int a,iSum = 0,i,j,k,cubed;
        char b;
        printf("请输入一个整数:");
        scanf("%d", &a);
        printf("经验证,3 - %d 之间所有的整数均符合尼科彻斯定理!", a);
        printf("是否打印所有式子(y/n):");
        getchar();
        scanf("%c", &b);
        //cubed = (a * a*a);

        if (b == 'y')
                for (k = a; k >= 3; k -= 1)
                {
                        cubed = (k*k*k);
                        for (j = 1; j < (cubed); j += 2)
                                for (i = j; i <= (cubed);)
                                {
                                        iSum += i;
                                        if (iSum == cubed)
                                        {
                                                printf("%d ^3 = %d + %d ... + %d\n", k, j, j + 2, i);
                                                goto nextk;
                                        }
                                        if (iSum > cubed)
                                        {
                                                iSum = 0;
                                                break;
                                        }
                                        i += 2;
                                }
nextk:;
                }
        else
        {
                return 0;
        }
}

上面代码在计算下一个k之前前没有把iSum清0; 但结果是正确的。还是加上比较清楚。

生如夏花133 发表于 2019-10-7 20:50:40

superbe 发表于 2019-10-7 20:23
可以这样:
#include
int main()


懂了懂了,太感谢了!
页: [1]
查看完整版本: C语言_代码求助