有一个数组,数据元素从下标为1的位置开始存放,试编写一个算法:删除数组中最小值之后的元素,返回数组
有一个数组,数据元素从下标为1的位置开始存放,试编写一个算法:删除数组中最小值之后的元素,返回数组有一个数组,数据元素从下标为1的位置开始存放,试编写一个算法:删除数组中...
有一个数组,数据元素从下标为1的位置开始存放,试编写一个算法:删除数组中最小值之后的元素,返回数组有一个数组,数据元素从下标为1的位置开始存放,试编写一个算法:删除数组中最小值之后的元素,返回数组中元素的个数。要求:算法采用函数形式,并在机器上进行调试。并输出删除数据前后的数组。下标法,地址法,指针达,移动指针法。。。。。
展开
1个回答
展开全部
写了2种方法,用 fun() 或 用fun2(). 返回的数组数据 改写了原数组。所以只能调用其中之1,且只能调用一次。
数组数据例子:
9 2 3 2 3 4 2
返回:9 3 3 4
2 2 2 2 2 2 2
返回: 没有元素
#include <stdio.h>
void fun(int s[],int n, int *n2){
int i,j;
int ii=1,v;
*n2=n;
for (i=n-1;i>0;i--) if(s[i]<=s[ii])ii=i;
v=s[ii];
i= ii;
do{
if (s[i]==v) {for (j=i;j< *n2-1;j++)s[j]=s[j+1]; s[*n2-1]=0; *n2= *n2-1; }
else i++;
} while(i <= *n2);
}
void fun2(int *s,int n, int *n2){
int i,j;
int ii=1,v;
*n2=n;
for (i=n-1;i>0;i--) if( *(s+i)<= *(s+ii))ii=i;
v= *(s+ii);
i= ii;
do{
if ( *(s+i)==v) {for (j=i;j< *n2-1;j++)*(s+j)= *(s+j+1);
*(s + *n2-1)=0; *n2= *n2-1; }
else i++;
} while(i <= *n2);
}
int main()
{
int s[8]={999,9,2,3,2,3,4,2};
int n,i,n2;
n=8;
for(i=1;i<n;i++) printf("%d ",s[i]);printf("\n");
fun(s,n,&n2);
//fun2(s,n,&n2);
for (i=1;i<n2;i++) printf("%d ",s[i]);
return 0;
}
数组数据例子:
9 2 3 2 3 4 2
返回:9 3 3 4
2 2 2 2 2 2 2
返回: 没有元素
#include <stdio.h>
void fun(int s[],int n, int *n2){
int i,j;
int ii=1,v;
*n2=n;
for (i=n-1;i>0;i--) if(s[i]<=s[ii])ii=i;
v=s[ii];
i= ii;
do{
if (s[i]==v) {for (j=i;j< *n2-1;j++)s[j]=s[j+1]; s[*n2-1]=0; *n2= *n2-1; }
else i++;
} while(i <= *n2);
}
void fun2(int *s,int n, int *n2){
int i,j;
int ii=1,v;
*n2=n;
for (i=n-1;i>0;i--) if( *(s+i)<= *(s+ii))ii=i;
v= *(s+ii);
i= ii;
do{
if ( *(s+i)==v) {for (j=i;j< *n2-1;j++)*(s+j)= *(s+j+1);
*(s + *n2-1)=0; *n2= *n2-1; }
else i++;
} while(i <= *n2);
}
int main()
{
int s[8]={999,9,2,3,2,3,4,2};
int n,i,n2;
n=8;
for(i=1;i<n;i++) printf("%d ",s[i]);printf("\n");
fun(s,n,&n2);
//fun2(s,n,&n2);
for (i=1;i<n2;i++) printf("%d ",s[i]);
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询