电子科技大学软件技术基础查找和排序.docx

上传人:b****6 文档编号:13119425 上传时间:2023-06-11 格式:DOCX 页数:18 大小:158.94KB
下载 相关 举报
电子科技大学软件技术基础查找和排序.docx_第1页
第1页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第2页
第2页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第3页
第3页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第4页
第4页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第5页
第5页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第6页
第6页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第7页
第7页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第8页
第8页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第9页
第9页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第10页
第10页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第11页
第11页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第12页
第12页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第13页
第13页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第14页
第14页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第15页
第15页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第16页
第16页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第17页
第17页 / 共18页
电子科技大学软件技术基础查找和排序.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

电子科技大学软件技术基础查找和排序.docx

《电子科技大学软件技术基础查找和排序.docx》由会员分享,可在线阅读,更多相关《电子科技大学软件技术基础查找和排序.docx(18页珍藏版)》请在冰点文库上搜索。

电子科技大学软件技术基础查找和排序.docx

电子科技大学软件技术基础查找和排序

软件技术基础上机实验报告

罗子建2016010902012

上机实验五

5.1

一、程序流程说明——有条理的文字或流程图*

二、程序代码

#include

#include

#include"stdafx.h"

#defineMAXNUM20

typedefstruct

{

intdata[MAXNUM];

intlength;

}list_type;

voidcreatelist(list_type*lp)

{

inti,elem;

lp->length=0;

printf("\npleaseinputdatasofthelist\n");

for(i=0;i

{

scanf_s("%d",&elem);

if(elem==-1)break;

lp->data[i]=elem;

lp->length++;

}

}

intsort(list_type*list,intkey)

{

inti;

for(i=0;ilength;)

{

if(list->data[i]!

=key)

{

i++;

}

else

{

printf("成功查找\n");

break;

}

}

returni+1;

}

intbinsearch(list_type*list,intkey)

{

intlow=0,mid,high=list->length-1;

while(low<=high)

{

mid=(low+high)/2;

if(keydata[mid])

{

high=mid-1;

}

elseif(key>list->data[mid])

{

low=mid+1;

}

else

{

returnmid;

}

}

}

intmain()

{

intm;

inti;

list_typelist;

createlist(&list);

printf("请输入你想顺序查找的元素值:

");

scanf_s("%d",&m);

i=sort(&list,m);

printf("你所查找的元素位置为:

%d",i);

printf("请输入你想二分查找的元素值:

");

scanf_s("%d",&m);

i=binsearch(&list,m);

printf("你所查找的元素位置为:

%d",i);

}

三、测试数据

pleaseinputdatasofthelist

3

10

13

17

40

43

50

70

-1

请输入你想顺序查找的元素值:

43

成功查找

你所查找的元素位置为:

6请输入你想二分查找的元素值:

5

你所查找的元素位置为:

1请按任意键继续...

四、上机时遇到的问题(可分为编译问题和逻辑问题)

对于二分查找,我之前使用的mid一直不能求解到最正确的位置,后来通过编译调试得到正确的答案。

五、实际运行结果:

六、小结体会:

对于顺序查找和二分查找的理解,我又有一定的进一步认识,对于二分查找的mid的定义,对于一串数字的奇偶性判断,一定要知道int为求整类型。

 

一,程序流程说明——有条理的文字或流程图*

二,程序代码

#include"stdafx.h"

#include

#include

intHash(char*cp)

{

intn,i;

intsum=0;

n=strlen(cp);

for(i=0;i

sum+=(int)*cp;

cp++;

}

return(sum%30);

}

intmain()

{

charhash[30][20];

for(inti=0;i<30;i++)

{

hash[i][0]='?

';

}

chartemp[21];

intx;

printf("请输入姓名:

");

gets_s(temp,20);

printf("\n");

while(temp[0]!

='\0')

{

x=Hash(temp);

while(hash[x][0]!

='?

')

{

x++;

}

if(x>=30)

{

printf("班级人数已满!

\n");

}

else

{

strcpy_s(hash[x],temp);

}

printf("请输入姓名:

");

gets_s(temp,20);

printf("\n");

}

printf("请输入要查找的姓名:

");

gets_s(temp,25);

printf("\n");

x=Hash(temp);

while(hash[x]!

=NULL&&x<30)

{

if(!

strcmp(hash[x],temp))

{

printf("查找成功,序号为:

%d",x);

break;

}

x++;

}

if(x>=30||hash[x]==NULL)

{

printf("查找失败!

\n");

}

 

}

三,测试数据

请输入姓名:

alalall

请输入姓名:

assa

请输入姓名:

asasas

请输入姓名:

s

请输入姓名:

as

请输入姓名:

aas

请输入姓名:

as

请输入姓名:

请输入要查找的姓名:

sa

查找成功,序号为:

2请按任意键继续...

四、上机时遇到的问题(可分为编译问题和逻辑问题)

在对于字符串的输出的时候,确实是需要对字符串的处理函数要清楚,比如就要添加string.h的库文件。

五、实际运行结果:

六、小结体会:

本题利用哈西查找,需要用到字符处理的一系列函数。

这次编写程序让我温习了C语言中字符处理的一些函数,string库函数中有复制strcpy函数、查找strchr函数、拼接strcat等函数,都是一些常用函数。

5.3

一,程序流程说明——有条理的文字或流程图*

二,程序代码

#include

#include"malloc.h"

#include"stdafx.h"

#include

#defineMAXNUM20

typedefstructlist

{

intlength;

intdata[MAXNUM];

}list_type;

list_typeselect_sort(list_type*a)

{

inthead=0;

while(headlength)

{

intj=head;

intmin=j;

while(jlength)

{

if(a->data[j]data[min])

min=j;

j++;

}

inttemp=a->data[head];

a->data[head]=a->data[min];

a->data[min]=temp;

head++;

}

return*a;

}

list_typeinsert_sort(list_type*a)

{

inttail=1;

intj;

inttemp;

while(taillength)

{

temp=a->data[tail];

j=tail-1;

while(j>-1)

{

if(tempdata[j])

{

a->data[j+1]=a->data[j];

a->data[j]=temp;

}

else

{

a->data[j+1]=temp;

break;

}

j--;

}

tail++;

}

return*a;

}

list_typebubble_sort(list_type*a)

{

intturn;

intflag;

inti;

inttemp;

for(turn=a->length-1;turn>1;turn--)

{

flag=0;

for(i=0;i

if(a->data[i]>a->data[i+1])

{

temp=a->data[i];

a->data[i]=a->data[i+1];

a->data[i+1]=temp;

flag=1;

}

}

if(flag==0)

printf("完成冒泡排序\n");

return*a;

}

voidshow(list_type*a)

{

inti=0;

printf("排序后的结果为:

\n");

while(ilength)

{

printf("%d",a->data[i]);

i++;

}

}

list_typemenu(list_type*list)

{

intm;

intk;

inti;

printf("输入n个数据");

scanf_s("%d",&m);

printf("n:

%d\n",m);

list->length=0;

for(i=0;i

{

printf("第%d个元素为:

",i+1);

scanf_s("%d",&k);

list->data[i]=k;

list->length++;

}

return*list;

}

intmain()

{

list_typelist;

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个数据5

n:

5

第1个元素为:

12

第2个元素为:

56

第3个元素为:

78

第4个元素为:

1

第5个元素为:

0

简单选择排序后的结果为:

01125678

直接插入排序后的结果为:

01125678

冒泡排序

完成冒泡排序

排序后的结果为:

11125678请按任意键继续...

四、上机时遇到的问题(可分为编译问题和逻辑问题)

逻辑问题:

在编写冒泡排序的时候,我不能对未排序的部分有所区分,想起老师说的,可以设置标志变量flag;当有需要的时候,我就可以做相应的条件判断。

五、实际运行结果:

六、小结体会:

在对这个概念的训练中,我强化了简单选择,直接插入,冒泡排序的基本概念的理解。

其实在整个训练过程中,我发现自己的码字的速度有了很大的强化。

哈哈哈哈哈,虽然有点赶,但还是在整个学期的过程中做了很大的功夫,不说自己记会了多少,还是可以摸着自己的良心说,我付出过

4.4

一,程序流程说明——有条理的文字或流程图*

二,程序代码

#include"stdafx.h"

#include

#include

#include

#defineMAX10

typedefintelemtype;

voidswap(elemtype*x,elemtype*y)

{

*x=*x+*y;

*y=*x-*y;

*x=*x-*y;

}

voidquick_sort(elemtype*num,intlow,inthigh)

{

inti=low,j=high;

low++;

if(low>=high)

return;

while(low<=high)

{

while(low*(num+i))

high--;

while(low

low++;

if(low

swap(num+low,num+high);

if(*(num+high)<*(num+i))

swap(num+high,num+i);

else

high--;

}

quick_sort(num,i,low-1);

quick_sort(num,high+1,j);

}

intmain()

{

intnum[8];

ints;

printf("请输入需要排序的数:

\n");

for(inti=0;i<8;i++)

{

printf("inputadate:

");

scanf_s("%d",&s);

num[i]=s;

}

printf("\n排序前:

");

for(inti=0;i<8;i++)

printf("%d",num[i]);

printf("\n排序后:

");

quick_sort(num,0,8-1);

for(inti=0;i<8;i++)

printf("%d",num[i]);

return0;

}

三,测试数据

请输入需要排序的数:

inputadate:

8

inputadate:

56

inputadate:

41

inputadate:

23

inputadate:

85

inputadate:

0

inputadate:

0

inputadate:

6

排序前:

856412385006

排序后:

006841235685请按任意键继续...

四、上机时遇到的问题(可分为编译问题和逻辑问题)

五、实际运行结果:

六、小结体会:

这一个程序是对快速排序的方法的应用,对于我熟悉快速排序的方法有了很大的意义,这是我在这一学期编写的最后的一个程序,感触颇多。

从开始什么都不会做,到最后的熟练地操作调试这一工作,的确,我收获了很多很多。

首先感谢段老师,很亲近学生。

不管哪个水平的学生都付出了无微不至的关怀,这是让我很感动的事情。

在最关键的时候没有放弃我。

最终还是要感谢自己,一个不肯放弃自己的人,终究还是要继续取得自己的小目标的,这学期结束报名计算机考试。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2