《C语言程序设计与实践(第2版)》——2.7 函数

2.7 函数

C语言的程序是由一个个函数构成的,除了有且必须有的main主函数以外,用户也可以自己定义函数。此外,C语言的编译系统还提供了一些库函数。函数为程序的封装提供了一种简便的方法,在其他地方使用函数时不需要考虑它是如何实现的。在使用正确设计的函数时不需要考虑“它是怎么做的”,只需要知道“它是做什么的”就够了。当定义好一个函数后,我们可以通过函数调用的方式来使用该函数的功能。
在上述示例中,所使用的函数(如cos、printf与scanf等)都是函数库所提供的。接下来看看怎样编写自己的函数。我们通过编写一个求阶乘的函数factorial(int n)来说明定义函数的方法。
factorial(int n)函数用于计算整数n的阶乘,比如factorial(4)的值为24。这个函数不是一个实用的阶乘函数,它只能用于处理比较小的整数的阶乘,因为如果要求阶乘的整数比较大,那么使用该方法很容易越界,导致程序无法获得正确的结果。希望读者读完整本书以后,能为该问题找到正确的解决方法。
下面给出函数factorial(int n)的定义及调用它的主程序,由此可以看到引入函数后的整个程序结构,如例2-7所示。
例2-7 计算整数0~9的阶乘。

#include <stdio.h>
int factorial(int n);   /声明factorial函数 /
int main()
{
    int i;
    for (i = 0; i < 10; ++i)
        printf("%d的阶乘是:%d\n", i, factorial(i));   / 调用factorial函数计算i的阶乘 /
    return 0;
}
/ factorial:n的阶乘,n >= 0 /
int factorial(int n)
{
    int i, p;
    p = 1;
    for (i = 1; i <= n; ++i)
        p = p * i;
    return p;
}

函数定义的一般形式为:
返回值类型 函数名(可能有的参数定义)
{
声明和定义序列
语句序列
}
不同函数的定义可以按照任意次序出现在一个源文件或多个源文件中,但同一函数不能分开存放在几个文件中。如果源程序出现在几个文件中,那么对它的编译和装入将比整个源程序放在同一文件时要做的声明更多,但这是操作系统的任务,而不是语言属性。我们暂且假定两个函数放在同一文件中,从而使前面所学的有关运行C程序的知识在目前仍然有用。
在上述示例中,factorial函数定义的第一行int factorial(int n)声明了参数的类型与名字以及该函数返回的结果的类型。factorial的参数名只能在factorial内部使用,在其他函数中不可见,因此在其他函数中可以使用与之相同的参数名而不会发生冲突。一般而言,把在函数定义中用圆括号括起来的变量称为形式参数。
factorial函数计算得到的值由return语句返回给main函数。关键词return后可以跟任何表达式:
return 表达式;
函数不一定都返回一个值。不含表达式的return语句用于使程序执行流程返回调用者(但不返回有用的值)。调用函数也可以忽略(不用)一个函数所返回的值。读者可能已经注意到,在main函数末尾也有一个return语句。由于main本身也是一个函数,它也可以向其调用者返回一个值,这个调用者实际上就是程序的执行环境。一般而言,返回值为0表示正常返回,返回值非0则表示引发异常或错误终止条件。
对函数的使用称为函数调用。main主函数在如下程序语句中对factorial函数进行了调用:
printf("%d的阶乘是:%d\n", i, factorial(i));
调用factorial函数时,传送了一个变量i给它。一般把函数调用中与参数对应的值或变量称为实际参数,如变量i,由实际参数传递值给形式参数。factorial函数则在调用执行完时返回一个整数。在表达式中,factorial(i)就像i一样是一个整数。

时间: 2024-11-08 23:29:33

《C语言程序设计与实践(第2版)》——2.7 函数的相关文章

《C语言程序设计与实践(第2版)》——导读

前言 C语言程序设计是一门理论与工程实践密切相关的专业基础课程,在计算机学科教学中具有十分重要的地位.大力加强该课程的建设,提高该课程的教学质量,有利于教学改革和教育创新,有利于创新人才的培养.通过本课程的学习,学生应培养良好的编程风格,掌握常见的算法思路,真正提高运用C语言编写程序解决实际问题的综合能力,为后续课程的实践环节打好基础. 目前国内关于C语言的教材较多,有些教材语法知识介绍细致,较适合作为非专业的等级考试类教学用书:有些教材起点较高,内容深奥,不适于初学者.为了帮助广大学生更好地掌

《C语言程序设计与实践(第2版)》——2.2 分支语句

2.2 分支语句 2.2.1 if语句 例2-2中程序的功能是统计C语言程序设计课程期末考试各分数段的人数.按照五级制统计可分成以下几档: 90-100 A 80-89 B 70-79 C 60-69 D 0-59 E 要求输出各分数段的具体人数. 例2-2 用if语句统计各分数段的人数. #include <stdio.h> / 统计各分数段人数/ int main() { int score, i; int grade[5]; for (i = 0; i < 5; i++) grad

《C语言程序设计与实践(第2版)》——1.2 计算机与程序设计

1.2 计算机与程序设计 计算机的功能非常强大,能做非常复杂.人脑难以胜任的许多工作.然而,从电子市场买回CPU.主板.内存.硬盘等硬件并组装好一台计算机后,你却发现这台计算机什么也做不了.究其原因,就是因为该计算机上还没有安装任何计算机程序,即软件.硬件是计算机拥有强大功能的前提条件,但是如果没有"大脑"(也就是计算机程序)去指挥它,它将什么也做不了,所以计算机程序的存在是计算机能够工作.能够按指定要求工作的必要条件.因此,计算机程序(Program,通常简称程序)可以简单理解为人们

《C语言程序设计与实践(第2版)》——2.6 数组

2.6 数组 在例2-2中,要求统计C语言程序设计课程各个分数段的人数并输出.本节则不是定义5个独立的变量来存放各个分数段的人数,而是使用"数组"来存放这5个不同的数据. 程序中的定义语句int grade[5]; 用于把grade定义为由5个整数组成的数组.在C语言中,当要定义一组类型相同的数据时,我们可以通过定义数组的方式来定义这些元素,通过数组名和下标来引用某一个元素,数组的下标总是从0开始,在例2-2中,这个数组的5个元素分别是grade[0].grade[1].-.grade

《C语言程序设计与实践(第2版)》——1.4 C语言的发展历史、现状与特点

1.4 C语言的发展历史.现状与特点 1.4.1 C语言的发展历史和现状 C语言的发展历史可以追溯到1961年的ALGOL 60,它是C语言的祖先.ALGOL 60是一种面向问题的高级语言,与计算机硬件的距离比较远,不适合用来编写系统软件.1963年,英国剑桥大学推出了CPL(Combined Programming Language).CPL对ALGOL 60进行了改造,在ALGOL 60基础上接近硬件一些,但是规模较大,难以实现.1967年,英国剑桥大学的Martin Richards对CP

《C语言程序设计与实践(第2版)》——第3章 基本数据类型和表达式 3.1基本语法单位

第3章 基本数据类型和表达式 本书第2章从总体上介绍了一个C程序的基本结构,使读者对C程序有了大概的了解.本章将详细介绍C语言程序中使用的基本语法单位.数据类型.运算符和表达式. 3.1 基本语法单位 任何一种语言都会根据自身的特点规定它自己特定的一套基本符号.例如,英语的基本符号是26个英文字母和一些标点符号. C语言作为一种程序设计语言,也有它自己的基本符号,这些基本符号就组成了程序.3.1.1 基本符号 程序中要对各种变量和各种函数起名,这些变量名.函数名都是由语言的基本符号组成的.C语言

《C语言程序设计与实践(第2版)》——第1章 C语言与程序设计概述 1.1初见C语言程序

第1章 C语言与程序设计概述 1.1 初见C语言程序 我国古代数学家张邱建在其编写的<算经>里提出了历史上著名的"百钱买百鸡"问题:今有鸡翁一,值钱五:鸡母一,值钱三:鸡雏三,值钱一.凡百钱买鸡百只,问鸡翁.母.雏各几何?对于这个问题,很多读者在小学或初中的竞赛中可能都见到过,而且通常都采用不定方程求解.现在我们用C语言解决该问题.通过例1-1所示的程序,初学者一方面可以对C语言有一个感性的认识,另一方面可以初步领略计算机高效和强大的解决问题的能力. 例1-1 用C语言程序

《C语言程序设计与实践(第2版)》——2.3 循环语句

2.3 循环语句 2.3.1 while循环语句 在例2-1中,针对每个x值求得对应y值均是以相同的方式计算,故可以用循环语句来重复产生各行输出,每行重复一次.这就是while循环语句的用途. while (x <= end) { ... } while循环语句的执行步骤如下:首先,测试圆括号中的条件.如果条件为真(x小于等于end),则执行循环体(花括号中的语句).其次,重新测试该条件,如果为真(条件仍然成立),则再次执行该循环体.当该条件测试为假(x大于end)时,循环结束,继续执行跟在该循

《C语言程序设计与实践(第2版)》——2.8 算法

2.8 算法 2.8.1 算法概念 人们使用计算机,就是要利用计算机来处理各种不同的问题,而要做到这一点,人们就必须事先对各类问题进行分析,确定解决问题的具体方法和步骤,再根据这些步骤,编制一组让计算机执行的指令(即程序),让计算机按人们指定的规则有效地工作.这些具体的方法和步骤,其实就是解决一个问题的算法.根据算法,依据某种规则编写计算机执行的命令序列,就是编制程序,而书写时所应遵守的规则即为某种语言的语法.由此可见,程序设计的关键之一是解题的方法与步骤,即算法.学习高级语言的重点和难点之一就