输出斐波纳猰数列
输出斐波纳猰数列
方法一、
程序代码如下:
/* 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的数值: "); scanf ("%d",&n); if (n >= 0) break; else printf ("负数是没有阶乘,请重新输入新的数值: "); } */ while (printf ("请从键盘中获取n的数值: ")) //死循环,其目的是为了直至输入一个符合条件的值, { scanf ("%d",&n); //在while()语句中非零(包括是一个表达式)为真,零为假 if (n >= 0) break; else printf("负数没有阶乘,请重新输入新的数值 "); } printf ("n! = %ld ",fun(n)); //此处要求按照按%ld的格式输出,主要是防止数据过大而导致数据溢出 return 0; } /* 总结: —————————————————————————————————————————— 1、%d表示输入/出为整数 %ld表示输入/出为长整型 2、实数型 %f没有必要写成%lf,双精度、单精度输出控制符是一样的。 当然是double类型时,写成printf("%lf ",x);也不错 3、在VC++6.0中显示的结果: ——————————————————————————— 请从键盘中获取n的数值: 6 n! = 720 ——————————————————————————— —————————————————————————————————————————— */
程序代码亮点归纳:
while (printf ("请从键盘中获取n的数值: ")) //死循环,其目的是为了直至输入一个符合条件的值, { scanf ("%d",&n); //在while()语句中非零(包括是一个表达式)为真,零为假 if (n >= 0) break; else printf("负数没有阶乘,请重新输入新的数值 "); } printf ("n! = %ld ",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是表示第几个数 scanf ("%d",&n); printf ("最后输出结果的形式是: "); for (i = 0; i < n; i++) printf (" %d ", fun(i)); //此时%d后面加的是非格式控制符,如果加 则是转行符,当每次输出一次数据时都会换一次行 printf (" "); //当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 ———————————————————————— */