您的位置:首页 > 编程语言 > C语言/C++

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

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

#include<stdio.h>

int main()
{
char i,j,k;     //设a\b\c对手
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\nb------->%c\nc------->%c\n",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.\n",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.\n",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("输入一串字符:\n");
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岁。\n",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("请输入一个不超过五位数的整数。\n");
scanf("%ld",&x);
printf("你输入的是一个%d位数。\n",fnum1(x));
printf("正序输出为:\n");
fnum2(x);
printf("\n逆序输出为:\n");
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\t",a[i]);
}

int main()
{
unsigned int a[10];
int i;
void paixu(unsigned int a[],int n);
printf("请输入十个正整数:\n");
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.\n",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("\n");
}

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: