1、 C C 语言课程设计报告语言课程设计报告 题目: C 输入/输出库函数的程序设计 专 业: 计算机科学与技术 班 级: 学 号: 姓 名: 成 绩: 指导教师: 完成日期:完成日期: 2012 年年 10 月月 15 日日 I 目目 录录 一、系统需求分析 .1 二、总体设计 1 三、详细设计 3 四、系统实现 6 五、运行测试与结果分析 16 六、总结 117 七、参考文献 118 八、指导教师评语 . 119 第 1 页 共 19 页 一、系统需求分析一、系统需求分析 C 输入输入/输出库函数的程序设计输出库函数的程序设计 (1) 给定 getchar 和 putchar 函数,实现其它
2、 C 输入输出库函数。如:gets, puts,printf,scanf 等。并且在原函数名前加 my 构成新函数名。如:mygets, myputs,myprintf,myscanf 等。 对 myprintf 函数,其功能与 printf 函数相同。但只要求支持简单 的%c,%d,%s,%f,%lf 格式说明。不要求域宽控制。 对 myscanf 函数,其功能与 scanf 函数相同。 但只要求 支持简单 的%c,%d,%s,%f,%lf 格式说明。 (2) 鼓励实现参考书1p241 APPENDIX B:Standard Library 中 B1 Input and Output: 中的
3、其它库函数。 (3) 创建 mylibrary.lib 库,将自己实现的库函数加入到该库中。 (4) 对自行设计的每个库函数,编写实验程序,调用 mylibrary.lib 库自行设 计的库函数,要求得到正确结果。 (5) 在设计报告中提交测试结果报告以说明调用结果。 (6) 提交详细注释的各个库函数清单,并且简短说明设计思路。 第 2 页 共 19 页 二、总体设计二、总体设计 C 输入输出库函数的程序设计输入输出库函数的程序设计 (1)mygets 函数用 getchar 函数循环依次读取输入缓冲区的字符, 直到读取 换行符 n 后结束循环。 每读取一个字符就将该字符存到 mygets 函
4、数的形参所 指定的地址,同时形参指针值增加 1。读取换行符 n 后,存入字符 0。 (2)myputs 函数用 putchar 函数循环输出形参所指向的字符,同时形参指 针值增加 1,直到形参所指字符为空字符 0 时结束循环。空字符 0 用换行符 n 替代输出。 (3)将 myprintf定义成参数数目可变的函数。 用循环依次输出格式字符串中的字符,普通字符原样输出。碰到字符 % 后,判断后续字符能否构成一个合法的转换说明,在根据相应的转换说明所对应 的数据类型从可变的参数列表中取一个参数,存入到一个同类型的临时变量;若 不能构成,则按普通字符做相应输出处理。 (4)将 myscanf函数定义
5、为参数数目可变的函数。 与 myprintf函数实现时对格式字符串的处理方法一样, 在格式字符串中找转 换说明并做输入处理,直到格式字符串串尾。 不同的是,每找到一个转换说明后,首先从可变参数列表中取一个参数,作 为存放输入数据的地址, 再根据转换说明对应的数据类型, 从输入流读取字符吗, 转换为指定类型的数据后,存入参数所代表的内存地址。处理中要注意地址类型 的强制转换。 (5)另外,设计一个 change 函数,用于字符型转换。 第 3 页 共 19 页 三、详细设计三、详细设计 mygetsmygets 流程图:流程图: c = getcahr() != n? char c int i
6、= 0 ai = c i+ ai = 0 开始 结束 返回 a Y N 第 4 页 共 19 页 用 mypritf 函数处理整型时,采用“除 10 取余”的方法,再进行字符型转 换,将整型数变成字符型存在一个数组里,然后再用 putchar 循环输出;对于浮 点数和双精度浮点数,将整数部分和小数部分分开来处理。其中,小数部分采用 “乘 10 取整”的方法来处理,并将整数部分和小数部分进行字符型转换再输出, 中间输出一个小数点.即可。输出时要注意从高位到低位进行并注意负数的符 号问题。 myscanf 函数,对于字符型数据,直接用 getchar 从输入流中取一个字符, 其他类型数据在从输入流中取字符时,都需要首先跳过起始位置的空白字符。对 于字符串型数据,从第一个非空白字符开始,直到取到空白字符时结束,每取一 个非空白字符就存一次,最后存一个空字符0。对于整型,要注意字符序列前 可能有符号+和-,符号位之后如果所取字符是09数字字符,则需要进 行转换和存