M006

02-程序修改题 飞快学 337浏览

所属年份:2011.9;2012.9;2013.3;2013.9

下列给定程序中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、……
例如,若给n输入7,则该项的斐波拉契数值为13。

请改正程序中的错误,使它能得出正确结果。
注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构。

#include <stdio.h>
long fun(int  g)
{
    /**********found**********/
    switch(g);
    {
    case 0:
        return 0;
        /**********found**********/
    case 1 ;
    case 2 :
        return 1 ;
    }
    return ( fun(g-1)+fun(g-2) );
}

main()
{
    long   fib;
    int   n;
    printf("Input n:  ");
    scanf("%d",&n);
    printf("n = %d\n",n);
    fib=fun(n);
    printf("fib = %d\n\n",fib);
}

【参考答案】
(1) 去掉分号
(2) case 1:case 2:return 1;

【考点分析】
本题考查:switch语句,其一般形式为:

switch(表达式){  
case常量表达式1:  语句1;
case常量表达式2:  语句2;
……  
case常量表达式n:  语句n;
default:  语句n+1;
}

其中switch(表达式)后不应该带有”;”,同时case语句常量后应该是”:”。

【解题思路】

C语言中,switch语句之后不能有分号,并且case语句常量后应用的是冒号。