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

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

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

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

Q&A

解決済

2回答

9346閲覧

配列を一つずつずらすコード

suga.rui

総合スコア5

C

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

0グッド

0クリップ

投稿2020/02/28 03:12

各配列に格納されている数値を一つずつずらすコード(以下に示してます)を作成したのですがうまく動作しません.
数値入力を3,4,5と入力すると,rotation関数を通した後は0,0,0と表示されます.
また、rotation関数で,for文の条件をj<2 に変更すると,0,0,3と表示されます.
配列と関数とポインタの表記も理解度は微妙です…

void rotation(int *a);

int main(void)
{
int a[3] = { 0 };
int i;
int k;

printf("数値入力\n"); for (i = 0; i < 3; i++) { scanf("%d", &a[i]); } printf("入力は以下です\n"); for (i = 0; i < 3; i++) { printf("%d\n", a[i]); } printf("rotation後は以下です\n"); do { rotation(a); printf("rotationする場合は1、しない場合は0を入力:"); scanf("%d", &k); } while (k == 0); return 0;

}

void rotation(int *a) //値が格納されている配列を一つずつずらす関数
{
int j;
int b[3] = { 0 };

for (j = 0; j < 3; j++); { if (j != 2) { b[j] = a[j+1]; //配列aが1ずつズレて配列bに格納 } else { b[j] = a[0]; // 配列aの先頭は配列bの最後尾 } } for (j = 0; j < 3; j++) { printf("%d\n", b[j]); }

}

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

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

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

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

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

yumetodo

2020/02/28 03:39

ソースコードはそれを書くための記法(```で上下を囲む)があるのでそれを使ってください。インデントが消えてしまいます。
guest

回答2

0

for (j = 0; j < 3; j++);

末尾に;があるのでその下のブロックはループになっていません。

b[j] = a[0]; // 配列aの先頭は配列bの最後尾

正しくループしたとしてもこれは動作しません。
なぜなら、この文が実行される時、すでに最初にa[0]にあった要素はa[1]にあった要素に置き換わったあとだからです。

投稿2020/02/28 03:51

編集2020/02/28 08:30
yumetodo

総合スコア5850

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

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

DreamTheater

2020/02/28 04:04

配列a自身は更新されないので、yumetodoさんが指摘されたfor文のセミコロンを削除すれば動きますよ。 ただ、コードが読みにくいのでせめてインデントしてください。 > suga.ruiさん
yumetodo

2020/02/28 08:30

あ、bに入れてんの見落としてたわ、指摘ありがとうございます。
guest

0

ベストアンサー

答えになっているかどうか?

usr ~/Project/test % ./a.out
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 0

c

1#include <stdio.h> 2 3static void rotation(int ary[], size_t siz) 4{ 5 int tmp = ary[0]; 6 for(size_t i = 0; i < siz - 1; i++) { 7 ary[i] = ary[i+1]; 8 } 9 ary[siz-1] = tmp; 10} 11 12static void Print(int ary[], size_t siz) 13{ 14 for(size_t i = 0; i < siz; i++) { 15 printf("%d ", ary[i]); 16 } 17 putchar('\n'); 18} 19 20int main(void) 21{ 22 int ary[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 23 // 24 Print(ary, sizeof(ary)/sizeof(int)); 25 rotation(ary, sizeof(ary)/sizeof(int)); 26 Print(ary, sizeof(ary)/sizeof(int)); 27 // 28 return 0; 29}

投稿2020/02/28 09:11

cateye

総合スコア6851

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問