实验4~函数与数组

实验任务1

//一元二次方程求解(函数实现方式)
//重复执行,直到按下ctrl+z结束 
#include <math.h>
#include <stdio.h>

void solve(double a,double b,double c);

int main(){
    double a, b, c;
    
    printf("Enter a, b, c:");
    while(scanf("%lf%lf%lf",&a, &b, &c)!=EOF){
        solve(a ,b , c);
        printf("Enter a, b, c:");
        
    }
    return 0;
} 

//函数定义
//功能:求解一元二次方程,打印输出结果

void solve(double a, double b, double c){
    double x1, x2;
    double delta, real, imag;
    
    if(a == 0)
       printf("not quadratic equation.\n");
    else{
        delta = b*b - 4*a*c;
        
        if(delta >= 0){
            x1 = (-b + sqrt(delta)) / (2*a);
            x2 = (-b - sqrt(delta)) / (2*a);
            printf("x1 = %f, x2 = %f\n", x1, x2);
        }
        else{
            real = -b/(2*a);
            imag = sqrt(-delta) / (2*a);
            printf("x1 = %f + %fi, x2 = %f - %fi\n",real, imag, real, imag);
             
            
        }
    }
}
 

一元二次方程当Δ不等于0时会有两个根,而函数返回值只有一个值,所以不能设置成以函数为返回值的方式返回给主调函数。

实验任务2

//利用局部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;}

插入代码后ex2.1运行图示

ex2.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);
}

ex2.2运行图示

有代码可得i=i+m+1;m=i+a+b;定义中m与i已赋值,所以i=3,a=4,b=1,m=8,返回值m即为8;同理,第二个返回值m为17.

static变量可分为静态局部变量和静态全局变量。局部变量特点:1.占据一个永久性的存储单元,与文件一起存在;2.在编译时赋初值,一旦存储值改变,不会再执行赋初值语句;3.未赋值变量值为0.

实验任务3

//寻找两个整数之间的所有素数(包括这个整数),把结果保存至数组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==1)
        bb[k++]=j;
    }
    return k;
} 
int main(){
    int n=0,m=0,i,k,bb[N];
    bb[N]={0};
    
    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; 
}

运行图示6 21

6 30

实验任务4

源代码

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

运行图示

实验任务5

源代码

#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 line, x, y;
   for (line=1;line<=n;line++){
   
    for (x=1;x<=n-line;x++)
    {
    printf(" ");
    } 
    for(y=1;y<=2*line-1;y++){ 
    printf("%c",symbol);
    } 
    printf("\n");
}
}
    

运行图示

 

posted on 2020-12-06 11:37  helianthus-JUN  阅读(100)  评论(0编辑  收藏  举报

导航