回 帖 发 新 帖 刷新版面

主题:c语言求助

随机产生10个1~100的整数存入一维数组,通过菜单完成:
1.将最大值和最小值的位置交换
2.从大到小排序
3.输入一个整数,用“折半法”查找该数是否在愿数组中,有则输出小标,无则输出“no find!"
4.输入一个整数,插入数组中(不改变原顺序)
5.退出。   
 我是新手  觉得这道题很有意思 求解答 我不会编

回复列表 (共2个回复)

沙发

很有意思,不会编。

阿门,这是让别人写程序来让你觉得更有意思吗

各种码农会用哀怨的眼神看着你的

板凳

折半法的对象必须是有序的,该原数组是随机产生的,所以不能用折半法的。我的这个代码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;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册