例题第4章

 

4.1

#include<stdio.h>
#include<math.h>
int main(void)
{
    int denominator,flag;
    double item,pi;

    flag=1;
    denominator=1;
    item=1.0;
    pi=0;

    while(fabs(item)>=0.0001){
        item=flag*1.0/denominator;
        pi=pi+item;
        flag=-flag;
        denominator=denominator+2;
    }
    pi=pi*4;
    printf("pi=%.4f\n",pi);

    return 0;
}

4.2

#include<stdio.h>
int main(void)
{
    int count,num;
    double grade,total;

    num=0;
    total=0;
    count=0;
    printf("Enter grade:");
    scanf("%lf",&grade);

    while(grade>=0){
        total=total+grade;
        num++;
        if(grade<60)
            count++;
        scanf("%lf",&grade);
    }
    if(num!=0){
        printf("Grade average is %.2f\n",total/num);
        printf("Number of failure is %d\n",count);
    }
    else
        printf("Grade average is 0\n");
    return 0;
}

4.3

#include<stdio.h>
int main(void)
{
    int count,number;

    count=0;
    printf("Enter a number:");
    scanf("%d",&number);
        if(number<0)number=-number;
        do{
            number=number/10;
            count++;
        }while(number!=0);
        printf("It contains %d digits.\n",count);

        return 0;
}

4.4

#include<stdio.h>
int main(void)
{
    int i,m;
     printf("Enter a number:");
     scanf("%d",&m);
     for(i=2;i<=m/2;i++)
         if(m%i==0)
             break;
         if(i>m/2&&m!=1)
             printf("%d is a prime number !\n",m);
         else
             printf("No!\n");

          return 0;
}

4.5

#include<stdio.h>
int main(void)
{
    int mynumber=38;
    int count=0,yournumber;
    for(count=1;count<=5;count++){
        printf("Input your number:");
        scanf("%d",&yournumber);
        if(yournumber==mynumber){
            printf("Ok!you are right!\n");
            break;
        }
        else
            if(yournumber>mynumber)
                printf("Sorry!your number is bigger than my number!\n");
            else
                printf("Sorry!your number is smaller than my number!\n");
    }
    printf("Game is over !\n");
    return 0;
}

4.6

#include<stdio.h>
double fact(int n);
int main(void)
{
    int i;
    double sum;
    sum=0;
    for(i=1;i<=100;i++)
        sum=sum+fact(i);
    printf("1!+2!+...+100!=%e\n",sum);

    return 0;
}
double fact(int n)
{
    int i;
    double result;

    result=1;
    for(i=1;i<=n;i++)
        result=result*i;

    return result;
}

4.7

#include<stdio.h>
int main(void)
{
    int i,j;
    double item,sum;

    sum=0;
    for(i=1;i<=100;i++){
        item=1;
        for(j=1;j<=i;j++)
            item=item*j;
        sum=sum+item;
    }
    printf("1!+2!+...+100!=%e\n",sum);


    return 0;
}

4.8

#include<stdio.h>
int main(void)
{
    int i,mark,max,n;

    printf("Enter n:");
    scanf("%d",&n);
    printf("Enter %d marks:",n);
    scanf("%d",&mark);
    max=mark;
    for(i=1;i<n;i++){
        scanf("%d",&mark);
        if(max<mark)
            max=mark;
    }
    printf("Max=%d\n",max);

        return 0;
}

4.9

#include<stdio.h>
int main(void)
{
    int x;

    printf("Enter x:");
    scanf("%d",&x);
    while(x!=0){
        printf("%d",x%10);
        x=x/10;
    }

        return 0;
    }

4.10

#include<stdio.h>
#include<math.h>
int main(void)
{
    int count,i,m,n;

    count=0;
    for(m=2;m<=100;m++){
        n=sqrt(m);
        for(i=2;i<=n;i++)
            if(m%i==0)
                break;
            if(i>n){
            printf("%6d",m);
            count++;
            if(count%10==0)
                printf("\n");
            }
    }
    printf("\n");

    return 0;
}

4.11

#include<stdio.h>
int main(void)
{
    int i,x1,x2,x;

    x1=1;
    x2=1;
    printf("%6d%6d",x1,x2);
    for(i=1;i<=8;i++){
        x=x1+x2;
        printf("%6d",x);
        x1=x2;
        x2=x;
    }
    printf("\n");

    return 0;
}

4.12.1

#include<stdio.h>
int main(void)
{
    int child,men,women;

    for(men=0;men<=45;men++)
        for(women=0;women<=45;women++)
            for(child=0;child<=45;child++)
                if(men+women+child==45&&men*3+women*2+child*0.5==45)
                    printf("men=%d,women=%d,child=%d\n",men,women,child);

                return 0;
}

4.12.2

#include<stdio.h>
int main(void)
{
    int child,women,men;

    for(men=0;men<=15;men++)
        for(women=0;women<=22;women++){
            child=45-women-men;
                if(men*3+women*2+child*0.5==45)
                    printf("men=%d,women=%d,child=%d\n",men,women,child);
        }


                return 0;
}

转载于:https://www.cnblogs.com/simple9495/p/3398926.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
例题4.4.2是关于主成分分析的例题,其中给出了一组数据,包括5个变量和10个观测值。我们可以按照以下步骤进行主成分分析: 1. 数据标准化:对每个变量进行标准化处理,即减去该变量的均值,再除以该变量的标准差。 2. 计算协方差矩阵:将标准化后的数据计算协方差矩阵。 3. 计算特征值和特征向量:对协方差矩阵进行特征值分解,得到特征值和特征向量。 4. 选取主成分:按照特征值从大到小的顺序,选取前k个特征值所对应的特征向量,组成k个主成分。 5. 计算主成分得分:将每个观测值代入k个主成分的公式中,得到每个观测值在k个主成分上的得分。 在例题4.4.2中,经过标准化处理后,协方差矩阵为: ``` 1.00 0.98 0.74 0.79 0.90 0.98 1.00 0.67 0.73 0.85 0.74 0.67 1.00 0.92 0.88 0.79 0.73 0.92 1.00 0.89 0.90 0.85 0.88 0.89 1.00 ``` 特征值分解得到的特征值为: ``` 3.5567 0.8465 0.4060 0.1329 0.0580 ``` 对应的特征向量为: ``` 0.4774 0.5000 0.4506 0.3796 0.4233 0.4645 0.4662 -0.4930 -0.3152 -0.5676 -0.4152 0.6017 -0.4057 0.0529 -0.5408 0.4964 -0.1979 -0.5405 0.4201 -0.5046 -0.4179 0.3314 0.3045 0.7676 -0.2260 ``` 按照特征值从大到小的顺序,选取前3个特征值所对应的特征向量,组成3个主成分: ``` PC1 = 0.4774x1 + 0.5000x2 - 0.4506x3 + 0.3796x4 - 0.4233x5 PC2 = 0.4645x1 + 0.4662x2 + 0.4930x3 - 0.3152x4 + 0.5676x5 PC3 = -0.4152x1 + 0.6017x2 + 0.4057x3 + 0.0529x4 + 0.5408x5 ``` 代入每个观测值得到它们在3个主成分上的得分: ``` 观测值1: PC1 = -1.8799, PC2 = 0.6364, PC3 = -0.0083 观测值2: PC1 = -0.5768, PC2 = -1.0168, PC3 = 0.4472 观测值3: PC1 = 1.7256, PC2 = -0.2551, PC3 = 0.3358 观测值4: PC1 = 0.0910, PC2 = 1.0170, PC3 = -0.0985 观测值5: PC1 = 0.6394, PC2 = 0.6185, PC3 = -0.6312 观测值6: PC1 = 0.7789, PC2 = -0.3195, PC3 = 0.5326 观测值7: PC1 = -0.3987, PC2 = -0.1984, PC3 = -0.8395 观测值8: PC1 = -0.4437, PC2 = 0.9642, PC3 = -0.0225 观测值9: PC1 = 0.1433, PC2 = -0.6477, PC3 = -0.2618 观测值10: PC1 = -0.1351, PC2 = -0.5096, PC3 = 0.1172 ``` 这样我们就得到了每个观测值在三个主成分上的得分,可以用这些得分来描述数据的结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值