user-0 提问: 【C语言求助】嵌套循环问题

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 8 楼 forever74的回复:我瞎猜的：  楼主之前的考虑是数学的思维， 令 变量temp为另外三个变量的立方和 然后下文每次提到temp的时候它都根据依赖的自变量的当前值自动重新计算temp的最新结果  是这样的考虑催生了0楼的代码。 确实。我很多时候都是手比脑子动的快，对于这种执行顺序的问题就很少动脑子。

user: user-2
content: 我瞎猜的：  楼主之前的考虑是数学的思维， 令 变量temp为另外三个变量的立方和 然后下文每次提到temp的时候它都根据依赖的自变量的当前值自动重新计算temp的最新结果  是这样的考虑催生了0楼的代码。

user: user-2
content: 嗯，还是得说，初学者学习程序设计的门槛之一  你首先得抛弃学习程序设计之前的“自动”观念 temp=pow......; 这样的赋值语句只会在轮到它执行的时候执行一次，刷新变量temp的值 它不会因为你写了上述语句，就在上述语句右侧变量有变化的时候“自动”更新左边变量的值  各位大佬，上述几行怎样表达才能更简洁更明确？望不吝赐教。

user: user-0
content: 引用 5 楼 qzjhjxj的回复:修改楼主的，供参考：#include <stdio.h> #include <math.h> void main() {             printf("hw 5.8\n");             //temp=pow(bai,3)+pow(shi,3)+pow(ge,3); //这里temp bai shi ge 变量都还没定义             for(double bai=1,shi=0,ge=0;(100*bai+10*shi+ge)<=999;bai++)//这里虽然定义了，数据类型不对呢，int型就可以了             {                                                        //百位数的循环                 //int temp=pow(bai,3)+pow(shi,3)+pow(ge,3);//这句放在这里，shi ge 位数变化捕捉不到                  for(shi=0,ge=0;shi<=9;shi++)//十位数的循环                 {                     for(ge=0;ge<=9;ge++) //个位数的循环                     {                         int temp=pow(bai,3)+pow(shi,3)+pow(ge,3);                         if((100*bai+10*shi+ge)==temp)                         {                             //printf("%d%d%d\n",bai,shi,ge); 既然前面定义的是double型，输出不能用%d                             printf("%.0f%.0f%.0f\n",bai,shi,ge);                         }                        //else printf("条件不满足  %d%d%d%d",bai,shi,ge,temp);                        //这句是只要不满足就输出一条，题目没要求呢,而且输出用 %d 也不对                     }                     ge=0;                 }                 shi=0,ge=0;            }             } 谢谢！前几天事情比较多，没来得及回复

user: user-3
content: 修改楼主的，供参考：#include <stdio.h> #include <math.h> void main() {             printf("hw 5.8\n");             //temp=pow(bai,3)+pow(shi,3)+pow(ge,3); //这里temp bai shi ge 变量都还没定义             for(double bai=1,shi=0,ge=0;(100*bai+10*shi+ge)<=999;bai++)//这里虽然定义了，数据类型不对呢，int型就可以了             {                                                        //百位数的循环                 //int temp=pow(bai,3)+pow(shi,3)+pow(ge,3);//这句放在这里，shi ge 位数变化捕捉不到                  for(shi=0,ge=0;shi<=9;shi++)//十位数的循环                 {                     for(ge=0;ge<=9;ge++) //个位数的循环                     {                         int temp=pow(bai,3)+pow(shi,3)+pow(ge,3);                         if((100*bai+10*shi+ge)==temp)                         {                             //printf("%d%d%d\n",bai,shi,ge); 既然前面定义的是double型，输出不能用%d                             printf("%.0f%.0f%.0f\n",bai,shi,ge);                         }                        //else printf("条件不满足  %d%d%d%d",bai,shi,ge,temp);                        //这句是只要不满足就输出一条，题目没要求呢,而且输出用 %d 也不对                     }                     ge=0;                 }                 shi=0,ge=0;            }             }

user: user-3
content: 楼主想复杂了，这个例子，供参考：#include <stdio.h>  int main(void) {     int sum,temp,i,n;     for (i = 100;i < 1000; ++i){          temp= i;          sum = 0;          while(temp){    //temp到0时跳出循环               n = temp%10;//每次取得一位数值，如153，分别取3 5 1               sum += n*n*n;//每位数值的立方和               temp/= 10;          }          if (i == sum){  //如立方和sum 与原数 i相同，即为水仙花数              printf("%d\n",i);          }     }          return 0; }

user: user-0
content: 引用 1 楼 qzjhjxj的回复:楼主想复杂了，这个例子，供参考：#include <stdio.h>  int main(void) {     int sum,temp,i,n;     for (i = 100;i < 1000; ++i){          temp= i;          sum = 0;          while(temp){    //temp到0时跳出循环               n = temp%10;//每次取得一位数值，如153，分别取3 5 1               sum += n*n*n;//每位数值的立方和               temp/= 10;          }          if (i == sum){  //如立方和sum 与原数 i相同，即为水仙花数              printf("%d\n",i);          }     }          return 0; } 嗷，原来还能这样啊。 但我还是想知道我原来那个错在哪。。。

user: user-4
content: 其他问题，对比代码找一下原因～

user: user-4
content: #include <stdio.h> #include <math.h>  //void main() int main(void) {     printf("hw 5.8\n");     int temp;     //temp = pow(bai,3)+pow(shi,3)+pow(ge,3);     //for(double bai=1,shi=0,ge=0; (100*bai + 10 * shi+ge)<=999;bai++)   //百位数的循环     for(int bai=1,shi=0,ge=0; (100*bai + 10 * shi + ge) <= 999; bai++)   //百位数的循环     {          //int temp=pow(bai,3)+pow(shi,3)+pow(ge,3);         for(shi=0,ge=0;shi<=9;shi++)  //十位数的循环         {             for(ge = 0; ge<=9;ge++)           //个位数的循环             {                 temp=pow(bai,3)+pow(shi,3)+pow(ge,3);                 if((100*bai+10*shi+ge)==temp)                     printf("%d%d%d\n",bai,shi,ge);                 //else                   //  printf("条件不满足  %d %d%d%d",bai,shi,ge,temp);              }             ge=0;          }         shi=0,ge=0;     }      return 0; } 供参考～  注意temp计算的位置要做调整，放在最内层循环；另外，去掉else的打印，因为100~999之内只有几个是水仙花，因此大部分不是水仙花，因此无用的打印会影响到你想要的打印～