在没有数组的情况下打印C中相邻的整数序列

时间:2015-07-03 06:44:32

标签: c sequence

通常可以存储一系列输入并在以后打印出来而不使用数组吗?

我需要顺序取整数输入,并将-1标记作为输入的结尾,而不将其作为输入(称为x n )。输出应该是序列a n where

a n := x n -1 + x n ,其中n> 1

以下是我的代码,但输出与输入一起发生,而不是一次性,因为问题确实需要。这是代码:

table.on('click', 'tr.parent', function() {
   var wavesurfer = Object.create(WaveSurfer),
       container = $(this).next('tr').find('.wawe')[0];
    wavesurfer.init({
      container: container,
      waveColor: 'violet',
      progressColor: 'purple'
   });
  wavesurfer.load(container.getAttribute('url'));
});       

输入: 1 2 3 4 -1

输出: 3 5 7

3 个答案:

答案 0 :(得分:2)

我不完全确定,但你的任务的目的可能是熟悉列表。然后,您不需要数组来存储输入值:

struct list {
  int val;
  struct list * next;
};

处理清单应抽象为一般功能:

struct list * list_add(struct list * lst, int val) {
  struct list * node =
      (struct list *) malloc(sizeof(struct list));
  node->val = val;
  node->next = lst;
  return node;
}
void list_free(struct list * lst) {
  while (lst) {
    struct list * temp = lst;
    lst = lst->next;
    free(temp);
  }
}
struct list * list_nreverse(struct list * lst) {
  struct list * nlst = lst;
  if (lst) {
     lst = lst->next;
     nlst->next = NULL;
     while (lst) {
       struct list * temp = lst;
       lst = lst->next;
       temp->next = nlst;
       nlst = temp;
     }
   }
   return nlst;
}

要使用该列表,您可以将输入值存储在列表中,或者保持接近您已有的代码,动态计算输出(相邻总和)并将其存储在列表中,打印整个清单 最后(以相反的顺序):

int current;
int previous;
struct list * output = NULL;
scanf("%d", &previous);
while ((!scanf("%d", &current) == 0) && (current != -1)) {
  sum = previous + current;
  previous = current;
  output = list_add(output, sum);
}
output = list_nreverse(output);
struct list * iterator = output;
while (iterator) {
  printf("%d ", iterator->val);
  iterator = iterator->next;
}
list_free(output);

注意:代码目前尚未经过测试,但应该让您知道如何实现这一目标。

答案 1 :(得分:0)

只需附加一个字符串即可。在输入结束时,打印字符串。

一个字符串可以视为一个数组。也许这会使这个答案无效

否则,不。您需要一个数组来存储输入或计算。
糟糕......正如Daniel Jour所说in his answer你可以使用列表而不是数组。

答案 2 :(得分:0)

整数输入按“扫描”顺序进行。要查找输入的结尾,请使用-1检查扫描返回值,以便扫描null元素。

以下是我的代码,输出根据您的要求进行。输出一次性发生你的问题确实需要@subrat。代码如下:

#include <stdio.h>
 int main()
 {
 int xo,a;
 int sum =0;
 int diff=0;
 int previous=0;
 scanf("%d",&xo);   //dont need xo here :: use previous only
 previous = xo;
 while ((scanf("%d",&a)!=-1)) //important to use sum=0
 {
     sum = previous+a;
     previous = a;
     printf("%d ",sum);
     sum=0;
 }
 return 0;
}

INPUT:1 2 3 4 -1

输出:3 5 7 3