鱼C论坛

 找回密码
 立即注册
查看: 1174|回复: 6

[已解决]S1E21:指针的动动手请教

[复制链接]
发表于 2021-2-13 18:17:53 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 1999杨小小 于 2021-2-13 18:17 编辑

两层循 环的意思我大概能理解,但里面的if(j-i>4)和goto存在的作用不清楚,麻烦各位前辈指点下
  1.   for (i = 1; i < cubed; i += 2)
  2.         {
  3.                 for (j = i; j < cubed; j += 2)
  4.                 {
  5.                         sum += j;
  6.                         if (sum == cubed)
  7.                         {
  8.                                 if (j - i > 4)
  9.                                 {
  10.                                         printf("%d = %d + %d ... + %d\n", cubed, i, i+2, j);
  11.                                 }
  12.                                 else
  13.                                 {
  14.                                         printf("%d = %d + %d + %d\n", cubed, i, i+2, i+4);
  15.                                 }
  16.                                 goto FINDIT;
  17.                         }

  18.                         if (sum > cubed)
  19.                         {
  20.                                 sum = 0;
  21.                                 break;
  22.                         }
  23.                 }
  24.         }

  25. FINDIT:

  26.         return 0;
  27. }
复制代码
最佳答案
2021-2-13 19:38:37
  1.                                if (j - i > 4)
  2.                                 {
  3.                                         printf("%d = %d + %d ... + %d\n", cubed, i, i+2, j);
  4.                                 }
  5.                                 else
  6.                                 {
  7.                                         printf("%d = %d + %d + %d\n", cubed, i, i+2, i+4);
  8.                                 }
  9.                                 goto FINDIT;
复制代码


j-i>4  是判断这个数是几个数相加的,因为一个数字,j循环一次
如果数字多就用第一种输出方法输出,否则就用第二种

goto 语句的话是用来跳出循环的
两层循环的话break,不太好跳出循环
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-2-13 18:48:00 | 显示全部楼层
j - i > 4应该是判断立方值大于8时候的输出值(16,25,...)
goto作用:因为有两层循环,直接使用break退出只能退出1层循环,所以得到输出后直接采用了goto语句直接跳到FINDIT:return 0 来退出程序;
但建议不用goto,还用其他方法可以用的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-13 19:38:37 | 显示全部楼层    本楼为最佳答案   
  1.                                if (j - i > 4)
  2.                                 {
  3.                                         printf("%d = %d + %d ... + %d\n", cubed, i, i+2, j);
  4.                                 }
  5.                                 else
  6.                                 {
  7.                                         printf("%d = %d + %d + %d\n", cubed, i, i+2, i+4);
  8.                                 }
  9.                                 goto FINDIT;
复制代码


j-i>4  是判断这个数是几个数相加的,因为一个数字,j循环一次
如果数字多就用第一种输出方法输出,否则就用第二种

goto 语句的话是用来跳出循环的
两层循环的话break,不太好跳出循环
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-13 20:23:24 | 显示全部楼层
一叶枫残 发表于 2021-2-13 18:48
j - i > 4应该是判断立方值大于8时候的输出值(16,25,...)
goto作用:因为有两层循环,直接使用break退 ...

这种情况下,用 goto 是最简洁而高效的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-13 21:21:47 | 显示全部楼层
永恒的蓝色梦想 发表于 2021-2-13 20:23
这种情况下,用 goto 是最简洁而高效的。

那直接把return 0写在里面不是更简洁?????
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-13 21:36:31 | 显示全部楼层
一叶枫残 发表于 2021-2-13 21:21
那直接把return 0写在里面不是更简洁?????

好吧,有道理。
我的意思是说,在退出多重循环的时候,goto 是最简洁而高效的(直接返回除外)。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-16 15:24:51 | 显示全部楼层
谢谢前辈们,我懂了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-1 18:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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