11.26实验课

#include<stdio.h>
#include<math.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))/(a*2);
        x2 = (-b - sqrt(delta))/(a * 2);
        printf("x1 = %lf, x2 = %lf\n",x1,x2);
    }
    else{
        real  = -b/(2*a);
        imag = sqrt(-delta) / (a * 2);
        printf("x1 = %f + %fi , x2 = %f - %fi\n", real, imag, real);
        }
    }
}

#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("%d:",n);  
    p = p*n;
    return p;
}

在20 到22 之间加入输出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);//输出结果应为,8,17
    return 0; 
}
int func(int a, int b){
    static int m = 0,i = 2;
    i += m +1;
    m = i + a + b;
    return(m);
}

#include<stdio.h>
#include<math.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 int f;
    while(scanf("%d",&n)!=EOF){
        f = fun(n)-1;
        printf("n = %d, f = %lld\n", n, f);
    }
    return 0;
} 
long long fun(int n){
    long long int f,t;
    if(n==1)
    f = 2;
    else{
    f = 2 * fun(n-1);    
    }
    return f;
}

#include<stdio.h>
void print(int a,char b);
int main(){
    int a;
    char b;
    while(scanf("%d %c",&a,&b)!=EOF){
        print(a,b);
    }
    return 0;
} 
void print(int a,char b){
    int d = a;
    for(;a>0;a--){
        int c = a-1;
        for(;c>0;c--)
        printf(" ");
        int e = 2*(d-a+1)-1;
        for(;e>0;e--)
        printf("%c",b);
        printf("\n");
    }
}

实验一:因为二次函数的值经常有两个结果,所以无法用一个函数返回两个值,因此不能用返回值的方法。

实验二:static变量在每次函数调动完会保存,并且保存的为上一次的值;

实验四:1在原本设计算法的过程中,在定义fun函数时我选用了两个变量,t用递归计算2的n次方,f=t-1,最后返回f,但是因为我在这里运用了递归的思想,每一个t = 2 * fun(n-1)-1,中返回的都是f = 1所以导致结果不对,运用递归思想的时候一定要主要函数的返回值。

2运用递归的思想,该方程应该是2*fun(n-1)+1,表达的是第n次移盘子的次数为将n-1个盘子从A移到B,再将n从A移到C,再将n-1从B移到C,但是这个想法不能实现老师给的2的n次方减一的式子,所以我用fun来计算2的n次方并返回,在main函数中对返回值-1达到该式子的效果。

posted @ 2020-11-26 22:40  鸣蜩  阅读(54)  评论(4编辑  收藏  举报