| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 609 人关注过本帖
标题:定义函数不知是否正确
只看楼主 加入收藏
huangjianjun
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-8-29
结帖率:100%
收藏
 问题点数:0 回复次数:7 
定义函数不知是否正确
int isprime(int n)  //如果n是素数 返回1,反之 返回0
{
 int div;
 for(div = 2; div * div <= n; div++)
  if (n % div == 0)
   return 0;
  else
      return 1;
}
这个函数定义是否正确?
搜索更多相关主题的帖子: div 
2011-08-30 20:46
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
这个函数有问题,for语句下面的四个表达式都属于循环体吗?如果是,需要大括号。但是这样还是不对,(div = 2; div * div <= n; div++),这个条件,n只能从4开始,否则,函数无法返回值。


经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-08-30 21:13
huangjianjun
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-8-29
收藏
得分:0 
回复 2楼 pauljames
我运行了没问题可以从2开始你说要加花括号我认为是对的 比如我输入9
运行结果是 23579
2011-08-30 21:19
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
n=2,第一个条件就不满足吧,div*div=4<=2?,还能执行到return语句吗?我这边运行结果,对于4之前的返回奇怪的结果。
#include <stdio.h>

int isprime(int n)  //如果n是素数 返回1,反之 返回0
{
int div,tmp;
for(div = 2; div * div <= n; div++)
  {
  if (n % div == 0)return 0;
  else return 1;
  }
}
int main(void)
{
    int flag=0,i;
    for(i=2;i<20;i++)
    {
    flag=isprime(i);
    printf("%d",i);
    printf("   %d",flag);
    printf("\n",i);
    }
    return 0;
}
结果
i    flag
2   4
3   4
4   0
5   1
6   0
7   1
8   0
9   1
10   0
11   1
12   0
13   1
14   0
15   1
16   0
17   1
18   0
19   1


[ 本帖最后由 pauljames 于 2011-8-30 21:31 编辑 ]

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-08-30 21:24
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
回复 楼主 huangjianjun
看了很就不知你要干嘛,要求素数for(div = 2;div <= n; div++)不就得了搞那么麻烦

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-08-30 21:59
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:0 
为了循环到sqrt(n),减少循环次数。但是出了另外问题。

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-08-30 22:01
墨香555
Rank: 2
等 级:论坛游民
帖 子:115
专家分:31
注 册:2010-10-21
收藏
得分:0 
#include<stdio.h>
int isprime(int n);
main()
{
    int n,i;
    printf(" :");
    scanf("%d",&n);
    i=isprime(n);
    if(i==0)
        printf("非素数\n");
    if(i==1) printf("素数\n");

}
int isprime(int n)
{
    int div,flag=1;
    for(div = 2; div * div <= n&&flag; div++)
    {
        if (n % div == 0)
            flag=0;
        else
            flag=1;
    }
    if(flag==0)return 0;
    else return 1;
}
这样应该可以,因为在for循环里用返回值,得到一个返回之后就会自动退出循环
2011-08-30 22:41
Hujc71
Rank: 2
等 级:论坛游民
帖 子:49
专家分:65
注 册:2010-3-31
收藏
得分:0 
最简单的方法是去掉else其余都不变,包括else下面的语句!不要加花括号!
2011-08-31 09:44
快速回复:定义函数不知是否正确
数据加载中...
 
   



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

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