• C语言经典例题100(22~40)


    二十二、两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

    #include<stdio.h>
    
    int main()
    {
        char i,j,k;     //设ac对手
        for(i='X';i<='Z';i++)
            for(j='X';j<='Z';j++)
                for(k='X';k<='Z';k++)
                {
                    if(i!=j&&j!=k&&k!=i)
                        if(i!='Z'&&k!='X'&&k!='Z')
                            printf("a------->%c
    b------->%c
    c------->%c
    ",i,j,k);
                }
        getch();
        return 0;
    }

    二十四、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

    程序分析:第一项为2/1,第二项为3/2;之后设每项为a(n)/b(n)=(a(n-2)+a(n-1))/(b(n-2)+b(n-1)),典型的可用递归方法求得每一项的分母和分子;分别用两个函数求得分母和分子。

    #include<stdio.h>
    
    int fenmu(int a)
    {
        if(a==0)
            return 1;
        if(a==1)
            return 2;
        else
            return fenmu(a-2)+fenmu(a-1);
    }
    
    int fenzi(int a)
    {
        if(a==0)
            return 2;
        if(a==1)
            return 3;
        else
            return fenzi(a-2)+fenzi(a-1);
    }
    int main()
    {
        float tsum=0.0,f1,f2;
        int i;
        for(i=0;i<20;i++)
        {
            f1=fenzi(i);
            f2=fenmu(i);
            tsum+=f1/f2;
        }
        printf("前20项总和为%f.
    ",tsum);
        getch();
        return 0;
    }

    二十五、求1+2!+3!+...+20!的和。

    #include<stdio.h>
    
    int f(int n)
    {
        if(n==1)
            return 1;
        else
            return n*f(n-1);
    }
    
    int main()
    {
        int i;
        long sum=0;
        for(i=1;i<21;i++)
        {
            sum+=f(i);
        }
        printf("结果为%ld.
    ",sum);
        getch();
        return 0;
    }

    二十七、利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

    #include<stdio.h>
    #include<string.h>
    
    void printchar(char *pc,int n)
    {
        char *px;
        px=pc-1;
        printf("%c",*pc);
        if(n!=0)
            printchar(px,n-1);
    
    }
    
    int main()
    {
        char c[1000];
        int length;
        printf("输入一串字符:
    ");
        scanf("%s",c);
        length=strlen(c);
        printchar(&c[length-1],length);
        getch();
        return 0;
    }

    二十八、有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

    #include<stdio.h>
    
    int age(int n)
    {
        if(n==1)
            return 10;
        else
            return age(n-1)+2;
    }
    
    int main()
    {
        printf("第五个人年纪是%d岁。
    ",age(5));
        getch();
        return 0;
    }

    二十九、给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

    #include<stdio.h>

    //求位数函数,递归方法,当然也可以用while语句
    int fnum1(long m)
    {
    if(m/10==0)
    return 1;
    else
    return fnum1(m/10)+1;
    }

    //正序输出每一个数字,以逗号分隔;
    void fnum2(long m)
    {
    int i;
    int num=1;
    int n=fnum1(m);
    for(i=0;i<n-1;i++)
    num=num*10;
    for(i=0;i<n;i++)
    {
    printf("%d,",m/num);
    m=m%num;
    num=num/10;
    }
    }

    void fnum2_digui(long m)
    {
    if(fnum1(m)==1)
    printf("%ld",m);
    else
    {
    fnum2_digui(m/10);
    printf("%ld",m%10);
    }
    }

    //逆序输出每一个数字
    void fnum3(long m)
    {
    int i=0;
    do
    {
    printf("%ld,",m%10);
    m=m/10;
    i++;
    }while(m!=0);
    }

    int main()
    {
    long x;
    printf("请输入一个不超过五位数的整数。 ");
    scanf("%ld",&x);
    printf("你输入的是一个%d位数。 ",fnum1(x));
    printf("正序输出为: ");
    fnum2(x);
    printf(" 逆序输出为: ");
    fnum3(x);
    getch();
    return 0;
    }

    三十七、对10个数进行排序。

    #include<stdio.h>
    
    void paixu(unsigned int a[],int n)
    {
        int i,j,t;
        for(i=0;i<n;i++)
            for(j=0;j<(n-i-1);j++)
                if(a[j]>a[j+1])
                {
                    t=a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                }
        for(i=0;i<n;i++)
            printf("%d	",a[i]);
    }
    
    
    
    
    int main()
    {
        unsigned int a[10];
        int i;
        void paixu(unsigned int a[],int n);
        printf("请输入十个正整数:
    ");
        for(i=0;i<10;i++)
            scanf("%d",&a[i]);
        paixu(a,10);
    
        getch();
        return 0;
    }

    三十八、求一个3*3矩阵对角线元素之和。

    #include<stdio.h>
    
    int qiuhe(int (*a)[3],int n)  //参数1为一个指向含有m个整型元素的一维数组指针,m为列,n为行
    {
        int i,sum=0;
        for(i=0;i<n;i++)
            sum+=a[i][i];
        return sum;
    }
    
    int main()
    {
        int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
        printf("对角线数字之和为%d.
    ",qiuhe(a,3));
    
        getch();
        return 0;
    }

    四十、将一个数组逆序输出。

    #include<stdio.h>
    
    void print_array(int a[],int n)
    {
        int i;
        for(i=0;i<n;i++)
        {
            printf("%d  ",*a);
            a++;
        }
    
        printf("
    ");
    }
    
    int main()
    {
        int a[10]={1,2,3,4,5,6,7,8,9,10};
        int b[10],i,*p;
        void print_array(int a[],int n);
        for(i=0;i<10;i++)
            b[i]=a[9-i];
        p=b;
        print_array(a,10);
        print_array(b,10);
        print_array(p,10);
    
    
    
    
        getch();
        return 0;
    }
  • 相关阅读:
    指针+[][]T 类型
    linux适用小工具-tmux
    wrk+lua进行压力测试
    brew更换为国内源
    k8s证书更新
    ssh隧道
    kubeadm安装集群系列(kubeadm 1.15.1)
    harbor清理存储
    第十周课程总结
    第九周课程总结&第七次实验报告
  • 原文地址:https://www.cnblogs.com/tsembrace/p/3252551.html
Copyright © 2020-2023  润新知