重庆工商大学程序设计基础(C语言)课件第八章 C语言高级编程技术.pptVIP

重庆工商大学程序设计基础(C语言)课件第八章 C语言高级编程技术.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 C语言高级编程技术 §8.1 递归程序设计 §8.2 文本的屏幕输出和键盘输入 §8.3 图形程序设计 §8.4 发声技术 §8.5 Linux操作系统下的C语言编程基础 §8.6 Windows操作系统下的C语言编程基础 §8.7 综合应用开发实例 2、消息的来源 Windows发送给应用程序的消息是很多的,可以将消息按来源分为大体的四种:用户产生的消息、其它应用程序产生的消息、应用程序自身产生的消息以及来自系统的消息。 3、消息的传递 消息产生之后,由Windows系统将消息传送到相应的地方。Windows内部有两类系统缓冲区:应用程序消息队列缓冲区和系统消息队列缓冲区。凡是鼠标和键盘产生的消息,都放在系统消息队列缓冲区中;应用程序产生的消息则放在应用程序消息队列缓冲区中。可以通过Windows的API(应用程序接口)中的函数GetMessage()或PeekMessage()从消息缓冲区中获取消息。 4、消息的处理 调用GetMessage()或PeekMessage()函数从消息缓冲区取出消息后,应用程序用DispatchMessage()函数将该消息送给适当的窗口函数进行处理。 二、重要的Windows术语 1、消息 2、窗口 3、回调函数 4、窗口函数 5、Windows API 6、PASCAL调用方式 7、句柄 三、编写基本的Windows应用程序 1、WinMain函数 WinMain函数是所有Windows应用程序的人口。WinMain函数的格式如下: int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) L HINSTANCE hinstance:HINSTANCE是一个句柄类型的标识符。变量hinstance是一个整数,用于标识程序实例。 l???????? HINSTANCE hPreInstance:此参数基本不用了。它只是为早期的Windows版本服务的。 l???????? LPSTR lpCmdLine:是一个指向字符串的指针。 int nCmdShow:决定了窗口在初始显示时的状态。 WinMain函数必须执行以下几个步骤: (l)定义窗口类; (2)注册窗口类; (3)创建该类窗口; (4)显示窗口; (5)运行消息循环。 2、定义和注册窗口类 Windows的每一个应用程序都要有一个主窗口。每个程序的主窗口不尽相同。每一个窗口都要有一个窗口类。窗口类规定了此类窗口所具有的风格、字体、图标等信息。窗口类是相对于结构体WNDCLASSEX的一个结构体变量。 定义了窗口类后,就调用函数RegisterClassEX()来注册这个窗口类。只有注册了窗口类,才能创建新的窗口。 * 一、递归与递归程序设计 递归分直接递归和间接递归两种。 直接递归调用:若在一个函数的定义中出现了对自身的调用,称之为直接递归; 间接递归调用:若一个函数f的定义中包含了对函数g的调用,而g的实现过程又调用了f,即函数调用形成了一个环状调用链, 这种方式称之为间接递归。 funa() { ... funa(); ... } funa() { ... funb(); ... } funb() { ... funa(); ... } 直接递归调用 间接递归调用 二、递归实例 例1:编写一个递归函数,求n的阶乘值n!。 若用fact(n)表示n的阶乘值,根据阶乘的数学定义可知: long fact(int n) { long m; if (n == 0) return(1); else { m=n*fact(n-1); return (m); } } 要使用递归技术进行程序设计,首先必须将要求解的问题分解成若干子问题,这些子问题的结构与原问题的结构相同,但规模较原问题小。由于子问题与原问题结构相同,因而它们的求解过程相同,在进行程序设计时,不必再仔细考虑子问题的求解,只需借助递归机制进行函数自身调用加以实现,然后利用所得到的子问题的解组合成原问题的解即可;而递归程序在执行过程中,通过不断修改参数进行自身调用,将子问题分解成更小的子问题进行求解,直到最终分解成的子问题可以直接求解为止。 一个问题要采用递归方法来解决时必须符合以下三个条件: (1)能将问题转化为一个新的问题,而这个新问题的解决方法与原问题的解法相同,

您可能关注的文档

文档评论(0)

ormition + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档