1. 程式人生 > 實用技巧 >9.java設計模式之組合模式

9.java設計模式之組合模式

任務1

#include<math.h>
#include<stdio.h>
int main(){
    float a, b, c, x1, x2;
    float delta, real, imag;
    printf("Enter a, b, c: ");
    while(scanf("%f%f%f",&a, &b, &c) != EOF){
        if(a == 0)
            printf("not quadratic equation.\n\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 = %.2f, x2 = %.2f\n\n", x1, x2);
            }
            else{
                real = -b/(2*a);
                imag = sqrt(-delta)/(2*a);
                printf("x1 = %.2f + %.2fi, x2 = %.2f - %.2fi\n\n",real, imag, real, imag);
        }
    }
    printf("Enter a, b, c: ");
    }
    return 0;
}

任務2
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 5
int main(){
    int x, n;
    srand(time(0));
    n = 0;
    do{
        n++;
        x = rand()%10;
        printf("%3d",x);
    }while(n<N);
    printf("\n");
    return 0;
}

任務3
#include<stdio.h>
#include<math.h>
int main(){
    int x=1, a=0, j=0;
    for(int n=101;n<=200;n++){
        for(int i=2;i<=sqrt(n);i++){
            if(n % i == 0){
                x=0;
                break;
            }
            else
                continue;
        }
        if(x==1)j+=1;
        if(x==1 && (j-1)%5!=0){
            printf("%6d",n);
            a++;
        }
        else if(x==1 && (j-1)%5==0 && j!=1){
            printf("\n");
            printf("%6d",n);
            a++;
        }
        else if(x==1 && (j-1)%5==0 && j==1){
            printf("%6d",n);
            a++;
        }
        x=1;
    }
    printf("\n");
    printf("101~200之間共有%d個素數",a);
    return 0;
}

任務4
#include <stdio.h>
#include <math.h>
long long chang(long long i){
    long long len=1;
    if(i<=0)
        return 0;
    else{
        for(;i/10>0;i/=10)
            len++;
        return len;
    }
}




int main(){
    long long num,len,i,a;
    printf("Enter a number:");
    while(scanf("%lld",&num)!=EOF){
        long long j=0; 
        for(len=chang(num);len>=0;len--){
            i=pow(10,len);
            a=num/i;
            num=num%i;
            if(a%2!=0)
            j=j*10+a;
        }    
        printf("New number is:%d\n",j);
        printf("\n");
        printf("Enter a number:");
    }
    return 0;
}

先計算輸入數字的長度:求這個數字一共有多少位,再利用這位數結合10的指數運算,依次把輸入數字每一位上的數字打出來,判斷是否為奇數,是奇數就輸出。

任務5

#include<stdio.h>
int a(int n){
    int all;
    if(n<=0)
        return -1;
    else if(n==1){
        all = 1;
        return all;
    }
    else{
        all = n*a(n-1);
        return all;
    }
}

int main(){
    int n,x=1;
    double sum=0,y;
    printf("Enter n(1`10):");
    while(scanf("%d",&n)!=EOF){
    for(int i=1;i<=n;i++){
        x=a(i);
        y=1.0/x;
        x=1;
        if(i%2==0)
            sum = sum + -1 * y;
        if(i%2!=0)
            sum = sum + y; 
    }
    printf("n = %d, s = %lf\n",n,sum);
    printf("\n");
    sum=0;
    printf("Enter n(1`10):");
}
    return 0;
} 

任務6
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
    int day,guess,i=3;
    srand(time(0));
    day=rand()%31+1;
    printf("猜猜2020年12月哪一天會是你的luck day\n");
    printf("開始嘍,你有三次機會,猜吧:");
    for(;i>=1;i--){
        scanf("%d",&guess);
        if(guess==day){
            printf("\n");
            printf("Bingo!\n");
            i=10;
            break;
        }
        else if(guess>day){
            printf("\n");
            printf("你猜的日期晚了,luck day悄悄溜到前面啦\n");
            if(i!=1)
            printf("再猜:");
            continue;
        }
        else{
            printf("\n");
            printf("你猜的日期早了,luck day還沒到呢\n");
            if(i!=1)
            printf("再猜:");
            continue;    
        }
    }
    if(i==0){
        printf("\n");
        printf("次數用完啦,偷偷告訴你:12月,你的luck day是%d號。\n",day);
    }
    return 0;
}

實驗總結:
演算法有簡單和複雜的區別,未接觸函式之前,自己只能用比較複雜的方法設計演算法,學了函式之後,終於可以把程式中的很多操作儲存到另一個函式當中,
需要的時候直接呼叫即可,如此程式碼就變得簡潔許多。同時,再面對比較複雜的一些演算法的時候,自己可能無能為力,再怎麼看還是發現不了錯誤。這個時候,最
好的辦法就是向老師和同學交流求助。所以說,接下來還是要多多學習才好。