鱼C论坛

 找回密码
 立即注册
查看: 965|回复: 6

[已解决]去除数组中的负数

[复制链接]
发表于 2020-5-6 22:01:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是题目:
调用函数f,去除数组中的负数,输入数组x[7],输出结果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[i]<0)
        {
            for(j=i--;j<*m-1;j++)
                a[j]=a[j+1];
            *m=*m-1;    
        }
}

int main()
{
    int i,n=7,x[7]={1,-2,3,4,-5,6,-7};
    f(x,&n);
    for(i=0;i<n;i++)
        printf("%5d",x[i]);
    return 0;
}
请问那个“j=i--”是什么意思呢
最佳答案
2020-5-8 21:53:44
Marcccccy 发表于 2020-5-8 19:48
哦豁 我有点没弄明白就……是不是i自减以后就会回到外循环呀

不会,只要j<*m-1这个条件成立就不会退出循环,j = i-- 是指每次把 i 赋值给 j 之后再减1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-6 22:02:16 | 显示全部楼层
#include<stdio.h>
void f(int *a,int *m)
{
        int i,j;
        for(i=0;i<*m;i++)
                if(a[i]<0)
                {
                        for(j=i--;j<*m-1;j++)
                                a[j]=a[j+1];
                        *m=*m-1;        
                }
}

int main()
{
        int i,n=7,x[7]={1,-2,3,4,-5,6,-7};
        f(x,&n);
        for(i=0;i<n;i++)
                printf("%5d",x[i]);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-6 22:02:53 | 显示全部楼层
一楼的那个代码太乱了,我也不知道为啥会这样……重新弄了一下……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-6 22:12:45 | 显示全部楼层
本帖最后由 THU_LSM 于 2020-5-6 22:13 编辑
Marcccccy 发表于 2020-5-6 22:02
一楼的那个代码太乱了,我也不知道为啥会这样……重新弄了一下……


j=I-- 是说,先把i的值赋给j,再把i的值减去1。
这段代码的逻辑是说,如果a[i]是负数,那么就把a[i]拿掉,再把a[i+1]开始后面的所有元素都往前挪一个位置。
所以,原先ai 位置的负数会没了,取而代之的是原来的a[i+1]。
所以需要把i减1再回到外层for循环,不然的话,是检查不到原先的i+1那个位置的数字是不是负数。因为回到外层循环的时候,原来的a[i+1]实在第i个位置的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-8 19:48:04 | 显示全部楼层
THU_LSM 发表于 2020-5-6 22:12
j=I-- 是说,先把i的值赋给j,再把i的值减去1。
这段代码的逻辑是说,如果a是负数,那么就把a拿掉,再 ...

哦豁 我有点没弄明白就……是不是i自减以后就会回到外循环呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 21:53:44 | 显示全部楼层    本楼为最佳答案   
Marcccccy 发表于 2020-5-8 19:48
哦豁 我有点没弄明白就……是不是i自减以后就会回到外循环呀

不会,只要j<*m-1这个条件成立就不会退出循环,j = i-- 是指每次把 i 赋值给 j 之后再减1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-9 23:40:49 | 显示全部楼层

明白辽,谢谢您!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 02:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表