Babylanyon 2020-12-22 18:59 采纳率: 55.6%
浏览 16

c语言自定义函数||作业出问题了。。。

#include<stdio.h>
int main()
{
    int prime(int n);
	int a;
	scanf("%d",&a);
	if(prime(a))
		printf("yes\n");
	else
		printf("no\n");
    return 0;
}
int prime(int n)
{
	int c,b;
	if(n==1)
		return 0;
	for(b=2;b<n;b++)
	{
		c=n%b;
	}
	if(c==0)
		return 0;
	else
		return 1;
}

写一个判断素数的函数prime,在主函数中输入一个整数,调用prime判断,然后在主函数中输出判断结果

我输个13进去是素数,输个9进去也是素数。。。我人都傻了

还有就是自定义函数那里的return的值是回到主函数哪里的?那个if(prime(a))里面的a吗??

然后就是 我这个程序是已经改过但还是不懂的,我一开始写的那个是

#include<stdio.h>
int main()
{
    int prime(int n);
	int a,i;
	scanf("%d",&a);
    i=prime(a);
	if(i==0)
		printf("yes\n");
	else
		printf("no\n");
    return 0;
}
int prime(int n)
{
	int c,b;
	if(n==1)
		return 0;
	for(b=2;b<n;b++)
	{
		c=n%b;
	}
	if(c==0)
		return 0;
	else
		return 1;
}

  • 写回答

2条回答 默认 最新

  • ??cumt 2020-12-22 20:52
    关注

    (1) 自定义函数的返回值:

    if (prime(a) ):      prime(a) { return b } a是入参,返回值b是结果. prime的预期结果是: 若a是素数,则b=1, 若a不是素数,b=0

    if (prime(a)) : 会先计算prime(a)的结果b,然后将b代入到if的括号里,等同于 if(b),当a是素数时,b=1,if(1)成立,能进入下面的 printf("yes")

    (2) prime函数改一下:

    int prime(int n)
    {
        int c,b;    
        if(n==1)
            return 0;
        
        for(b=2;b<n;b++)
        {
            c=n%b;
            if(c==0)
              return 0;
        }
        return 1;
    }

     

    if (c == 0) 需要放到for循环里面,这样每次b变化,都要判断下 b是否是n的因子。只要有任意一个b是n的因子,都可直接得到a是合数。若所有b都不是n的因子,则可以判断a是素数。

    评论

报告相同问题?

悬赏问题

  • ¥15 岛津txt格式文件转nirs格式
  • ¥15 石墨烯磁表面等离子体
  • ¥15 angular 项目无法启动
  • ¥15 安装wampserver,图标绿色,但是无法进入软件
  • ¥15 C++ MFC 标准库 加密解密解惑
  • ¥15 两条数据合并成一条数据
  • ¥15 Ubuntu虚拟机设置
  • ¥15 comsol三维模型中磁场为什么没有“速度(洛伦兹项)”这一选项
  • ¥15 electron 如何实现自定义安装界面
  • ¥15 关于#linux#的问题:子进程C运行“ls –l”命令,且显示“C运行ls-l命令”(语言-c语言)