随笔分类 -  C语言实例解析精粹学习笔记

关于《C语言实例解析精粹》(第二版)的学习笔记
摘要:冒泡排序,从序列的最后一个元素与前一个元素比较大小,如果R[n-1]>R[n]则交换两个元素的位置(R[0]作为临时存放区)将最小的数据交换到R[1],第二次循环将第二小的数交换到R[2]。通过增加exchange变量来检查是否交换了位置,如果没有交换位置的话就表示数据是有序的,不需要再进行交换排序 阅读全文
posted @ 2019-05-05 14:59 llccbb1
摘要:实例说明: 用希尔排序方法对数组进行排序。由于书中更关注的实例,对于原理来说有一定的解释,但是对于第一次接触的人来说可能略微有些简略。自己在草稿纸上画了好久,后来发现网上有好多很漂亮的原理图。 下面将原书中的程序附上(主函数里的程序略有差异) 阅读全文
posted @ 2019-04-23 15:49 llccbb1
摘要:实例说明: 将一个整数数组按从小到大的顺序进行排序。(主要学习基本的插入排序和改进的冒泡排序的算法和应用) 思路1: 从第一个数据开始,分别比较其后的数据,若比它小,则将这两个数的位置交换;从第一个数据开始,直到最后。 下面是原书中给出的示例: 采用直接插入排序 1. 基本思路:假设待排序的记录存放 阅读全文
posted @ 2019-04-08 10:29 llccbb1
摘要:实例说明: 编辑一个简单的单行文本编辑器,编辑命令有以下几种:(E、Q、R、I、D) 只有自己在完全空白的情况下编写出来的程序,才是真正自己会的程序,现在所做的,不过是程序的搬运工,把书上的程序搬到网上,不过是添加了几句注释而已。 阅读全文
posted @ 2018-11-02 14:34 llccbb1
摘要:实例: 设计一个模拟社会关系的数据结构,每个人的信息用结构表示,包含名字、性别和指向父亲、母亲、配偶、子女的指针(只限两个子女)。要求编写以下函数: (1)增加一个新人的函数 (2)建立人与人之间关系的函数:父-子、母-子、配偶等。 (3)检查两人之间是否为堂兄妹 思路解析: 能够充分的联系指针的应 阅读全文
posted @ 2018-10-16 19:39 llccbb1
摘要:实例35: 设由n个人站成一圈,分别被编号1,2,3,4,……,n。第一个人从1开始报数,每报数位m的人被从圈中推测,其后的人再次从1开始报数,重复上述过程,直至所有人都从圈中退出。 实例解析: 用链表求解本问题,先由n形成一个有n个表元组成的环,其中n个表元依此置值1~n。然后从环的第一个表元出发 阅读全文
posted @ 2018-10-13 00:20 llccbb1
摘要:实例34: 设学生信息包括学号、姓名和五门功课的成绩,要求编写输入输出学生信息的函数。在输入学生信息后,以学生成绩的总分从高到低顺序输出学生信息。 思路: 程序引入一个结构数组依次存储输入的学生信息,为了在一组学生信息排序时避免交换整个学生结构,另外引入一个存储下标的数组。排序过程中改变学生结构下标 阅读全文
posted @ 2018-10-08 22:17 llccbb1 阅读(561) 评论(0) 推荐(0)
摘要:实例33: 使用“结构”定义一副扑克牌,并对变量赋值,输出结果 思路: 扑克牌有4种花色,用枚举类型表示花色,其他都是结构体的简单应用 程序代码: 阅读全文
posted @ 2018-10-07 09:03 llccbb1
摘要:实例32: 编制一个包含姓名、地址、邮编和电话的通讯录输入和输出函数。 思路解析: 1、用结构体来完成姓名、地址、邮编和电话的组合。 2、结构体指针的使用。 3、malloc的使用 4、scanf函数的返回值是正确输入的变量个数 程序代码如下: 阅读全文
posted @ 2018-10-05 17:03 llccbb1
摘要:实例31: 判断字符串是否是回文 思路解析: 引入两个指针变量(head和tail),开始时,两指针分别指向字符串的首末字符,当两指针所指字符相等时,两指针分别向后和向前移动一个字符位置,并继续比较,直至两指针相遇,说明该字符串是回文。若比较过程中,发现两字符不相等,则可以判断该字符串不是回文。 程 阅读全文
posted @ 2018-10-05 15:49 llccbb1
摘要:实例30: 用已知字符串s中的字符,生成由其中n个字符组成的所有字符排列。设n小于字符串s的字符个数,其中s中的字符在每个排列中最多出现一次。例如,对于s[]="abc",n=2,则所有字符排列有:ba,ca,ab,cb,ac,bc。 思路: 实际上目前为止还是不能完全理解书中的程序,也不能在脑海中 阅读全文
posted @ 2018-09-25 20:46 llccbb1 阅读(178) 评论(0) 推荐(0)
摘要:实例28:从键盘读入实数 题目要求: 编制一个从键盘读入实数的函数readreal(double *rp)。函数将读入的实数字符列转换成实数后,利用指针参数rp,将实数存于指针所指向的变量*rp。 思路: 其实一开始我是懵逼的(╯︵╰),输入实数的话用scanf不就可以了吗?为啥还要转换呢?在经过一 阅读全文
posted @ 2018-09-22 15:56 llccbb1
摘要:实例26:阿拉伯数字转换为罗马数字,将一个整数n(1~9999)转换为罗马数字,其中数字和罗马数字的对应关系如下: 原书中的开发环境很老,我也没有花心思去研究。自己在codeblocks中进行开发的,所以程序与原书中的程序有很多地方不同,但是关键的一些程序还是采用原书中的代码。 第29行-41行算是 阅读全文
posted @ 2018-09-11 21:49 llccbb1
摘要:实例19:判断正整数n的d进制表示形式是否是回文数(顺着看和倒着看相同的数)。 主要思路: 一种方法:将正整数n数转换成d进制的数,逐个比较首尾对应数字,判断是否为回文数。 另一种方法:将正整数n数转换成d进制的数,将低位数当做高位数,转换成正整数判断与原来的数是否相等。 书中采用的是第二种方法,下 阅读全文
posted @ 2018-09-01 21:24 llccbb1
摘要:《C语言实例解析精粹》中编译环境采用的是Turbo C 2.0。但是这个编译器年代久远,较新的编译器对书中的某些例子支持不好,在学习的时候同时做一些笔记。 实例18:将一个无符号整数转换为任意d进制(d在2~16之间)。 主要思路:对无符号整数n求d的余数,就能得到n的d进制的最低位数字,重复上述步 阅读全文
posted @ 2018-09-01 00:23 llccbb1