性格悪い人が優勝

プログラミング、C言語です。
次のプログラムを実行するソースコードを教えて下さい。

自然数 n の値を入力し、続けて n 個の整数を入力すると、入力順で前後した2つの整数値の(n-1 個の)差の絶対値を一行ずつ出力するプログラムを作成しなさい。 ただし、n に 1 以下の値が入力されると、プログラムは n の入力を繰り返すものとする。


入力:
5 1 2 4 7 -10
出力:
1 2 3 17

入力:
0 1 2 3 10
出力:
7

A 回答 (4件)

文章と例が矛盾するんだけど, どっちに従えばいいんだろうね.



あと, くっそ変な値を突っ込まれたらどうするんだろう.
    • good
    • 0

出題に矛盾があります。


自然数(n)とは、1以上の整数ですから、「n に 0 ​以下の値が入力される」ということはありません。
例でいうと、入力により、
n=5です。n以外は示されていませんから 仮にa[n]とすると、
a[0]=1,a[1]=2,a[2]=4,a[3]=7,a[4]=-10 となります。
出力は、差の絶対値を一行(便宜上改行してませんが)ずつ出力ですから、
2-1=1,4-2=2,7-4=3,7+10=17 となります。

2個目の例でいうと、
n=0 ここで自然数でないのでエラーになりますが、無視することにします。
1以下なのでnの入力を繰返します。
n=1 これも1以下なのでnの入力を繰返します。
n=2です。
a[0]=3,a[1]=10 となります。
10-3=7 となります。

nは整数、と出題文を修正しないといけないのではないでしょうか。
    • good
    • 1

#include <stdio.h>


#include <stdlib.h>
#include <string.h>

int main(void) {
 char s[4097];
 char* sep = " ";
 int n, x, y;
 puts("入力:");
 scanf("%4096[^\n]%*[^\n]", s);
 getchar();
 n = strtol(strtok(s, sep), NULL, 10);
foo:
 if (n > 1) {
  x = strtol(strtok(NULL, sep), NULL, 10);
  puts("出力:");
  for (int i = 1; i < n; i++) {
   y = strtol(strtok(NULL, sep), NULL, 10);
   printf("%d ", abs(y - x));
   x = y;
  }
  puts("");
 } else {
  n = strtol(strtok(NULL, sep), NULL, 10);
  goto foo;
 }
 return EXIT_SUCCESS;
}
    • good
    • 0

宿題ですよね?



アナタに思考力が身につきませんが、それでもソースコードだけが欲しいですか?

どこまでできてるの?
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!