实验二 信息的查找与排序
【实验目的】
熟练掌握基本的排序算法,掌握数组的基本查找方法:顺序法和折半查找法。 【实验内容】
以6_2.c命名本程序并上交。
数据文件studentlist.txt中存放有21名学生的学号与成绩,数据已按学号升序排序。studentlist.txt的内容如下图:
从数据文件studentlist.txt中读出21名学生的学号与成绩到学号数组与成绩数组中,显示这21名学生的成绩到屏幕。
输入一个要查找的学生学号,找到了,输出该学生的成绩,找不到,显示No find。 要求使用折半查找算法按学号查找。
最后按成绩降序排序输出所有数据
【实验提示】
对信息排序时,通常只使用信息的一个子项作为排序键值(Key Value),如开始的学号就是排序键。当待查找的信息有序排列时,折半查找比顺序查找效率要高非常多。本题最后是用成绩做为排序键对信息进行排序。
查找是计算机中经常要遇到的一种操作,其含义是在一组数据中查找到所查数据的位置。比较简单的是顺序查找法,效率较高的是折半查找法。 1.顺序查找法
顺序查找也叫线性查找,当一组数据无序时,一般采用顺序查找。其基本思想是:从数据集的第一个元素开始,依次将关键字x与数据集中的每一个元素进行比较,直到找到要找的数据。或者数据集遍历完毕,没有找到匹配元素。 2.折半查找法
若是已经排好序的数据,可使用效率更高的折半查找法。折半查找法的基本思想是:首先取第一个元素a[low]和最后一个元素a[high]中间的那个元素a[mid]与查找键x比较(其中mid=(low+high)/2 ),如果a[mid]==x则正好找到,获得找到的数据下标;否则要看x比a [mid]大还是小,因数组a已按升序排好,则当xa[mid]时,则要查找的x在数组的后半部分,查找范围缩小为一半。然后在缩小的区间内再找一个中点,与x比较,如此一半一半缩小,重复这样的查找过程,如果x在数组当中,终能找到x==a[mid]。 由于每次缩小近一半的范围,所以数组的上、下界是要变化的,不妨用变量low、high、mid分别表示数组当前的上界、下界和中点。 问题:如果x不在数组当中,最终怎样判别并结束循环? 【实现方案】
由于学号是11位数字,而C语言中整数最大只能有10位数,所以学号数据不能以整型存储,需要用字符串来表示学号。本题中学号可以定义二维数据char num[21][13]来存,
成绩需要定义一维数组int score[21]。
本题是多字符串数据的访问操作。 文件读写以使用
pr=fopen(\磁盘:\\\\文件夹\\\\studentlist.txt\ //打开指定文件
if(pr==NULL) //检查打开文件是否成功 {
puts(\ return 0; }
for(i=0;i 实验三 子串删除 【实验目的】 熟练掌握字符串遍历,子串的查找与删除。 【实验内容】 以6_2.c命名本程序并上交。 键盘输入母串s1与子串s2,删除s1中所有的子串s2。 示例运行界面: