C语言经典练习报告_第1页
C语言经典练习报告_第2页
C语言经典练习报告_第3页
C语言经典练习报告_第4页
C语言经典练习报告_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

题题 1 统计字母的使用频率统计字母的使用频率 功能描述 功能描述 输入含有大小写字母的英文文档 利用此程序 可以将大写字母转换成小写字母 并 且可以统计出字母的使用频率 并且按照字母使用频率从大到小的顺序打印出来 解决方案 解决方案 1 设计两个子函数 change sort 分别实现将字符串中的大写字母转换为小写字母并实 现频率统计的功能 按使用频率从大到小进行排序的功能 主要函数描述主要函数描述 2 change 函数的设计 利用指针将字符串数组中字符的 ascll 码 如果某个字符的 ascll 码在 A 到 Z 之间 则判定该字符为大写字母 然后用语句 c i 32 实现大写字母 转换成小写字母 主要技术问题主要技术问题 1 3 sort 函数的设计 形参指针 char a int f 一个指向 26 个字母 一个指向 26 个字母对 应的频率 在排序的过程中因为按照频率大小进行排序 当频率的大小顺序改变的时 候 将字母的顺序也要进行改变 这样才可以达到一一对应的效果 主要技术问题主要技术问题 2 4 main 函数只要实现字符串的输入功能 定义记录频率的函数并附初值 以及字母与对 应的频率的输出 关键源代码 关键源代码 include void sort char a int f 定义排序函数函数 int i j k t1 t2 t1 t2 分别作替换的中间量 for i 0 i 26 i 进行排序 for j i 1 jf i k j t1 a i a i a k a k t1 t2 f i f i f k f k t2 void change char c int f 大写字母转小写 并 且计算频率 int i for i 0 c i 0 i if c i A f c i a void main char c 200 用来存储文档 int f 26 i j char a 26 26 个字母 printf 字母频率统计器 n printf 0000 0000 n printf 尊敬的用户 请输入您的文档 n for i 0 i 26 i 初始化数组 a i i f i 0 for i 0 c i getchar n i 输入 英文文档 c i 0 change c f 进行大小写字母的转换 sort a f 执行函数排序 for j 0 j 26 j printf c t a j a printf d f j printf n 实验心得 实验心得 1 通过此次的学习 学会了在 Visual C 环境下调试完成编程 2 利用不同的函数实现不同的功能 既容易进行修改 而且可读性很强 3 而且巩固了指针数组函数的使用 在以前的课堂上这方面是讲的很少的 建议我们的 学习应该与这种教学方式更好的联系起来 而不是完成教学任务 题题 2 指示灯控制指示灯控制 功能描述 功能描述 N 盏灯排成一排 从 1 到 N 按顺序依次编号 有 N 个人也从 1 到 N 依次编号 第一 个人 1 号 将灯全部关闭 第二个人 2 号 将凡是 2 和 2 的倍数的灯打开 第三个人 3 号 将凡是 3 和 3 的倍数的灯做相反的处理 如果该灯为打开的 则将它关闭 如果 该灯为关闭的 则将它打开 以后的人都和 3 号一样 将凡是与自己编号相同的灯 以及 是自己编号倍数的灯做相反处理 程序中显示了每一个人所做工作的过程 例如 当第 i 个人操作时 则显示将 i 和 i 的倍数的灯做相反的处理的结果 当第 N 个人操作之后 显 示灯的最后状态 解决方案 解决方案 1 通过题目了解的内容 灯的数量和人的数量是一样的 都是 N 对应进行了编号 第 一个人将所有的灯关闭 第二个人以及第三人以上相当于都是将灯的亮暗情况进行了 相反的处理 2 定义一个变量 i 表示操作的人的编号 定义数组用 light j 储存灯的亮暗情况 灯亮的表 示值为 1 灯暗的表示值为 0 用语句 light j light j 1 2 实现状态的改变 比 较巧妙 根据表示值的大小用 if 语句判断 如果是 0 输出 第 j 盏灯是暗的 否则 输出 第 j 盏灯是亮的 主要技术问题主要技术问题 关键源代码 关键源代码 include define N 7 void main int light N i j for i 1 i N i printf 当第 d 个人操作时 n 则 输出的结果为 n i if i 1 for j 1 j 2 for j 1 j N j if j i 0 light j light j 1 2 改变灯的亮暗情况 if light j 0 printf 第 d 盏灯是黑的 n j if light j 1 printf 第 d 盏灯是亮的 n j 实验心得 实验心得 1 要勇于创新 不要把亮暗情况转变的语句都写成 if light j 0 light j 1 if light j 1 light j 0 用一个比较创新的语句实现就是 light j light j 1 2 2 要善于总结题目的要求 其实第二个人操作与后面的人操作的情况是一样的 进行合 并代码就会显得简洁易懂 可读性强 3 实验中要精益求精 不能满足于完成 只要多尝试 总会有提高的 题题 3 鸽笼原理鸽笼原理 功能描述 功能描述 任意给定 5 个数字 其中必定存在 3 个数字已经有序 或者升序 或者降序 找出这 5 个数字中最长的升序或降序序列 解决方案 解决方案 1 任意给定 5 个数字 其中必定存在 3 个数字已经有序 或者升序 或者降序 找出这 5 个数字中最长的升序或降序序列 所以升序或降序序列的长度可能是 5 个 4 个 3 个 分别用 generate0 generate1 generate2 三个函数进行生成并判断 主要函数主要函数 描述描述 2 各个函数利用了枚举的方式将所有的情况列出来 并对每一个序列进行判断 如果是 升序或降序的就将他打印出来 具体枚举的方式选择多次嵌套的 for 循环实现 并且要 注意数组角标的变化 主要技术问题主要技术问题 关键源代码 关键源代码 include define N 5 void generate0 int a 检查原数组整数的顺序 是否是升序或者降序的 若是则输出 int j k 0 l 0 for j 0 j N 1 j j 1 需要小于 N 带入转换 if a j a j 1 l if k N 1 printf 升序序列 for j 0 j N j printf 4d a j printf n if l N 1 printf 降序序列 for j 0 j N j printf 4d a j printf n void generate1 int s 输出四个长度升序或降序 的验证 int a b 0 c 0 d 0 for a 0 a N a for b a 1 b N b for c b 1 c N c for d c 1 d N d if s a s b void generate2 int s int a b 0 c 0 d 0 输出三个长度升序或降 序的验证 for a 0 a N a for b a 1 b N b for c b 1 c N c if s a s b void main int a N j printf welcome to our dream world n printf 请输入您的数组元素 整数类 型 n for j 0 j N j scanf d generate0 a generate1 a generate2 a 实验心得 实验心得 1 更加系统地理解和掌握了 C 语言中的函数间参数传递方法 数组和指针的应用等编程 技巧 通过手工的操作可以加深对编程的理解 光看不动手是不行的 2 利用子函数分步实现主函数的功能 可以很直观的理解程序的步骤 方便 可读性高 3 要学习的东西还有很多 比如现在我的代码只能实现 5 个长度的排序 对于更大长度 的代码的可移植性不好 需要不断地学习才能提高 题题 4 四则运算四则运算 功能描述 功能描述 对输入的 20 个长度以内的四则运算表达式 该表达式可以包含多个括号 根据实际 计算的优先级对式子进行计算 设计思路 设计思路 1 四则运算计算的时候要注意运算的优先级 因此可以定义三个函数 bracket float product float muli 分别实现括号级别 乘除 加减级别的计算 主要函数描述主要函数描述 2 首先计算括号里面的 将计算的结果带入到乘除运算中 再将乘除计算后的结果带入 到加减运算中去 括号里面还可能有括号 括号里的计算方式还是先从高的运算级别 到低的运算级别 因此 这就形成了子函数的多重嵌套 主要技术问题主要技术问题 1 3 对于符号的判断 可以用 switch 函数实现 case case case case 分别进行 对符号前后的值进行计算 主要函数描述主要函数描述 2 关键源代码 关键源代码 include stdio h include stdlib h 数值转换函数文件 include ctype h 字符函数原型的文件 int n 0 全局变量 表示字符的序列 char record 20 全局变量 存储输入的式 子 float product 乘除级别计算的子函数 float bracket 括号级别运算的子函数 float muli 加减级别运算的子函数 float summ summ product while record n record n switch record n case n summ product break case n summ product break return summ float product 乘除级别计算的子函数 float sump sump change while record n record n switch record n case n sump bracket break case n sump bracket break return sump float bracket 括号级别运算的子函数 函数中仍然可以 嵌套括号 float sumb char rec 20 i 0 if record n n sumb muli if record n n while isdigit record n record n 函数 isdigit 判断字符是否为数字 rec i record n rec i 0 sumb atof rec 将字符字符串转换成 数值 return sumb void main while 1 n 0 scanf s record 输入需要计算的式子 printf s g n record muli 实验总结 实验总结 1 函数的多次嵌套其实是使用了递归的思想 每一步都有返回值 相互嵌套 相互

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论