| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 783 人关注过本帖
标题:函数的调用
只看楼主 加入收藏
锦芳
Rank: 2
等 级:论坛游民
帖 子:44
专家分:15
注 册:2013-3-1
结帖率:46.15%
收藏
已结贴  问题点数:20 回复次数:10 
函数的调用
int su(int m)
{
   int i,j;
   for(i=2;i<=m;i++)
   if(m%i==0)
   j=0;
   else j=1;

}

main()
{
   int n,s;
   scanf("%d",&n);
   s=su(n);
   if(s==0)
   printf("No!");
   if(s==1)
   printf("Yes!");
   getch();
}
这个程序是要判断一个数是否素数,但是总是输出Yes!
please tell me why!
搜索更多相关主题的帖子: 函数 
2013-05-07 20:57
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
收藏
得分:5 
if(m == 1) return 0;
for(i = 2; i < m; i++)
    if(m % i == 0)
        return 0;

return 1;



程序代码:
#include <stdio.h>

int su(int);

int main(void)
{
    int n,s;
    scanf("%d",&n);
    s=su(n);
    if(s==0)
        puts("No!");
    if(s==1)
        puts("Yes!");
    
    return 0;
}

int su(int m)
{
    int i;
    if(m == 1) return 0;
    
    for(i = 2; i < m; i++)
        if(m % i == 0)
            return 0;

    return 1;
}


编辑好几次帖子才弄完...纠结~

[ 本帖最后由 Ryker 于 2013-5-7 21:37 编辑 ]
2013-05-07 21:07
谭763914202
Rank: 1
等 级:新手上路
帖 子:2
专家分:3
注 册:2013-5-7
收藏
得分:0 
刚刚进门  还没学得  c语言啊!!!!!
2013-05-07 21:19
谭763914202
Rank: 1
等 级:新手上路
帖 子:2
专家分:3
注 册:2013-5-7
收藏
得分:3 
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit wela=P2^6;
sbit wela=P2^7;
uchar num;
uchar code table[]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay (uint z);
void main()
{
    wela=1;
    P0=0xfc;
    wela=0;
    while(1)
    {
        for(num=0;num<16;num++)
        {
            dula=1;
            P0=table[num];
            dula=0;
            delay(1000);
        }
    }
        
}
void delay (uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);     新手  找不出问题哦  求解!!!!!!!
2013-05-07 21:33
Jung_zh
Rank: 1
等 级:新手上路
帖 子:10
专家分:3
注 册:2013-4-22
收藏
得分:3 
程序代码:
#include <stdio.h>

void main(){
    int a,i,j;
    for(j = 0;j < 5;j++){
    scanf("%d",&a);
    if(a < 0)
        a = -a;
    for(i = 2;a >= 0 && i < a;i++){
        if(a == 2)
            printf("su");
        if(a % i == 0){
            printf("no su");
            break;
            }
        }
    if(i > 2)
        printf("su");
        }
    getch();
    }
2013-05-07 22:09
听说
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2013-4-3
收藏
得分:3 
int su(int m)
{
   int i;
     if(m%2==0)
   return 0;
   else
       return 1;
  }

main()
{
   int n,s;
   scanf("%d",&n);
   s=su(n);
   if(s==0)
   printf("No!");
   if(s==1)
   printf("Yes!");
   getch();
}
在你的基础上改了一下  仅供参考
2013-05-07 22:47
锦芳
Rank: 2
等 级:论坛游民
帖 子:44
专家分:15
注 册:2013-3-1
收藏
得分:0 
回复 5楼 Jung_zh
你修改的这个程序好像没用到函数的调用哦,不过这也是一种方法。
2013-05-08 13:09
锦芳
Rank: 2
等 级:论坛游民
帖 子:44
专家分:15
注 册:2013-3-1
收藏
得分:0 
回复 6楼 听说
我试了一下,好像总是输出Yes
2013-05-08 13:12
锦芳
Rank: 2
等 级:论坛游民
帖 子:44
专家分:15
注 册:2013-3-1
收藏
得分:0 
回复 2楼 Ryker
大侠,你能跟我讲一下你的思路吗?
2013-05-08 13:20
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
收藏
得分:6 
以下是引用锦芳在2013-5-8 13:20:29的发言:

大侠,你能跟我讲一下你的思路吗?


不是大侠..正好做CPP的练习累了..我就讲一下

if(m == 1) return 0;
for(i = 2; i < m; i++)
    if(m % i == 0)
        return 0;

return 1;

写程序前你得明白素数是什么..

只能被1和自身整除的数,但1不是素数
所以
if(m == 1) return 0;
现在开始循环判断
for(i = 2; i < m; i++)
从2开始,一直到 m-1(因为 m % m 肯定是 == 0,所以要排除自身)
判断这个范围内的所有整数能否整除 m ,整除的另一个意思就是余数为0
if(m % i == 0)
可以整除,非素数
return 0; 此时函数调用结束,不会再向下执行函数内的语句

这个循环排除了一个数, 2
如果 m == 2, i < m 为假 ,不会进入for循环,直接执行 return 1;

如果循环结束后一直没找到能整除 m 的数,
表示m 是素数
return 1;


这程序还可以改进一下 ,因为偶数除了 2 ,其他的都不是素数
可以改成
if(m == 2) return 1;  //从第一句排除2
if ( m == 1 || m % 2 = 0) return 0;  //再排除 1 和非2 的偶数

for(i = 3; i < m/2; i++)//以上条件都不符合,因为能被2整除的数都被排除了,所以从3 到 m/2 之间查
    if(m % i == 0)
        return 0;
return 1;

[ 本帖最后由 Ryker 于 2013-5-8 14:18 编辑 ]
2013-05-08 13:40
快速回复:函数的调用
数据加载中...
 
   



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

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