实验3

#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(i));
       
    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(i));//lld不是11d
       
    return 0;
    
} 

long long fac(int n)
{
    static long long p = 1;
       printf("p = %lld\n", p);
    p = p * n;
    return p;
}

 

 

#include<stdio.h>
int func(int,int);//hanshushengming
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;//static只在第一次运用时取定义值,以后每次都是刷新数据 
    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;
}

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 == 1)
    printf("%c", symbol);
    else
    {
    printSymbol(n-1, symbol);
    printf("%c",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 p;
    if(n==1)
    p=1;
    else
    p=(fun(n-1)+1)*2-1;//递归,从第一项开始算,往后推(最后一项不好表示)
    
    return p;
}

 

 task4

 

#include<stdio.h>
#include<math.h>
int isPrime(int);//函数声明 
int main()
{
    int i,sum=0; 
    for(i=101;i<=200;i++)
        {
        if(isPrime(i)==0)
        {
        printf("%4d",i);
        sum++;
        }
        }
    printf("\n");
    printf("101~200之间一共有%d个非素数",sum);
    return 0;
}

int isPrime(int n)
{
    int s, m;

    for(m=2;m<=sqrt(n);++m)
    {
        s = n % m;
        if(s==0)
            return 0;
        else if(m>sqrt(n))
            return 1;    
    }
}

 

 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 p=0,n=1;
    long int t;
    do
    {
    t=s%10;
    if(t%2!=0)
        {
        p=p+n*t;
        n=n*10;
        }        
    s=s/10;
    }while(s>0); 
    return p;
}

 task6

#include <stdio.h>
double fun(int n);
int main()
{
    int n,t;
    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 answer,t=0;
    int sign=1,p=1,i=1;
    if(n==1)
    answer = 1;
    else
    {
        for(i=1;i<=n;i++)
            {
            p=p*i;
            t=t+sign*(float)1/p;
            sign=-sign;
            answer=t;
            }
    
    }
    
    return answer;
}

 对递归函数的运用更加熟练,对抽象问题的处理能力也有了显著提高

 

posted @ 2021-11-30 16:25  修罗'  阅读(22)  评论(0编辑  收藏  举报