第三次实验

实验1.

//利用局部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=%lld\n",p);
    p=p*n;
    return p;
}

 

 

  猜测:8,16

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

 

 错误原因:i也是静态变量,第二次为3。

 局部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);
}

 

 递归

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

 

 递归更好,避免了引入新的变量,减少内存占用。

 

实验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)
{
    long long result;
    if(n==1)
    return 1;
    else
    {
    long long result=2*fun(n-1)+1;
    return result;
}
}

 

 

 

实验4.

#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 n,j,count=0;
    for(n=101;n<=200;n++)
    {
        j=isPrime(n);
        if(j==0)
        {
        printf("%5d",n);
        count++;
    }
    }
    printf("\n101~200之间一共有%d个非素数",count);
    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)
{
    long sum1=0,sum=0,temp;
    for(temp=s;temp>0;temp/=10)
    {
        if(temp%2==1)
     sum1=sum1*10+temp%10;    
    }
    while(sum1)
    {
    sum=sum*10+sum1%10;
    sum1/=10;
    } 
    return sum;
}

 

实验6.(注意小数运算至少要有一个小数)

#include<stdio.h>
double fun(int n);
int fac(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 s;
    if(n==1)
    s=1;
    else
    s=fun(n-1)+1.0/fac(n);
    return s;    
}
int fac(int n)
{
    if(n==1)
    return 1;
    else
    {
    int s=(-1)*fac(n-1)*n;
    return s ;
}
}

 

 

posted @ 2021-11-24 23:16  可京  阅读(42)  评论(1编辑  收藏  举报