实验三

task1

//利用局部static变量的特征,计算阶乘
#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变量的特征,计算阶乘
#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;
   printf("p=%11d\n",p);
   p=p*n;
   return p; 
}

 task1-2

//练习:局部static变量特征

#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;
}

void printSymbol(int n, char symbol)
{
    int i=0;
    for(i;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)
{
    long long result;
    
    if(n==0)
    result=0;
    
    else if(n==1)
        result=1;
        
    else if(n>1&&n<=32)
    result=2*fun(n-1) + 1;    
    
    return result;
}

 

task 4

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

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


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

 

task5

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

int main()
{
    long s,t;
    
    printf("Enter a numble: ");
    while(scanf("%ld",&s)!=EOF)
    {
        t = fun(s);
        printf("new numble is: %ld\n\n",t);
        printf("Enter a numble: ");
    }
    
    return 0;
    
}

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

 

task6

#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;
    double s=1.0,t=1,i;
    
    if(n==1)
    return 1;
    
    else
    {
        for(i=2;i<=n;i++)
        {
          t*=i;
          s+=m/t;
          m=-m;
        }
        return s;
    }    
}

 

posted @ 2021-11-27 11:49  周杨0532  阅读(31)  评论(1编辑  收藏  举报