范文一:c语言作业(数组&折半查找法)
C语言程序设计实验报告
1 实验目的
(1) 熟练掌握一维数组、二维数组的定义、初始化和输入/输出方法;
(2) 熟练掌握字符数组和字符串函数的使用;
(3) 掌握与数组有关的常用方法(如查找、排序等)。
2 实验内容
编程实现“折半查找”的过程。
要求
1. 设定一个整型数组存放20个元素,采用直接赋值的方法在程序之初始化该数组;
2. 用scanf函数输入一个要找的数值;
3. 对查找的结果给出相应的说明,如果找到该数值,则输出“Found”信息,并给出该数是数组中的第几个元素。如果该数值不在数组中,则输出“Not found”信息;
4. 修改程序,设定输入的数据是无序的,则先要对这些无序的数据进行排序,然后在采用“半折查找”。
4 源程序
#include main() { int a[20],i,t,j,b,q,d,c,min=0,max=19,p=10,s=10; for(i=0;i<> scanf("%d",&a[i]); printf("\n"); for(i=0;i<> { for(j=0;j<> if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } for(i=0;i<> printf("%d",a[i]); printf("请输入要查找的数"); scanf ("%d",&b); for (q=1;q<> if (max-min!=0) { if(b==a[s]) { d=1; break; } else { if(b>a[s]) { c=s; s=max-(max-min)/2; min=c; d=0; } else c=s; s=(max-min)/2+min; max=c; d=0; } } if(d==1) { s=s+1; printf("Found 在第%d\n位",s); } else printf("not found\n"); } 5测试数据 20,19,18,17,16,15, 3,2,1 ,13,,11,,9,8,7,6,5,4,141210 6 运行结果 7 出现问题及解决方法 这个实验太难了,出现各种问题,最后大家齐心协力完成了任务,主要是冒泡法的应用及折半查找法的应用比较困难。 8 实验心得 1.通过实验我对c语言的编程语言更加熟悉,加快编程输入语言的速度。 2.掌握一维数组、二维数组的定义、初始化和输入/输出方法;掌握字符数组和字符串函数的使用;掌握与数组有关的常用算法(如查找、排序)。 3.再次让我明白做实验时要细心,认真检查。 C语言程序设计实验报告 实验名称 数组 学 院 材冶学院 专业班级 成型1101 2011 姓 名 李xx 学 号 任课教师 徐彬 实验时间 2012年11月2日星期五 1 实验目的 (1) 熟练掌握一维数组、二维数组的定义、初始化和输入/输出方法; (2) 熟练掌握字符数组和字符串函数的使用; (3) 掌握与数组有关的常用方法(如查找、排序等)。 2 实验内容 编程实现“折半查找”的过程。 要求 1. 设定一个整型数组存放20个元素,采用直接赋值的方法在程序之初始化该 数组; 2. 用scanf函数输入一个要找的数值; 3. 对查找的结果给出相应的说明,如果找到该数值,则输出“Found”信息, 并给出该数是数组中的第几个元素。如果该数值不在数组中,则输出“Not found”信息; 4. 修改程序,设定输入的数据是无序的,则先要对这些无序的数据进行排序, 然后在采用“半折查找”。 3 算法描述流程图 开始 a[20],i,t,j,b,q,d,c,min=0,max=19,p=10,s=10 j<=19>=19> Y i<=19>=19> Y a[j]>a[i] Y 将最小的数赋给a[j] Y q<9>9> q=q+1 输出 Y 输出 Not Found B是要找的数吗 found 位置在 Y 第b>a[s] num=s +1 位 b在前面c=s; s=(max-min)/2+min; b在后面c=s; s=max-(max-min)/2 结束 max=c; min=c; 将区间缩小,取中点 将区间小,取中点 4 源程序 #include { int a[20],i,t,j,b,q,d,c,min=0,max=19,p=10,s=10; for(i=0;i<20;i++)>20;i++)> scanf("%d",&a[i]); printf("\n"); for(i=0;i<19;i++)>19;i++)> { for(j=0;j<19;j++)>19;j++)> if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } for(i=0;i<20;i++)>20;i++)> printf("%d",a[i]); printf("请输入要查找的数"); scanf ("%d",&b); for (q=1;q<> { if (max-min!=0) { if(b==a[s]) { d=1; break; } else { if(b>a[s]) { c=s; s=max-(max-min)/2; min=c; d=0; } else c=s; s=(max-min)/2+min; max=c; d=0; } } } if(d==1) { s=s+1; printf("Found 在第%d\n位",s); } else printf("not found\n"); } 5测试数据 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4, 3,2,1 6 运行结果 7 出现问题及解决方法 这个实验太难了,出现各种问题,最后大家齐心协力完成了任务,主要是冒泡法的应用及折半查找法的应用比较困难。 8 实验心得 1.通过实验我对c语言的编程语言更加熟悉,加快编程输入语言的速度。 2.掌握一维数组、二维数组的定义、初始化和输入/输出方法;掌握字符数组和字符串函数的使用;掌握与数组有关的常用算法(如查找、排序)。 3.再次让我明白做实验时要细心,认真检查。 /*折半查找法*/ #include void main() { int a[10]={8,18,27,42,47,50,56,68,95,120}; int b=8; //要查找的数 int min=0;int max=9;int mid=(min+max)/2; while(b!=a[mid]) { if(b>a[mid]) {min=mid;mid=(min+max)/2;} else if(b {max=mid;mid=(min+max)/2;} if(mid==min) break; } if(b==a[mid]) {printf("a[%d]=%d\n",mid,a[mid]);} else if(b==a[max]) {printf("a[%d]=%d\n",max,a[max]);} else printf("没有此数\n"); } /*简单排序法*/ #include #define N 6 void swap(int *a,int *b); void main() {int a[6]={15,14,22,30,37,11}; int min; for(int i=0;i<> {min=i; for(int j=i+1;j<> {if(a[i] min=j; } swap(a+i,a+min); } for(i=0;i<> printf("%d ",a[i]); } void swap(int *a, int *b) { int t; t = *a; *a = *b; *b = t; } /*冒泡排序法C语言*/ #include #define N 10 //排序个数 void main() {int a[N]; for(int i=0;i scanf("%d",&a[i]); for(i=0;i<> for(int j=0;j<> if(a[j]>a[j+1]) //大于则交换 {int T=a[j+1];a[j+1]=a[j];a[j]=T;} for(i=0;i printf("%d ",a[i]); } //*************************************************************// //** ?函数名称: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // //** ?函数功能:折半查找 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // //** ?作 ? ?者:xt ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // //** ?时 ? ?间:2013/8/4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // //*************************************************************// #include "stdio.h" #include "stdlib.h" #include "time.h" #define ?N ?10 void main() { int i,j,flag,flag1,a[N],x; int low=0,high=N-1,middle,count=0,temp; srand(time(NULL)); for(i=0;i<> a[i]=rand()%100; printf("Before Sorting:\n"); for(i=0;i<> printf("%3d",a[i]); printf("\n"); ? ? ? ? ? ? ? ? //需要排序,用冒泡法 for(i=0;i { flag1=0; for(j=0;j<> { if(a[j]>a[j+1]) { temp=a[j];a[j]=a[j+1];a[j+1]=temp; flag1=1; } } if(!flag1) break; } printf("After Sorting:\n"); for(i=0;i<> printf("%3d",a[i]); printf("\n"); printf("Input the Key:"); scanf("%d",&x); while(low<> { count++; middle=(low+high)/2; if(a[middle]==x) { flag=1; break; } else if(x>a[middle]) low=middle; else high=middle; } if(flag) printf("找到了%d,查找的次数为%d",x,count); else printf("未找到%d,查找的次数为%d",x,count); } 适应情况:在一批有序 数据中查找某数 基本思想:选定这批数中居中间位置的一个数与所查数比较,看是否为所找之数,若不是,利用数据的有序性,可以决定所找的数是在选定数之前还是在之后,从而很快可以将查找范围缩小一半。以同样的方法在选定的区域中进行查找,每次都会将查找范围缩小一半,从而较快地找到目的数 例7.10 假设在数组a中的数据是按由小到大顺序排列的: -12 0 6 16 23 56 80 100 110 115,从键盘上输入一个数,判定该数是否在数组中,若在,输出所在序号;若不在,输出相应信息。 查找过程如下: 第一步:设low、mid和high三个变量,分别指示数列中的起始元素、中间元素与最后一个元素位置, 其初始值为low=0,high=9,mid=4,判断mid指示的数是否为所求,mid指示的数是23,不是要找的80,须继续进行查找。 [-12 0 6 16 23 56 80 100 110 115 ] ?low ?mid ?high 第二步:确定新的查找区间。因为80大于23,所以查找范围可以缩小为23后面的数,新的查找区间为[56 80 100 110 115 ],low,mid,high分别指向新区间的开始、中间与最后一个数。实际上high不变,将low(low=mid+1)指向56,mid (mid=(low+high)/2)指向100,还不是要找的80,仍须继续查找。 -12 0 6 16 23 [ 56 80 100 110 115 ] ?low ?mid ?high 第三步:上一步中,所找数80比mid指示的100小,可知新的查找区间为[56 80],low不变,mid与high的值作相应修改。mid指示的数为56,还要继续查找。 -12 0 6 16 23 [ 56 80 ] 100 110 115 ?low ?high ?mid 第四步:根据上一步的结果,80大于mid指示的数56,可确定新的查找区间为[80],此时,low与high都指向80,mid亦指向80,即找到了80,到此为止,查找过程完成。 -12 0 6 16 23 56 [ 80 ] 100 110 115 ?low ?mid ?high 若在查找过程中,出现low>high的情况,则说明,序列中没有该数,亦结束查找过程。 程序为: #define M 10 #include main() {static int a[M]={-12,0,6,16,23,56,80,100,110,115}; int n,low,mid,high,found; low=0; high=M-1; found=0; printf("Input a number to be searched:"); scanf("%d",&n); while(low<=high)>=high)> {mid=(low+high)/2; if (n= =a[mid]) {found=1;break;}/*找到,结束循环*/ else if (n>a[mid]) low=mid+1; else high=mid-1; } if (found==1) printf("The index of %d is %d",n,mid); else printf("There is not %d",n); } 输入:80? 输出:The index of 80 is 6 转载请注明出处范文大全网 » c语言作业(数组&折半查找法范文二:[小学教育]c语言作业(数组 折半查找法)
范文三:简单查找、折半查找、冒泡排序法C语言
范文四:C语言中常用的查找方法2---折半查找法
范文五:利用数组进行数据查找_折半查找法_C语言程序