1、电子科技大学软件技术基础 查找和排序软件技术基础上机实验报告罗子建 2016010902012上机实验五 5.1一、程序流程说明有条理的文字或流程图*二、程序代码 #include #include #includestdafx.h#define MAXNUM 20typedef struct int dataMAXNUM; int length;list_type;void createlist(list_type *lp) int i, elem; lp-length = 0; printf(nplease input datas of the listn); for (i = 0; id
2、atai = elem; lp-length+; int sort(list_type *list,int key) int i; for (i = 0; i length; ) if (list-datai != key) i+; else printf(成功查找n); break; return i+1;int binsearch(list_type *list, int key) int low = 0, mid, high = list-length - 1; while (low = high) mid = (low + high) / 2; if (key datamid) hig
3、h = mid - 1; else if (key list-datamid) low = mid + 1; else return mid; int main() int m; int i; list_type list; createlist(&list); printf(请输入你想顺序查找的元素值:); scanf_s(%d, &m); i=sort(&list, m); printf(你所查找的元素位置为:%d,i); printf(请输入你想二分查找的元素值:); scanf_s(%d, &m); i = binsearch(&list, m); printf(你所查找的元素位置为:
4、%d, i);三、测试数据please input datas of the list310131740435070-1请输入你想顺序查找的元素值:43成功查找你所查找的元素位置为:6请输入你想二分查找的元素值:5你所查找的元素位置为:1请按任意键继续. . .四、上机时遇到的问题(可分为编译问题和逻辑问题)对于二分查找,我之前使用的mid 一直不能求解到最正确的位置,后来通过编译调试得到正确的答案。五、实际运行结果:六 、小结 体会:对于顺序查找和二分查找的理解,我又有一定的进一步认识,对于二分查找的mid的定义,对于一串数字的奇偶性判断,一定要知道int 为求整类型。一,程序流程说明有条理
5、的文字或流程图*二,程序代码#include stdafx.h#include#includeint Hash(char * cp) int n, i; int sum = 0; n = strlen(cp); for (i = 0; i n; i+) sum += (int)*cp; cp+; return(sum % 30);int main() char hash3020; for (int i = 0; i = 30) printf(班级人数已满!n); else strcpy_s(hashx, temp); printf(请输入姓名:); gets_s(temp, 20); prin
6、tf(n); printf(请输入要查找的姓名:); gets_s(temp, 25); printf(n); x = Hash(temp); while (hashx != NULL&x= 30 | hashx = NULL) printf(查找失败!n); 三,测试数据请输入姓名:alalall请输入姓名:assa请输入姓名:asasas请输入姓名:s请输入姓名:as请输入姓名:aas请输入姓名:as请输入姓名:请输入要查找的姓名:sa查找成功,序号为: 2请按任意键继续. . .四、上机时遇到的问题(可分为编译问题和逻辑问题)在对于字符串的输出的时候,确实是需要对字符串的处理函数要清楚,
7、比如就要添加string.h的库文件。五、实际运行结果:六 、小结 体会:本题利用哈西查找,需要用到字符处理的一系列函数。这次编写程序让我温习了C语言中字符处理的一些函数,string库函数中有复制strcpy函数、查找strchr函数、拼接strcat等函数,都是一些常用函数。5.3一,程序流程说明有条理的文字或流程图*二,程序代码#include #include malloc.h#include stdafx.h#include#define MAXNUM 20typedef struct list int length; int dataMAXNUM;list_type;list_ty
8、pe select_sort(list_type *a) int head = 0; while(headlength) int j = head; int min = j; while (j length) if (a-dataj datamin) min = j; j+; int temp = a-datahead; a-datahead = a-datamin; a-datamin = temp; head+; return *a;list_type insert_sort(list_type *a) int tail = 1; int j; int temp; while (tail
9、length) temp = a-datatail; j = tail - 1; while (j -1) if (temp dataj) a-dataj + 1 = a-dataj; a-dataj = temp; else a-dataj + 1 = temp; break; j-; tail+; return *a;list_type bubble_sort(list_type *a) int turn; int flag; int i; int temp; for (turn = a-length - 1; turn 1; turn-) flag = 0; for (i = 0; i
10、datai a-datai + 1) temp = a-datai; a-datai=a-datai + 1; a-datai + 1 = temp; flag = 1; if (flag = 0) printf(完成冒泡排序n); return *a;void show(list_type *a) int i=0; printf(排序后的结果为: n); while(ilength) printf(%d , a-datai); i+; list_type menu(list_type *list) int m; int k; int i; printf(输入n个数据); scanf_s(%d
11、, &m); printf(n:%dn,m); list-length =0; for (i = 0; i datai = k; list-length+; return *list;int main() list_type list; list=menu(&list); printf(简单选择); select_sort(&list); show(&list); printf(n直接插入); insert_sort(&list); show(&list); printf(n冒泡排序n); bubble_sort(&list); show(&list);三,测试数据输入n个数据5n:5第1个元
12、素为:12第2个元素为:56第3个元素为:78第4个元素为:1第5个元素为:0简单选择排序后的结果为:0 1 12 56 78直接插入排序后的结果为:0 1 12 56 78冒泡排序完成冒泡排序排序后的结果为:11 12 56 78 请按任意键继续. . .四、上机时遇到的问题(可分为编译问题和逻辑问题)逻辑问题:在编写冒泡排序的时候,我不能对未排序的部分有所区分,想起老师说的,可以设置标志变量flag;当有需要的时候,我就可以做相应的条件判断。五、实际运行结果:六 、小结 体会:在对这个概念的训练中,我强化了简单选择,直接插入,冒泡排序的基本概念的理解。其实在整个训练过程中,我发现自己的码字
13、的速度有了很大的强化。哈哈哈哈哈,虽然有点赶,但还是在整个学期的过程中做了很大的功夫,不说自己记会了多少,还是可以摸着自己的良心说,我付出过4.4一,程序流程说明有条理的文字或流程图*二, 程序代码#include stdafx.h#include #include #include #define MAX 10typedef int elemtype;void swap(elemtype *x, elemtype *y) *x = *x + *y; *y = *x - *y; *x = *x - *y;void quick_sort(elemtype *num, int low, int h
14、igh) int i = low, j = high; low+; if (low = high) return; while (low = high) while (low *(num + i) high-; while (low high&*(num + low) *(num + i) low+; if (low high) swap(num + low, num + high); if (*(num + high) *(num + i) swap(num + high, num + i); else high-; quick_sort(num, i, low - 1); quick_so
15、rt(num, high + 1, j);int main() int num8; int s; printf(请输入需要排序的数:n); for (int i = 0; i 8; i+) printf(in put a date :); scanf_s(%d, &s); numi = s; printf(n排序前:); for (int i = 0; i 8; i+) printf(%d , numi); printf(n排序后:); quick_sort(num, 0, 8 - 1); for (int i = 0; i 8; i+) printf(%d , numi); return 0
16、;三 ,测试数据请输入需要排序的数:in put a date :8in put a date :56in put a date :41in put a date :23in put a date :85in put a date :0in put a date :0in put a date :6排序前:8 56 41 23 85 0 0 6排序后:0 0 6 8 41 23 56 85 请按任意键继续. . .四、上机时遇到的问题(可分为编译问题和逻辑问题)无五、实际运行结果:六 、小结 体会:这一个程序是对快速排序的方法的应用,对于我熟悉快速排序的方法有了很大的意义,这是我在这一学期编写的最后的一个程序,感触颇多。从开始什么都不会做,到最后的熟练地操作调试这一工作,的确,我收获了很多很多。首先感谢段老师,很亲近学生。不管哪个水平的学生都付出了无微不至的关怀,这是让我很感动的事情。在最关键的时候没有放弃我。最终还是要感谢自己,一个不肯放弃自己的人,终究还是要继续取得自己的小目标的,这学期结束报名计算机考试。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1