鱼C论坛

 找回密码
 立即注册
查看: 2376|回复: 0

[技术交流] 关于C语言 S1E21:指针课后习题02答案似乎有错误

[复制链接]
发表于 2017-11-6 18:47:57 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 z578067809 于 2017-11-6 18:58 编辑

以下是关于C语言  S1E21:指针课后习题02答案的问题

原题目的答案中,8^3这行的答案好像有些问题,发个贴子,希望能讨论一下。
原答案如下:
课后习题1.png

很明显的,可以看到  8^3这行的右边是不会等于左边的。

我个人觉得答案应该是下面这样:
课后习题2.png


下面是我的code,也不知道是否完全正确,希望大家能够讨论一下,如果有什么错误,还希望各位鱼友不吝指出,谢谢。
#include <stdio.h>
#include <math.h>

int main()
{
        int a, b, sum = 0, i = 1, temp;
        //a为底数,b为a的3次幂,temp为连续奇数串的第1个奇数 ,i遍历奇数串 
        
        int range;// range为数据范围的最大值 
        char answer;
        
        printf("请输入一个整数:");
        scanf("%d", &range); // range为数据范围的最大值 
        
        int array[range][4] ;
        
        for ( a = 3; a <= range; a++ )
        {
                b = pow(a,3);
                temp = 1;
                
                while ( i < b ) //通过i来遍历相加奇数串,不符合则奇数串后移一位重新开始 
                {
                        sum = sum + i;
                        
                        if ( sum > b ) //通过temp存储奇数串后移之后的第1个奇数 ,以便后面使用 
                        {
                                temp += 2;
                                i = temp;         
                                sum = 0;
                                continue;         
                        }
                        
                        else if ( sum == b )
                        {
                                array[a][0] = b;
                                array[a][1] = temp;
                                array[a][2] = temp + 2;
                                array[a][3] = i;                
                                break;        
                        }        
                        
                        i += 2;
                }
                
                if ( i > b)
                {
                        printf("验证失败:整数 %d 无法找到对应的连续奇数\n",a);
                        break; 
                }                        
        }
        // a(range以内的数)全部验证结束了
        // 若没有全部验证结束(即存在不符合定理的数),则不会有a > range
        if ( a > range ) 
        {
                printf ("经验证, 3 ~ %d 之间所有的整数均符合尼科彻斯定理!\n\n", range);
                printf("是否打印所有式子(y/n):");
                getchar();
                scanf("%c", &answer);
                
                if ( answer == 'y' )
                {
                        for ( a = 3; a <= range; a++ )
                        {
                                if ( array[a][3] - array[a][1] > 4 )
                                {
                                        printf("%d^3 == %d == %d + %d +... + %d\n", a, array[a][0], array[a][1], array[a][2], array[a][3]);
                                }
                        
                                else
                                {
                                        printf("%d^3 == %d == %d + %d + %d\n", a, array[a][0], array[a][1], array[a][2], array[a][3]);
                                }        
                        }        
                }
        }
        
        return 0;
}


        


PS:最后快要做到C语言课后习题的动态内存了,后面怎么没题目了,有没有哪套可以配套的题目可以推荐的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-28 20:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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