主题:c语言求助
sarielxxl
[专家分:0] 发布于 2011-11-03 12:29:00
随机产生10个1~100的整数存入一维数组,通过菜单完成:
1.将最大值和最小值的位置交换
2.从大到小排序
3.输入一个整数,用“折半法”查找该数是否在愿数组中,有则输出小标,无则输出“no find!"
4.输入一个整数,插入数组中(不改变原顺序)
5.退出。
我是新手 觉得这道题很有意思 求解答 我不会编
回复列表 (共2个回复)
沙发
argentmoon [专家分:13260] 发布于 2011-11-03 12:59:00
很有意思,不会编。
阿门,这是让别人写程序来让你觉得更有意思吗
各种码农会用哀怨的眼神看着你的
板凳
羽翼灵动 [专家分:80] 发布于 2011-11-14 15:14:00
折半法的对象必须是有序的,该原数组是随机产生的,所以不能用折半法的。我的这个代码3,4,5是基于第2步的从大到小的数组,所以要执行的话,必须从1开始顺序执行。可以看一下:
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
int arr[11];
void random()
{
int i;
srand(time(0));
for(i =0; i<10; i++)
{
arr[i] = rand()%100;
printf("%d ", arr[i]);
}
printf("\n");
}
void swap() //将最大值与最小值交换
{
int i,max,min,n_max,n_min; //n_max与n_min记录最大最小值下标
min=max=arr[0]; //假设最大最小值皆为arr[0]
for(i=0; i<10; i++)
{
if(max<arr[i])
{
max=arr[i];
n_max=i;
}
if(min>arr[i])
{
min=arr[i];
n_min=i;
}
}
arr[n_max]=min; //交换最大最小值
arr[n_min]=max;
printf("\n");
for(i=0; i<10; i++)
printf("%d ",arr[i]);
printf("\n");
}
void sort()
{
int i,j,t;
for(i=0; i<10; i++) //冒泡法排序
for(j=0; j<10-i; j++)
if(arr[j]<arr[j+1])
{
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
for(i=0; i<10; i++)
printf("%d ",arr[i]);
printf("\n");
}
void search(int x)
{
int mid,left,right,find=0;
left=0;
right=9;
mid=(left+right)/2;
while(left<=right && find==0) //折半查找代码部分
{
mid=(left+right)/2;
if(arr[mid]==x)
{
printf("xia biao:%d\n",mid);
find=1;
}
else if(arr[mid]<x)
right=mid-1;
else
left=mid+1;
}
if(find==0)
printf("no find!\n");
}
void insert(int x) //不改变第二部数组的顺序并将输入的数插入
{
int i;
for(i=10; i>=0; i--) //从数组尾部开始查找
if(arr[i-1]<x && i-1>=0) //判断i-1是因为i可以取0,但i-1不能取负数
{
arr[i]=arr[i-1];
}
else
{
arr[i]=x;
break;
}
for(i=0; i<=10; i++)
printf("%d ",arr[i]);
printf("\n");
}
void tuichu() //退出函数
{
exit(0);
}
int main()
{
int n,x;
random(); //产生随机数
printf("====================================================\n");
printf("1.Exchange max and min location,press 1\n");
printf("2.From big to small sort,press 2\n");
printf("3.Enter an integer, with binary method,press 3\n");
printf("4.Enter an integer, insert array ,press 4\n");
printf("5.Exit,press 5\n");
printf("====================================================\n");
while(1)
{
scanf("%d",&n);
switch(n)
{
case 1:
swap(arr);
break;
case 2:
sort();
break;
case 3:
printf("Input a number:");
scanf("%d",&x);
search(x);
break;
case 4:
printf("Insert a number is:");
scanf("%d",&x);
insert(x);
break;
case 5:
tuichu();
break;
}
}
return 0;
}
我来回复