编程中关于for的循环不能用,只能输出第一个值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程中关于for的循环不能用,只能输出第一个值相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<math.h>
int main()

int i,a,b,c,d,e,f,g,h,j,k;
double power;
i=1;
printf("满足条件的数为:");
for(i=1;i<=10000;i++)

a=i/10;b=a%10;power=pow(i,3);
if(a==0&&power==i)
printf("%d,",i);break;
c=a/10;d=a%10;power=power+pow(b,3);
if(c==0&&power==i)
printf("%d,",i);break;
e=c/10;f=c%10;power=power+pow(f,3);
if(e==0&&power==i)
printf("%d,",i);break;
g=e/10;h=e%10;power=power+pow(h,3);
if(g==0&&power==i)
printf("%d,",i);break;
j=g/10;k=g%10;power=power+pow(k,3);
if(j==0&&power==i)
printf("%d,",i);break;


return 0;

求1-10000中所有满足各位数立方之和等于本身的数,并输出。

参考技术A a=i/10;b=a%10;power=pow(i,3);
if(a==0&&power==i)
printf("%d,",i);break;
很显然,第一个数1就满足条件了,然后你就break了,从循环里退出来了。当然只能打印出第一个。

另外,你加了太多不必要的,把程序的层次搞得过于繁复,很不好读。顺序结构不必加。追问

那怎么,改呢,不让他蹦出来,还能做完整个过程??谢谢

追答

很简单啊,把break去掉就可以了啊。如果你的目的是第一个if条件满足了就直接开始下一个循环、不再继续判断之后的if条件,以提高程序的效率,那就把顺序进行的几个if判断改成if-else嵌套。总之,如果你不想退出循环,就不可以用break。

参考技术B 我给你写个代码更清晰的:
#include <stdio.h>
#include <math.h>
int main()

int n,tmp,sum;
for(n=1;n<=10000;n++)

tmp=n;
sum=0;
while(1)

sum+=pow(tmp%10,3);
if(!(tmp/=10))break;

if(sum==n)

printf("%d ",n);


printf("\n");
return 0;
追问

大哥,我刚开始学c啊,还没那么高的水平呢,就用我的程序,怎么改呢??

追答#include<stdio.h>
#include<math.h>
int main()

    int i,a,b,c,d,e,f,g,h,j,k;
    double power;
    i=1;
    printf("满足条件的数为:");
    for(i=1;i<=10000;i++)
    
        a=i;
        b=a%10;
        a=i/10;
        power=pow(b,3);
        if(a==0&&power==i)
        
            printf("%d,",i);
            continue;
        
        d=a%10;
        c=a/10;        
        power=power+pow(d,3);
        if(c==0&&power==i)
        
            printf("%d,",i);
            continue;
        
        f=c%10;
        e=c/10;        
        power=power+pow(f,3);
        if(e==0&&power==i)
        
            printf("%d,",i);
            continue;
        
        h=e%10;
        g=e/10;
        power=power+pow(h,3);
        if(g==0&&power==i)
        
            printf("%d,",i);
            continue;
        
        k=g%10;
        j=g/10;
        power=power+pow(k,3);
        if(j==0&&power==i)
        
            printf("%d,",i);
            continue;
        
    
    printf("\\n");
    return 0;

本回答被提问者采纳

this的用法

 

因为循环是非常快的,我们手动点击的时候,for循环已经循环完了。如果在循环里面添加点击事件,点击事件的i的值就是循环结果的那个值,而不是对应的循环的值,此时,我们就需要用到this   来实现  点击哪一个,this就指向哪一个

this:   指的是当前的对象,  是关键词,不能当做变量名,只能读,不能写,它的值只能用来用,而不能修改  

通常,this有2种用法,第一种,在函数外部使用,此时,this的值指向的是Windows    

第二种,在函数内部使用。又分为2种情况,1,直接调用函数,this同样指向的是Windows    2,被事件调用,并且是以赋值的形式出现的,此时this指向的是谁调用了函数,this就指向谁的。这就很好地方便了再循环里面使用this来实现,每一个的事件发生。

可以通过以下例子开具体了解:

首先,我们先来创建几个div   实现,点击任意一个div  这个被点击的div的背景颜色就相应的作出改变  改变成为红色

html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>this批量改变元素的样式</title>
<link rel="stylesheet" href="../css/this批量改变元素的样式.css">
</head>
<body>
<div id="content">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
<script src="../js/this批量改变元素的样式.js"></script>
</body>
</html>

css
.box{
width: 200px;
height: 200px;
margin-right: 20px;

float: left;
}


此时,页面中就有5个颜色为金色的div

技术分享

js代码:

var  bigDiv=document.getElementById(‘content‘);
var listOfDiv=bigDiv.getElementsByTagName(‘div‘);
for(var i=0;i<listOfDiv.length;i++){
listOfDiv[i].onclick=function(){
this.style.backgroundColor=‘red‘;
};
}


这样就可以实现,任意点击一个div 这个div的颜色就变为红色

技术分享

 







































以上是关于编程中关于for的循环不能用,只能输出第一个值的主要内容,如果未能解决你的问题,请参考以下文章

python中关于for循环取list的数值。

for循环的使用

C++中关于string类型究竟能不能用cout输出的问题

请教个java for 循环问题。。用个for循环,第一次循环时取第一个值,第二次循环时取第二个值。以此类推

前端面试题,map,forEach,for循环,三个都能遍历,什么区别?

c#中关于repeater控件的说法