改错题 1.  下列给定程序中,函数proc()的功能是:求S的值。
    S=(22/(1*3))*(42/(3*5))*(62/(5*7))
    *…*(2k)2/((2k-1)*(2k+1))
    例如,当k为20时,函数的值应为1.551759。
    请修改程序中的错误,使它能得出正确的结果。
    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
    试题程序:
    #include<stdio.h>
    #include<conio.h>
    #include<stdio.h>
    #include<math.h>
    //****found****
    proc(int k)
    {
    int n;float s,w,p,q;
    n=1;
    s=1.0;
    while(n<=k)
    {
    w=2.0*n;
    p=w-1.0:
    q=w+1.0;
    s=s*w*w/p/q;
    n++;
    }
    //****found****
    return s
    }
    void main()
    {
    system("CLS");
    printf("%f\n",proc(20));
    }
【正确答案】(1)错误:proc(int k)
   正确:double proc(int k)
   (2)错误:return s
   正确:return s;
【答案解析】 由主函数中的函数调用以及函数proc()中的return语句可知,函数proc()的返回值类型为double。因此,“proc(int k)”应改为“double proc(int k)”。根据C语言的语法规则,每一条语句都必须以分号结束,因此,应在语句“return s”后加上分号。