鱼C论坛

 找回密码
 立即注册
查看: 1068|回复: 1

[已解决]C语言求助

[复制链接]
发表于 2023-4-23 18:29:00 | 显示全部楼层 |阅读模式

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

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

x
【问题描述】

初始化一维数组a[10]={12,45,87,64,15,-47,69,16,63,36},从键盘输入并查找一个整数num,如果找到,则删除数组中的num,输出删除后的数组,否则输出“Not Found!”,并输出原数组

说明:请只提供需要补全的代码部分,不需要提供完整程序。可根据需要定义其他变量。

【输入形式】
【输出形式】
【样例输入】

27
【样例输出】

Not Found!

12 45 87 64 15 -47 69 16 63 36
#include  <stdio.h>
int  main()
{
      
int a[10]={12,45,87,64,15,-47,69,16,63,36};
    int num,i,j=0,n=10,m;
            scanf("%d",&num);
            for(i=0;i<9;i++)
{
                if(num==a[i])
         {
             for(j=9;j<1;j--)
                     a[j]=a[j+1];
             m=1;
             break;

         }
}
if(m=-1)
printf("Not Found!\n");

      for(i  =  0;  i<n;  i++)
                printf("%d  ",  a[i]);
        return  0;
}
为什么删除不了那个整数啊
最佳答案
2023-4-23 18:30:38
您的代码里有一些问题,我为您纠正了一下:
#include <stdio.h>

int main() {
    int a[10] = {12, 45, 87, 64, 15, -47, 69, 16, 63, 36};
    int num, i, j = 0, n = 10, m = -1;
    scanf("%d", &num);
    for (i = 0; i < n; i++) {
        if (num == a[i]) {
            for (j = i; j < n - 1; j++) {
                a[j] = a[j + 1];
            }
            m = 1;
            n--;
            break;
        }
    }
    if (m == -1) {
        printf("Not Found!\n");
    }

    for (i = 0; i < n; i++) {
        printf("%d  ", a[i]);
    }
    return 0;
}

这里是修改后的代码,以下是我修改的地方:

1. 从`for(i=0;i<9;i++)`更改为`for(i=0;i<n;i++)`,这样可以遍历整个数组。
2. 删除元素时,从`for(j=9;j<1;j--)`更改为`for(j=i;j<n-1;j++)`。因为要从找到的位置开始,将后面的元素向前移动一位,直到数组的倒数第二个元素。同时,`j--` 更改为 `j++`。
3. 修正`if(m=-1)`为`if(m==-1)`。这是一个赋值与比较的问题,应该使用 `==` 而不是 `=`。
4. 当找到并删除元素后,记得将数组的长度 `n` 减 1,`n--`。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-23 18:30:38 | 显示全部楼层    本楼为最佳答案   
您的代码里有一些问题,我为您纠正了一下:
#include <stdio.h>

int main() {
    int a[10] = {12, 45, 87, 64, 15, -47, 69, 16, 63, 36};
    int num, i, j = 0, n = 10, m = -1;
    scanf("%d", &num);
    for (i = 0; i < n; i++) {
        if (num == a[i]) {
            for (j = i; j < n - 1; j++) {
                a[j] = a[j + 1];
            }
            m = 1;
            n--;
            break;
        }
    }
    if (m == -1) {
        printf("Not Found!\n");
    }

    for (i = 0; i < n; i++) {
        printf("%d  ", a[i]);
    }
    return 0;
}

这里是修改后的代码,以下是我修改的地方:

1. 从`for(i=0;i<9;i++)`更改为`for(i=0;i<n;i++)`,这样可以遍历整个数组。
2. 删除元素时,从`for(j=9;j<1;j--)`更改为`for(j=i;j<n-1;j++)`。因为要从找到的位置开始,将后面的元素向前移动一位,直到数组的倒数第二个元素。同时,`j--` 更改为 `j++`。
3. 修正`if(m=-1)`为`if(m==-1)`。这是一个赋值与比较的问题,应该使用 `==` 而不是 `=`。
4. 当找到并删除元素后,记得将数组的长度 `n` 减 1,`n--`。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 15:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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