输出斐波纳猰数列
输出斐波纳猰数列
方法一、
程序代码如下:
/*
2017年3月5日10:35:17
功能:n的阶乘采用的是递归方式实现
*/
#include "stdio.h"
long fun(int n) //注意此处的fun()是调用函数,两者之间没有空格
{
if (n > 1) //此处跳出递归的条件是当n = 1时
return (n * fun(n -1)); //当n的值满足条件或n = 2时程序还会执行该条语句
return 1;
}
int main (void)
{
int n;
/*
while (1)
{
printf ("请从键盘中获取n的数值:\n");
scanf ("%d",&n);
if (n >= 0)
break;
else
printf ("负数是没有阶乘,请重新输入新的数值:\n");
}
*/
while (printf ("请从键盘中获取n的数值:\n")) //死循环,其目的是为了直至输入一个符合条件的值,
{
scanf ("%d",&n); //在while()语句中非零(包括是一个表达式)为真,零为假
if (n >= 0)
break;
else
printf("负数没有阶乘,请重新输入新的数值\n");
}
printf ("n! = %ld\n",fun(n)); //此处要求按照按%ld的格式输出,主要是防止数据过大而导致数据溢出
return 0;
}
/*
总结:
——————————————————————————————————————————
1、%d表示输入/出为整数
%ld表示输入/出为长整型
2、实数型
%f没有必要写成%lf,双精度、单精度输出控制符是一样的。
当然是double类型时,写成printf("%lf\n",x);也不错
3、在VC++6.0中显示的结果:
———————————————————————————
请从键盘中获取n的数值:
6
n! = 720
———————————————————————————
——————————————————————————————————————————
*/
程序代码亮点归纳:
while (printf ("请从键盘中获取n的数值:\n")) //死循环,其目的是为了直至输入一个符合条件的值,
{
scanf ("%d",&n); //在while()语句中非零(包括是一个表达式)为真,零为假
if (n >= 0)
break;
else
printf("负数没有阶乘,请重新输入新的数值\n");
}
printf ("n! = %ld\n",fun(n)); //此处要求按照按%ld的格式输出,主要是防止数据过大而导致数据溢出
分析:
此部分的目的是为了获取到一个合法的数值,如果不合法,一直输到合法为止,合法时,想要跳出循环,此处采用的是break。
注解:break语句是跳出当前的循环体,而continue语句则是结束本次循环。
方法二、
递归程序代码:
/*
2017年3月5日11:16:02
功能:输入一个整数n,输出斐波纳猰数列,采用的是递归算法,源代码
*/
#include "stdio.h"
int fun(int n); //fun()函数的函数声明
int main (void)
{
int i, n = 0;
printf ("请输入一个整数n的数值:\n "); //此时输入的n是表示第几个数
scanf ("%d",&n);
printf ("最后输出结果的形式是:\n");
for (i = 0; i < n; i++)
printf (" %d ", fun(i)); //此时%d后面加的是非格式控制符,如果加\n则是转行符,当每次输出一次数据时都会换一次行
printf ("\n"); //当for循环执行完后,最后执行一次换行。
return 0;
}
int fun(int n) //注意在调用函数部分,函数名与小括号之间没有空格,而在其他语句,比如if、printf、scanf、、、语句与小括号之间应当存在空格
{
if (n==0)
return 0;
else if (n==1)
return 1;
else
return (fun(n-1)+fun(n-2));
return 1;
}
/*
总结:
1、非格式控制符:逗号,空格等等
2、在VC++6.0中显示的结果:
————————————————————————
请输入一个整数n的数值:
5
最后输出结果的形式是:
0 1 1 2 3
————————————————————————
*/