河南玉米芯:这个C程序有问题,请大家帮帮忙好吗?

来源:百度文库 编辑:高校问答 时间:2024/05/11 02:43:03
有这样的一道题,用C编写的,可是里面涉及到谓词函数,在网上下载了genlib库函数源代码后编了这样一个程序,可是运行不了,我找了好久都不知道错在哪里,麻烦大家看看,题目的大意是
求真约数的(n的真约数是指小于n的任何约数)和等于该数本身的数,要求编写一个谓词函数,输出1-9999这样的数。
程序如下:
/*File:IsPerfect.c.
*This program is used to check up the perfect number .
*/

#include"d:\win-tc\Include\genlib.h"

/*constants :
*LowerLimti -starting value for the num
*UpperLimit -final value for the num
*/
#define LowerLimit 1
#define UpperLimit 9999

/*Function prototype */
bool IsPerfact(long n )

/*Main function */
main()
{ long m;
printf ("This program lists the perfect number from 1 to 9999:\n");
for (m=LowerLimit;m<=UpperLimit;m++)
{if(IsPerfact(m))
printf("%3lu\n",m);}
}

/*Function:bool IsPerfact(long n )
*Usage:if the num is perfect number ,return
*true,else return false.
*/
bool IsPerfact(long n)
{long i;
for(i=1;i<=n;i++)
if(n%i==0)
{printf("%lu+",i);
}
printf("%lu",n);
return(TURE);
}
谢谢二楼三楼的回答,可是三楼的程序虽然保留了谓词函数可是并没有用到布尔函数,如果要调用geblib这个库函数,而且要用到布尔函数的话,那么我的程序该如何改呢?Win-TC报错是main有 说明语法错误,那该怎么办呢?请指教

 
 
 
下面的代码是从你的代码改过来的(程序有利用布尔类型和保留着调用谓词函数做判断的结构):

#include <stdio.h>
#include "d:\win-tc\Include\genlib.h"

#define LowerLimit 1
#define UpperLimit 9999

bool isPerfect( long n );

main( ) {
    int m;
    printf( "This program lists the perfect number from 1 to 9999:\n" );
    for( m = LowerLimit; m <= UpperLimit; m++ )
        if ( isPerfect( m ) )
            printf( "%u\n", m );
}

bool isPerfect( long n ) {
    long i, sum = 0;
    for ( i = 1; i < n; i++ )
        if( n % i == 0 )
            sum += i;
    return sum == n;
}
 
 
 

我看你的意思是否是求 完备数,你用下面的程序试试.
#include "stdio.h"
void main()
{
int n=0,x,i,j,u=0,a[100];
for(i=5;i<=9999;i++)
{
for(j=1;j<i;j++)
{
if((i%j)==0)
{n+=j;a[u]=j;u++;}
}

if(n==i)
{
printf("\t%d=",i);
for(x=0;x<u;x++)printf("+%d",a[x]);

}
n=0;u=0;
}
printf("\n");
}

运行结果为:
6=+1+2+3 28=+1+2+4+7+14 496=+1+2+4+8+16+31+62+124+248
8128=+1+2+4+8+16+32+64+127+254+508+1016+2032+4064

有兴趣关注

请教楼上什么是谓词函数和 完备数 啊,谢谢指教
加我好友呗,各位高手门