




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二讲 程序设计基础 2 林梦香北京航空航天大学2008年10月 计算机软件技术基础 1 1 数据在计算机中如何表示 如何存储 2 对数据实施哪些操作 如何控制 3 数据如何输入到计算机 4 计算结果 数据 如何输出和保存 程序设计需要确定 2 计算机通过I O设备进行数据的输入输出 3 计算机的外部设备 输入设备 输入命令和数据 输出设备 显示程序的运行结果 磁盘设备 长期存放程序文件和数据文件 4 文件 输入 输出设备和外部存储设备的物理特征完全不同 C语言中把所有的I O设备都看作 文件 用同一批函数对它们进行输入 输出操作 输入设备 输入设备文件输出设备 输出设备文件外部存储设备 程序文件 数据文件 5 流 C语言通过一个称为 流 的逻辑设备间接操作文件 流实际是一个FILE类型的变量 FILE类型是一个结构类型 定义在stdio h中 程序需要与文件交换数据时 先在程序与文件之间建立一个流 用fopen函数 用标准输入 输出函数 通过流读 写文件 数据交换结束后 撤销流 用fclose函数 6 文件操作 打开 关闭 文件的打开 建立流 FILE fp fp fopen char filename char mode 文件的关闭 撤销流 intfclose FILE fp 7 文件操作 读 写函数 字符的输入输出函数intgetc FILE fp intputc intc FILE fp 字符串的输入输出函数 charfgets char s intn FILE fp intfputs char s FILE fp 格式化输入 输出函数 fscanf FILE fp 输入格式 输入项 fprintf FILE fp 输出格式 输出项 8 C程序运行时自动建立3个流 1 stdin 与键盘联系 2 stdout 与显示屏幕联系 3 stderr 与显示屏幕联系 特点 这些流由系统自动将其打开 关闭 程序不需管 标准设备文件 9 标准设备文件的读 写 字符输入输出函数 getchar putchar 字符串的输入输出函数 gets puts 格式化输入 输出函数 scanf printf 10 要求 从键盘输入10个数字 将这10个数字及其平均值保存到磁盘文件data txt中 文件操作 例一 11 includeintmain void FILE fp intvar i sum 0 floataverage fp fopen data txt w for i 0 i 10 i printf inputnumber 12 要求 从键盘输入一些字符 逐个把它们保存到磁盘文件中 输入结束标志为 文件操作 例二 13 includeintmain void FILE fp charch filename 10 scanf s filename if fp fopen filename w NULL printf cannotopenfile n exit 0 ch getchar ch getchar while ch fputc ch fp ch getchar fclose fp 14 程序设计要点 二 化复杂为简单 15 例 设计一程序 要求能够查询学生的成绩 计算平均成绩和总学分 按照总学分排序 分析 程序的基本功能 1 成绩的输入 存入文件 2 成绩的查询 按学号 3 计算平均成绩和总学分 4 按总学分排序 5 查询结果的输出 16 模块化程序设计思想 逐步分解 分而治之优点 每个模块可以独立设计和实现 利于提高效率 隔离错误和维护 模块化程序设计 17 程序组织 C语言中用函数组织程序 一个C程序由一个主函数和若干个函数构成 主函数 main 是程序开始执行的入口 C函数是一个独立完成某个功能的语句块 函数与函数之间通过输入参数和返回值 输出 来联系 18 函数的定义 函数定义的格式为 返回类型函数名 参数表 函数体 用户自定义函数 则必须在源代码中说明函数原型 函数原型可以只包含参数的类型 标准库函数的函数原型都在头文件中提供 程序可以用 include指令包含这些原型文件 注意 C不允许函数定义嵌套 即在函数定义中再定义一个函数是非法的 19 函数声明和调用 C语言中 一个函数必须在函数声明 函数原型 后才能被调用 函数声明的作用是告知编译器 函数值类型 参数个数及类型 以便编译器对函数调用进行正确性检查 函数调用 函数名 实参1 实参2 20 函数定义 声明和调用 intplus int int intmain void inta b c a 4 b 5 c plus a b printf a b d c intplus intx inty intz z x y return z 21 问题一 函数间的参数传递 1 使用全局变量2 使用参数 形参 实参 按值传递实参将数据复制到形参 每次只传递一个数据按地址传递将实参的存储地址传递到形参 指针变量 每次可传递多个数据 22 全局变量的例子 intadd1 add2 intmain void intc add1 4 add2 5 c plus printf add1 add2 d c intplus intz z add1 add2 return z 23 传递值的例子 intplus int int intmain void inta b c a 4 b 5 c plus a b printf 1 a b d c printf 2 a b d a b intplus intx inty intz z x y x 8 y 10 return z 24 传递地址的例子 intplus int int intmain void inta b c a 4 b 5 c plus 25 问题二 变量生存期和作用域 运行时 程序在内存中分为4个部分 代码区 全局数据区 堆区 栈区 变量的存储类型 static 全局数据区auto 栈区register 通用寄存器 26 变量生存期 程序运行期间变量存在的时间 与变量存储类型和声明位置有关 1 静态生命期 变量被分配在全局数据区 其生存期与程序的运行期相同 如全局变量 静态全局变量 静态局部变量 2 局部生命期 变量分配在栈区 其生存期与函数运行期相同 3 动态生命期 变量分配在堆区 其生存期由程序中特定的函数调用来调用和释放 变量的生存期 27 变量的作用域 变量在源程序中的有效范围 与变量声明的位置有关 全局变量 在函数之外声明的变量称为全局变量 可以为本文件中其它函数所共用 全局变量存放在全局数据区 在声明全局变量时 若未专门初始化 则编译器将其初始化为0 局部变量 在一个函数内部声明的变量是局部变量 它只在本函数范围内是可见的 局部变量存放在栈区 如果局部变量不被显式初始化 则其内容是不可预料的 28 intplus void intadd1 add2 intmain void intc add1 4 add2 5 c plus printf add1 add2 d c intplus intz z add1 add2 return z 29 小结 程序 计算 的本质 数据的输入 操作 输出程序 函数 的结构 输入 输出 数据处理 30 变量是程序的核心 变量的本质 变量的数据类型 普通变量 基础类型变量 聚合类型变量 指针变量 程序运行结束后 变量中保存的数据随之丢失 需长期保存的数据应保存在文件中 存储在外部存储设备 磁盘等 31 化复杂为简单 将复杂的功能分解为一个个简单的功能的组合 程序由模块 函数 组成1 函数的定义 声明 调用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论