去除数组中的负数
这是题目:调用函数f,去除数组中的负数,输入数组x,输出结果1 3 4 6,输出使用格式控制"%5d"。
这是代码:
#include<stdio.h>
void f(int *a,int *m)
{
int i,j;
for(i=0;i<*m;i++)
if(a<0)
{
for(j=i--;j<*m-1;j++)
a=a;
*m=*m-1;
}
}
int main()
{
int i,n=7,x={1,-2,3,4,-5,6,-7};
f(x,&n);
for(i=0;i<n;i++)
printf("%5d",x);
return 0;
}
请问那个“j=i--”是什么意思呢 #include<stdio.h>
void f(int *a,int *m)
{
int i,j;
for(i=0;i<*m;i++)
if(a<0)
{
for(j=i--;j<*m-1;j++)
a=a;
*m=*m-1;
}
}
int main()
{
int i,n=7,x={1,-2,3,4,-5,6,-7};
f(x,&n);
for(i=0;i<n;i++)
printf("%5d",x);
return 0;
} 一楼的那个代码太乱了,我也不知道为啥会这样……重新弄了一下…… 本帖最后由 THU_LSM 于 2020-5-6 22:13 编辑
Marcccccy 发表于 2020-5-6 22:02
一楼的那个代码太乱了,我也不知道为啥会这样……重新弄了一下……
j=I-- 是说,先把i的值赋给j,再把i的值减去1。
这段代码的逻辑是说,如果a是负数,那么就把a拿掉,再把a开始后面的所有元素都往前挪一个位置。
所以,原先ai 位置的负数会没了,取而代之的是原来的a。
所以需要把i减1再回到外层for循环,不然的话,是检查不到原先的i+1那个位置的数字是不是负数。因为回到外层循环的时候,原来的a实在第i个位置的。 THU_LSM 发表于 2020-5-6 22:12
j=I-- 是说,先把i的值赋给j,再把i的值减去1。
这段代码的逻辑是说,如果a是负数,那么就把a拿掉,再 ...
哦豁 我有点没弄明白就……是不是i自减以后就会回到外循环呀 Marcccccy 发表于 2020-5-8 19:48
哦豁 我有点没弄明白就……是不是i自减以后就会回到外循环呀
不会,只要j<*m-1这个条件成立就不会退出循环,j = i-- 是指每次把 i 赋值给 j 之后再减1 18202486056 发表于 2020-5-8 21:53
不会,只要j
明白辽,谢谢您!{:10_287:}
页:
[1]