鱼C论坛

 找回密码
 立即注册
查看: 1568|回复: 5

[已解决]C语言_代码求助

[复制链接]
发表于 2019-10-7 16:37:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

#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;
        }


       
}

最佳答案
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,你试试能不能解决问题。
y.PNG
210629f2ihqqqqrhfj6q46.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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,你试试能不能解决问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-7 19:58:26 | 显示全部楼层

非常感谢!for循环那里的确是犯了不该犯的错误呢
至于控制台乱码,我的控制台也是936,尝试了chcp 65001 后就可以正常显示啦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-7 20:06:03 | 显示全部楼层

默默的再追问一下下,就是按照以上代码能够获取结果,可是还是会出现若干个结果,如下。那么我该如何设置跳出循环的方法才能够得到每个数的立方的式子只有一个呢?
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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; 但结果是正确的。还是加上比较清楚。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-7 20:50:40 | 显示全部楼层
superbe 发表于 2019-10-7 20:23
可以这样:
#include
int main()

懂了懂了,太感谢了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 00:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表