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;
}
原文地址:https://www.cnblogs.com/tsembrace/p/3252551.html