zhao(a);
云梦网站建设公司创新互联,云梦网站设计制作,有大型网站制作公司丰富经验。已为云梦上1000+提供企业网站建设服务。企业网站搭建\外贸营销网站建设要多少钱,请找那个售后服务好的云梦做网站的公司定做!
这一句,函数返回之后你没有做任何处理,比如输出,原来的a值也没有影响。
printf("%d",zhao(a));
zhao()函数返回值作为参数输出了。
由于你的函数是用值传递,所以传入的a的值不会被改变。
这个函数的功能是将一个int型数据n 转换成char型数据并储存到数组s中
i必须用静态变量,因为i代表着数字n的位数。这个函数是递归实现的,如果不把i设置为静态,那么每次调用i都会变成0,这样就无法保存n的每一位的数字了。所以要运用静态局部变量的性质,即只会被初始化一次。这样变量i的值就随着函数的调用而改变。
#include stdio.h
#include stdlib.h
int isPrime(int m)
{
int flag,i;
flag=1;//默认标记为1,是素数
for(i=2;im;i++)//从2开始到m
{
if(m%i==0){flag=0;}//对比自身小的数字进行求余。如果能求余就不是素数,标记为0
}
return flag;//返回标记
}
int main()
{
int n,prime;
int count=0;//计数器从0开始
for(n=3;n200;n=n+2)//奇数有可能会成为素数
{
prime=isPrime(n);//调用isPrime函数
if(prime==1)//如果返回值为1,则说明他是素数
{
count++;//计数,用来换行
printf("%5d",n);
if(count%5==0){printf("\n");}//每5个换行
}
}
system("pause");//暂停
return 0;
}
你说的就是库函数的源码,也就是glibc,源码在可以下到,比如下载,打开后就可以看到你需要的各种库的具体实现代码,比如在string中的strcat.c中就有
char *strcat (dest, src)
char *dest;
const char *src;
{
char *s1 = dest;
const char *s2 = src;
reg_char c;
/* Find the end of the string. */
do
c = *s1++;
while (c != '\0');
/* Make S1 point before the next character, so we can increment
it while memory is read (wins on pipelined cpus). */
s1 -= 2;
do
{
c = *s2++;
*++s1 = c;
}
while (c != '\0');
return dest;
}
你的递归函数没有返回,永远也不会结束。n=0 后在函数并不会结束,只是在n为负数阶段不会输出,但是n不断-1必然最终会翻转为正整数,然后n从最大的正整数开始递归输出到n=0,如此循环往复,当然最终内存超限了。
解决办法很简单,给递归函数加个中止条件就行了,符合条件就返回。
void fudu(char ch, int n, int x)
{
int i;
if (n == 1)
{
printf("%c", ch);
return;
}
for (i = 0; i n; i++)
{
printf("%c", ch);
}
fudu(ch, n - 1, 1);
}
void f(int* k, int n, int* fcnt, int* scnt)
{
void s(int* k, int n, int* fcnt, int* scnt);
++*fcnt;
++* k;
if (*k == n)
return;
s(k, n, fcnt, scnt);
}
void s(int* k, int n, int* fcnt, int* scnt)
{
void f(int* k, int n, int* fcnt, int* scnt);
++*scnt;
++*k;
if (*k == n)
return;
f(k, n, fcnt, scnt);
}
void solve(int n)
{
void f(int* k, int n, int* fcnt, int* scnt);
int k = 0, fcnt = 0, scnt = 0;
f(k, n, fcnt, scnt);
//输出f与s两个函数的调用次数
printf("%d %d", fcnt, scnt);
}