# 实验三

#include<stdio.h>
long long fac(int n);

int main()
{
int i, n;

printf("Enter n: ");
scanf("%d", &n);

for (i = 1; i <= n; ++i)
printf("%d! = %lld\n", i, fac(i));

return 0;
}

long long fac(int n)
{
static long long p=1;

p=p*n;

return p;

}

static变量p使p只赋初值一次，后续运行中，保留上次的结果。

#include <stdio.h>
int func(int, int);

int main()
{
int k = 4, m = 1, p1, p2;

p1 = func(k, m);
p2 = func(k, m);
printf("%d,%d\n", p1, p2);

return 0;
}

int func(int a, int b)
{
static int m = 0, i = 2;

i += m + 1;
m = i + a + b;

return (m);


#include <stdio.h>

void printSymbol(int n, char symbol);

int main()
{
int n;
char symbol;

while( scanf("%d %c", &n, &symbol) != EOF )
{
printSymbol(n, symbol);
printf("\n");
}

return 0;
}

void printSymbol(int n,char symbol)
{
int i;

for(i=0;i<n;i++)
printf("%c",symbol);

}

#include <stdio.h>

void printSymbol(int n, char symbol);

int main()
{
int n;
char symbol;

while( scanf("%d %c", &n, &symbol) != EOF )
{
printSymbol(n, symbol);
printf("\n");
}

return 0;
}

void printSymbol(int n,char symbol)
{
if(n==1)
printf("%c",symbol);
else
{
printSymbol(n-1,symbol);
printf("%c",symbol);
}

}

我认为迭代更好，因为代码更改简单明了。

#include <stdio.h>
long long fun(int n);

int main()
{
int n;
long long f;

while (scanf("%d", &n) != EOF)
{
f = fun(n);
printf("n = %d, f = %lld\n", n, f);
}

return 0;
}

long long fun(int n)
{
long long int res;

if(n==0)
{
res=1;
return res-1;
}
else if(n>0)
{
res=2*(fun(n-1)+1);
return res-1;
}

}

#include <stdio.h>
#include <math.h>
int isPrime(int n);

int main()
{
int i,sum=0;
for(i=101;i<=200;i++)
{
if(isPrime(i)==0)
{
printf("%4d ",i);
sum++;
}
}
printf("\n101~200之间一共有%d个非素数",sum);

return 0;
}
int isPrime(int n)
{
int k;
for(k=sqrt(n);k>=2;k--)
{
if(n%k==0)
{
return 0;
}
}
if(k==1)
return 1;
}

#include <stdio.h>
long fun(long s);
int main()
{
long s, t;
printf("Enter a number: ");

while (scanf("%ld", &s) != EOF)
{
t = fun(s);
printf("new number is: %ld\n\n", t);
printf("Enter a number: ");
}

return 0;
}

long fun(long s)
{
long int a;
int t=0,p=1;
while(s>0)
{
a=s%10;
if(a%2==1)
{
t=t+a*p;
p=p*10;
}
s=s/10;
}
return t;
}

#include <stdio.h>
double fun(int n);
int main()
{
int n;
double s;
printf("Enter n(1~10): ");
while (scanf("%d", &n) != EOF)
{
s = fun(n);
printf("n = %d, s= %f\n\n", n, s);
printf("Enter n(1~10): ");
}
return 0;
}

double fun(int n)
{
int m=-1,i;
double s=1.0,k=1;

if(n==1)
return 1;

else
{
for(i=2;i<=n;i++)
{
k=k*i;
s+=m/k;
m=-m;
}
return s;
}
}

还是要注重逻辑上的思考，一步一步不能乱。要区分迭代和递归，递归的使用尚不熟练。更加熟悉了函数声明，函数调用，函数定义的格式。注意给递归设计出口。

posted @ 2021-11-29 12:57  iloveedith  阅读(7)  评论(0编辑  收藏  举报