| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1249 人关注过本帖
标题:调用函数的困惑?请帮忙看一下。
只看楼主 加入收藏
jiawan007
Rank: 1
等 级:新手上路
帖 子:45
专家分:2
注 册:2009-8-1
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:16 
调用函数的困惑?请帮忙看一下。
要求是输入m和n,求出它们之间的素数,统计素数的个数,并且求出素数的和。
我写的程序如下:
#include<stdio.h>
#include<math.h>
int main(void)
{
    int m,n,i,count,sum,result;
    int prime(int i);
    printf("Enter m,n:");
    scanf("%d,%d",&m,&n);
    result=prime(i);
    printf("%d,%d\n",&count,&sum);
    return 0;
}
int prime(int i)
{
    int m,n,count,sum,j,k,item;
    count=0;sum=0;
    for(i=m;i<=n;i++){
        k=sqrt(i);
        for(j=2;j<=k;j++)
        if(i%j==0) break;
        if(j>k)
        count++;
        item=i;sum=sum+item;
    }
    return count;
    return sum;
}
红色的地方是我不明白的地方。
1.我最后的结果是要输出conunt和sum,但是调用函数的语句我不知道如何写,只好写成了result=prime(i)
2.最后判断i为素数后,每循环一次,统计一次,并求出相应的和,被调用的函数的值如何返回,使得最后输出count和sum。
是我写的那样吗?
3,我编译可以通过,运行之后,无论m和n输入什么样的数,最后的结果总是1245040,1245036。不知道循环哪个地方出了问题?
搜索更多相关主题的帖子: 困惑 函数 
2009-11-11 20:51
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
先说下,LZ对函数还不大理解,建议再去看看书和资料,还有就是一个函数只能返回一个值,当要返回多个值的时候,可以选择传地址过去,改变了地址所对应的值也可以达到目的,我下面的代码就是这种做法,还可以把你要算的变量设为全局变量等,方法挺多,LZ多去看看就行了···

#include<stdio.h>
#include<math.h>
int main(void)
{
    int m,n,count,sum;
    void prime(int m, int n, int *count, int *sum);
    printf("Enter m,n:");
    scanf("%d%d",&m,&n);
    prime(m, n, &count, &sum);    //  m 和n 不是全局变量的话一定要通过形参传值过去,不然不知道子函数里的n和m是多少的,
    printf("%d,%d\n",count,sum);   //  无论m和n输入什么样的数,最后的结果总是1245040,1245036。是因为输出的时候不用读址符 &
    return 0;
}
void prime(int m, int n, int *count, int *sum)   //   将 count 和 sum 的地址传到子函数中
{  
    int j,k,item,i;
    *count=0;*sum=0;
    for(i=m<2?2:m;i<=n;i++){
        k=sqrt(i);
        for(j=2;j<=k;j++)
        if(i%j==0) break;
        if(j>k)
        {
            (*count)++;
            item=i;*sum=*sum+item;       //  你是算素数和的话,放进大括号里去
        }

    }
}
2009-11-11 21:35
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
补充一下,不同函数间的局部变量是不是相互影响的,不管同名不同名,  例如你写的代码中,虽然两个函数中都有 m和n,但子函数里的m不会=主函数的m,必须通过形参传那个值过去··
2009-11-11 21:38
xu0xiang0
Rank: 2
等 级:论坛游民
帖 子:13
专家分:49
注 册:2009-10-15
收藏
得分:1 
#include<stdio.h>
#include<math.h>

bool IfPrime(int iNum);  //是素数则返true,否则返回false
int prime(int m,int n,int *count);  //返回m和n之间的所有素数之和

int main(void)
{
    int m=0,n=0,count=0,result=0;

    printf("Enter m,n:");
    scanf("%d,%d",&m,&n);
    result=prime(m,n,&count);
    printf("\n%d,%d\n",count,result);
    return 0;
}

bool IfPrime(int iNum)
{
    int i=1;

    if( 1==iNum )
        return false ;

    for(i=2;i<iNum;i++)
    {
        if( 0==(iNum%i) )
        {
            return false ;
        }
    }

    return true ;
}

int prime(int m,int n,int *count)
{
    int i=0,iSum=0;

    for(i=m;i<=n;i++)
    {
        if( true==IfPrime(i) )
        {
            (*count)++;
            iSum+=i;
            printf("\nNo.%d    %d",*count,i);
        }
    }
   
    return iSum ;
}
楼上的把话都说完啦。
2009-11-11 21:43
一旋无风
Rank: 2
等 级:论坛游民
帖 子:55
专家分:92
注 册:2009-11-11
收藏
得分:1 
#include<stdio.h>
#include<math.h>
int* prime(int m, int n)  //返回一个int指针
{  
    int j,k,item,i;
    int count=0,sum=0;
    for(i=m<2?2:m;i<=n;i++)
    {
        k=sqrt(i);
        for(j=2;j<=k;j++)
        if(i%j==0) break;
        if(j>k)
        {
            count++;
            item=i;sum=sum+item;
        }
        
    }
    int p[2]={count,sum};//声明一下  楼主你不能同时返回两个int的,如果不用指针或数组的话
    return p;
}
void main()
{
    int m,n;
    int*prime(int m, int n);
    int *p;
    printf("Enter m,n:");
    scanf("%d%d",&m,&n);
    p=prime(m, n);
    printf("%d和%d之间共有%d个素数,素数和为%d\n",m,n,p[0],p[1]);      
}
2009-11-11 22:14
一旋无风
Rank: 2
等 级:论坛游民
帖 子:55
专家分:92
注 册:2009-11-11
收藏
得分:0 
回复 4楼 xu0xiang0
你的程序有问题,别误导人了,你的结果应该是0  0,如果我猜的不错的话
2009-11-11 22:20
jiawan007
Rank: 1
等 级:新手上路
帖 子:45
专家分:2
注 册:2009-8-1
收藏
得分:0 
回复 2楼 lijm1989
我把程序改成这样了:
#include<stdio.h>
#include<math.h>
int main(void)
{
    int m,n,i,sum,item,count;
    int prime(int i);
    count=0;sum=0;
    printf("Enter m,n:");
    scanf("%d,%d",&m,&n);
    for(i=m;i<=n;i++){
        if(prime(i)==1)
        {
            count++;
            item=i;sum=sum+item;
        }
    }
    printf("%d,%d",count,sum);
    return 0;
}
int prime(int i)
{
    int j,flag;
    for(j=2;j<=sqrt(i);j++){
        if(i%j==0) break;
        if(j>sqrt(i))
        flag=1;
        else
        flag=0;
    }
    return flag;
}
2009-11-12 14:54
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:18 
以下是引用jiawan007在2009-11-12 14:54:30的发言:

我把程序改成这样了:
#include<stdio.h>
#include<math.h>
int main(void)
{
    int m,n,i,sum,item,count;
    int prime(int i);
    count=0;sum=0;
    printf("Enter m,n:");
    scanf("%d,%d",&m,&n);
     ...
程序代码:
#include<stdio.h>
#include<math.h>
int main(void)    //  思路很好,只是小错
{
    int m,n,i,sum,item,count;
    int prime(int i);
    count=0;sum=0;
    printf("Enter m,n:");
    scanf("%d,%d",&m,&n);
    for(i=m;i<=n;i++){
        if(prime(i)==1)
        {
            count++;
            item=i;sum=sum+item;
        }
    }
    printf("%d,%d",count,sum);
    return 0;
}
int prime(int i)
{
    int j,flag;
    if(i<2)       //  这样是为了更完善,如果是1的话,就不会判为素数,没有这个判断的话,1会被认为是素数
        return 0;
    for(j=2;j<=sqrt(i);j++){
        if(i%j==0) break;
    } 
       if(j>sqrt(i))  //  这个如果你放进循环里面去的话,返回的flag就一直是0了···
        flag=1;
        else 
        flag=0;
    return flag;
}
2009-11-12 15:25
沙漠之泉
Rank: 2
来 自:河南
等 级:论坛游民
帖 子:9
专家分:19
注 册:2009-9-4
收藏
得分:0 
#iclude<stdio.h>
#include<math.h>
int k=0;
int sum=0;
void  main(){
    void  prime(int i);
    int i,sum,m,n;
    printf("请输入m和n得值,注意输入时,m<n。");
    scanf("%d,%d",&m,&n);
    for(i=m;i<=n;i++)
        prime(i);
   printf("m和n之间的素数一共有:%d\n",k);
}
void prime(int i){
    for(int j=2;j<=sqrt(i);j++){
        if((i%j)!=0){
            printf("%d,"i);
            sum+=i;
            k++;
        }
    }
   
}
2009-11-12 22:07
xu0xiang0
Rank: 2
等 级:论坛游民
帖 子:13
专家分:49
注 册:2009-10-15
收藏
得分:0 
回复 6楼 一旋无风
   对你的话我不予置评,因为我确信你没有真正运行过这段代码。我用的是VC6.0编译器。
   实践是检验真理的唯一标准,我不会去猜测程序的执行结果。
   你可以运行一下你写的代码,我是运行过了的......

   有如此之多的高手在此,菜鸟我不会再“误导”别人了。
2009-11-12 23:25
快速回复:调用函数的困惑?请帮忙看一下。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012609 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved