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

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

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

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

Q&A

解決済

2回答

2525閲覧

C言語で配列を昇順、降順に表示

retorutoutyu

総合スコア10

C

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

0グッド

0クリップ

投稿2018/07/08 07:28

前提・実現したいこと

1~10 の数値を入力し
1~入力した数値 の自乗を配列に代入します。
その配列を昇順に表示してから
配列を降順にするための代入処理を行って
降順に配列を表示する。
という処理が目的のコードです

発生している問題

1から9を入力した時は求めている実行結果になるのですが 10を入力した時だけ、昇順の配列の表示が10を超えて出力され、途中でプログラムが終了します

該当のソースコード

C

1#include <stdio.h> 2 3int main(void){ 4 int i,j,k,l,work; 5 int n = 0; 6 int v[10]; 7 8 do {                   /*数値の入力*/ 9 printf("1から10の範囲で整数を入力:"); 10 scanf("%d", &n); 11 if(n < 1 || n > 10) 12 printf("範囲外です。再度入力してください。\n"); 13 } while(n < 1 || n > 10); 14 15 for(i = 0; i <= n; i++){ /* 配列の代入 */ 16 v[i] = i*i; 17 } 18 19 printf("1から%dまでの自身のべき乗数は\n",n); 20 21 for(j = 1; j <= n; j++){ /* 配列の表示 */ 22 printf("v[%d]=%d\n", j,v[j]); 23 } 24 putchar('\n'); 25 26 printf("要素を逆順にすると\n"); 27 28 for(k = 0; k <= n/2; k++){ /* 逆順に配列の代入*/ 29 work = v[k]; 30 v[k] = v[n-k]; 31 v[n-k] = work; 32 } 33 34 for(l = 0; l < n; l++){ /* 逆順に配列の表示 */ 35 printf("v[%d]=%d\n", l+1,v[l]); 36 } 37 38 return 0; 39}

補足情報(FW/ツールのバージョンなど)

コンパイラはgccを使っています

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

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

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

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

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

guest

回答2

0

int v[10];

int v[11];
に書き換えたら、求めている実行結果になりました。

投稿2018/07/08 07:55

retorutoutyu

総合スコア10

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

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

0

ベストアンサー

C

for(i = 0; i <= n; i++){
v[i] = i*i;
}

n=10のとき、v[10]に不正にアクセスしようとするので未定義の動作を引き起こします。
次のように工夫してみてはいかがでしょう。

C

1for(i = 0; i < n; i++){ 2 v[i] = (i+1)*(i+1); // pow関数を使っても良い 3}

あるいは

C

1int v[10+1]; // v[0]は使わない 2 3... 4 5for(i = 1; i <= n; i++){ 6 v[i] = i * i; 7}

投稿2018/07/08 07:45

編集2018/07/08 07:47
LouiS0616

総合スコア35658

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

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

retorutoutyu

2018/07/08 07:54

ありがとうございます。 int v[10] を int v[11]に書き換えたら やりたい実行結果になりました 配列の基本から勉強し直します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問