实例34: 设学生信息包括学号.姓名和五门功课的成绩,要求编写输入输出学生信息的函数.在输入学生信息后,以学生成绩的总分从高到低顺序输出学生信息. 思路: 程序引入一个结构数组依次存储输入的学生信息,为了在一组学生信息排序时避免交换整个学生结构,另外引入一个存储下标的数组.排序过程中改变学生结构下标的顺序而不是交换整个结构. 程序代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #define…
<C语言实例解析精粹>中编译环境采用的是Turbo C 2.0.但是这个编译器年代久远,较新的编译器对书中的某些例子支持不好,在学习的时候同时做一些笔记. 实例18:将一个无符号整数转换为任意d进制(d在2~16之间). 主要思路:对无符号整数n求d的余数,就能得到n的d进制的最低位数字,重复上述步骤,直至n为0.依此得到n的d进制表示的最低位至最高位数字,由数字转换成字符,得到结果. /*函数trans将无符号整数n转换成d进制(2<=d<=16) 表示的字符串s*/ #defi…
实例35: 设由n个人站成一圈,分别被编号1,2,3,4,……,n.第一个人从1开始报数,每报数位m的人被从圈中推测,其后的人再次从1开始报数,重复上述过程,直至所有人都从圈中退出. 实例解析: 用链表求解本问题,先由n形成一个有n个表元组成的环,其中n个表元依此置值1~n.然后从环的第一个表元出发,连续略过m-1个表元,第m-1个表元的后继表元是第m个表元,将该表元从环中退出.接着再次从下一个表元出发,重复以上过程,直至环中表元都退出为止. 程序: #include <stdio.h> #i…
实例说明: 将一个整数数组按从小到大的顺序进行排序.(主要学习基本的插入排序和改进的冒泡排序的算法和应用) 思路1: 从第一个数据开始,分别比较其后的数据,若比它小,则将这两个数的位置交换:从第一个数据开始,直到最后. #include <stdio.h> #include <stdlib.h> #define MAX 100 int main() { int TotNumEle; int R[MAX]; int temp; printf("Please input th…
实例: 设计一个模拟社会关系的数据结构,每个人的信息用结构表示,包含名字.性别和指向父亲.母亲.配偶.子女的指针(只限两个子女).要求编写以下函数: (1)增加一个新人的函数 (2)建立人与人之间关系的函数:父-子.母-子.配偶等. (3)检查两人之间是否为堂兄妹 思路解析: 能够充分的联系指针的应用.书中的代码在增加一个新人时,只为新人提供名字和性别,关于新人的其他信息通过调用其他函数建立. 书中代码如下: #include <stdio.h> #include <stdlib.h&g…
实例32: 编制一个包含姓名.地址.邮编和电话的通讯录输入和输出函数. 思路解析: 1.用结构体来完成姓名.地址.邮编和电话的组合. 2.结构体指针的使用. 3.malloc的使用 4.scanf函数的返回值是正确输入的变量个数 程序代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #define ZIPLEN 10 #define PHONLEN 15 struct stu { char…
实例31: 判断字符串是否是回文 思路解析: 引入两个指针变量(head和tail),开始时,两指针分别指向字符串的首末字符,当两指针所指字符相等时,两指针分别向后和向前移动一个字符位置,并继续比较,直至两指针相遇,说明该字符串是回文.若比较过程中,发现两字符不相等,则可以判断该字符串不是回文. 程序如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 50 int cycl…
实例30: 用已知字符串s中的字符,生成由其中n个字符组成的所有字符排列.设n小于字符串s的字符个数,其中s中的字符在每个排列中最多出现一次.例如,对于s[]="abc",n=2,则所有字符排列有:ba,ca,ab,cb,ac,bc. 思路: 实际上目前为止还是不能完全理解书中的程序,也不能在脑海中明确的构想出整个程序是如何递归的.对于这道题的大致思路理解如下:对于一个字符串abcdef的所有两个字母的排列用以下方式可能是比较清晰的,从字母a开始: 1.ab,ac,ad,ae,af 2…
实例28:从键盘读入实数 题目要求: 编制一个从键盘读入实数的函数readreal(double *rp).函数将读入的实数字符列转换成实数后,利用指针参数rp,将实数存于指针所指向的变量*rp. 思路: 其实一开始我是懵逼的(╯︵╰),输入实数的话用scanf不就可以了吗?为啥还要转换呢?在经过一些思考后,发现要理解这道题需要了解以下一些知识点: 1.标准输入\输出流 2.getchar()等相关函数的使用 知识点:(内容摘自于<C语言大学教程>中文第六版) 此题需要从标准输入流(stand…
实例19:判断正整数n的d进制表示形式是否是回文数(顺着看和倒着看相同的数). 主要思路: 一种方法:将正整数n数转换成d进制的数,逐个比较首尾对应数字,判断是否为回文数. 另一种方法:将正整数n数转换成d进制的数,将低位数当做高位数,转换成正整数判断与原来的数是否相等. 书中采用的是第二种方法,下面的程序中与实例18相结合,实例18中对无符号整数进行转换,但是在实际的编程中从结果上看没有太大的区别. (代码与书中代码有一定出入) #include <stdio.h> #include <…