南师大复试编程训练四

31.一个球从100m落下,每次反弹回原来高度的一半,问第10次共经历多少米,反弹多少米。

#include <stdio.h>

int main()
{
    double h=100,sum=100;   //sum初值置为首高度
    for(int i=1; i<=10; i++)
    {
        h*=0.5;   //下次高度为本次的一半
        if(i==1)   //sum初值已加过
            continue;
        sum=sum+2*h; //每次经历两次
    }
    printf("第10次共经历%.2lf米,反弹%.2lf米\n",sum,h);
    return 0;
}

运行结果:

32.一个数恰好等于它的因子(能整除的)之和,如:6=1+2+3。找出1000以内的所有完数

#include <stdio.h>

int main()
{
    int i,j,sum,a[10],k;
    for(i=2; i<1000; i++)
    {
        a[10]= {0};
        k=0;
        sum=0;
        for(j=1; j<i; j++)
        {
            if(i%j==0)
            {
                sum+=j;
                a[k++]=j;
            }

        }
        if(sum==i)
        {
            printf("%d=",i);
            for(j=0; j<k-2; j++)
                printf("%d+",a[j]);
            printf("%d\n",a[k-2]);
        }
    }
    return 0;
}

运行结果:

33.有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13,....求前20项的和

#include <stdio.h>

int main()
{
    float n=1,m=2,t,s,sum=0;//m为分母,n为分子
    for(int i=1; i<=20; i++)
    {
        s=m/n;
        sum+=s;  //求和
        t=m;   //往后确定两部分的值
        m=m+n;
        n=t;
    }
    printf("sum=%f\n",sum);
    return 0;
}

运行结果:

34.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,又多吃了一个;第二天早上又吃了剩下的一半,又多吃了一个;以后也一样。到第10天只剩下1个。问第一天共摘了多少个桃子?

#include <stdio.h>

int main()
{
    int i,sum=1;   //rest为第10天剩余个数
    for(i=9; i>0; i--) //i为第9~1天
        sum=(sum+1)*2;
    printf("sum=%d\n",sum);
    return 0;
}

运行结果:

35.迭代法求x=sqrt(a)。求平方根的迭代公式Xn+1=1/2*(Xn+a/Xn)

#include <stdio.h>
#include <math.h>
int main()
{
    float x1=1,x2,a;
    scanf("%f",&a);
    x2=a;
    while(fabs(x1-x2)>=1e-5)
    {
        x1=x2;
        x2=(x1+a/x1)/2;
    }
    printf("%.2f,%.2f\n",x1,x2);

    return 0;
}

运行结果:

36.用二分法求下面方程在(-10,10)之间的根:2*x³-4*x²+3*x-6=0

#include <stdio.h>
#include <math.h>
int main()
{
    double a=-10,b=10,c,x,x1,x2,x3;
    for(int i=0;; i++)
    {
        c=(a+b)/2;
        x1=2*pow(a,3)-4*pow(a,2)+3*a-6;
        x2=2*pow(b,3)-4*pow(b,2)+3*b-6;
        x3=2*pow(c,3)-4*pow(c,2)+3*c-6;
        if(x3==0)
            x=c;
        else if(x1*x3<0)
            b=c;
        else if(x2*x3<0)
            a=c;
        if(fabs(a-b)<1e-8)
        {
            x=a;
            break;
        }
    }
    printf("Root=%lf\n",fabs(x));
    return 0;
}

运行结果:

37.输出

   *

  ***

 *****

*******

 *****

  ***

   *

#include <stdio.h>

int main()
{
    int i,j,k;
    for(i=0; i<=3; i++)
    {
        for(j=0; j<3-i; j++)
            printf(" ");
        for(k=0; k<2*i+1; k++)
            printf("*");
        printf("\n");
    }
    for(i=0; i<3; i++)
    {
        for(j=0; j<i+1; j++)
            printf(" ");
        for(k=0; k<5-2*i; k++)
            printf("*");
        printf("\n");
    }
    return 0;
}

运行结果:

38.比赛。甲队为a,b,c三人,乙队为x,y,z三人。a说他不与x比,c说他不与x,z比。编程找出三队赛手名单。

#include <stdio.h>

int main()
{
    char i,j,k;   //i,j,k分别对应为a,b,c的对手
    for(i='x'; i<='z'; i++)
        for(j='x'; j<='z'; j++)
            if(j!=i)   //a,b,c不能同为一个人的对手
                for(k='x'; k<='z'; k++)
                    if(k!=i&&k!=j)  //a,b,c不能同为一个人的对手
                    {
                        if(i!='x'&&k!='x'&&k!='z')   //a不与x比,c不与x,z比
                            printf("a--%c\nb--%c\nc--%c\n",i,j,k);
                    }
    return 0;
}

运行结果:

39.将一个二维数组行和列互换,存到另一个二维数组中。

#include <stdio.h>

int main()
{
    int a[3][3]= {{1,2,3},{4,5,6},{7,8,9}},b[3][3];
    printf("原矩阵为:\n");
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
        {
            printf("%d ",a[i][j]);
            b[j][i]=a[i][j];
        }
        printf("\n");
    }

    printf("行列互换之后:\n");
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
            printf("%d ",b[i][j]);
        printf("\n");
    }
    return 0;
}

运行结果:

40.求一个3*3的整型矩阵对角元素之和。

#include <stdio.h>

int main()
{
    int a[3][3]= {{1,2,3},{4,5,6},{7,8,9}},sum=0;
    for(int i=0; i<3; i++)
        sum+=a[i][i];
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
        {
            printf("%d ",a[i][j]);
            if(j==2)
                printf("\n");
        }
    }
    printf("对角线元素之和为:%d\n",sum);
    return 0;
}

运行结果:

发布了462 篇原创文章 · 获赞 55 · 访问量 32万+

猜你喜欢

转载自blog.csdn.net/LY_624/article/details/104966124
今日推荐