C语言程序设计中的函数分解与函数定义

C语言程序设计中的函数分解与函数定义
C语言程序设计中的函数分解与函数定义

C语言程序设计中的函数分解与函数定义

摘要:分而治之的模块化编程思想是C语言程序设计的指导思想,对复杂程序的函数分解则是对这一思想的实践。文章分析函数分解的时机和意义,讨论通过函数定义对分解后的子模块进行封装的一般原则,旨在指导C语言程序设计实践。

关键词:C语言:函数分解;函数定义;模块化

引言

C语言是一种面向过程的结构化程序设计语言,是UNIX操作系统的主要编写语言,也是很多高级语言发展的基石。C语言与计算机底层结合紧密、执行效率高,使得其在追求性能和效率的嵌入式编程、系统级软件开发、数据通信等领域有着突出的优势。

结构化程序设计(structured progra-ming)的思想是由荷兰学者E.W.Dijikstra 在20世纪60年代后期提出的,以过程为中心,强调功能分解和模块化设计。核心理念是采用“自顶向下逐步求精、分而治之”的方法进行大型程序设计。基本思想是:从待解决的初始问题出发,运用科学抽象的方法,把它分解成若干相对独立的小问题,依次细化,直至各个小问题获得解决为止,最后通过这些小问题的解逆向构造初始问题的解。C语言中的函数机制是实现结构化程序设计的重要保障,提供了将程序巾的代码片段抽取出来作为整体来使用和处理的手段,满足了复杂计算的分解和重组需要。编写大型程序时应特别注意程序的功能分解,以及分解后的模块封装,对C语言程序设计而言主要是程序的函数分解和函数定义。

1 函数分解的时机和意义

程序开发过程中,随着需要处理的问题变得复杂,程序也会变得越来越长。长的程序牵扯情况复杂,编程人员更难把握,同时长程序的阅读和理解也更困难,这又反过来影响程序的开发和维护。处理复杂问题的基本方法就是化繁为简,分而治之。依据结构化程序设计思想,借助C语言中函数的抽象机制,对复杂程序进行函数划分的过程就是程序的函数分解。

针对复杂问题求解所采用的模块划分通常是从功能的角度进行,划分后的模块要具备“相对独立,功能单一”的特征。也就是说,一个好的模块必须具有高度的独立性和较强的功能。实际应用中通常用“耦合度”和“内聚度”两个指标从不同角度对模块的划分情况加以度量。耦合度是对模块之间相互依赖性大小的度量,耦合度越小,模块的相对独立性越大。高耦合的系统中,一个模块的修改往往会影响其他模块,低耦合系统中这种影响相对较小。内聚度是对模块内各元素之间相互依赖性大小的度量,内聚度越大,模块内各元素之间联系越紧密,其功能越强;反之,低内聚模块内各元素的关系较为松散。因此,模块划分时应当尽可能

C语言函数知识详解

函数<一> 第一节函数的定义和返回值 一、库函数 1、一个C语言源程序无论包含了多少函数,C程序总是从main 开始执行。 2、调用C语言标准库函数时要求的include命令。 1)用户在源程序include命令中应该包含头文件: #include include命令必须用#开头,系统提供的头文件以.h作为文件的后缀,文件名用””或<>括起来, 2)include命令不是C语句,因此不能在最后加分号。 3、标准库函数的调用: 1)一般调用形式为:函数名(参数表) scanf(“%d”,&a);printf(“%d”,a); putchar(ch);ch=getchar(); 2)库函数的调用可以两种形式出现: 1出现在表达式中: 例:y=pow(x,2,5)+1.3 2作为独立语句完成某程操作: 例:printf(“********\n”); 常用函数: 数学函数:调用数学函数时,要求在源文件中包含以下命令行:

#include“math.h” 例:int abs(int x)double cos(double x) 字符函数和字符串函数 调用字符函数时,要求在源文件中包含头文件”ctype.h”;调用字符串 函数时,要求在源文件 中包含头文件”string.h” 如调用:int isalpha(int ch)检查ch是否为字母。 输入输出函数:调用输入输出函数时,要求在源文件中包含头文件”stdio.h” 例:调用:putchar getchar gets puts 二、函数的定义和返回值 1、函数定义的语法 函数首部(main()) 函数1 C 语定义说明部分 言 程函数体 序 执行语句部分

C语言中变量和函数的声明与定义

变量 在将变量前,先解释一下声明和定义这两个概念。声明一个变量意味着向编译器描述变量的类型,但并不为变量分配存储空间。定义一个变量意味着在声明变量的同时还要为变量分配存储空间。在定义一个变量的同时还可以对变量进行初始化。 局部变量通常只定义不声明,而全局变量多在源文件中定义,在头文件中声明。 局部变量 在一个函数的内部定义的变量是内部变量,它只在本函数范围内有效。自动变量auto 函数中的局部变量,其缺省格式是自动变量类型。例如,在函数体中int b, c=3。和auto int b, c=3。是等价的。 自动变量是动态分配存储空间的,函数结束后就释放。自动变量如不赋初值,则它的值是一个不确定的值。 静态局部变量static 静态局部变量是指在函数体内声明和定义的局部变量,它仅供本函数使用,即其他函数不能调用它。静态局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次函数调用时,该变量已有值,就是上一次函数调用结束时的值。 静态局部变量在静态存储区分配存储单元,在程序的整个运行期间都不释放。静态局部变量是在编译时赋初值的,即只赋初值一次。

在SDT编译器中,建议对静态局部变量赋初值,否则该静态局部变量的初值为不确定值。在其他编译器中,未初始化的静态局部变量的初值可能为零,这由具体的编译器所决定,使用前最好测试一下。 寄存器变量register 带register修饰符的变量暗示(仅仅是暗示而不是命令)编译程序本变量将被频繁使用,如果可能的话,应将其保留在CPU的寄存器中,以加快其存取速度。 对于现有的大多数编译程序,最好不要使用register修饰符。因为它是对早期低效的C编译程序的一个很有价值的补充。随着编译程序技术的进步,在决定哪些变量应当被存到寄存器中时,现在的C编译程序能比程序员做出更好的决定。 全局变量 在函数之外定义的变量称为外部变量,外部变量是全局变量,它可以为本文件中其他函数所共用。全局变量都是静态存储方式,都是在编译时分配内存,但是作用范围有所不同。 静态外部变量static 静态外部变量只能在本文件中使用。所以静态外部变量应该在当前源文件中声明和定义。 外部变量extern 定义函数中的全局变量时,其缺省格式是外部变量类型。外部变量应该在一个头文件中声明,在当前源文件中定义。外部变量允许其他文件引用。

C语言-函数

C语言(函数,变量作用范围)二 1 C语言程序由函数组成,以下说法正确的是( A ). A)主函数可以在其它函数之前,函数内不可以嵌套定义函数 B)主函数可以在其它函数之前,函数内可以嵌套定义函数 C)主函数必须在其它函数之前,函数内不可以嵌套定义函数 D)主函数必须在其它函数之前,函数内可以嵌套定义函数 2 以下说法中不正确的是( A )。 A) 主函数main中定义的变量在整个文件或程序中有效 B) 不同的函数中可以使用相同名字的变量 C) 形式参数是局部变量 D) 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效 3 下面函数 f(double x) {printf(“%6d\n”,x);} 的类型为( C ). A) 实型B)void 类型C)int 类型 D) A)、B)、C)均不正确 4 以下说法中正确的是( C ). A)C语言程序总是从第一个定义的函数开始执行 B)在C语言程序中,要调用的函数必须在main函数中定义 C)C语言程序总是从main函数开始执行 D)C语言程序中,main函数必须放在程序的开始部分 5 以下正确的函数定义是( C ). A) double fun(int x,int y); {int z; z=x+y; return z;} B) fun(int x,y) {int z; return z;} C) double fun(int x,int y) {double z; z=x+y; return z;} D) double fun( x, y) {int x,y; double z; z=x+y; return z;} 6 定义为void类型的函数,其含义是( A ). A)调用函数后,被调用的函数没有返回值 B)调用函数后,被调用的函数不返回 C)调用函数后,被调用的函数的返回值为任意的类型 D)以上三种说法都是错误的

c语言函数的定义和调用解读

本节介绍C程序的基本单元--函数。函数中包含了程序的可执行代码。每个C 程序的入口和出口都位于函数main(之中。main(函数可以调用其他函数,这些函数执行完毕后程序的控制又返回到main(函数中,main(函数不能被别的函数所调用。通常我们把这些被调用的函数称为下层(lower-level函数。函数调用发生时,立即执行被调用的函数,而调用者则进入等待状态,直到被调用函数执行完毕。函数可以有参数和返回值。程序员一般把函数当作“黑箱”处理,并不关心它内部的实现细节。当然程序员也可以自己开发函数库。说明一点,函数这一节很重要,可以说一个程序的优劣集中体现在函数上。如果函数使用的恰当,可以让程序看起来有条理,容易看懂。如果函数使用的乱七八糟,或者是没有使用函数,程序就会显得很乱,不仅让别人无法查看,就连自己也容易晕头转向。可以这样说,如果超过100行的程序中没有使用函数,那么这个程序一定很罗嗦(有些绝对,但也是事实。一、函数的定义一个函数包括函数头和语句体两部分。函数头由下列三不分组成:函数返回值类型函数名参数表一个完整的函数应该是这样的:函数返回值类型函数名(参数表 { 语句体; } 函数返回值类型可以是前面说到的某个数据类型、或者是某个数据类型的指针、指向结构的指针、指向数组的指针。指针概念到以后再介绍。函数名在程序中必须是唯一的,它也遵循标识符命名规则。参数表可以没有也可以有多个,在函数调用的时候,实际参数将被拷贝到这些变量中。语句体包括局部变量的声明和可执行代码。我们在前面其实已经接触过函数了,如abs(,sqrt(,我们并不知道它的内部是什么,我们只要会使用它即可。这一节主要讲解无参数无返回值的函数调用。二、函数的声明和调用为了调用一个函数,必须事先声明该函数的返回值类型和参数类型,这和使用变量的道理是一样的(有一种可以例外,就是函数的定义在调用之前,下面再讲述。看一个简单的例子: void a(; /*函数声明*/ main( { a(; /*函数调用*/ } void a( /*函数定义*/ { int num; scanf(%d,# printf(%d\n,num; } 在main(的前面声明了一个函数,函数类型是void型,函数名为a,无参数。然后在main(函数里面调用这个函数,该函数的作用很简单,就是输入一个整数然后再显示它。在调用函数之前声明了该函数其实它和下面这个程序的功能是一样的: main( { int num; scanf(%d,#

C语言函数的定义及使用(精)

广东技术师范学院实验报告 学院:广东技术师范学院专业:软件工程班级:09软件成绩:姓名:林楚金学号:2009034743005 组别:组员: 实验地点:工业中心203 实验日期:2010.6.22 指导教师签名: 实验2项目名称:函数的定义及使用 1、实验目的 理解函数的定义和使用方法,能够根据要求熟练地定义和调用函数。 2、实验内容 题目1:编写程序,计算 5.2 ) 50 (sin?= y #include #include main() { double a,y; a=sin(3.14*50/180); y=pow (a,2.5); printf("%f\n",y); } 题目2:编写程序,输入x的值,计算e|ln2x|的值。#include #include main() { double x,a,b,c; scanf("%lf",&x); b=log(2*x);

a=exp(c); printf("%lf\n",a); } 题目3:输入一个字符,如果是大写字母,则转换成小写字母后输出,如果是其他字符,则原样输出。 #include main() { char a; scanf("%c",&a); if(a>='A' && a<='Z') printf("%c\n",a+32); else printf("%c\n",a); } 题目4:定义一个函数,该函数的功能是计算圆周长,参数为圆的半径。注意需给出验证实例证明程序的正确性。#include

C语言函数习题及答案

第6章函数习题 一、选择题 1. 一个完整的C源程序是【】。 A)要由一个主函数或一个以上的非主函数构成 B)由一个且仅由一个主函数和零个以上的非主函数构成 C)要由一个主函数和一个以上的非主函数构成 D)由一个且只有一个主函数或多个非主函数构成 2. 以下关于函数的叙述中正确的是【】。 A)C语言程序将从源程序中第一个函数开始执行 B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行 C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束 D)main可作为用户标识符,用以定义任意一个函数 3. 以下关于函数的叙述中不正确的是【】。 A)C程序是函数的集合,包括标准库函数和用户自定义函数 B)在C语言程序中,被调用的函数必须在main函数中定义 C)在C语言程序中,函数的定义不能嵌套 D)在C语言程序中,函数的调用可以嵌套 4. 在一个C程序中,【】。 A)main函数必须出现在所有函数之前 B)main函数可以在任何地方出现 C)main函数必须出现在所有函数之后 D)main函数必须出现在固定位置 5. 若在C语言中未说明函数的类型,则系统默认该函数的数据类型是【】 A)float B)long C)int D)double 6. 以下关于函数叙述中,错误的是【】。 A)函数未被调用时,系统将不为形参分配内存单元 B)实参与形参的个数应相等,且实参与形参的类型必须对应一致 C)当形参是变量时,实参可以是常量、变量或表达式 D)形参可以是常量、变量或表达式 7. C程序中各函数之间可以通过多种方式传递数据,下列不能用于实现数据传递的方式是【】。 A)参数的形实(哑实)结合 B)函数返回值 C)全局变量 D)同名的局部变量 8. 若函数调用时参数为基本数据类型的变量,以下叙述正确的是【】。 A)实参与其对应的形参共占存储单元 B)只有当实参与其对应的形参同名时才共占存储单元 C)实参与对应的形参分别占用不同的存储单元 D)实参将数据传递给形参后,立即释放原先占用的存储单元 9. 函数调用时,当实参和形参都是简单变量时,他们之间数据传递的过程是【】。 A)实参将其地址传递给形参,并释放原先占用的存储单元 B)实参将其地址传递给形参,调用结束时形参再将其地址回传给实参 C)实参将其值传递给形参,调用结束时形参再将其值回传给实参

c语言_函数的定义与使用

实验报告 实验目的: 1.熟练掌握函数的定义与使用 实验内容: 1.有如下的一段程序,程序调用maxt()函数将两个数中的最大值输 出,并根据最大值打印相应行的#号,请定义printat()函数、maxt()函数与printnx()函数并将主程序补充完整,使之正常运行。 #include void main() { int a=3,b=4,max; printat();//打印一行@号 printf("打印ab行的#号\n"); max=maxt(a,b); printnx(max);//打印max行#号 } 阅读知识:.如何在主函数中使用用户自定义的函数

函数调用基础知识 用户自定义函数在main()函数中调用时的三种方式: 1.函数语句 把函数调用作为一个语句,适用无返回值的函数 printstar( ); 2函数表达式 函数出现在一个表达式中,适用有返回值的函数 c=2*max(a,b); 3函数参数 函数调用作为一个函数的实参,适用有返回值的函数 m=max(a,max(b,c)) #include void main() { void printat(); void printnx(int n); int maxt(int a,int b); int a=3,b=4,max; printat(); printf("打印ab行的#号\n"); max=maxt(a,b); printnx(max); } void printat() { printf("@@@@@@@@@\n");

} void printnx(int n) { for(int i=1;i<=n;i++) { printf("#########\n"); } } int maxt(int a,int b) { int z; if(a>=b) z=a; else z=b; return (z); } 2.有如下的一段程序,程序调用max3t()函数将三个数中的最大值输 出,请定义max3t并将主程序补充完整,使之正常运行。 #include void main() { int a=3,b=4,c=8,max;

单片机C语言函数

一》宏定义: 1、不带参数: #define 标识符常量表达式 /*#define是宏定义命令,宏名(标识符)好习惯用大写*/ #define NIL 0x80 2、带参数:/*相当于小函数*/ #define 宏名(参数表) 字符串 /*不仅要时行字任串替换还要进行参数的替换,在宏定义时,宏名与带参数的括弧之间不应该加空格,否则将空格以后的字符串都作为替代字符串的一部分,这可是很容易出错的*/ 如:#define SQ(a,b) a*b 使用:x=12;y=10;area=SQ(x,y);/*则area=12*10=120*/ 二》文件包含: #include <文件名>或#include "文件名" /*在C中用双引用形式更保险,在C51中常用物是尖括弧形式*/ 三》条件编译: /*一般源程序中的所有程序行都参加编译,但有时希望对其中一部分内容只在满足一定条件下才进行编译,也就是对一部分内容指定编译的条件。*/ #if、#elif、#else、#endif、#ifdef、#ifndef /*选择不同的编译范围,产生不同的代码,提供通用性。*/ /*如对8051在6MHZ与12MHZ下有*/ #ifdef cpu==8051 #define FREQ 6 /*程序段*/ #else #define FREQ 12/*程序段*/ #endif /*这样下面的原程序不用做任何修改便可以使用于两种时钟频率的单片机系统*/ 四》其他: 1、#error:捕捉不可预料的编译条件 #if (myv!=0&&myv!=1)/*假定其值必为0或1*/ #error myv must be 1 or 0/*出错时显示*/ #endif

C语言函数练习题及答案

C语言函数练习题及答案

1 【单选题】 在下列关于C函数定义的叙述中,正确的是? ?A、 函数可以嵌套定义,但不可以嵌套调用; ? ?B、 函数不可以嵌套定义,但可以嵌套调用; ? ?C、 函数不可以嵌套定义,也不可以嵌套调用; ? ?D、 函数可以嵌套定义,也可以嵌套调用; ? 我的答案:B得分:2.5分 2 【单选题】 下面函数调用语句含有实参的个数为? nc((exp1,exp2),(exp3,exp4,exp5));

?A、 1 ? ?B、 2 ? ?C、 4 ? ?D、 5 ? 我的答案:B得分:2.5分 3 【单选题】 C语言中函数返回值的类型是由以下哪个选项决定的? ?A、 函数定义时指定的类型; ? ?B、

return语句中的表达式类型; ? ?C、 调用该函数时的实参的数据类型; ? ?D、 形参的数据类型; ? 我的答案:A得分:2.5分 4 【单选题】 以下关于函数叙述中,错误的是? ?A、 函数未被调用时,系统将不为形参分配内存单元; ? ?B、 实参与形参的个数必须相等,且实参与形参的类型必须对应一致; ? ?C、 当形参是变量时,实参可以是常量、变量或表达式; ?

?D、 如函数调用时,实参与形参都为变量,则这两个变量不可能共享同一内存空间; ? 我的答案:B得分:2.5分 5 【单选题】 若函数调用时参数为基本数据类型的变量,以下叙述正确的是? ?A、 实参与其对应的形参共享内存存储单元; ? ?B、 只有当实参与其对应的形参同名时才共享内存存储单元; ? ?C、 实参与对应的形参分别占用不同的内存存储单元; ? ?D、 实参将数据传递给形参后,立即释放原先占用的内存存储单元; ? 我的答案:C得分:2.5分

C语言函数及其知识点

C语言函数(Function)及其知识点 绍兴文理学院沈红卫 C语言是函数的语言。这话的内涵很丰富,个人以为,可从以下几个方面去理解和把握函数这部分内容,领会此话的意义。 一、小函数大程序 意思是说,一个C语言程序可以很大,但是通常是由多个函数组成的。从这个意义上说,函数往往就比较短小。 一个程序需要由几个函数来实现,这个取决于你对C语言的掌握程度和领悟能力,没有硬性规定,以方便编程、方便调试、方便升级为原则。 一个程序分解成几个函数,有利于快速调试程序,也有利于提高程序代码的利用率。因为函数是可以多次被调用的,调用次数和调用场合没有限制。除main函数以外,任何一个函数都可以调用另外一个函数。 不要指望一个函数解决程序所有问题。每个函数应该做自己最应该做的事情,即相对独立的功能。 二、main函数及其作用 C语言程序,不管多大,还是多小,永远只能有一个而且只能有一个m ain函数。 main函数可以放在程序的任何一个地方,可以在程序首部,也可以在程序中间,也可以在程序尾部。 C语言程序,不管main函数在程序的什么地方,一定是从main函数开始执行程序,从main函数结束程序。所以,main函数又被称为主函数,即主心骨、主要的意思。 main函数通常定义成void类型,形式参数也通常为void类型。 三、函数的种类 函数通常分为库函数(标准函数)和自定义函数(用户函数)两大类。 库函数是指由C语言本身提供的,可供直接调用以实现特定功能的函数,例如:求正弦函数(sin())、求平方根函数(sqrt())、输出函数(printf())等等。

“ 自定义函数是指由编程者自己开发、编写的、以实现一定功能的函数。所谓编写 C 程 序(开发 C 程序),很大程度上,就是编写若干个自定义函数(包括 main 函数)。 所以可以这样说,不会写函数,就不会写 C 程序。 四、函数的定义、调用和说明 自定义函数(用户函数)必然涉及到三个方面:这个函数干啥用以及怎么干、调用这个 函数、调用前必要的准备,对应三个 C 语言中的概念,分别是:函数定义、函数调用、函 数说明。 函数定义最为关键,因为只有定义了一个函数才能使用这个函数啊。定义的语法详见 教材第 7 章。简单地归纳定义的语法,大致如下: 函数类型 函数名(函数的参数及其各自的类型) { 函数体(即函数的具体程序,由若干条语句组成) } 注意上述定义的格式。函数类型:即函数值的类型;函数名:可随意取,最好顾名知义, 必须符合 C 有关标识符(identifier )的三条规则;函数的参数:又叫形式参数,可以是一个, 也可以是多个,也可以是没有,如果没有参数,规范的定义应用 void 类型表示。 C 语言中的所有函数都是相对独立的,即不能在一个函数内定义另外一个函数。 函数调用的语法很简单,就是:函数名(实际参数) 可以用在任何一个表达式或语句 中。 函数说明是函数调用前必须做的一项准备工作。函数说明又叫函数声明,其语法是: 函 数类型 函数名(函数参数及其各自的类型);”。注意,函数声明只是一条简单的语句,所以, 千万别忘记“;”。 库函数在调用前也必须先声明,声明的语法是:#include <该函数对应的头文件>,或者 #include “该函数对应的头文件”。两者唯一的区别在于,后者从多路径寻找该头文件并把它 包含到用户所在的程序中,而前者只寻找 C 系统文件所在的路径。所以,可以通俗的理解 为,后者比前者更保险就可以了。 五、函数内的变量及其作用范围 凡是函数内定义的变量,均为局部变量,只在该函数内起作用。因此,不同函数内定义 的变量不必担心会发生同名冲突、打架的现象。

C语言函数试题和答案解析

第六部分函数 一、单项选择题 1.C语言中的函数返回值的类型是由(D)决定 A.return语句中的表达式B.调用函数的主调函数 C.调用函数时临时 D.定义函数时所指定的函数类型2.下面不正确的描述是(B )。 A.调用函数时,实参可以是表达式 B.调用函数时,实参和形参可以共用内存单元 C.调用函数时,将形参分配内存单元 D.调用函数时,实参与形参的类型必须一致 3.在C语言中,调用一个函数时,实参变量和形参变量之间的数据传递是 ( D ) A.地址传递 B.值传递 C.由实参传递给形参,并由形参传回给实参D.由用户指定传递方式 4.下面的函数调用语句中含有( A )个实参 int a,b,c; int sum(int x1,int x2); …… total=sum((a,b),c); A.2 B.3 C.4 D.5 5.在C语言中( C ) A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义和调用均不可以嵌套 C.函数的定义不可以嵌套,但是函数的调用可以嵌套 D.函数的定义和调用均可以嵌套 6.关于C语言中的return语句正确的是(C ) A.只能在主函数中出现

B.在每个函数中都必须出现 C.可以在一个函数中出现多次 D.只能在除主函数之外的函数中出现 7.两个形参中,第一个形参为指针类型、第二个形参为整型,则对函数形参的说明有错误的是( D) A. int a(float x[],int n) B. int a(float *x,int n) C. int a(float x[10],int n) D.int a(float x,int n) 8.在C语言中,函数的数据类型是指( A ) A.函数返回值的数据类型 B. 函数形参的数据类型 C.调用该函数时的实参的数据类型 D. 任意指定的数据类型 9.已知如下定义的函数: fun1(a) { printf("\n%d",a); } 则该函数的数据类型是( C ) A.与参数a的类型相同 B.void型 C.整型 D.无法确定 10.定义一个函数实现交换x和y的值,并将结果正确返回。能够实现此功能的是( D ) A. swapa(int x,int y) { int temp; temp=x;x=y;y=temp; }

C语言程序设计 函数定义

4.4.2函数定义 函数的定义是对函数功能的具体实现,它由函数头和函数体两部分组成。函数定义的一般形式: /*函数头*/ 函数返回值类型函数名(类型名形式参数1,类型名形式参数2,……) {/*函数体*/ 说明部分 执行部分 } 程序4_7.c中的函数定义部分如下: float fmax(float x,float y)/*函数头*/ { float z; z=x>y?x:y;/*函数体*/ return z; } 1.函数头 float fmax(float x,float y)为函数头,函数头描述了函数返回值的类型、函数名和形式参数的类型及名称。 函数头中“函数返回值类型”说明了该函数返回数据的类型,在执行return语句时,自动把return语句中的表达式类型转换为函数定义中规定的类型,默认为整型。对不返回值的函数,要使用关键字void作为函数的类型标识符,其好处是若程序员一时疏忽从不返回值的函数取返回值时,能够在程序编译时让编译程序检查出这个错误。这将在函数调用部分通过示例进行讲解。 函数名是一个标识符,即使该函数没有参数,后面的一对括号也不能缺省,正是这对括号指明了该标识符是一个函数名。 对于有参函数,用逗号间隔的若干参数组成的参数表放在一对括号内,函数定义时的参数称为形式参数,简称形参。调用该函数时需要从调用函数传递过来一些信息,称为实际参数,简称实参。形参就是用来接收实参的信息。 函数头与函数说明语句不同,函数头不是一条语句,所以括号后没有分号。另外,函数头中必须给出形式参数的名称。 2.函数体 函数头后一对花括号括起来的就是函数体,函数体是实现函数功能的语句块。函数体中包含说明部分和执行部分。说明部分主要包括该函数中用到的变量的定义、函数的说明,执行部分由实现函数功能的一个个可执行语句组成。 程序4_7.c中最后三行为fmax()函数的定义,括号中的参数x,y表明该函数需要接收

C语言函数的定义与使用

讲义十三C语言函数的定义与使用 一、函数的定义: 1、函数的定义: 返回类型函数名(参数列表){ 函数体; } 如: 1)带返回值的定义 int sum1(int m){ int i,sum=0; for(i=1;i<=m;i++) sum=sum+i; return sum; } 2)没有返回值 void sum2(int m){ int I,sum=0; for(i=1;i<=m;i++) sum=sum+i; s=sum; } 2、函数的引用: 1)带返回值的引用 main(){ int n,s; s=sum(n); printf(“%d”,s); getch(); } 2)没有返回值的引用 Int s; main(){ int n; sum2(n); printf(“%d”,s); getch(); } 完整的源程序:

#include #include int s; int sum1(int m){ int i,sum=0; for(i=1;i<=m;i++) sum=sum+i; return sum; } void sum2(int m){ int i,sum=0; for(i=1;i<=m;i++) sum=sum+i; s=sum; } main(){ int n,s; scanf("%d",&n); s=sum1(n); printf("sum1(n)=%d\n",s); getch(); sum2(n); printf("sum2(n)=%d",s); getch(); } 3)定义函数的目的:将程序按功能分块,方便程序的使用、管理、阅读、和调试。 二、函数的应用 实例1:把选择排序部分用函数实现。 #include #include #include long a[100],n;//a[100],n均为全局变量 void paixu(){ int i,j,min; long t; for(i=1;i<=n;i++) {min=i; for(j=i+1;j<=n;j++)

单片机c语言函数定义分类

单片机c语言函数定义分类 2011-08-06 10:59 函数是预先定义的功能模块(由代码组成),编写函数的目的是能够反复调用它,提高代码的重用性和可读性。 c语言程序是由函数构成的,一个c源程序至少包含一个main()主函数,main ()函数是程序执行的起点。 c语言函数的分类: 1. 从函数定义的角度看,函数可分为库函数和用户定义函数两种。 (1)库函数 由C编译器提供,用户无须定义,也不必在程序中作类型说明,只需在程序前包含有该函数原型的头文件即可在程序中直接调用。 如三角函数 float sin(float x)返回x的正弦值,x为弧度,使用时必须在程序开头加入#include (2)用户定义函数 由用户按需要写的函数。对于用户自定义函数,不仅要在程序中定义函数本身,而且在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。 2. C语言的函数兼有其它语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。 (1)有返回值函数 此类函数被调用执行完后将向调用者返回一个执行结果,称为函数返回值。如数学函数即属于此类函数。由用户定义的这种要返回函数值的函数,必须在函数定义和函数说明中明确返回值的类型。 (2)无返回值函数 此类函数用于完成某项特定的处理任务,执行完成后不向调用者返回函数值。这类函数类似于其它语言的过程。由于函数无须返回值,用户在定义此类函数时可指定它的返回为“空类型”,空类型的说明符为“void”。 3. 从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。 (1)无参函数 函数定义、函数说明及函数调用中均不带参数。主调函数和被调函数之间不进行参数传送。此类函数通常用来完成一组指定的功能,可以返回或不返回函数值。 void Hello() { printf ("Hello,world \n");

相关文档
最新文档