C++实验报告4

习题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;
}

猜你喜欢

转载自www.cnblogs.com/kangyupl/p/10631308.html