题目:

编写程序,输入n(1<=n<=10),输入n个整数构成一个数组,输入整数x,在这个数组中查找x是否存在,如果存在,删除x,后面元素依次向前添补空位,并输出删除元素后的数组。如果不存在,输出“Not Found”。定义一个查找函数find(),在数组a中查找x,若找不到函数返回-1,若找到返回x的下标,函数原型如下:int find(int a[], int n, int x); 然后在main()中,先调用函数find(),若查找失败输出“Not Found";若查找成功,则调用上一题中定义的函数del()删除该元素,再调用上一题中的PrintArr()输出删除元素后的数组内容。

输入:

输入第一行是一个正整数n(1<=n<=10);第二行是n个整数,构成一个数组;第三行是一个整数x,表示待查找元素。

输出:

输出删除元素后的数组,每个元素占4列,右对齐。如果不存在,输出“Not Found”。如果数组中有多个x,只删除下标最小的那个。

Exemple:

输入:

6

3 6 2 4 7 9

4

输出:

   3   6   2   7   9

My DaiMa:

#include<stdio.h>
int find(int a[],int n,int x)  //调用函数用来查找数组a里第几个数和x一样
{
    int i,flag=-1;  //如果没有数和x一样的话,就返回-1
    for(i=0;i<n;i++)
    {
        if(a[i]==x)
            flag=i;第几个数和x一样就返回这个数的下标 i
    }
    return flag;
}
void del(int n,int a[],int flag)  //调用函数用来删除数组中下标为flag的数
{
    int i;
    for(i=0;i<n;i++)
    {
        if(i>=flag) //由于数组中从第flag数开始的每一个数都变成了它后面的那个数
            a[i]=a[i+1]; //因此这里if的判断里用的是>=号,而且只需要让a[i]=a[i+1]即可
    }
}
void PrintArr(int a[],int n)  //调用函数用来重新输出数组a里的数
{
    int i;
    for(i=0;i<n-1;i++)  //要注意的是这个时候的a数组少了一个数
        printf("%4d",a[i]);  //要注意题目的要求是占4列,右对齐
}
int main()
{
    int a[11],n,i,flag,x;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&x);
    flag=find(a,n,x);
    if(flag==-1)
        printf("Not Found");  //这是在数组a中没有找到和x相等的数的情况
    else
    {
        del(n,a,flag);
        PrintArr(a,n);
    }
    return 0;
}