C语言学习笔记(七)

C语言学习第七天

1.7 函数
函数为计算的封装提供了一种简便的方法,以后使用函数时不需要考虑它是如何实现的。使用设计正确的函数,程序员无需考虑功能时如何实现的,只需要直到它具有哪些功能就够了。在C语言中可以简单、方便、高效地使用函数。我们经常回看到在定义后仅调用了一次的短函数,这样做可以使代码段更清晰易读。
到目前为止,我们使用的函数(如printf、getchar和putchar等)都是函数库中提供的函数。我们现在通过编写一个求幂的函数power(m,n)来说明函数定义的方法。pwer(m,n)函数用于计算整数m的n次幂,其中n时正整数。

#include <stdio.h>

int power (int m, int n);

/* 测试power函数 */
main () {
    int i;
    for (i = 0; i < 10; ++i)
        printf("%d %d %d\n", i, power(2, i), power(-3, i));
    return 0;
}

/* power函数: 求底数的n次幂;其中n>=0*/
int power(int base, int n) {
    int i, p;

    p = 1;
    for(i = 1; i <= n; ++i)
        p = p * base;
    return p;
}

函数定义的一般形式为:

返回值类型 函数名(0个或多个参数声明) {
    声明部分
    语句序列
}

函数定义可以以任意次序出现在一个源文件或多个源文件中,但同一函数不能分割存放在多个文件中。如果源程序分散在多个文件中,那么,在编译和加载时,就需要做更多的工作,但这是操作系统的原因,并不是语言的属性决定的。我们暂且假定将main和pwer这两个函数放在同一个文件中。
main函数在下列语句中调用了两次power函数:

printf("%d %d %d\n", i, power(2, i), power(-3, i));

每次调用时,main函数相power函数传递两个参数;在调用执行完成时,power函数向main函数返回一个格式化的整数并打印。
power函数的第一行语句

int power(int base, int n)

声明参数的类型、名字以及该函数返回的结果的类型。pwer函数的参数使用的名字只在power函数内部有效,对其他任何函数都不可见的:其他函数可以使用与之相同的参数名字而不会引起冲突。我们通常把函数定义中圆括号内列表中出现的变量称为形式参数,而把函数调用中与形式参数对应的值称为实际参数。
power函数计算所得的仅诶过通过return语句返回给main函数。关键字return后面可以跟任何表达式,形式为:

return 表达式;

函数不一定有返回值。不带表达式的return语句将把控制全返回给调用者,但不返回有用的值。主调函数也可以忽略函数的返回值。
main函数的末尾有一个return语句。由于main本身也是函数,因此也可以向其调用者返回一个值,该调用者实际上就是程序的执行环境。一般来说,返回值为0表示正常终止,返回值为非0-表示出现异常情况或出错结束条件。为简洁起见,前面的main函数都省略了return语句,但在以后的main函数中包含return语句,以提醒程序还要向其执行环境返回状态。
出现在main函数之前的声明语句

int power(int m, int n);

表明power函数有两个int类型的参数,并返回一个int类型的值。这种声明称为函数原型,它必须与power函数的定义和用法一致。如果函数的定义、用法与函数原型不一致,将出现错误。
函数原型与函数声明中参数名不要求相同。事实上,函数原型中的参数是可选的,这样上面的函数原型也可以写成以下形式:

int power(int, int);

但是,合适的参数名能够起到很好的说明性作用,因此我们在函数原型中总是指明参数名。

练习1-15 重新编写1.2节中的温度转换程序,使用函数实现温度转换计算。

--------------------------------------------------------------------------------------------------------------------
#include <stdio.h>

/* 练习1-15 重新编写1.2节中的温度转换程序,使用函数实现温度转换计算。 */

float fahrToCelsius(float fahr);
int printFahrToCelsius(int lower, int upper, int step) ;

main() {
    int lower, upper, step;

    lower  = 0;  /* 温度表的下限 */
    upper = 300;  /* 温度表的上限 */
    step = 20;  /*步长*/

    printFahrToCelsius(lower, upper, step);
}

float fahrToCelsius(float fahr) {
    return (5.0/9.0) * (fahr-32.0);
}

int printFahrToCelsius(int lower, int upper, int step) {
    int fahr;
    printf("\n---------------华氏温度与摄氏温度对照表------------\n\n");
    while (fahr <= upper) {
        printf("%3d %6.1f\n", fahr, fahrToCelsius(fahr));
        fahr = fahr + step;
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值