实验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;
}

  

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

posted @ 2021-11-28 19:04  *惜往日  阅读(18)  评论(0编辑  收藏  举报