基本程序设计技术.ppt

  1. 1、本文档共108页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
上面两种方式可以解决许多数据输入循环的控制问题,但有时也会遇到困难。 例:假定现在要写程序,求一批输入数据的平均值。 事先不知道可能输入哪些数据。任何数值都可能出现在需要求平均值的数据中。 如果选0作为“结束标志”,而实际数据里有0,这个程序就不能正确处理了(任何选择都有问题)。 这种情况具有普遍性,要解决这类问题,就需要进一步理解scanf的功能。 第六十三页,共108页 深入理解scanf scanf的返回值是int,它顺序处理格式串: 根据格式串要求完成输入、转换和对变量的赋值 工作正常结束时返回所完成的数据转换项数 如果一开始就遇到文件结束,就返回一个特殊符号常量 EOF(是一个int值,后面再介绍) 如果没处理完整个格式串就失败时,返回已完成的数据转换项数 scanf 用输入数据与正在处理的转换描述比较,如果相符就完成一项转换。例如:若转换描述是 %d,输入得到的是一串数字,就把它们转换为一个整数 如果实际输入与转换描述不匹配,转换失败 第六十四页,共108页 scanf要求三方面一致:格式串中转换描述、对应参数的类型、运行中提供的数据形式。假如格式串要求做整数转换,赋给整型变量。若实际输入不是一串数字,scanf也无法正常完成工作 在格式串要求读整数或者浮点数,scanf会跳过遇到的空白字符,从下一非空白字符开始处理 下面函数调用可能产生三种返回值: scanf(%lf, x) 返回1表示成功读入一项数据,并存入了 x 返回0表示读入数据失败 返回EOF值表示遇到文件结束 应该通过这种性质控制循环 第六十五页,共108页 例:读入一些圆盘半径,算出各圆盘的面积并输出。 不知圆盘数,可利用scanf的返回值控制循环结束 #include stdio.h void pc_area (double r) {/* 定义略 */} int main () { double x; while (scanf(%lf, x) == 1) if (x 0) printf(Input error: %f\n, x); else pc_area(x); return 0; } /* 什么情况下循环结束? */ 只要scanf的返回值不是1,循环就结束 第六十六页,共108页 遇到文件结束或错误数据时 scanf 不返回1。如果上面程序遇到输入字母m,转换失败就会导致循环结束。 更好的方式是利用标准库定义的符号常量EOF。 如果把标准输入定向到某个文件,在读完文件里所有数据后scanf就会返回EOF值。 EOF 是什么?一般的C系统把EOF定义为-1,它一定不是正数,不会与scanf的其他返回值混淆。 默认情况下,标准输入从键盘得到数据。许多系统里可以用Ctrl-Z或Ctrl-D组合键送入文件结束信息。 前面程序运行时,如果按了这种组合键,scanf 就会返回EOF并导致循环结束。 第六十七页,共108页 例:统计一批输入数据的个数和最小值/最大值/平均值 循环读入数据,并完成其他工作。 两个变量记录已知的最小/最大值。读数据中考虑更新,使其保存已读数据的最小最大值(循环不变性质)。 两个变量记录数据个数,记录已读入数据之和。循环中要正确更新(循环不变性质)。 问题:保存最大值和最小值的变量的初始值? 下面程序假定最少有一个输入数据,用读入的第一个数据作为最大和最小变量的初始值。 第六十八页,共108页 #include stdio.h int main () { double sum = 0.0, biggest, smallest, x; int count = 1; scanf(%lf, sum); biggest = smallest = sum; while (scanf(%lf, x) == 1) { sum += x; count++; if (x biggest) biggest = x; if (x smallest) smallest = x; } … /* 输出结果,略 */ return 0; } /* 要求至少有一个输入数据 */ 第六十九页,共108页 关于输入循环的总结 要输入一批数据时,可根据情况采用不同控制方式循环。主要的三种控制方式: 1. 程序内部自主控制,根据程序内部情况决定循环继续或终止,是否继续读入。这一技术的缺点是不够灵活,难以处理事先不清楚项数的输入数据。 2. 从输入数据类型里选一个特殊值作为结束标志值,程序使用者可用它通知程序输入结束。这一技术的缺点是有时难以找到合适的结束标志值。 3.

文档评论(0)

努力奋斗的小玲 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档