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

C语言经典例题100(8~16)

2013-08-08 14:19 603 查看
八、输出9*9口诀。

#include<stdio.h>

int main()
{
int r[9]={1,2,3,4,5,6,7,8,9};
int c[9]={1,2,3,4,5,6,7,8,9};
int i,j;

printf("0\t1\t2\t3\t4\t5\t6\t7\t8\t9\n");
for(i=1;i<10;i++)
{
printf("%d",i);
for(j=1;j<10;j++)
printf("\t%d",r[i-1]*c[j-1]);
printf("\n");
}
getch();
return 0;
}


十一、古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

程序分析:每个月新增的兔子对数取决于上上个月的兔子对数;假设第i月有x只兔子,设第(i+1)个月有y只兔子,则第(i+2)个月比第(i+1)个月新增兔子数量为x,即(x+y)只兔子;

归纳为:F(i+2)=F(i+1)+F(i);

同时本题中F(1)=F(2)=2;因此本题可用递归方法解决。

#include<stdio.h>

int F_rabbit(unsigned int x)
{
if(x==0) return 0;
if(x==1||x==2) return 2;
else return F_rabbit(x-1)+F_rabbit(x-2);
}
int main()
{
int month_num;
printf("请输入第几个月:\n");
scanf("%d",&month_num);
printf("第%d个月总共有%d只兔子。\n",month_num,F_rabbit(month_num));
getch();
return 0;
}


十二、判断101-200之间有多少个素数,并输出所有素数。

#include<stdio.h>

int Is_Prime(int x)
{
int i;
for(i=2;i<=(x/2);i++)
if(x%i==0)
break;
if(i==x/2+1)
return 1;
else
return 0;
}

int main()
{
int x,n=0;
int Is_Prime(int);
for(x=101;x<201;x++)
{
if(Is_Prime(x))
{
printf("\t%d",x);
n++;
if(n%5==0)
printf("\n");
}
}
printf("\n101~200之间共有%d个素数。\n",n);
getch();
return 0;
}


十三、打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

#include<stdio.h>

int main()
{
int a,b,c;
for(a=1;a<10;a++)
for(b=1;b<10;b++)
for(c=1;c<10;c++)
if((a*a*a+b*b*b+c*c*c)==(100*a+10*b+c))
printf("\t%d",100*a+10*b+c);
getch();
return 0;
}


十四、将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

程序分析:非质数的正整数的最小因数必为其最小的质因数,先求其最小质因数,在求原数除去这个最小质因数的最小质因数,以此类推,直至除运算后商为质数为止。

因此,设计一个可以返回最小质因数的函数,并循环调用它。

#include<stdio.h>

int min_pfactor(int x)
{
int i;
if(x<=3)
return 0;
for(i=2;i<=x/2;i++)
if(x%i==0)
break;
if(i==(x/2+1))
return 0;
else
return i;
}

int main()
{
int x,a;
printf("请输入一个正整数:\n");
scanf("%d",&x);
if(!min_pfactor(x))
{
printf("你输入的是一个素数!\n");
getch();
return 0;
}
else
{
printf("分解质因数为:%d=",x);
while(a=min_pfactor(x))
{
printf("%d*",a);
x=x/a;
}
printf("%d",x);
getch();
return 0;
}
}


十五、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

#include<stdio.h>

int main()
{
int score;
printf("please input the score:\n");
scanf("%d",&score);
printf("level is:%c",(score>=90)?'A':((score<60)?'C':'B'));
getch();
return 0;
}


十六、输入两个正整数m和n,求其最大公约数和最小公倍数。

#include<stdio.h>

int max_factor(int a,int b)
{
if(!b)
return a;
else
return max_factor(b,a%b);
}

int main()
{
int m,n;
printf("请从大到小依序输入两个正整数:\n");
scanf("%d%d",&m,&n);
printf("%d和%d的最小公约数为%d,最大公倍数为%d",m,n,max_factor(m,n),m*n/(max_factor(m,n)));
getch();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: