鱼C论坛

 找回密码
 立即注册
查看: 2546|回复: 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,也不知道是否完全正确,希望大家能够讨论一下,如果有什么错误,还希望各位鱼友不吝指出,谢谢。

  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.         int a, b, sum = 0, i = 1, temp;
  6.         //a为底数,b为a的3次幂,temp为连续奇数串的第1个奇数 ,i遍历奇数串
  7.        
  8.         int range;// range为数据范围的最大值
  9.         char answer;
  10.        
  11.         printf("请输入一个整数:");
  12.         scanf("%d", &range); // range为数据范围的最大值
  13.        
  14.         int array[range][4] ;
  15.        
  16.         for ( a = 3; a <= range; a++ )
  17.         {
  18.                 b = pow(a,3);
  19.                 temp = 1;
  20.                
  21.                 while ( i < b ) //通过i来遍历相加奇数串,不符合则奇数串后移一位重新开始
  22.                 {
  23.                         sum = sum + i;
  24.                        
  25.                         if ( sum > b ) //通过temp存储奇数串后移之后的第1个奇数 ,以便后面使用
  26.                         {
  27.                                 temp += 2;
  28.                                 i = temp;         
  29.                                 sum = 0;
  30.                                 continue;        
  31.                         }
  32.                        
  33.                         else if ( sum == b )
  34.                         {
  35.                                 array[a][0] = b;
  36.                                 array[a][1] = temp;
  37.                                 array[a][2] = temp + 2;
  38.                                 array[a][3] = i;               
  39.                                 break;       
  40.                         }       
  41.                        
  42.                         i += 2;
  43.                 }
  44.                
  45.                 if ( i > b)
  46.                 {
  47.                         printf("验证失败:整数 %d 无法找到对应的连续奇数\n",a);
  48.                         break;
  49.                 }                       
  50.         }
  51.         // a(range以内的数)全部验证结束了
  52.         // 若没有全部验证结束(即存在不符合定理的数),则不会有a > range
  53.         if ( a > range )
  54.         {
  55.                 printf ("经验证, 3 ~ %d 之间所有的整数均符合尼科彻斯定理!\n\n", range);
  56.                 printf("是否打印所有式子(y/n):");
  57.                 getchar();
  58.                 scanf("%c", &answer);
  59.                
  60.                 if ( answer == 'y' )
  61.                 {
  62.                         for ( a = 3; a <= range; a++ )
  63.                         {
  64.                                 if ( array[a][3] - array[a][1] > 4 )
  65.                                 {
  66.                                         printf("%d^3 == %d == %d + %d +... + %d\n", a, array[a][0], array[a][1], array[a][2], array[a][3]);
  67.                                 }
  68.                        
  69.                                 else
  70.                                 {
  71.                                         printf("%d^3 == %d == %d + %d + %d\n", a, array[a][0], array[a][1], array[a][2], array[a][3]);
  72.                                 }       
  73.                         }       
  74.                 }
  75.         }
  76.        
  77.         return 0;
  78. }


  79.        
复制代码



PS:最后快要做到C语言课后习题的动态内存了,后面怎么没题目了,有没有哪套可以配套的题目可以推荐的,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-30 13:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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