实验3

 

 

1.

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

 

 

 

 

 

#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变量:不用重新赋值

 

2.

#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);
        
    }
    printf("\n");
}

 

 

 

 

#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{
        printf("%c",symbol);
        printsymbol(n-1,symbol);
    }
        

}

 

  迭代和递归在不同的应用场景下实现方式难度不一,选择代码量更少,更清晰易懂的

 

3.

#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)
{
    if(n==0)
        return 0;
    else if(n==1)
        return 1;
    else{
        return 2*fun(n-1)+1;
    }
        
}

 

 

 

4.

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

int main()
{
    int n,num,j=0;  //n存放100~200的数, num存放是否素数,j计数 
    for(n=101;n<=200;n++)
    {
        num=isprime(n);
        if(num==1)
            continue;
        else{
            printf("%4d",n);
            j++;
        }
        
            
    }
    printf("\n"); 
    printf("101~200之间一共有%d个非素数",j);
    return 0;
}

int isprime(int n)
{
    int i,s;
    
    for(i=2;i<=n;i++){
        s=n%i;
        if(s==0)
            break;
    }
    if(i==n)
        return 1;
    else
        return 0;
}

 

 

5.

#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 num,result=0,j=1;

    while(s>0) 
    {
        num=s%10;
        if(num%2==1)
        {
            result=result+j*num;
            j=j*10;
            
        }
        
        s=s/10;
    }
    return result;
}

 

 

6.

#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)
  {
      double sum;
      int i,sign,bottom;
      sum=0;
      sign=1;
      bottom=1;
      for(i=1;i<=n;i++){
          bottom=bottom*i;
          sum=sum+1.0*1/bottom*sign;
          sign=sign*(-1);
      }
      return sum;
  }

 

 

实验总结:

1.学习使用了函数,static变量,递归

2.注意区分11d和lld,前一个是占11位,后一个是输入输出longlong整型

3.在编写后三个代码是遭遇了不一样的问题,一个小问题会导致运行结果大相径庭:注意括号的位置、优先级;注意行代码在嵌套里的位置等等

posted @ 2021-11-25 11:00  gfygfy  阅读(27)  评论(1编辑  收藏  举报