现在的位置: 首页 > 14 二级C语言 > 正文

二级真题001

2013年06月20日 14 二级C语言 ⁄ 共 750字 ⁄ 字号 二级真题001已关闭评论

所属年份:2010.9;2011.3;2012.3;

【程序填空题】

下列给定程序中,函数fun的功能是:计算如下公式
直到 ,并且把计算结果作为函数值返回。
例如,若形参e的值为1e-3,则函数返回值为0.551690。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include  <stdio.h>
double fun(double  e)
{
    int  i, k;
    double  s, t, x;
    s=0;
    k=1;
    i=2;
    /**********found**********/
    x=__1__/4;
    /**********found**********/
    while(x __2__ e)  {
        s=s+k*x;
        k=k* (-1);
        t=2*i;
        /**********found**********/
        x=__3__/(t*t);
        i++;
    }
    return  s;
}
main()
{
    double  e=1e-3;
    printf("\nThe result is: %f\n",fun(e));
}

【参考答案】
(1)3.0或(double)3  (2)>  (3) (t+1)

【解题思路】
填空1:变量x定义为double类型,而运算符"/"后面是整型数,所以给x赋值时,需要注意数据类型,此处不能将3.0写成3。
填空2:while循环语句的循环条件,根据题意确定循环变量应大于1e-3,因此此处应填">"。
填空3:表达式的通项是(2*i+1)/(2*i)2 ,由于程序中已定义t=2*i,所以此处应该填写(t+1)。

【程序修改题】

下列给定程序中函数fun的功能是:求出如下分数序列的前n项之和。和值通过函数值返回。

例如,若n=5,则应输出8.391667。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
 
/************found************/
void fun (  int  n )
{
    int  a, b, c, k;
    double  s;
    s = 0.0;
    a = 2;
    b = 1;
    for ( k = 1; k <= n; k++ ) {
        /************found************/
        s = s + (Double)a / b;
        c = a;
        a = a + b;
        b = c;
    }
    return s;
}
 
main( )
{
    int   n = 5;
    printf( "\nThe value of  function is: %lf\n",  fun (  n ) );
}

【参考答案】
(1)double fun(int n)
(2)s=s+(double)a/b;
【考点分析】
本题考查:函数定义,函数定义的一般形式为:"类型标识符 函数名(形式参数表列)",其中类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。
【解题思路】
(1)由语句"return(s)"和变量s定义为double数据类型可知,该函数定义时其类型标识符为double类型。
(2)注意数据类型double的书写格式。
【解题宝典】
确定函数类型标识符在填空和改错题中经常考到,如果函数没有返回值,则函数定义为void型;如果函数有返回值,则函数类型应与返回值类型一致;如果不定义函数类型标识符,则系统默认为int型。

【程序设计题】

请编写函数fun,其功能是:找出2×M整型二维数组中最大元素的值,并将此值返回调用函数。

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#define M 4
int fun (int a[][M])
{
 
}
 
main( )
{
    int arr[2][M]= {5,8,3,45,76,-4,12,82} ;
    printf("max =%d\n", fun(arr)) ;
}

【参考答案】

1
2
3
4
5
6
7
8
9
10
int fun (int a[][M])
{
 
    int i, j;
    int max = a[0][0];
    for (i=0; i<2; i++)
        for (j=0; j<M; j++)
            if (a[i][j]>max) max = a[i][j];
    return max;
}

【考点分析】
本题考查:求数组的最大值,需要运用循环语句,因为数组是二维数值,所以应使用二层加for循环嵌套。使用for循环语句时需要注意循环变量的取值范围。
【解题思路】
此类求最大值或最小值的问题,我们可以采用逐个比较的方式,要求对数组中所有元素遍历一遍,并且从中找出数组最大值或最小值。首先定义变量max存放数组中的第一个元素的值,然后利用for循环逐个找出数组中的元素,并与max比较,如果元素值大于max,则将该值赋于max,循环结后max的值即为数组最大值,最后将该值返回。
【解题宝典】
该类题目考查较多,要掌握逐行比较的方法。对于m*n二维数组,如采用逐行查找方法,代码实现为:
for(i=0;i

抱歉!评论已关闭.