質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

983閲覧

配列を要素数を逆順にしたい

h_proc

総合スコア68

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/01/02 21:26

編集2019/01/02 23:55

配列の要素数を逆順にする関数を作りたいです。以下のようなコードを書いたのですが、0~9の順で表示されてしまいます。どこが間違っているか教えていただきたいです。よろしくお願いいたします。

c

1#include <stdio.h> 2#define ARRAY_SIZE 10 3 4void reverse(int dt[], int size); 5 6void reverse(int dt[], int size) { 7 8 int temp = 0; 9 int temp1 = 0; 10 11 for (int j = size - 1; j == 1; j--) {//dt[9]に0が入っているので、dt[7]dとt[8]、dt[7]とdt[6]のように下から値を交換。 12 13 for (int i = 0; i < size; i++) {//隣り合う配列同士の値を交換。dt[0]とdt[1]、dt[1]とdt[2]… 14 temp = dt[i]; 15 dt[i] = dt[i + 1]; 16 dt[i + 1] = temp; 17 } 18 19 temp1 = dt[j - 1]; 20 dt[j - 1] = dt[j]; 21 dt[j] = temp1; 22 23 24 } 25 26} 27 28int main(void) 29{ 30 int dt[ARRAY_SIZE] = { 1 }; 31 32 for (int i = 0; i < ARRAY_SIZE; i++) { 33 dt[i] = i; 34 } 35 36 reverse(dt, ARRAY_SIZE); 37 38 for (int i = 0; i < ARRAY_SIZE; i++) { 39 printf("%d\n", dt[i]); 40 } 41 42 return 0; 43}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aikon_marimo

2019/01/02 21:55

reverse関数の中のjとiのループ処理が誤ってます。 アドバイスさせて頂きたいので、一旦どのような考えで上記のように実装されたのか、ソース内にコメント追記いただけますか。
h_proc

2019/01/03 00:12

はい、よろしくお願いいたします。
guest

回答4

0

ベストアンサー

c

1#include <stdio.h> 2 3#define ARRAY_SIZE (10) 4 5void reverse(int dt[], int size) { 6 for (int i = 0; i < size / 2; i++) { 7 int temp = dt[i]; 8 dt[i] = dt[size - 1 - i]; 9 dt[size - 1 - i] = temp; 10 } 11} 12 13int main(void) 14{ 15 int dt[ARRAY_SIZE]; 16 17 for (int i = 0; i < ARRAY_SIZE; i++) { 18 dt[i] = i; 19 } 20 21 reverse(dt, ARRAY_SIZE); 22 23 for (int i = 0; i < ARRAY_SIZE; i++) { 24 printf("%d\n", dt[i]); 25 } 26 return 0; 27}

両脇(0番目と size-1番目, 1 番目と size-2番目, ... ) のペアで値交換していきます。

投稿2019/01/03 05:00

編集2019/01/03 14:06
katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

h_proc

2019/01/03 13:14

回答ありがとうございます。逆順にすることができました。
guest

0

for (int j = size - 1; j == 1; j--) {

条件文が明らかにおかしいです。
考え直してみましょう

投稿2019/01/02 22:46

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんな漢字で、

C

1void reverse(int dt[], int size) { 2 for (int *l = dt, *r = dt + size - 1; l < r; l++, r--) { 3 *l ^= *r; 4 *r ^= *l; 5 *l ^= *r; 6 } 7}

投稿2019/01/02 23:53

hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C

1void reverse(int dt[], int size) { 2 int lo = 0; /* 先頭 */ 3 int hi = size-1; /* 末尾 */ 4 while ( lo < hi ) { 5 /* 先頭と末尾を交換し */ 6 int temp = dt[lo]; 7 dt[lo] = dt[hi]; 8 dt[hi] = temp; 9 /* 先頭前進・末尾後退 */ 10 ++lo; 11 --hi; 12 } 13}

投稿2019/01/02 23:03

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

h_proc

2019/01/03 00:12

ありがとうございます。やってみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問