不知道坛子上研究c语言的dd mm们多不,
看的懂就看看,
看不懂的话,
以后我就不发这种帖子了
#include <stdio.h>
main()
{ int fun(int n);
int i;
for(i=1;i<=200;i++)
if(fun(i)) printf("%5d",i);
}
int fun(int n)
{ int flag=1,i;
for(i=2;i<n/2 && flag==1;i++)
if(n%i==0) flag=0;
return(flag);
调用函数中,为什么是return(flag)而不是return 0;或return n;
返回值是怎么确定的?
提问者: zqsdw - 试用期 一级
最佳答案
怎么跟你解释呢。在底层一点的汇编语言里面,函数调用是通过栈实现的,函数块内的变量所需的空间都在栈上分配。C语言的return语句对应了汇编语言的一条函数调用返回的指令,CPU的寄存器单元里面有一个特殊的专门用来存取函数返回值的寄存器,这条返回指令执行的时候。并不是返回的flag,而是把flag里面的值先复制到了这个特殊的寄存器里面再返回的,而一旦返回,flag这个变量里面的内容就被“销毁”了。大概是这样的,等你学了计算机原理你就会清楚了。
你这个函数fun主要是要判断传进来的参数n是不是素数,返回值flag主要就是用1或者0来标示一下是还是不是。1表示是,0表示不是。素数定义是只能被1和它本身整除的数。fun先把flag置1,也就是先假设n是素数,然后让i从2开始一直到n/2,测试n % i == 0是否成立,一旦成立,就说明n能被一个不是它本身的数整除,那么n就不是素数,所以flag就应该被改为0。因为flag可以是1可以是0
,代表两种不同的判断,所以返回的时候就应该写return flag;flag是1就说明通过你上面的那些测试,判断出flag确实是素数,你的假设是正确的,for循环没有改过flag的假设值,就是说n % i == 0都不成立,即n不能被除其本身以外的数整除。而如果flag是0,那就说明至少有一个n % i == 0是成立的,就说明n不是素数了。这就相当于,你是监考员对学生提了一个是非问,让学生把答案是/否写在一张纸条上交给你,flag就相当于那张纸条。