【Asp.net精品源码栏目提醒】:网学会员,鉴于大家对Asp.net精品源码十分关注,论文会员在此为大家搜集整理了“(精品)C语言初学者入门讲座 第十讲 函数(1)(整理) - 培训教程”一文,供大家参考学习!
C语言初学者入门讲座 第十讲 函数1 — 编程爱好者 programfan.comProgramFan.com回到首页 设为首页 加入收藏 网站留言 - 人才招聘频道 编程爱好者BLOG 编程爱好者论坛 首页 论坛 博客 人才招聘 书评 文章 资讯 下载
源码 项目交易 兴趣小组 网友作品 资源共享 收藏夹 ACM题库 VBAPI查询 刻盘服务 您所在的位置编程爱好者网站 文档中心 C/C文章 正文我要投稿 文章搜索 C/C文章 全部分类 C语言初学者入门讲座 第十讲 函数1 加入日期:2005-1-26 【收藏文章】【对此文发表评论】【保存文章至硬盘】【打印文章】【字体大 中 小】 分享到 - 概述 在第一章中已经介绍过C源程序是由函数组成的。
虽然在前面各章的程序中都只有一个主函数main 但实用程序往往由多个函数组成。
函数是C源程序的基本模块 通过对函数模块的调用实现特定的功能。
C语言中的函数相当于其它高级语言的子程序。
C语言不仅提供了极为丰富的库函数如Turbo CMS C 都提供了三百多个库函数还允许用户建立自己定义的函数。
用户可把自己的算法编成一个个相对独立的函数模块然后用调用的方法来使用函数。
可以说C程序的全部工作都是由各式各样的函数完成的 所以也把C语言称为函数式语言。
由于采用了函数模块式的结构 C语言易于实现结构化程序设计。
使程序的层次结构清晰便于程序的编写、阅读、调试。
在C语言中可从不同的角度对函数分类。
1. 从函数定义的角度看函数可分为库函数和用户定义函数两种。
1库函数 由C系统提供用户无须定义 也不必在程序中作类型说明只需在程序前包含有该函数原型的头文件即可在程序中直接调用。
在前面各章的例题中反复用到printf 、 scanf 、 getchar 、putchar、gets、puts、strcat等函数均属此类。
2用户定义函数 由用户按需要写的函数。
对于用户自定义函数 不仅要在程序中定义函数本身 而且在主调函数模块中还必须对该被调函数进行类型说明然后才能使用。
2. C语言的函数兼有其它语言中的函数和过程两种功能从这个角度看又可把函数分为有返回值函数和无返回值函数两种。
1有返回值函数 此类函数被调用执行完后将向调用者返回一个执行结果 称为函数返回值。
如数学函数即属于此类函数。
由用户定义的这种要返回函数值的函数必须在函数定义和函数说明中明确返回值的类型。
2无返回值函数 由于函数无须返回值用户在定义此类函数时可指定它的返回为“空类型” 空类型的说明符为“void”。
3. 从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。
1无参函数 函数定义、函数说明及函数调用中均不带参数。
主调函数和被调函数之间不进行参数传送。
此类函数通常用来完成一组指定的功能可以返回或不返回函数值。
2有参函数 也称为带参函数。
在函数定义及函数说明时都有参数 称为形式参数简称为形参。
在函数调用时也必须给出参数 称为实际参数简称为实参。
进行函数调用时主调函数将把实参的值传送给形参供被调函数使用。
4. C语言提供了极为丰富的库函数 这些库函数又可从功能角度作以下分类。
1字符类型分类函数 用于对字符按ASCII码分类字母数字控制字符分隔符大小写字母等。
2转换函数 用于字符或字符串的转换在字符量和各类数字量 整型 实型等之间进行转换在大、小写之间进行转换。
3目录路径函数 用于文件目录和路径操作。
4诊断函数 用于内部错误检测。
5图形函数 用于屏幕管理和各种图形功能。
6输入输出函数 用于完成输入输出功能。
7接口函数 用于与DOSBIOS和硬件的接口。
8字符串函数 用于字符串操作和处理。
9内存管理函数 用于内存管理。
10数学函数 用于数学函数计算。
11日期和时间函数 用于日期时间转换操作。
12进程控制函数 用于进程管理和控制。
13其它函数 用于其它各种功能。
以上各类函数不仅数量多而且有的还需要硬件知识才会使用因此要想全部掌握则需要一个较长的学习过程。
应首先掌握一些最基本、 最常用的函数再逐步深入。
由于篇幅关系本书只介绍了很少一部分库函数 其余部分读者可根据需要查阅有关手册。
还应该指出的是在C语言中所有的函数定义包括主函数main在内都是平行的。
也就是说在一个函数的函数体内 不能再定义另一个函数 即不能嵌套定义。
但是函数之间允许相互调用也允许嵌套调用。
习惯上把调用者称为主调函数。
函数还可以自己调用自己称为递归调用。
main 函数是主函数它可以调用其完成对其它函数的调用后再返回到main函数最后由main函数结束整个程序。
一个C源程序必须有也只能有一个主函数main。
函数定义的一般形式 1.无参函数的一般形式 类型说明符 函数名 类型说明 语句 其中类型说明符和函数名称为函数头。
类型说明符指明了本函数的类型函数的类型实际上是函数返回值的类型。
该类型说明符与第二章介绍的各种说明符相同。
函数名是由用户定义的标识符函数名后有一个空括号其中无参数但括号不可少。
中的内容称为函数体。
在函数体中也有类型说明 这是对函数体内部所用到的变量的类型说明。
在很多情况下都不要求无参函数有返回值 此时函数类型符可以写为void。
我们可以改为一个函数定义 void Hello printf Helloworld n 这里只把main改为Hello作为函数名其余不变。
Hello 函数是一个无参函数当被其它函数调用时输出Hello world字符串。
2.有参函数的一般形式 类型说明符 函数名形式参数表 型式参数类型说明 类型说明 语句 有参函数比无参函数多了两个内容其一是形式参数表 其二是形式参数类型说明。
在形参表中给出的参数称为形式参数 它们可以是各种类型的变量 各参数之间用逗号间隔。
在进行函数调用时主调函数将赋予这些形式参数实际的值。
形参既然是变量当然必须给以类型说明。
例如定义一个函数 用于求两个数中的大数可写为 int maxab int ab if ab return a else return b 第一行说明max函数是一个整型函数其返回的函数值是一个整数。
形参为ab。
第二行说明ab均为整型量。
ab 的具体值是由主调函数在调用时传送过来的。
在中的函数体内 除形参外没有使用其它变量因此只有语句而没有变量类型说明。
上边这种定义方法称为“传统格式”。
这种格式不易于编译系统检查从而会引起一些非常细微而且难于跟踪的错误。
ANSI C 的新标准中把对形参的类型说明合并到形参表中称为“现代格式”。
例如max函数用现代格式可定义为 int maxint aint b ifab return a else return b 现代格式在函数定义和函数说明后面将要介绍时 给出了形式参数及其类型在编译时易于对它们进行查错 从而保证了函数说明和定义的一致性。
例1.3即采用了这种现代格式。
在max函数体中的return在C程序中一个函数的定义可以放在任意位置 既可放在主函数main之前也可放在main之后。
例如例1.3中定义了一个max 函数其位置在main之后 也可以把它放在main之前。
修改后的程序如下所示。
int maxint aint b ifabreturn a else return b void main int maxint aint b int xyz printfinput two numbers:n scanfddxy zmaxxy printfmaxmumdz 现在我们可以从函数定义、 函数说明及函数调用的角度来分析整个程序从中进一步了解函数的各种特点。
程序的第1行至第5行为max函数定义。
进入主函数后因为准备调用max函数故先对max函数进行说明程序第8行。
函数定义和函数说明并不是一回事在后面还要专门讨论。
可以看出函数说明与函数定义中的函数头部分相同但是末尾要加分号。
程序第12 行为调用max函数并把xy中的值传送给max的形参ab。
max函数执行的 结果 a或b将返回给变量z。
最后由主函数输出z的值。
函数调用的一般形式前面已经说过在程序中是通过对函数的调用来执行函数体的其过程与其它语言的子程序调用相似。
C语言中 函数调用的一般形式为 函数名实际参数表 对无参函数调用时则无实际参数表。
实际参数表中的参数可以是常数变量或其它构造类型数据及表达式。
各实参之间用逗号分隔。
Next of Page在C语言中可以用以下几种方式调用函数 1.函数表达式 函数作表达式中的一项出现在表达式中以函数返回值参与表达式的运算。
这种方式要求函数是有返回值的。
例如 zmaxxy是一个赋值表达式把max的返回值赋予变量z。
Next of Page 2.函数语句 函数调用的一般形式加上分号即构成函数语句。
例如 printf Dascanf db都是以函数语句的方式调用函数。
3.函数实参 函数作为另一个函数调用的实际参数出现。
这种情况是把该函数的返回值作为实参进行传送因此要求该函数必须是有返回值的。
例如 printfdmaxxy 即是把max调用的返回值又作为printf函数的实参来使用的。
在函数调用中还应该注意的一个问题是求值顺序的问题。
所谓求值顺序是指对实参表中各量是自左至右使用呢还是自右至左使用。
对此 各系统的规定不一定相同。
在3.1.3节介绍printf 函数时已提 到过这里从函数调用的角度再强调一下。
看例5.2程序。
void main int i8 printfdndndndni--iii-- 如按照从右至 8 7 7 8 如对printf语句中的i--iii--从左至右求值结果应为 9 8 8 9 应特别注意的是无论是从左至右求值 还是自右至左求值其输出顺序都是不变的 即输出顺序总是和实参表中实参的顺序相同。
由于Turbo C现定是自右至左求值所以结果为8778。
上述问题如还不理解上机一试就明白了。
函数的参数和函数的值 本栏文章均来自于互联网版权归原作者和各发布网站所有本站收集这些文章仅供学习参考之用。
任何人都不能将这些文章用于商业或者其他目的。
ProgramFan.Com 【对此文发表评论】 【编程爱好者论坛】 【关闭窗口】 本栏最新文章C语言编写linux下的守护进程 2008-7-2 在C中创建持久对象 2008-7-1 C中类的数据成员的安全隐患 2008-7-1 经典c程序100例91--100 2008-4-3 经典c程序100例81--90 2008-4-3 经典c程序100例71--80 2008-4-3 经典c程序100例61--70 2008-4-3 经典c程序100例51--60 2008-4-3 经典c程序100例41--50 2008-4-3 经典c程序100例31--40 2008-4-3 - 文章分类C/C文章 Visual Basic Visual C C Builder Visual Foxpro Powerbuilder Delphi ASP
ASP.net JAVA WINDOWS编程 VB.net JSP 游戏开发 汇编语言 数据库开发 Visual C XML PHP 算法 Linux文章 最新文章 在Linux下灵活使用expect脚本的小窍门 VB.Net调用存储过程并得到返回值
ASP.NET中的代码分离 JAVA中sleep、wait、yield、join方法浅析 详解VB.NET对象浏览器作用体现 探索
ASP.NET中Tailspin TravelUI层奥秘 老生常谈:从VB6迁移到VB.net Oracle中最易忽视的两个重要进程 探秘Java 7新增垃圾回收器G1特性 在
Asp.net MVC中使用Repeater Java按字节长度截取字符串 Java解析XML文件的四种方法 Java和.NET互操作应该放弃Web Service吗 熟知Linux操作系统紧急情况处理方法 用PHP的PEAR DB模块编写数据库脚本 8图形和图像编程一 7Visual Studio菜单和工具条编程实战 Java源代码的折行规则 Linux环境下入侵工具Knark的分析及防范 用C实现全屏幕截图 最新招聘信息·销售主管 ·高级软件工程师 ·软件工程部总监 ·软件工程师主管 ·服务端C程序员 ·图形程序员 ·工具程序员 ·3D动作美术 ·游戏特效 ·数值策划 ·关卡策划 ·系统策划 ·VC的软件开发工程师 ·软件开发人员技术工程师 ·软件开发人员工程师Team Leader ·免费发布招聘信息 关于本站 - 网站导航 - 诚邀加盟 - 联系站长 - 友情链接 - 赞助本站 Copyrightcopy 1999-2011 Programfan.com. All Rights Reserved网站制