C语言第6章课件南昌大学.ppt

  1. 1、本文档共98页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言第6章课件南昌大学

第六章 循环结构程序设计 学习内容 while型循环结构 do-while型循环结构 for型循环结构 if-goto型循环结构 常用算法:枚举法,累加法,累乘法 枚举型常量、变量定义 任务6.1 南大附中有4位同学中的一位做了好事,不留名,表扬信来了之后,校长问这4位是谁做的好事。 A说:不是我。 B说:是C 。 C说:是D 。 D说:他胡说。 已知3个人说的是真话,一个人说的是假话,现在要根据这些信息,找出做好事的人. 6.1 将“是”,“否”写成关系表达式 定义字符型变量 为了完成任务6.1,将4个人所说的4句话写成关系表达式。为此,要定义一种字符型变量。这里用thisman表示要寻找的做了好事的人。 char thisman; 让“==”在这里的含义为“是”, 让“!=”在这里的含义为“不是”. 利用关系表达式,将4人所说的话表示成下表: 字符型变量在内存中的数据 在C语言中字符在存储单元中是以ASCII码形式存放的. 因此:thisman=‘A’ 或thisman=65 这两个赋值语句都是等效的. 如:printf(65==A-----关系表达式的值为%d\n,65==A); 6.2 枚举法的思路 结合任务4.1分析,A,B,C,D4个人,只有一位是做好事者。令做好事者为1,未做好事者为0,可以有如下4种情况: 这四种状态可简化写成: 显然第一种情况是假定A是做好事者,第二种情况是假定B是做好事者,。。。。 所谓枚举:是按照这4种假定逐一地去测试4个人的话有几句是真话,如果不满足3句为真,就否定掉这一假定,换下一个状态再试。 具体做法如下: 问题分析 共有4种可能状态:A、B、C、D 需要测试并统计在4种可能状态下的真话数。 假如在某种状态下的真话数值为3,则符合题意,找到答案。假如所有状态下的真话数值都不等于3,则此题无解。 数据需求 问题输入 thisman /*做好事的人*/ sum /*真话数*/ flag /*有解标志*/ 问题输出 打印做好事的人是谁 (1)假定让thisman=‘A’代入4句话中: (2)假定让thisman=‘B’代入4句话中: (3)假定让thisman=‘C’代入4句话中: (3)假定让thisman=‘D’代入4句话中: 软件设计 综上所述,一个人一个人去试,就是枚举。 从编写程序来看,实现枚举最好用循环结构。 如何控制循环? 计数控制 条件控制 标记控制 算法设计 begin 设定被试者thisman=‘A’; 设定解标志flag=0; while (thisman=‘D’) 统计此种假定下的真话数sum if (sum==3) 打印输出thisman的值 flag=1; thisman++; if (flag!=1) 打印输出无解 end 框图分析,由两大块组成: 第一块是循环结构,功能是产生被试对象,依次为A,B,C,D,并测试4句话有多少句为真,如果有3句为真,则可确定做好事者,同时置有解标志为1. 细看,在第一块的循环体中有两小块组成,第一小块由两条赋值语句构成,第二小块含一分支语句. 第二块是分支结构,功能是判断是否无解,如果为真,则输出无解信息. 6.3 while语句 1.形式 : while(表达式)语句 2.作用 :实现“当型”循环 当表达式成立时,执行语句,否则继续判断表达式 3.特点 :先判断表达式,后执行语句 4. 语句: 6.4 do-while语句 6.5 for语句 使用for循环解题实例 1.求自然数1~100之和 #include stdio.h void main() { int i=0,sum=0; for (i=1;i=100 ;i=i+1 ) { sum=sum+i; } printf(自然数1~100之和为%d\n,sum); } 思考: (1)将原来的 for(i=1;i=100;i=i+1) 修改为: for(i=1;i=100;i=i+2) 问:这是哪些自然数在求和,答案是多少? (2)将原来的 for(i=1;i=100;i=i+1) 修改为: for(i=1;i=100000;i=i+1) 执行程序能够得到正确结果吗?如果不能,自己想办法解决. 使用for循环解题实例 (2)求10的阶乘 思路: 将10!展开为10*9*8*7*6*5*4*3*2*1. 让整型变量i去表示10,9,…,1. 让长整型变量sum来表示乘积,初始时让其为1 将求10的阶乘考虑成累乘问题,让i=10去乘sum再将乘积存至sum中,即sum=sum*i,之后,让i=i-1,再永上式累乘,不断地反复做

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档