- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章函数与程序结构教程
第五章 函数与程序结构
5.1 C程序的一般结构
设计一个复杂程序时,将一个复杂任务划分为若干个子任务,每个子任务设计成一个子程序,称为模块。若子任务较复杂还可以继续分解。子程序在程序编制(代码设计)上相互独立,而在对数据的处理上相互联系;完成总任务的程序由一个主程序和若干子程序组成。主程序起着任务调度的总控作用,而每个子程序各自完成一个单一的任务。这种自上而下逐步细化的模块化程序设计方法就是结构化程序设计。
结构化程序设计的优点是:程序编制方便,易于修改和调试,可由多人分工完成,子程序代码公用(当需要完成同样任务时,只需要一份代码可多次调用)使程序简洁。
在C语言中,子程序被称为函数(Pascal中,称为过程)。一个C程序一般有多个函数组成,其中有且仅有一个名为main的主函数。其余为被main函数或其它子函数调用的子函数。无论main在什么位置,C程序的执行总是从main开始执行。
C的函数分为两类,一类是由系统提供的标准库函数,如标准输入、输出函数(scanf, printf, getchar, putchar等)数学计算函数(sin, cos, fabs, sqrt等)数据格式转换函数(atoi, atof, sscanf, sprintf等),字符串处理函数(strlen, strcpy, strcmp等)和文件存取函数(fread, fwrite, fopen等),这类函数由用户直接调用。另一类是用户在自己的程序中定义的函数,即需要用户自己编写的函数(称为用户自定义函数)。
组成一个C程序的各函数可以分开编辑成多个C源文件。一个C源文件中可以会有0个(源文件中可以没有函数,由一些说明组成,例如定义一些全局变量)或多个函数,因而一个C程序可以有一个或多个源文件,每个源文件是一个编译单位,源文件被编译之后生成二进制代码形式的目标程序文件,组成一个C程序的所有源文件都被编译之后,由连接程序将各目标文件中的目标函数和系统标准库函数装配个可执行的C程序。
5.2 函数定义和函数说明
使用自己定义的函数时,要做三项工作:(1) 编写函数(定义函数);(2)在某些情况下调用之前要进行函说明;(3)在需要时调用函数。
5.2.1 函数定义
先看一个实例,然后给出函数定义的一般形式:
例1:计算:xn,x=2,-3; n=1,2,3,…,9.
分析:x有两个值,每个x值对应9个n值,程序要计算18次xn值。最好定义成计算xn的函数。函数名为power,参数为x和n。
#include “stdio.h”
int main(void)
{ int i;
double power(int,int);
for (i=1 ;i10;i++)
printf(“power(2,%d)=%8.4f,power(-3,%d)=%11.4f\n”,i,power(2,i),i,power(-3,i));
return 0;
}
double power(int x,int n)
{ int i;
double p;
p=1;
for (i=1;i=n;i++)
p*=x;
return (p);
}
函数定义的一般形式为:
存储类型区分符 类型区分符 说明符(参数表) /*函数头*/
{说明部分 /*函数体*/
语句部分
}
函数定义由函数头和函数体两部分组成,{} 括起来的部分称为函数体。语法上是一个复合语句。
各部分说明如下:
1.存储类型区分符
说明函数的存储类型,它规定了函数可被调用的范围,可用于函数的存储类型区分符有static 和extern,指定为static的函数为静态函数,静态函数只局部于它所在的文件,即只能由和它在同一文件定义的函数调用;不指定存储类型区分符时的缺省的存储类型extern,缺省或指定为extern存储类型的函数为外部函数,外部函数可以被任何函数调用。
2.函数名
函数名一个标识符,一个程序中除主函数main外,其余函数的名字可以任意,最好取有助于记忆的名字,考虑到与外部联接的需要,一般不超过8个字符长。外部函数的名字是作用于整个程序的全局量,因而外部函数相互之间不能同名。静态函数可以和外部函数同名,但同一文件中的函数不能同名。
3.类型区分符
类型区分符说明函数返回值的数据类型(常简称为函数值的类型或函数的类型),例如power是一个double类型函数,main为int类型,函数的类型可以为任何基本类型、结构或联合,还可以定义返回值的指针的函数。但不能定义返回数组的函数。int函数定义时可以不指出类型区分符int,因为int是有返回值函数的缺省类型。对于无返回值的函数,类型区分符指定为void, main一般定义为void或int类型。
4.参数表
文档评论(0)