现在的位置: 首页 > 06 函数 > 正文

函数的定义与调用

2013年11月19日 06 函数 ⁄ 共 31字 ⁄ 字号 函数的定义与调用已关闭评论

函数是结构化设计的基础。

【问题:分段函数】

有一个函数

y={ x      x<1
    | 2x-1   1<=x<10
    \ 3x-11  x>=10

写一段程序,输入x,输出y。 说明:x 和 y 都是整数。

这是一个典型的函数,有输入、有输出。和数学中的函数不同的是,C语言中的数据是有数据类型的。

C语言中的函数基本结构如下:

1
2
3
4
返回类型  函数名称(参数列表)
{
    函数体
}

这个函数的C程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main(int argc, char *argv[])
{
    int x, y;
    scanf("%d",&x);
    if(x<1)
        y=x;
    else if(x<10)
        y=2*x-1;
    else
        y=3*x-11;
    printf("%d",y);
    return 0;
}

可以根据以下的原则将 main 程序改写成函数:
1) 将 scanf 中读入的数据作为参数列表,去除声明中重复的参数
2) 将 printf 语句输出的值改为返回值
3) 将 scanf 和 printf 之间的语句作为函数体

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int f(int x)
{
    int y;
    if(x<1)
        y=x;
    else if(x<10)
        y=2*x-1;
    else
        y=3*x-11;
    return y;
}

可以编写一个主函数来测试这个函数是否编写的正确。

1
2
3
4
5
6
7
int main(int argc, char *argv[])
{
    int n;
    scanf("%d", &n);
    printf("%d\n", f(n));
    return 0;
}

函数除了是模块化设计的基础之外,还可以简化逻辑判断。 本题中的函数可以改写为

1
2
3
4
5
6
int f(int x)
{
    if(x<1) return x;
    if(x<10) return 2*x-1;
    return 3*x-11;
}

当执行到第4行时, 隐含的条件是 x>=1。因为如果 x<1,那么已经执行第3行的语句返回了。 同样的道理对于第5行语句也成立。

抱歉!评论已关闭.