【C语言求助】嵌套循环问题

飞禽走兽卍一2b 2021-03-09 10:30:51
代码目的:输出“水仙花数”,即各个位数三次方之和等于它本身的三位数。如153=1^3+5^3+3^3 请大家帮忙看看哪里有问题。 #include <stdio.h> #include <math.h> void main() { printf("hw 5.8\n"); 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++) //百位数的循环 { 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++) //个位数的循环 { 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; } 因为字数问题导致排版不太好,希望谅解。
...全文
221 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-03
  • 打赏
  • 举报
回复
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html
  • 打赏
  • 举报
回复
引用 8 楼 forever74的回复:
我瞎猜的: 楼主之前的考虑是数学的思维, 令 变量temp为另外三个变量的立方和 然后下文每次提到temp的时候它都根据依赖的自变量的当前值自动重新计算temp的最新结果 是这样的考虑催生了0楼的代码。
确实。我很多时候都是手比脑子动的快,对于这种执行顺序的问题就很少动脑子。
forever74 2021-03-14
  • 打赏
  • 举报
回复
我瞎猜的: 楼主之前的考虑是数学的思维, 令 变量temp为另外三个变量的立方和 然后下文每次提到temp的时候它都根据依赖的自变量的当前值自动重新计算temp的最新结果 是这样的考虑催生了0楼的代码。
forever74 2021-03-14
  • 打赏
  • 举报
回复
嗯,还是得说,初学者学习程序设计的门槛之一 你首先得抛弃学习程序设计之前的“自动”观念 temp=pow......; 这样的赋值语句只会在轮到它执行的时候执行一次,刷新变量temp的值 它不会因为你写了上述语句,就在上述语句右侧变量有变化的时候“自动”更新左边变量的值 各位大佬,上述几行怎样表达才能更简洁更明确?望不吝赐教。
  • 打赏
  • 举报
回复
引用 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;
           }
           
}
谢谢!前几天事情比较多,没来得及回复
qzjhjxj 2021-03-10
  • 打赏
  • 举报
回复
修改楼主的,供参考:
#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;
           }
           
}
qzjhjxj 2021-03-10
  • 打赏
  • 举报
回复
楼主想复杂了,这个例子,供参考:
#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;
}
  • 打赏
  • 举报
回复
引用 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;
}
嗷,原来还能这样啊。 但我还是想知道我原来那个错在哪。。。
自信男孩 2021-03-10
  • 打赏
  • 举报
回复
其他问题,对比代码找一下原因~
自信男孩 2021-03-10
  • 打赏
  • 举报
回复
#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之内只有几个是水仙花,因此大部分不是水仙花,因此无用的打印会影响到你想要的打印~
一.C语言基础 1.C语言特点(识记); 2.C语言程序基本组成(识记): 3.基本数据类型: 3.1 标识符与基本数据类型(识记), 3.2 常量与变量(领会) 3.3 内存的概念(识记) 4.基本输入、输出函数(领会): 5.运算符与表达式(简单应用): 5.1 运算符的优先级与结合性 二.程序控制结构 1.C语言的语句(识记): 2.顺序结构(领会): 3.分支结构(简单应用): 4.循环结构(综合应用): 5 算法特点 6 流程图 三.构造型数据 1.数组(综合应用): 1.1 定义和引用 1.2 字符数组 1.3 指针和数组 2.结构类型: 2.1 结构类型的概念 2.2 结构类型定义及结构变量说明 2.3 结构变量的初始化 2.4 结构数组的初始化 3.联合类型(识记): 3.1 联合类型的概念 3.2 联合类型定义和联合变量说明 3.3 联合类型的使用 3.4 Struct 和 Union区别 4.枚举型(识记): 4.1 枚举型的定义 4.2 使用枚举型变量 5.typedef的用途(识记): 四.指针 1.指针与指针变量(识记): 2.指针运算符(领会): 3. 指针与函数 4.指针数组与指向指针的指针(识记): 5.指针与结构(领会): 6. 难点和易混淆 五.函数 1.常见的系统库函数(识记): 2.用户自定义函数(简单应用): 2.1函数定义 2.2 函数调用 2.3 函数声明 2.4 函数返回值 2.5 函数参数 3.函数之间的数据传递(领会): 4.函数的嵌套调用及递归调用(领会): 5.局部变量与全局变量(识记): 6.变量的存储类型与变量的初始化(领会): 7.编译预处理(领会): 六.文件 1.文件的基本概念,C语言中的两种文件(识记) 2.文件的打开、关闭和文件结束测试,文件的读写,文件的定位(识记) 2.1文件操作函数 2.2 文件权限 七.算法与编程(综合应用) 1 使用Turbo C集成开发环境调试程序 1.1.源程序的编写、编辑与改错(领会); 1.2.集成环境下的求助Help(识记); 1.3.程序的编译与目标代码的生成(识记); 1.4.程序的调试(综合应用): 1.5.了解Turbo C程序的常见错误提示(识记)。 2 重点编程题 八 位运算 1. & 2. | 3. ^ 4. ~ 5. << 6. >> ———————————————— 版权声明:本文为CSDN博主「kaikai_sk」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/kaikai_sk/article/details/106061539

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧