《从问题到程序》第三章总结

 回顾第二章的学习,我们可以进行从基本数据类型出发的简单计算过程,得到的仅是基于特定运算的一个结果,这章我们要考虑的是如何构造函数,使能达到一类问题的解决方法,而不是每次都要修改程序。

1.变量

 当一个变量被定义时,系统为它确定一个存储值的位置,这个存储位置所占存储器单元的多少由变量的类型确定,也就是说,由变量所要存储的数据值的大小决定。

注意:提倡在采用定义变量时直接初始化的方式,初始化时不能采用多重赋值的形式,即使需要赋给多个变量的初值完全相同,也必须一个一个地分开写。

 书中提出个问题:如果我们把前面程序例子的赋值语句改写成:s = (3 + 5 + 7) / 2;编译后运行时就会发现程序的结果不对。显然这是一个合法的语句,右边表达式算出的值也将先转换为双精度类型的值,而后赋给变量 s。但是,为什么这样改动之后,这个程序就会出现语义错误?请读者自己设法弄清楚。结果如下图:

 其实,右半部分相当于整型做了除法取整运算,相当于得到了整型的7再把它转成double型,即为7.0,那么带入sqrt,(s-7)部分得0,所以最后打印0。

2.定义函数

 当主程序执行函数调用时,它自己的执行暂时中断,执行控制权转到被调用函数,使该函数开始执行。直到函数执行完毕,函数返回使执行控制权回到主程序,主程序才从中断点之后继续下去。如图3.2所示:

 函数定义方法:函数头部说明了函数的名字和类型特征,在形式上是顺序写出的几个部分:函数的计算结果类型,函数名字,随后是写在一对括号里表述该函数参数情况的说明。最后这部分也称为函数的参数表,其中说明了本函数要求几个参数,它们各是什么类型的。参数表里还要为每个参数取一个名字,以便在函数体中的表达式和语句里使用这些参数值。在函数 c_ area的定义中,函数头部是:double c_ area (double r)。这表示本函数的名字是 c_ area,其返回值类型是 double;这个函数只有一个参数(参数表里只有一对类型描述和参数名 double r),参数的类型是 double,参数名是 r。

 C语言的规定是:返回表达式的类型必须能转换到函数头部定义的返回值类型。执行到返回语句时, 其表达式求出的值先转换到函数头部所要求的类型, 再将转换结果作为返回值。例如在下面函数定义里, return 语句求出表达式的值之后就需要做类型转换:

int fun (int m){
return 3.14159 * m;
}

3.关系表达式、逻辑表达式、条件表达式

 C 语言规定关系运算得到 int 类型的值:当关系成立时,关系表达式求出的值是 1;关系不成立时求出的值是 0。这样, 3.24 <= 2.98 的值是 int 类型的 0,而表达式 5 != 3 + 1 的值是 int 类型的 1。

 编程时经常需要描述复杂的关系。例如,可能要说当变量的值 x 在区间 [3, 5] 之内时z应取值 2,否则就取值 1。这种情况可以利用关系表达式和条件表达式描述:z = (x >= 3 ? (x <= 5 ? 2 : 1) : 1);但采用这些写法,写出的描述常常不太直观。为了方便人们在程序里描述复杂的条件, C 语言提供了逻辑运算符,利用它们可以描述:多个条件同时成立,多个条件之一成立,某个条件不成立等等。

4.本章出现的有用程序模式

转载于:https://www.cnblogs.com/yl-930/p/8016824.html

2017-2018-1 20179215 《从问题到程序》第三章相关推荐

  1. 计算机二级web考点,2017年计算机二级考点解析:WEB程序第三章

    2017年计算机二级考点解析:WEB程序第三章 2017-08-26 12:16:38来源:计算机等级考试网分享 导读:在计算机等级考试中,有许多的知识点是需要我们积累掌握的,每个等级的内容都是不同的 ...

  2. 微信小程序 第三章 “音乐”小程序项目

    "音乐"小程序项目 学习目标 开发前准备 项目展示 项目分析 页面结构 目录结构 标签页切换--index页面 音乐推荐 播放器页面 播放列表 逻辑文件index.js data数 ...

  3. QT编程从入门到精通之十一:“第三章:Qt Creator”之“3.5 构建与运行程序”

    目录 第三章:Qt Creator 3.5 构建与运行程序 第三章:Qt Creator Qt在很长一段时间内都没有自己的开发环境,开发者通过QMake命令行进行编译,或者通过输入g++命令编译,在L ...

  4. mastercam后处理升级_MastercamX9,2017,2018,2019,2020各版本后处理(功能全面)2019-11-23更新...

    马上注册,结识高手,享用更多资源,轻松玩转三维网社区. 您需要 登录 才可以下载或查看,没有帐号?注册 x 本帖最后由 737852701 于 2019-11-27 08:17 编辑& y4 ...

  5. adobe CC 2015/2017/2018安装失败

    Adobe Effect 2015/2017/2018全系统软件已经可以从官网下载了,相信又将有一大波设计师会更新安装adobe CC 2015/2017软件.本着尝鲜的精神,本人也下载了Illust ...

  6. 2017~2018学年《信息安全》考试试题(A2卷)

    北京信息科技大学,2017~2018 学年第二学期<信息安全>考试试题(A 卷) 适用专业班级:计科15级 重修课程所在学院:计算机学院 考试形式:闭卷 一.单选题(本题满分20分,共含1 ...

  7. 2017~2018学年《信息安全》考试试题(A3卷)

    北京信息科技大学 2017 ~2018 学年第一学期 <信息安全>考试试题 (A3 卷) 课程所在学院:计算机学院 适用专业班级: - 考试形式:闭卷 一.单选题(本题满分 20 分,共含 ...

  8. 游戏安全报告(2017 - 2018全年)

    2017年,黑客针对游戏行业的攻击,逐渐往多元化.精准化.智能化的方向演进. 阿里云安全团队通过分析游戏行业的全年安全态势,发现:虽然DDoS攻击仍为主流,但预计2年之内,业务层的CC攻击和有针对性的 ...

  9. 安徽大学java期末_安微大学2017~2018年度期末考试题卷

    原标题:安微大学2017~2018年度期末考试题卷 备考备考备考! 六月来啦,期末考还会远吗? 别人家的形势与政策课试题又一次刷新三观 你会做这样的题吗 怎么判断自己是不是个合格的AHUer? 锵锵锵 ...

  10. html输入时从本文框的顶格输入,浙江省绍兴市越城区2017—2018学年八年级第二学期期末语文试卷(15页)-原创力文档...

    浙 江 期 末 绍兴市越城区2017-2018学年第二学期期末试卷 (满分100分,含书写分5分,考试时间120分钟) [徜徉·诗画旅途] 1. 下列语段与<平凡的世界>有关,阅读并完成( ...

最新文章

  1. Oracle day05 索引_数据去重
  2. C++ 加载Live2D官方Cubism SDK for Native
  3. RAC分解步骤之一,在oracle linux 4u4上安装oracle 10.2.0.1.0操作日志
  4. 使用Nginx反向代理部署laravel和history模式的Vue项目[更新]
  5. zookeeper的设计猜想-防止单点故障
  6. 拥抱.NET Core,学习.NET Core的基础知识补遗
  7. 从报表到数据可视化,我用这五步,成功搭建银行大数据架构
  8. javascript Math object
  9. 编程与算法中的端点问题(linspace(a, b, n),endpoint)
  10. Lua Script - 初次接触
  11. boolean怎么用_用 C++ 和 Java 写算法,差别大吗?(文末有福利)
  12. obs摄像头模糊_OBS录制视频画面很糊,不清晰,怎么调整设置?
  13. vue项目实现富文本编辑器(实践用过)
  14. Codeforces Beta Round #94 (Div. 1 Only)A. Statues
  15. java泡泡屏保,js 模拟气泡屏保效果代码
  16. 高防服务器如何防御?
  17. 《迷途深渊》隐私声明
  18. 零基础学Arcgis系列教程
  19. Google将IP标记为中国,影响表现以及解决方案
  20. ManualResetEvent 说明

热门文章

  1. 长沙计算机类中等职业学校,长沙铁航职业中等技术学校
  2. linux 查看libevent 安装目录,Linux系统centos6.7上安装libevent
  3. html给自动生成的td赋值,JS动态创建Table,Tr,Td并赋值的具体实现
  4. [论文]论文的一般结构
  5. [linux] redhat 7 iptables 配置
  6. 【转】javascript判断浏览器是不是IE
  7. 基于better-scroll实现的类似ios选择器
  8. 【Laravel】使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能
  9. 《OpenGL ES 3.x游戏开发(上卷)》一2.4 文件I/O
  10. IIS 500 错误解决