




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章分解HelloWorld 最简单C程序组成 在第2章读者随着笔者照葫芦画瓢 创建了第一个可运行的程序 相信读者对着源代码一头雾水不知所以 所以本章解释第2章的HelloWorld源代码 先回顾第2章的源代码 如所示 3 1C程序概貌 很短 简单几行文字 就创建了一个可以运行的程序 非常神奇 代码虽小 但五脏俱全 综观整个代码 可以总结如下特点 1 由单词 符号 空白组成 单词以英语单词为主 有的单词就是纯正的英语单词 如main void include 有的不是 如getchar pringf 单词一般都小写 代码中的标点符号并不是随意输入的 每个符号在C中都有自己的含义 中出现的符号 有 单词与单词之间用空白分隔 空白可以是空格 也可以是Tab制表符 空白的个数没有限制 2 如同阅读小说一样 C源代码也是从上往下阅读 也就是C源代码的先后顺序是有讲究的 行与行之间也可以有空白行 空白行数也是没有限制的 有的行顶格书写 有的行却又后退了几个空格 这种后退 称为 缩进 如何缩进 这些也都是有讲究的 3 并没有专门的标志表示文件从哪里起始 也没有标志表示文件到哪里结束 从第一个字符开始 文件就开始了 到最后一个字符结束 文件就结束了 3 2为何有必要在代码里留下程序员的解释 注释 出现最多的是 和 包裹起来的中文语句 这些是注释 注释是帮助程序员阅读源代码和理解源代码的 编译器在编译源代码的时候 在目标代码生成以前 会把注释剔除掉然后再进行编译 当然编译器是不会修改源文件的 这一切是在内存中完成 由于对于注释部分忽略不处理 就如同没有这些字符一样 所以注释不会增加编译后的程序的可执行代码长度 对程序运行不起任何作用 3 3从哪里开始 到哪里结束 main函数 先看下面的代码段 这段代码是从中截取过来的 为了学习方便 去掉了注释部分 voidmain void printf nHelloWorld getchar voidmain void 这一段是在定义C程序的主函数 函数是可以完成一定功能的子程序 Main函数是C语言程序的起始执行点 每一个C程序必须有且仅有一个main函数 它是由程序员提供的 3 4如何在屏幕上显示文字 函数调用 Main函数体中 printf nHelloWorld 这行是调用了C语言提供的打印数输出函数 该函数的名字是 printf 小括号内双引号括起来的文字是printf函数的参数 该函数的功能是把小括号里的文字原样打印在屏幕上 也就是说双引号里的内容变化 则打印在屏幕上的文字也会变化 请读者自己试验修改双引号里的文字 说明 n 在这里有特殊的含义 读者可以发现 n 并没有在屏幕中打印出来 n 中的 是转义字符 表示其后面紧跟的字符有专门的意思 n 表示将光标移到第二行第一格 也就是回车换行的意思 3 5编译器如何认识printf函数 include预处理器指示符 源代码最终是需要被编译器处理的 编译器编译的过程比较复杂 但一般需要经历好几步 第一步是预处理 所谓预处理 就是编译前 先进行些预先处理 如代替源代码中需要代替的部分 include就是这么一个预处理指示指令 为了弄清楚 include的作用 现在请读者思考一个问题 编译器如何知道有printf这个函数 3 5 1函数声明及其作用 上节中留给读者的试验 修改printf为其他单词 如print format 则在编译的时候 编译器会返回错误 Warningh cbook src 2 22 helloworl c 5missingprototypeforprint formatError cbook src 2 2 2helloworldc5undefinedreferenceto print format编译和连接耗时 3 3秒返回代码 1 Warningh cbook src 2 22 helloworl c 5missingprototypeforprint format 这句话表明 丢失了print format的函数原型 仅仅是一个警告 Error cbook src 2 2 2helloworldc5undefinedreferenceto print format 这句话表明 出现一个错误 调用了一个没有定义的函数print format 3 5 2试验寻找 include的作用 中 函数printf的声明在哪里呢 请读者再做一个试验 将中的第一行代码删除掉 就是去掉了 include 再编译看出现什么现象 整个文件代码如下 voidmain void 主函数 入口点 函数开始 printf nHelloWorld 打印字符串 getchar 等待用户敲入回车 是不是编译器又提示缺少函数原型 Warningh cbook src 2 2 2 helloworld c 3missingprototypeforprintfWarningh cbook src 2 2 2 helloworld c 4missingprototypeforgetchar编译和连接耗时 0 3秒返回代码 03 5 3 include的作用现在让笔者来解释 include这行代码的作用 include是C语言预处理器指示符 和include之间可以有多个空格 也不一定要顶格 但是一定是第一个非空白字符 include的作用 是告诉编译器在编译前 要做些预先处理 将后面中的文件内容包含到当前文件内 所谓包含 是指将中列出的文件的内容复制到当前文件里 注意 一定要是第一个非空白字符 否则编译器会提示错误 并且错误信息和出错原因完全不匹配 因为getchar和printf两个函数的声明位于stdio h文件中 所以简单的用 include把stdio h文件包含进来 自然就把getchar和printf两个函数的声明包含进来了 说明 函数声明只是向编译器登记有这么一个函数 声明了函数不调用这个函数 是被容许的 这就是为什么包含了整个stdio h文件 里面声明了很多其他函数 但实际没有使用这些函数而编译器又不提示的原因 3 6计算 有些小作为的程序 打印HelloWorld的程序非常简单 则实现了小功能 计算1 1的值 代码 计算1 1并打印结果Calc includevoidmain void inta b 声明a b为整型变量 inty 声明y为整型变量 a 1 给变量a赋值为1 此时a的值为1 b 1 给变量b赋值为1 此时b的值为1 y a b 将a b的值分别取出来 计算结果后 赋值给变量y printf na b d y 把y的值打印出来 getchar 编译后运行 程序结果如下 a b 2 3 7数据从哪里来 又到哪里去 变量 在计算机程序设计中 经常要用到变量 比如在屏幕中移动光标 需要存储光标的x y坐标 每次移动光标 就需要对坐标修改 也就是x y的值要改变 为了得到当前光标的坐标 就需要从x y中得到当前的值 这些 在程序设计中 就是通过变量来完成 3 7 1变量在内存中的表现形式 变量是指其值可以变化的量 计算机中 指令代码 数据都存储于内存中 变量也需要存储在内存中 类比人类的思维过程 也很容易明白为什么需要内存空间存储变量 假设现在有三个数据 分别是a 3 b 4 c 5 需要读者去计算 a b c 的值 读者首先回忆a的值是3 b的值是4 c的值是5 然后分别用3 4 5作为计算的数得到 3 4 5 12 这是一个很简单的过程 思考过程几乎不花费时间 如果计算的变量超过100个 估计大部分读者都记不住这么多数据的值 需要把这些数据及其对应的数值记录在纸上或其地方 当需要用到某个数据的时候 再去查看其对应的值 计算机中的变量类似 在计算机中 每个变量都被分配了一块内存空间 在这些空间里存储的就是变量的值 变量之所以可以变化 就是这个存储空间可以存储不同的数值 存储空间里的值变化 则变量对应的值也变化 同一个时间 内存空间里只能保存一份值 新值冲掉了原来的旧值 每个内存单元都有编号 这些是内存的地址 如所示 3 7 2编译器使用变量符号表 在源代码中 为了程序员阅读 每个变量都有变量名 实际上编译后的目标代码里 并没有变量名字 而是记录着变量在内存空间中的地址 变量的名字只是方便程序员阅读才设置的 在C语言中 为了方便 通过变量名就可以访问到变量的值 对变量名的访问 就是对变量的值的访问 在编译的过程中 编译器会建立一张变量符号表 该表记录的数据是 变量类型 变量名 变量地址等信息 如上中 编译器会建立变量符号表如所示 3 7 3变量及使用 变量有不同的类型 如记录英文字母及标点符号 就需要字符类型 char 的变量 记录整数需要整数类型int的变量 记录实数有float类型的变量 这些变量都是数值类型 C语言还提供其他类型的变量 详细课程参见后续章节的论述 通过上述简单叙述 读者可以对变量有了一个大概的感性认识了 再回过头来看看源代码中每行的意思 1 inta b 这是向编译器声明 以下程序将会用到两个整型变量 其名字为a和b 此时并不会进行真正的内存分配动作 也就是此时并没有内存地址与变量名关联 2 inty 同样是向编译器声明 一下程序会用到整型变量y 变量可以一行声明多个 也可以一行声明一个 多个变量分多次声明 意义都一样 3 a 1 这是给a赋值 请读者注意等号 是C语言提供的运算符 在C语言里的 不同于数学里的等号 数学中的等号是说 两边相等 左右等价 可以交换 计算机中的 是赋值符号 有一个运算顺序 是先计算 右边的表达式的值 然后把数值赋给左边 左右不能交换 所谓赋值 就是把运算所得的数值存储在内存中 4 b 1 同样的编译分配内存空间给变量b 地址为2004 然后将数值1存储在2004对应的内存空间里 5 y a b 这里的 也是C语言提供的运算符 同数学里的四则运算中的 一样 进行加法运算 6 printf na b d y 把y的值打印出来 这里同样要访问变量y去获取其值 过程同上 3 8自己设计C函数 用C语言库函数和第三方提供的函数组装程序是程序设计的一条捷径和重要方法 但是 一个C程序不可能只由一个main函数组成 在main函数中实现所有的功能 编写程序 更多的时候需要程序员自己动手创建新的函数 3 8 1在main函数中计算3个整数的平均数 先请看 代码 在main中计算3个整数的平均数Average includevoidmain void inta 1 b 2 c 3 inty a b c 3 printf ntheaverageis d y 编译运行 程序输出为 theaverageis2 3 8 2在main函数中分3次计算3个整数的平均数 如果需求变化为先计算1 2 3这三个整数的平均值后 再计算1234 2345 3456这三个整数的平均值 最后计算9876 2345 1这三个整数的平均值呢 方法一如所示 代码 分3次计算3个整数的平均值Average2 includevoidmain void inta 1 b 2 c 3 inta2 1234 b2 2345 c2 3456 inta3 9876 b3 2345 c3 1 inty a b c 3 inty2 a2 b2 c2 3 inty3 a3 b3 c3 3 printf ntheaverageis d y printf ntheaverageis d y2 printf ntheaverageis d y3 3 8 3自编函数实现计算3个整数的平均数 请读者将目光关注以下3行代码上 inty a b c 3 inty2 a2 b2 c2 3 inty3 a3 b3 c3 3 这3行代码将求平均值的公式使用了3次 重复的代码将使得以后的代码维护困难 因为一个地方修改 其他重复的地方也要修改 这3行代码功能相同 虽然很简单 但是可以将其抽取出来 形成一个函数 具体代码如所示 3 8 4如何自编写函数 对有以下说明 1 intaverage inta intb intc 函数声明 声明是向编译器登记有这么一个函数 其函数原型如声明中所示 average函数的原型告诉编译器 2 函数声明后 就可以调用该函数了 如同上文所述 编译器知道有某个函数的原型后 即认为该函数可以调用 3 函数定义部分 以下部分就是函数定义 intaverage inta intb intc return a b c 3 4 return是C语言提供的关键字 从函数调用中返回 并向调用者返回其后带动表达式的值 3 8 5试验观察总结函数声明和函数定义的意义 请读者做试验 查看的编译链接结果 3 9语句构成程序 C语言有5种类型的语句 如下 1 表达式语句 C语言中 操作或者动作被称为表达式 以分号结尾的表达式称为表达式语句 例如以下示例都是表达式语句 intx printf nHelloWorld 2 C语言还有9中流程控制语句 如if else for循环语句 while循环语句 do while循环语句 continue结束本次循环语句 break跳出循环语句 switch多路分支选择语句 goto转向语句 return返回语句 3 函数调用构成函数调用语句 4 只有一个 的空语句 5 复合语句 用 包括起来的语句 3 10向好程序员看齐 代码风格 所谓代码风格 是编写代码时对代码的编辑时的排版布局 如何命名代码中变量名称 函数名称等等 一个优秀的程序员 除了代码质量高 错误少外 另一个非常重要的标准就是代码风格 在很多时候 代码
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 说课课件模板卡通
- 2025企业产品代理销售合同模板
- 2025《设备租赁合同》补充协议书
- 2025科技公司与员工合同范本
- 2025中级会计师知识点《合同解除、违约责任》
- 2025代理合同样本
- 诗词鉴赏炼字课件
- 红绿灯识别知识培训内容课件
- 红海盐度高的原因
- 红楼梦课件图
- 项目部刻章申请书
- 版挖掘机租赁合同
- 语言学概论全套教学课件
- JJF 1265-2022生物计量术语及定义
- GB/T 8118-2010电弧焊机通用技术条件
- GB/T 17421.7-2016机床检验通则第7部分:回转轴线的几何精度
- 电工技能测试
- 药事管理学全套课件
- 社区心理学课件
- 质量整改通知单(样板)
- 2020届高三北京高考“多文本阅读”总攻略
评论
0/150
提交评论