c语言基础学习8.5

1:在堆区申请10个连续空间,手动输入10个数(递增),输入关键字key,采用折半查找方式查找关键字是否存在,存在给出位置,不存在,输出查找失败。

注意:main函数在main.c 输入函数,输出函数,查找函数,在find.c

main.c

#include  "find.h"
#define MAX 10

int main(int argc,const char * argv[])
{
    int *p = malloc(sizeof(int)*MAX);
    input(p);
    output(p);
    find(p);
    free(p);
    return 0;
}

find.c

#include  "find.h"
void input(int *p)
{
    int i;
    printf("请输入十个元素:");
    for(i = 0;i<10;i++)
    {
        scanf("%d",p+i);
    }
}

void output(int *p)
{
    int i;
    for(i = 0;i<10;i++)
    {
        printf("%-3d",*(p+i));
    }
    putchar(10);
}

void find(int *p)
{
    int key,sub = -1;
    printf("请输入要查找的关键字:");
    scanf("%d",&key);
    int j = 10-1,mid;
    int i = 0;
    while(i <= j)
    {
        mid = (i + j)/2;
        if(key < p[mid])
        {
            j = mid - 1;
        }
        else if(key > p[mid])
        {
            j = mid + 1;
        }
        else if(key = p[mid])
        {
            sub = mid;
            break;
        }
    }
    if(sub == -1)
    {
        printf("查找失败\n");
    }
    else
    {
        printf("该关键字在第%d个位置\n",sub + 1);
    }
    
}

find.h

#ifndef     __FIND_H__
#define      __FIND_H__
#include <stdlib.h>
void input(int *p);
void output(int *p);
void find(int *p);
#endif 

2:在堆区申请10个连续空间,手动输入10个数(乱序),采用简单选择排序,输出排序后的结果。

注意:main函数在main.c 输入函数,输出函数,排序函数,在sort.c

main1.c

#include  "sort.h"

int main(int argc,const char * argv[])
{
    int *p = malloc(sizeof(int)*10);
    input(p);
    output(p);
    sort(p);
    output(p);
    free(p);
    return 0;
}

sort.c

#include  "sort.h"

void input(int *p)
{
    int i;
    printf("请输入十个元素:");
    for(i = 0;i<10;i++)
    {
        scanf("%d",p+i);
    }
}

void output(int *p)
{
    int i;
    for(i = 0;i<10;i++)
    {
        printf("%-3d",*(p+i));
    }
    putchar(10);
}

void sort(int *p)
{
    int i,j,min,t;
    for(i = 0;i<10-1;i++)
    {
        min = i;
        for(j = i + 1;j<10;j++)
        {
            if(p[j] < p[min])
            {
                min = j;
            }
        }
        if(i != min)
        {
            t = p[i];
            p[i] = p[min];
            p[min] = t;
        }
    }
}

sort.h

#ifndef      __SORT_H__
#define     __SORT_H__
#include <stdlib.h>
void input(int *p);
void output(int *p);
void sort(int *p);
#endif

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值