题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
2.程序源代码:
{
long f1,f2;
int i;
f1 = f2 = 1 ;
for (i = 1 ;i <= 20 ;i ++ )
{ printf( " %12ld %12ld " ,f1,f2);
if (i % 2 == 0 ) printf( " " ); /* 控制输出,每行四个 */
f1 = f1 + f2; /* 前两个月加起来赋值给第三个月 */
f2 = f1 + f2; /* 前两个月加起来赋值给第三个月 */
}
}
【程序12】
题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
2.程序源代码:
main()
{
int m,i,k,h = 0 ,leap = 1 ;
printf( " " );
for (m = 101 ;m <= 200 ;m ++ )
{ k = sqrt(m + 1 );
for (i = 2 ;i <= k;i ++ )
if (m % i == 0 )
{
leap = 0 ;
break ;
}
if (leap)
{
printf( " %-4d " ,m);
h ++ ;
if (h % 10 == 0 )
printf( " " );
}
leap = 1 ;
}
printf( " The total is %d " ,h);
}
【程序13】
题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
2.程序源代码:
{
int i,j,k,n;
printf( " 'water flower'number is: " );
for (n = 100 ;n < 1000 ;n ++ )
{
i = n / 100 ; /* 分解出百位 */
j = n / 10 % 10 ; /* 分解出十位 */
k = n % 10 ; /* 分解出个位 */
if (i * 100 + j * 10 + k == i * i * i + j * j * j + k * k * k)
{
printf( " %-5d " ,n);
}
}
printf( " " );
}
【程序14】
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
2.程序源代码:
{
int n,i;
printf( " please input a number: " );
scanf( " %d " , & n);
printf( " %d= " ,n);
for (i = 2 ;i <= n;i ++ )
{
while (n != i)
{
if (n % i == 0 )
{ printf( " %d* " ,i);
n = n / i;
}
else
break ;
}
}
printf( " %d " ,n);
}
【程序15】
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,
60分以下的用C表示。
1.程序分析:(a>b)?a:b这是条件运算符的基本例子。
2.程序源代码:
{
int score;
char grade;
printf( " please input a score " );
scanf( " %d " , & score);
grade = score >= 90 ? ' A ' :(score >= 60 ? ' B ' : ' C ' );
printf( " %d belongs to %c " ,score,grade);
}