c语言程序设计04

c语言程序设计04

ID:33585029

大小:570.06 KB

页数:23页

时间:2019-02-27

c语言程序设计04_第1页
c语言程序设计04_第2页
c语言程序设计04_第3页
c语言程序设计04_第4页
c语言程序设计04_第5页
资源描述:

《c语言程序设计04》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、下载第4章函数与程序结构函数用于把较大的计算任务分解成若干个较小的任务,使程序人员可以在其他函数的基础上构造程序,而不需要从头做起。一个设计得当的函数可以把具体操作细节对程序中不需要知道它们的那些部分隐藏掉,从而使整个程序结构清楚,减轻了因修改程序所带来的麻烦。C语言在设计函数时考虑了效率与易于使用这两个方面。一个C程序一般都由许多较小的函数组成,而不是只由几个比较大的函数组成。一个程序可以驻留在一个文件中,也可以存放在多个文件中。各个文件可以单独编译并与库中已经编译过的函数装配在一起。但我们不打算详细讨论这一编译装配过程,因为具体编译与装

2、配细节在各个编译系统中各不相同。ANSIC标准对C语言所做的最显著的修改是在函数说明与定义这两个方面。正如第1章所述,C语言现在已经允许在说明函数时说明变元的类型。为了使函数说明与定义匹配,ANSIC标准对函数定义的语法也做了修改。故编译程序可以查出比以前更多的错误。而且,如果变元说明得当,那么程序可以自动地进行适当的类型强制转换。ANSIC标准进一步明确了名字的作用域规则,尤其是它要求每一个外部变量只能有一个定义。初始化做得更一般化了:现在自动数组与结构都可以初始化。C的预处理程序的功能也得到了增强。新的预处理程序所包含的条件编译指令(一

3、种用于从宏变元建立带引号字符串的方法)更为完整,对宏扩展过程的控制更严格。4.1函数的基本知识下面首先设计并编写一个程序,用于把输入中包含特定的“模式”或字符串的各行打印出来(这是UNIX程序grep的特殊情况)。例如,对如下一组文本行查找包含字母字符串“ould”的行:AhLove!couldyouandIwithFateconspireTograspthissorrySchemeofThingsentire,Wouldnotweshatterittobits--andthenRe-moulditnearertotheHeart'sDes

4、ire!可以产生如下输出:AhLove!couldyouandIwithFateconspireWouldnotweshatterittobits--andthenRe-moulditnearertotheHeart'sDesire!这个程序段可以清楚地分成三部分:while(还有未处理的行)if(该行包含指定的模式)打印该行虽然可以把所有这些代码都放在主程序main中,但一个更好的方法是把每一部分设计成一56计计C程序设计语言下载个独立的函数。分别处理三个较小的部分要比处理一个大的整体容易,因为这样可以把不相关的细节隐藏在函数中,从而减少

5、了不必要的相互影响的机会。而且这些函数也可以在其他程序中使用。我们用函数getline来实现“还有未处理的行”,这个函数已在第1章介绍过;用printf函数来实现“打印该行”,这是一个别人早就为我们提供的函数,这意味着我们只需编写一个判定“该行包含指定的模式”的函数。我们可以通过编写一个函数strindex(s,t)来解决这个问题,该函数返回字符串t在字符串s中出现的开始位置或位标,但当s中不包含t时,返回值为-1。由于C语言数组的下标从0开始,下标的值为0或正数,故用-1之类的负数作为失败信号是比较方便的。若以后需要更复杂的模式匹配,只需

6、替换掉strindex函数即可,程序的其余部分可保持不动。(标准库中提供的库函数strstr的功能类似于strindex函数,只是该库函数返回的是指针而不是下标值。在做了这样的设计后,填写程序的细节就比较简单了。下面即整个程序,读者可以看看各个部分是怎样组合在一起的。我们现在所要查找的模式是字面值字符串,它不是一种最通用的机制。我们将简单讨论一下字符数组的初始化方法,第5章将介绍如何在模式中加入可在程序运行时设置的参数。getline函数的版本也稍有不同,读者可将其与第1章所介绍的版本进行比较。#include#defin

7、eMAXLINE100/*最大输入行长度*/intgetline(charline[],intmax);intstrindex(charsource[],charsearchfor[]);charpattern[]="ould";/*要查找的模式*//*找出所有与模式匹配的行*/main(){charline[MAXLINE];intfound=0;while(getline(line,MAXLINE)>0)if(strindex(line,pattern)>=0){printf("%s",line);found++;}returnfoun

8、d;}/*getline:取一行放到s中,并返回该行的长度*/intgetline(chars[],intlim){intc,i;i=0;while(--lim>0&&(c=ge

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。