编程-c语言循环语句问题 输出不了结果

问题描述

c语言循环语句问题 输出不了结果

完全数是其各因子之和正好等于本身的数,如6=1+2+3,28=1+2+4+7+14,所以6,8都是完全数,请编程找出2-20000内的所有完全数.输入整数n,输出第n个完全平方数。

我的程序无法输出结果不知为啥

 #include <stdio.h>
void main()
{
    int i,n,s=0,k=0;
    scanf("%d",&n);
    for(i=2;i<=20000;i++,s=0)
    {
        for(int j=1;j<i;j++)
        {
            if(i%j==0)
                s+=j;
            if(i==s)
            {
                k++;
            }
        }
        if(k==n) {printf("%d
",i);
        break;
        }
    }
}  

解决方案

第二个if语句位置不对,需改到第一个循环外:

 #include "stdafx.h"
#include <stdio.h>   

void main()
{
    int i,n,s = 0,k = 0;
    printf("Please input the number of which perfect square you want:");
    scanf("%d",&n);
    for(i = 2;i <= 20000;i++,s = 0)
    {
        for(int j = 1;j <= i/2;j++)
        {
            if(i % j==0)
                s += j;
        }
        if(i == s) {
                k++;
                if(k == n) {
                    printf("%d
",i);
                    break;
                }
        }
    }

}

另外,本题限于数量上界,只能找到4个完全平方数。

解决方案二:

【C语言】用循环语句输出菱形
C语言的循环语句

解决方案三:

 for(int j=1;j<i;j++)
        {
            if(i%j==0)
                s+=j;
            if(i==s)
            {
                k++;
            }
        }

改为:

 for(int j=1;j<i;j++)
        {
            if(i%j==0)
                s+=j;

        }
                 if(i==s)
            {
                k++;
            }

解决方案四:

#include

void main()

{
int i,k=0;

for(i=2;i<=20000;i++)
{
int s=0;
for(int j=1;j<i;j++)
{

if(i%j==0)
s+=j;

    }
    if(i==s)
    {
        printf("%d
",i);
    }

}

}

解决方案五:

对程序的细节也做了一些调整,有些重复是不必要的~

解决方案六:

break跳出的不是if语句,跳出的是最近的for循环,或者switch语句,研究下break用法,希望可以帮助你!

时间: 2024-12-27 19:54:27

编程-c语言循环语句问题 输出不了结果的相关文章

代码-我想问一下c语言循环语句的问题~

问题描述 我想问一下c语言循环语句的问题~ 这是我的代码 #include <stdio.h> void main() {int a,n=0,i,j,k,t; scanf("%d",&a); for(t=100;t<=999;t+=1) {i=t/100; j=t/10%10; k=t%10; if(i+j+k==7) n+=1; if(n==a) printf("%dn",t); } } 我使用了循环语句,但是结果出来很多数字 我不明白后

Java语言----三种循环语句的区别介绍_java

第一种:for循环 循环结构for语句的格式:      for(初始化表达式;条件表达式;循环后的操作表达式) { 循环体;   } eg: class Dome_For2{ public static void main(String[] args) { //System.out.println("Hello World!"); //求1-10的偶数的和 int sum = 0; for (int i = 1;i<=10 ; i++ ) { if (i%2 ==0) { //

C语言 循环详解及简单代码示例_C 语言

C 循环 有的时候,我们可能需要多次执行同一块代码.一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推. 编程语言提供了更为复杂执行路径的多种控制结构. 循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的流程图: 循环类型 C 语言提供了以下几种循环类型.点击链接查看每个类型的细节. 循环类型 描述 while 循环 当给定条件为真时,重复语句或语句组.它会在执行循环主体之前测试条件. for 循环 多次执行一个语句序列,简化管理循环变量

c语言-从键盘输入一个数字(不限位数),用循环语句编程判断并输出这个数字的位数

问题描述 从键盘输入一个数字(不限位数),用循环语句编程判断并输出这个数字的位数 从键盘输入一个数字(不限位数),用循环语句编程判断并输出这个数字的位数 解决方案 我用java不过逻辑都一样 int n = 987878976;//正是是从键盘接收的数字,处理后的数字. int count = 0;//保存数字的位数 while(n>=1){ count++; n = n/10; } //输出count就可以了 解决方案二: #include <iostream> using names

SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制

SAS学习笔记之<SAS编程与数据挖掘商业案例>(4)DATA步循环与控制.常用全程语句.输出控制 1. 各种循环与控制 DO组 创建一个执行语句块 DO循环 根据下标变量重复执行DO和END之间的语句 DO WHILE 重复执行直到条件为假则退出循环 DO UNTIL 重复执行直到条件为真则退出循环 DO OVER 对隐含下标数组元素执行DO/END之间的语句 END 退出DO或SELECT语句的标志 SELECT 选择执行SAS语句 IF-THEN/ELSE有条件执行一个SAS语句 GO

【Go语言】【9】GO语言的循环语句

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://qingkechina.blog.51cto.com/5552198/1618407 一.循环语句     循环语句即for语句,您可能说:"不对,它不仅仅是for语句,还有while或者do-while",真的很遗憾,GO语言真的只有for,它认为提供一种就可以了,提供多了怕给程序员带来麻烦 :) 下面我们使用for循环计算1+2+3+4+--+100的和,和其它语言

编程-关于c语言循环嵌套的问题

问题描述 关于c语言循环嵌套的问题 完全数是其各因子之和正好等于本身的数,如6=1+2+3,28=1+2+4+7+14所以6,8都是完全数,请编程找出2-20000内的所有完全数.输入整数n,输出第n个完全平方数.第一种: #include <stdio.h> void main() { int ins=0k=0; scanf(""%d""&n); for(i=2;i<=20000;i++s=0) { for(int j=1;j<i;

c语言-求助一个java语言的一个for循环语句

问题描述 求助一个java语言的一个for循环语句 for(int i=2,j=1; j<10; i=(i==9)?(((++j)/j)+1):(i+1)){ System.out.printf("%d*%d=%2d%c",i,j,i*j, ((i==9)?'n':' ')); } 输出结果是99乘法表. 这个for循环里的++j为什么不能换成j+1啊? 谢谢各位了. 解决方案 ++j是改变变量值的 j+1是不改变变量值的 解决方案二: ++j 等效于j=j+1 你用j+1 原j

《C语言程序设计与实践(第2版)》——2.3 循环语句

2.3 循环语句 2.3.1 while循环语句 在例2-1中,针对每个x值求得对应y值均是以相同的方式计算,故可以用循环语句来重复产生各行输出,每行重复一次.这就是while循环语句的用途. while (x <= end) { ... } while循环语句的执行步骤如下:首先,测试圆括号中的条件.如果条件为真(x小于等于end),则执行循环体(花括号中的语句).其次,重新测试该条件,如果为真(条件仍然成立),则再次执行该循环体.当该条件测试为假(x大于end)时,循环结束,继续执行跟在该循