题目:
编写程序,输入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;
}