实验3
task1
#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! = %11d\n",i,fac(1));
return 0;
}
long long fac(int n)
{
static long long p = 1;
p = p*n;
return p;
}

#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! = %11d\n",i,fac(1));
return 0;
}
long long fac(int n)
{
static long long p = 1;
printf("p = %11d\n",p);
p = p*n;
return 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);
}

局部static变量的特性:分配静态内存,当函数调用完成后,内存不回收。
task2
#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;
}
// 函数printSymbol定义
void printSymbol(int n, char symbol)
{
int i;
for(i=1;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!=0){
printf("%c",symbol);
return printSymbol (n-1,symbol);
}
}

个人认为第一种更好,更简单清晰
task3
#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)
{
int ans;
if(n==1)
ans=1;
else
ans=(fun(n-1)+1)*2-1;
}

task4
#include<stdio.h>
#include<math.h>
int isPrime(int n){
int i;
for(i = 2;i<=sqrt(n);i++)
if(n%i==0)
return 0;
return 1;
}
int main(){
int i;
int num = 0 ;
int k =0;
for(i=101;i<=200;i++){
if (isPrime(i) == 0){
printf("%d ",i);
num++;
k++;}
if(k==10){
printf("\n");
k = 0;
}
}
printf("\n一共有%d个非素数",num);
}

task5
#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){
int i=1;
int t;
int num=0;
while(s!=0){
t = s%10;
if (t % 2 ==1){
num = num + t*i;
i *=10;
}
s = s/10;
}
return num;
}

task6
#include <stdio.h>
#include <math.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){
double qwq=1;
int i;
double s =0;
for(i=1;i<=n;i++){
qwq = qwq * i;
s= s+pow(-1,i-1)*(1/qwq);}
return s;
}

总结:巩固了关于递归方面的知识

浙公网安备 33010602011771号