No.4

实验一

  return 只能返回一个值,故无法实现一元二次方程两个根的返回

 

实验二

2.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; 
    printf("%lld\n",p);
    p=p*n; 
    
    return p; 
}

 

 

2.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所限定的变量在经过运算后会被保存并可在接下来的运算中使用,若不用static限定变量,则在每次运行结束后变量会被还原到初始值

 

实验三


//寻找两个整数之间的所有素数(包括这两个整数),把结果保存在数组bb中,函数返回素数的个数。 
// 例如,输入6和21,则输出为:7 11 13 17 19。 
#include <stdio.h> 

#define N 1000
int fun(int n,int m,int bb[N]) { 
    int i,j,k=0,flag; 
    
    for(j=n;j<=m;j++) { 
        flag=1; 
        for(i=2;i<j;i++) 
            if(j%i==0) { 
            flag=0; 
            break; 
        }
        if(flag!=0) 
            bb[k++]=j; 
    }
    return k; 
}

int main(){ 
    int n=0,m=0,i,k,bb[N]; 
    
    scanf("%d",&n); 
    scanf("%d",&m); 
    
    for(i=0;i<m-n;i++) 
        bb[i]=0; 
    
    k=fun(n,m,bb); 
    
    for(i=0;i<k;i++) 
        printf("%4d",bb[i]); 
    
    return 0; 
}



实验四
#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){

    static int i=0;
    static long long m=0;
    if(i<n)
        for(i;i<n;i++)
            {m=m*2+1;}
    else
        for(i;i>n;i--)
            m=(m-1)/2;

    return m;
}

 

 

实验五

#include <stdio.h> 

void draw(int n, char symbol); // 函数声明 

#include <stdio.h> 
int main() { 
    int n, symbol; 

    while(scanf("%d %c", &n, &symbol) != EOF) { 
        draw(n, symbol); // 函数调用 
        printf("\n"); 
    }
    
    return 0; 

}

void draw(int n,char symbol){
    int l,k,z,c;
    c=n;
    for(k=1;k<=n;k++)
        {
            for(z=1;z<c;z++)
                printf(" ");
            for(l=1;l<=2*k-1;l++)
                printf("%c",symbol);
            printf("\n");
            c--;
        }
}

 



 

posted @ 2020-12-03 23:43  行客自多愁丶  阅读(90)  评论(0编辑  收藏  举报