yihayoooooo 发表于 2020-7-12 01:14:52

循环结构

#include <stdio.h>


intfun()
{
        int i,j,s,sum=0;
        for(j=2;j<1000;j++)
        {
                s=j;
                for(i=1;i<j;i++)
                {
                        if((j%i)==0)
                  {
                        s=s-i;
                }
        }
        if(s==0)
        {
                sum=sum+j;
        }
        return sum;










}

void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *wf ;
int a;
wf = fopen("out.dat","w") ;
a=fun() ;
fprintf(wf, "2-1000之间的完数之和为:%d\n", a) ;
}

int main( )
{

        printf("2-1000之间的完数之和为:%d\n",fun());
        NONO ();
        return 0;

}



用fun函数计算1000以内的所有完数之和,运行不了,请问代码哪里错了?
谢谢

qiuyouzhi 发表于 2020-7-12 07:52:47

你判断的语句写到for循环外面了
#include <stdio.h>


intfun()
{
      int i,j,s,sum=0;
      for(j=2;j<1000;j++)
      {
                s=j;
                for(i=1;i<j;i++)
                {
                  if((j%i)==0)
                  {
                        s=s-i;
                            }
              }
              if(s==0)
              {
                sum=sum+j;
              }
                }
    return sum;










}

void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
        FILE *wf ;
        int a;
        wf = fopen("out.dat","w") ;
        a=fun() ;
        fprintf(wf, "2-1000之间的完数之和为:%d\n", a) ;
}

int main( )
{

      printf("2-1000之间的完数之和为:%d\n",fun());
      NONO ();
      return 0;

}

永恒的蓝色梦想 发表于 2020-7-12 08:07:32

楼上正解。
不过你的程序效率有点低,下面这个程序效率则快很多,可以参考一下。#include<stdio.h>
unsigned result;
unsigned short i, j, pds;
FILE* file = fopen("out.dat", "w");


int main() {
    for (i = 1; i < 1000; ++i) {
      for (j = i << 1; j < 1000; j += i) {
            pds += i;
      }
    }

    for (i = 1; i < 1000; ++i) {
      if (pds == i) {
            result += i;
      }
    }

    printf("2-1000之间的完数之和为:%d\n", result);
    fprintf(file, "2-1000之间的完数之和为:%d\n", result);
    fclose(file);
    return 0;
}

405794672 发表于 2020-7-12 20:29:22

先找一个错误:!
第14行,似乎if语句里面。有{,却没有}。少一个括号,不完整

yihayoooooo 发表于 2020-7-12 21:44:30

永恒的蓝色梦想 发表于 2020-7-12 08:07
楼上正解。
不过你的程序效率有点低,下面这个程序效率则快很多,可以参考一下。

谢谢啦
页: [1]
查看完整版本: 循环结构