【问题标题】:deletion of first two element of array declared statically not working删除静态声明的数组的前两个元素不起作用
【发布时间】:2014-02-05 21:29:52
【问题描述】:

我在 c 中处于一种情况,假设我有以下代码:

#include <stdio.h>

main()
{
int size=8;
 int  data[18]={12,9,1,7,4,5,3,11};
 int i,newS;
 printf("check1 \n");
 newS= size+1;
 data[newS]=data[0] +data[1];
 printf("news %d  \n",data[newS]);
 printf("check2 \n");
   for(i=0;i<21;i++)
        {
          if (data[i] <data[newS] ) 
            {
             printf("check3 \n");
              data[newS+1]= data[newS] +data[i] ;
              newS++;
            }   
            else
            {
             printf("check4 \n");
            }
        }
     for(i=0;i<21;i++)
     {
     printf("%d  ",data[i]);
     }
     printf("\n");
}

我希望它产生这样的结果:12 9 1 7 4 5 3 11 21 33 42 43 50 54 59 62 73 18 18 8但我不知道为什么它在“11”之后有一个“0”。如何删除这个零? 对应代码得到的输出是这样的(没想到):

12  9  1  7  4  5  3  11  0  21  33  42  43  50  54  59  62  73  18  18  8

【问题讨论】:

  • 我格式化了你的代码,但并没有真正通过它,所以我无法具体评论答案......但根据你帖子的大小,我建议你尝试打破将其分解为一个更小、更可口的问题。
  • @admdrew 感谢您的帮助,如果您告诉我“如何删除静态声明数组的前两个元素,假设我必须删除 data[0].freq 元素和 data[1].freq struct data[6]={1,2,3,4,5,6} 的元素,这样删除后 data[0] 将指向“3”,data[1] 将指向“4”(不是“0 ”和“1”,就像他们在删除之前所做的那样)然后我可以解决我的问题。“但我必须静态地做”。谢谢
  • 我不知道 C 中的“静态”是什么意思。
  • @admdrew 我已经编辑了这个问题,并把问题分解得很小,现在请你帮我知道为什么这个代码在“11”之后有“0”。我希望在“11”而不是“0”之后出现“21”。谢谢
  • 我相信我的答案,第 (2) 节,解决了 0。

标签: c arrays algorithm


【解决方案1】:

这是我对删除零的问题所做的解决方案:(以下是供任何用户将来参考的代码)。

#include <stdio.h>
main()
{
int size=8;
 int  data[18]={12,9,1,7,4,5,3,11};
 int i,newS;
 printf("check1 \n");
 newS= size;
 data[newS]=data[0] +data[1];
 printf("news %d  \n",data[newS]);
 printf("check2 \n");
   for(i=0;i<21;i++)
        {
          if (data[i] <data[newS] ) 
            {
             printf("check3 \n");
              data[newS+1]= data[newS] +data[i] ;
              //break;
              newS++;
            }   
            else
            {
             printf("check4 \n");
            }
        }
     for(i=0;i<21;i++)
     {
     printf("%d  ",data[i]);
     }
     printf("\n");
}

【讨论】:

    【解决方案2】:

    1) 问题的主题不断变化。这是不必要的令人沮丧。如果你有两个问题,要么都表达出来,要么分成两个单独的帖子。

    2) 提示:8 值数组的最后一个元素的索引是多少?

    3) 供选择——恢复我原来的答案——将数组中所有高索引值向下移动一个空格,并将长度减一。

    【讨论】:

    • 我已经解决了这个问题,但是如何删除前两个元素是我的第二个问题,这样第三个和第四个索引处的元素将分别指向第一个和第二个位置。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2013-02-02
    • 2020-11-01
    • 1970-01-01
    相关资源
    最近更新 更多