C语言:浙大版《C语言程序设计(第3版)》题目集 习题6-4 使用函数输出指定范围内的Fibonacci数 (20 分)

其他题目详见:浙大版《C语言程序设计(第3版)》题目集

一.题目描述:

习题6-4 使用函数输出指定范围内的Fibonacci数 (20 分)

本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有Fibonacci数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。

函数接口定义:

int fib( int n );

void PrintFN( int m, int n );

其中函数fib须返回第n项Fibonacci数;函数PrintFN要在一行中输出给定范围[m, n]内的所有Fibonacci数,相邻数字间有一个空格,行末不得有多余空格。如果给定区间内没有Fibonacci数,则输出一行“No Fibonacci number”。

裁判测试程序样例:

#include <stdio.h>


int fib( int n );

void PrintFN( int m, int n );

    

int main()

{

    int m, n, t;


    scanf("%d %d %d", &m, &n, &t);

    printf("fib(%d) = %d\n", t, fib(t));

    PrintFN(m, n);


    return 0;

}


/* 你的代码将被嵌在这里 */

输入样例1:

20 100 7

输出样例1:

fib(7) = 13
21 34 55 89

输入样例2:

2000 2500 8

输出样例2:

fib(8) = 21
No Fibonacci number

二.代码示例:

int fib( int n )
{
	int i,a,b,t;
	a = b = 1;
	for(i = 0 ; i < n-2 ; i++)
	{
		t = a;
		a = b;
		b = a + t;
	}
	return b;
}

void PrintFN( int m, int n )
{
	int i,a,b,t,count = 0;
	a = b = 1;
	int j = 1;
	if(m == 1)
		printf("1 ");
	do
	{
		t = a;
		a = b;
		b = a + t;
		if(j == 1&&b >= m&&b <= n)
		{
			count++;
			printf("%d",b);
			j = 0;
		}
		else if(b >= m&&b <= n)
			printf(" %d",b);
		else if(b > m)
			break;
	} while(1);
	if(count == 0)
		printf("No Fibonacci number");
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言参考答案汇总(浙江大学城市学院) 第2周(M2) 2 20011求华氏温度100°F对应的摄氏温度。 2 20012 求华氏温度 150°F 对应的摄氏温度。 3 20013求摄氏温度26°C对应的华氏温度。 3 20015当n为152时,别求出n的个位字(digit1)、十位字(digit2)和百位字(digit3)的值。 3 20026 输入2个整 num1 和 num2,计算并输出它们的和、差、积、商与余。 4 第3周(M3) 5 20031 求1+2+3+......+100(调试示例error02_5) 5 20032 求m+(m+1)+(m+2)+......+100 5 20033 求1/m+1/(m+1)+1/(m+2)+......+1/n 6 20034 求1 + 1/3 + 1/5 + ......的前n项和 7 20035 求1-1/4+1/7-1/10+……的前n项之和 7 20036 输出华氏-摄氏温度转换表(改错题error02_6) 8 20038 求x的n次幂 9 20041 生成 3 的乘方表 10 20044 求100^0.5+101^0.5+……+1000^0.5 10 20053 计算物体自由下落的距离 11 20056 计算函数 11 20061 阶梯电价 12 20062 求m*m+1/m+(m+1)*(m+1)+1/(m+1)+(m+2)*(m+2)+1/(m+2)+......+n*n+1/n 13 20063 求1-2/3+3/5-4/7+5/9-6/11+…… 14 20064 求2^1+2^2+2^3+……+2^n 15 第4周(M4) 15 10007 显示图案 (复习printf()的字符串输出) 15 20042 生成阶乘表 16 20043 使用函数求 n! /(m!* (n-m)!) 16 20054 求平均值 17 20057 求1+1/2+1/3+......+1/n 18 20065 求0!+1!+2!+……+n! 18 40015 求最小值 19 40018 求a+aa+aaa+aa…a 20 第5周(M5) 21 30001 求一元二次方程的根 21 30002 求函数的值 23 30003 类统计字符 23 30004 显示五级记制成绩所对应的百制成绩区间(使用switch) 24 30005 显示水果的价格(使用switch) 25 30007 求三角形的面积和周长 27 30008 计算个人所得税 28 30051 判断闰年 29 30052 统计学生平均成绩与及格人 30 30053 段计算水费(使用嵌套的if-else语句) 31 第6周(M6) 32 40011 求最小公倍和最大公约(调试示例error04_1) 32 40012 求1-1/4+1/7-1/10+1/13-1/16+…… 33 40014 求整的位 34 40023 换硬币 35 40024 找出各位字的立方和等于它本身的 36 40025 找完(改错题error04_2) 38 40027 从高位开始逐位输出一个整的各位字(选作) 39 40052 判断素 40 40053 逆序输出 41 40054 输出斐波那契序列 42 第7周(M7) 42 50002 使用函数判断的符号 42 50003 使用函数求奇和 43 50005 使用函数统计素并求和 44 50006 使用函数统计一个整字的个 45 50007 使用函数找水仙花 46 50009 使用函数求余弦函数的近似值 48 50052 使用函数找最大值 49 50062 使用函数输出指定范围内的 Fibonacci 50 50063 使用函数找出指定范围内的完 51 第8周(M8) 52 40013 求奇和 52 40062 求x+x*x/2!+x*x*x/3!+x*x*x*x/4!+……的值 53 50004 使用函数计算两点间的距离 54 50061 使用函数求a+aa+aaa+aa…a 55 60002 整的十进制、八进制和十六进制表现形式 56 60003 类统计字符 57 60006 验证歌德巴赫猜想 58 60007 使用函数输出的逆序 59 60009 统计单词 60 60062 简单计算器 61
### 回答1: 可以使用一个函数输出指定范围Fibonacci的个。具体实现方法如下: 1. 定义一个函数函数名为fibonacci_count,接受两个参别为范围的起始值和结束值。 2. 在函数内部,定义一个变量count,用于记录符合条件的Fibonacci的个,初始值为。 3. 使用一个while循环,计算Fibonacci列中每个的值,直到计算出的值大于等于结束值。 4. 在循环中,判断当前计算出的值是否在指定范围内,如果是,则将count加1。 5. 循环结束后,返回count的值,即为指定范围内的Fibonacci的个。 下面是具体的代码实现: ```python def fibonacci_count(start, end): count = a, b = , 1 while b < end: if b >= start: count += 1 a, b = b, a + b return count ``` 使用函数,可以输出指定范围Fibonacci的个。例如,要求输出范围在10到100之间的Fibonacci的个,可以调用函数如下: ```python count = fibonacci_count(10, 100) print(count) ``` 输出结果为5,即在10到100之间有5个Fibonacci。 ### 回答2: 斐波那契列是指,前两个为1,从第三个开始,每个都是其前面两个之和。其列为:1, 1, 2, 3, 5, 8, 13, 21, 34…等等。在学上可以用递归或迭代的方式计算斐波那契列中第 n 个的值。在本题目中,要求使用函数输出指定范围内斐波那契的个。 首先,需要明确该函数的输入参,要求指定范围,故需要在函数定义时定义两个参,例如为:def fibonacci_count(start_num, end_num)。 然后,需要编写函数内部程序来计算斐波那契列中指定范围内斐波那契的个。可以通过设置一个计变量,在迭代计算出每个斐波那契时,判断是否在范围内,如果在范围内,则计器加一。 通过以上操作,可以得到以下代码实现: ``` def fibonacci_count(start_num, end_num): n1, n2 = 1, 1 count = 0 if start_num == 1: count += 1 while n2 <= end_num: n1, n2 = n2, n1 + n2 if n2 >= start_num and n2 <= end_num: count += 1 return count ``` 在该代码中,首先通过 n1 和 n2 定义斐波那契列中前两个的值,并初始化计器变量 count 为 0。然后,在循环中,每次计算斐波那契列中的第 n 个,判断该是否在指定范围内,如果是,则计器变量加一。 最后,将计器 count 的值返回即可。 以上为使用函数输出指定范围内斐波那契的个的方法和代码实现。 ### 回答3: 斐波那契列是一字序列,其前两个字为0和1,随后的每个字都是前两个字之和。因此,斐波那契列的前几个字如下所示:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ....等。 准确地说,斐波那契列中的第n项为:F(n) = F(n-1) + F(n-2)。其中,F(0)=0,F(1)=1。 要输出指定范围内的斐波那契字个,可以使用函数进行处理。我们可以定义一个函数,输入两个整n和m,其中n表示下限,m表示上限。函数输出指定范围内斐波那契字的个。 按照题目要求,我们需要求出指定范围内的斐波那契字个。可以采用两种方式进行实现:递推算法和递归算法。 一、递推算法 斐波那契列最基本的算法就是递推算法,即从头开始计算每个斐波那契字。根据斐波那契序列的定义,从第3项起,每个字都是前两个字之和。因此,我们可以使用一个循环语句,依次计算每个斐波那契字并记录其个。 具体实现如下所示: ``` def fib_count_range(n, m): n1 = 0 n2 = 1 count = 0 while n2 <= m: if n2 >= n: count += 1 n1, n2 = n2, n1 + n2 return count ``` 其中,变量n1和n2初始化别为0和1,表示斐波那契序列中的前两个字。count初始化为0,表示斐波那契字的个。 运用while循环计算斐波那契列中的字,用if语句判断该值是否在指定范围内。如果在范围内,则将count加1。最后返回count值即可。 二、递归算法 斐波那契列也可以使用递归算法来计算,它是一种通过调用自身的函数来实现重复的结构(例如斐波那契列)的方法。但是,递归算法的效率较低,因为它重复计算一些字。 具体实现如下所示: ``` def fib(n): if n <= 0: return 0 elif n == 1: return 1 else: return fib(n-1) + fib(n-2) def fib_count_range(n, m): count = 0 i = 0 while fib(i) <= m: if fib(i) >= n: count += 1 i += 1 return count ``` 其中,fib函数用于计算第n个斐波那契字。变量count、i用于计,while循环用于计算斐波那契列中的字。用if语句判断该值是否在指定范围内。如果在范围内,则将count加1。最后返回count值即可。 最后,根据实际使用情况和需求,选择递推算法或递归算法计算指定范围内的斐波那契字个即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eliauk-GX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值