1. 程式人生 > >C++實驗報告4

C++實驗報告4

https har baidu abs sca 分法 判斷 tor csdn

習題5-4

#include <stdio.h>
#include <string.h>
int main(){
    int a=0,b=0,c=0,d=0;
    char x;
    while(scanf("%c",&x)&&x!='\n'){
        if((x>='a'&&x<='z')||(x>='A'&&x<='Z')) a++; //是字母
        else if(x==' ') b++; //是空格
        else if(x>='0'&&x<='9') c++; //是數字
        else d++; //是其他字符
    }
    printf("字母數: %d\n空格數: %d\n數字數: %d\n其他字符數 %d",a,b,c,d);
    return 0;
}

習題5-5

#include <stdio.h>
int main(){
    int a,n,sum,k;
    printf("請輸入a:\n");
    scanf("%d",&a);
    printf("請輸入n:\n");
    scanf("%d",&n);
    sum=k=0;
    for(int i=0;i<n;i++){
        k=k*10+a;
        sum+=k;
    }
    printf("%d",sum);
    return 0;
}

習題5-7

#include <stdio.h>
int main(){
    double sum=0;
    for(int k=1;k<=100;k++) sum+=1.0*k;
    for(int k=1;k<=50;k++) sum+=1.0*k*k;
    for(int k=1;k<=10;k++) sum+=1.0/k;
    printf("%lf",sum);
    return 0;
}

習題5-8

#include <stdio.h>
int main(){
    for(int a=1;a<=9;a++) //百位
        for(int b=0;b<=9;b++) //十位
            for(int c=0;c<=9;c++) //個位
                if(a*a*a+b*b*b+c*c*c==a*100+b*10+c*1)
                    printf("%d\n",a*100+b*10+c*1);
    return 0;
}

習題5-9

#include <stdio.h>
int main(){
    for(int n=1;n<=1000;n++){
        int sum=0; //因子之和
        for(int i=1;i<n;i++){
            if(n%i==0) sum+=i; //i可被n整除,則i為n的因子
        }
        if(sum==n){ //因子和等於數本身,為完數
            printf("%d its factors are 1",n); //為了方便處理逗號,先輸出一個1(1為任意正整數的因子)
            for(int i=2;i<n;i++){ //從2開始找因子,因為1已經輸出
                if(n%i==0) printf(",%d",i); //先輸出逗號再輸出因子
            }
            printf("\n");
        }
    }
    return 0;
}

習題5-10

#include <stdio.h>
int main(){
    double sum=0;
    int a=1,b=2,c=0; //a為分母,b為分子,c為中轉用的變量
    for(int i=0;i<20;i++){
        sum+=1.0*b/a;
        c=a+b;
        a=b;
        b=c;
    }
    printf("%lf",sum);
    return 0;
}

習題5-11

#include <stdio.h>
int main(){
    double h=100.0,sum=100.0; //初始高度100m
    //倒推法,從第十次往前算
    for(int i=10;i>0;i--){
        sum+=h;
        h/=2;
    }
    printf("共經過的米數為 %lf , 最後一次彈跳高度為 %lf",sum,h);
    return 0;
}

習題5-12

#include <stdio.h>
int main(){
    int sum=1;
    for(int i=0;i<9;i++)
        sum=(sum+1)*2;
    printf("%d",sum);
    return 0;
}

習題5-13

#include <stdio.h>
#include <math.h> //用它的abs求絕對值
int main(){
    double x,y,a;
    printf("請輸入a:\n");
    scanf("%lf",&a);
    x=a;
    y=0.5*(x+a/x);
    while(abs(x-y)>0.00001){ //abs取絕對值,再判斷是否滿足精確值要求
        x=y;
        y=0.5*(x+a/x);
    }
    printf("%lf",y);
    return 0;
}

習題5-14
牛頓叠代法參考資料

#include <stdio.h>
int main(){
    //原式為2*x*x*x-4*x*x+3*x-6
    //導數式為6*x*x-8*x+3
    double x=1.5;
    while(2*x*x*x-4*x*x+3*x-6!=0)
        x=x-(2*x*x*x-4*x*x+3*x-6)/(6*x*x-8*x+3);
    printf("%lf",x);
    return 0;
}

習題5-15
二分法參考資料

#include <stdio.h>
int main(){
    double a=-10.0,b=10.0,c,y,x;
    while(c=(2*x*x*x-4*x*x+3*x-6)){
        if(c<0) a=(a+b)*0.5; //c小於目標值,區間向右半部分精確
        else b=(a+b)*0.5; //c大於目標值,區間向右半部分精確
        x=(a+b)*0.5;
    }
    printf("%lf",x);
    return 0;
}

附加題1

#include <stdio.h>
int main(){
    int sum=0;
    for(int a=0;a*3<=45;a++) //3元的雞兒
        for(int b=0;a*3+b*2<=45;b++) //2元的雞兒
            for(int c=0;a*3+b*2+c<=45;c++) //1元的雞兒
                if(a*3+b*2+c==45) sum++;
    printf("%d",sum);
    return 0;
}

附加題2

#include <stdio.h>
#include <math.h>
#include <time.h>
int main(){
    srand(time(0));
    int a=rand()%100+1,b;
    printf("輸入一個數\n");
    for(int i=1;i<=7;i++){
        scanf("%d",&b);
        if(a==b){
            printf("你猜對了!\n");
            return 0;
        }
        else if(a<b) printf("你猜大了\n");
        else printf("你猜小了\n");
    }
    printf("你應經猜了七次,你輸了\n");
    return 0;
}

C++實驗報告4