指针练习

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void bubble(int* p, int n);
void choose(int* p, int n);
void del(int* p, int na, int m, int l);
void delm(int* p, int n);
void add(int* p, int na, int* q, int nb, int* z, int nc);
int count = 0;
int main()
{
    srand(time(0));
    int na, nb, i, nc;
    int m, l;
    int a[10], b[10], c[20];
    int* p = a;
    int* q = b;
    int* z = c;
    scanf("%d %d", &na, &nb);
    nc = na + nb;
    for (i = 0; i < na; i++)//随机生成n个数组成数组a
    {
        a[i] = rand() % 100;
    }
    for (i = 0; i < nb; i++)//随机生成n个数组成数组b
    {
        b[i] = rand() % 100;
    }
    printf("a\n");
    for (i = 0; i < na; i++)
        printf("%d ", p[i]);
    printf("\n");
    printf("b\n");
    for (i = 0; i < nb; i++)
        printf("%d ", q[i]);
    printf("\n");
    //scanf("%d %d",&m,&l);//输入第三题的两个数
    //bubble(p,na);//第一题
    //choose(p, na);//第二题
    //del(p,na,m,l);//第三题
    delm(p, na);//第四题
    //add(p, na, q, nb, z, nc);//第五题

    printf("a\n");
    for (i = 0; i < na - count; i++)
        printf(" %d", a[i]);
    printf("\n");
    printf("b\n");
    for (i = 0; i < nb; i++)
        printf(" %d", b[i]);
    printf("\n");
    //printf("第三题:\n");
    /*
    for (i = 0; i < na - l; i++)//第三题专属输出
        printf("%d ", p[i]);
    printf("\n");
    */
    return 0;
}

void bubble(int* p, int n)
{
    int i, j, t;
    for (i = 1; i < n; i++)
        for (j = 0; j < n - i; j++)
            if (p[j] > p[j + 1])
            {
                t = p[j];
                p[j] = p[j + 1];
                p[j + 1] = t;
            }
}

void choose(int* p, int n)
{
    int i, index, j, t;
    for (i = 0; i < n - 1; i++)
    {
        index = i;
        for (j = i + 1; j < n; j++)
        {
            if (p[index] < p[j])
            {
                index = j;
            }
        }
        t = p[i];
        p[i] = p[index];
        p[index] = t;
    }
}

void del(int* p, int n, int m, int l)
{
    int i, j;
    for (i = m; i <= n - l; i++)
    {
        p[i - 1] = p[i + l - 1];
    }
    /*
    for (i = m + l; i < n; i++)
    {
        p[i - 1] = 0;
    }
    */
}

void delm(int* p, int n)
{
    /*方法二
    int i, index = 0;
    for (i = 0; i < n; i++)
    {
        if (p[index] < p[i])
            index = i;
    }
    //for(i=index;i<n-1;i++)
    //{
    //p[i]=p[i+1];
    //}
    printf("第四题:\n");
    for (i = 0; i < n; i++)
    {
        if (p[index] != p[i])
            printf("%d ", p[i]);
    }
    printf("\n");
    */
    int i, index = 0, j = 0;
    for (i = 0; i < n; i++)
    {
        if (p[index] < p[i])
            index = i;
    }
    for (i = 0; i < n; i++)
    {
        if (p[index] == p[i])
            count++;
    }
    for (i = 0;i < n;i++)
    {
        if (p[index] == p[i])
        {
            j++;
        }
        else 
        {
            p[i - j] = p[i];
        }
    }
}

void add(int* p, int na, int* q, int nb, int* z, int nc)
{
    int i;
    choose(p, na);
    choose(q, nb);
    for (i = 0; i < na; i++)
    {
        z[i] = p[i];
    }for (i = na; i < na + nb; i++)
    {
        z[i] = q[i - na];
    }
    choose(z, nc);
    printf("第五题:\n");
    printf("c\n");
    for (i = 0; i < nc; i++)
        printf(" %d", z[i]);
    printf("\n");
}
posted @ 2020-12-16 19:43  清歌留欢  阅读(23)  评论(0编辑  收藏  举报