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

2010年春 阅读程序 题目解析

2011年09月13日 14 二级C语言 ⁄ 共 912字 ⁄ 字号 暂无评论

6 考察了错误的宏替换和运算符的优先级。 算术运算符(+ - * /)和关系运算符(> >= < <=)哪个优先级高? MAX(a+b,c+d) = a+b>c+d ? 2*a+b : 2*c+d
算术运算符的优先级高于关系运算符,所以可以化简为 3>7 ? 4: 10 = 10

正确的写法应该如下所示:

1
2
3
4
5
6
7
8
#include <stdio.h>
#define MAX(A,B)  A>B?2*A:2*B
void main()
{
    int a=1,b=2,c=3,d=4,t;
    t=MAX(a+b,c+d);
    printf("%d\n",t);
}

由于宏很容易出错,所以建议使用函数来替换宏。如果一定要使用宏,千万注意别少了括号。在二级C考试中,常考的就是不正确的宏的使用。

7 本题是交换两个整数的另外一种方法,你依次做就可以

1
2
3
4
5
6
7
8
9
#include <stdio.h>
void main()
{
    int a=1,b=2;
    a+=b;
    b=a-b;
    a-=b;
    printf("%d,%d\n",a,b);
}

8 正确的交换两个数的函数应该如下所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
void swap(int a,int b)
{
    int t;
    if(a>b)t=a,a=b,b=t;
}
void main()
{
    int x=13,y=11,z=12;
    if(x>y)swap(x,y);
    if(x>z)swap(x,z);
    if(y>z)swap(y,z);
    printf("%d\t%d\t%d\n",x,y,z);
}

本题中的写法,也就是不使用指针,是无法使得实参发生改变,也就无法完成两数的交换。第10~12行代码是不会使 x, y, z 发生变化的

9 本题考察了静态变量,以及变量 x 的作用域。

第 1 次调用函数 f 时, 静态变量 x 是其初始值 2;第 2 次调用函数 f 时,静态变量 x 是4,这是静态变量的概念。

另外,在函数中,出现了两个x, return x+y 的 x 使用的是 函数调用时传入的 x

第一次调用 f(a, 3) = f(3, 3) = { static x = 2 -> 4, y =4 } = return x+y = 3+4 = 7
第二次调用 f(a, 2) = f(3, 2) = { static x = 4, y =5 } = return x+y = 3+5 = 8

10 简单的递归

这个递归很简单,只用了一次。

11 杨辉三角形。如果你对杨辉三角形很了解,本题就 So Easy

12 很简单的 fun 函数,只不过是使用指针来实现。函数的功能是将奇数位置的字符进行反转。你可以先熟悉将整个字符串进行反转的函数。

13 题目很简单,细心完成就行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
int g(int x,int y)
{
    return x+y;
}
int f(int x,int y)
{
    {
        static int x=2;
        if(y>2) {
            x=x*x;
            y=x;
        } else y=x+1;
    }
    return x+y;
}
void main()
{
    int a=3;
    printf("%d\n",g(a,2));
    printf("%d\n",f(a,3));
    printf("%d\n",f(a,2));
}

【答案】

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
void fun(int m,int n)
{
    if(m>=n)
        printf("%d",m);
    else
        fun(m+1,n);
    printf("%d",m);
}
void main()
{
    fun(1,2);
}

抱歉!评论已关闭.