- 締切済み
C言語課題!C言語初心者です。お願いします。
課題内容 要素数10の(0~9の順)配列Aの値を2倍して配列Bに格納して その後配列Aの値を配列Bに、配列Bの逆順を配列Aに格納し 入れ替える前と入れ替えた後の配列A,Bの値を表示するプログラム 書いてみたプログラム #include <stdio.h> int main(void) { int i; int va[10] = {0,1,2,3,4,5,6,7,8,9}; /* 初期化 */ int vb[10]; puts("入れ替え前"); puts("-----------"); for(i=0 , i<10 , i++){ printf("va[%d] = %d\n" , i , va[i]); /* 入れ替え前の配列A */ } for(i=0 , i<10 , i++){ vb[10] = 2*va[10]; } for(i=0 , i<10 , i++){ printf("vb[%d] = %d\n" , i ,vb[i]); /* 入れ替え前の配列B */ } puts("入れ替え後"); puts("-----------"); for(i=0 , i<10 , i++){ vb[10] = va[10]; } for(i=0 , i<10 , i++){ printf("vb[%d] = %d\n" , i ,vb[i]); /* 入れ替え後の配列B */ } for(i = 0 , i < 5 , i++){ /* 配列Bの逆順を配列Aに格納 */ int temp = va[i]; va[i] = vb[4-i]; vb[4-i] = temp; } for(i=0 , i<10 , i++){ printf("va[%d] = %d\n" , i ,va[i]); /* 入れ替え後の配列A */ } return(0); } コンパイルできません。 教えてください。お願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- asuncion
- ベストアンサー率33% (2127/6289)
>for(i=0 , i<10 , i++){ >vb[10] = 2*va[10]; >} そもそも、[10]という、配列定義範囲外の領域を参照しようとしているのが間違いなのは、 別の回答者さんからのご指摘どおりです。 せっかく i というループ制御変数を使っているのに、 2倍するところにそれが出てこないことが不自然である、ということに 気づくべきでありましょう。
- jjon-com
- ベストアンサー率61% (1599/2592)
後半だけ提示すれば,前半は大丈夫でしょう。 puts("入れ替え後"); puts("-----------"); for(i=0 ; i<10 ; i++){ int temp = va[i]; va[i] = vb[i]; vb[i] = temp; } for(i=0 ; i<10 ; i++){ printf("vb[%d] = %d\n" , i ,vb[i]); /* 入れ替え後の配列B */ } for(i = 0 ; i < 5 ; i++){ /* 配列Bの逆順を配列Aに格納 */ int temp = va[i]; va[i] = va[9-i]; va[9-i] = temp; } for(i=0 ; i<10 ; i++){ printf("va[%d] = %d\n" , i ,va[i]); /* 入れ替え後の配列A */ }
- asuncion
- ベストアンサー率33% (2127/6289)
>for(i=0 , i<10 , i++){ すべてのfor文において、書き方が間違っています。 区切りはカンマで、本当に正しいですか?
お礼
ありがとうございます。助かりました!
- maiko0318
- ベストアンサー率21% (1483/6969)
コンパイルならどの行か出ているでしょ。 vb[10] = 2*va[10]; vb[10] = va[10]; 要素番号10はない。 for(i = 0 , i < 5 , i++){ /* 配列Bの逆順を配列Aに格納 */ int temp = va[i]; va[i] = vb[4-i]; vb[4-i] = temp; } コンパイルには引っかからないが、間違っている。(動かしたらわかります。)
お礼
ありがとうございます。その通りでした。2倍のところはどうするべきでしょうか?
お礼
前半2倍のところも間違っているぽいのですが、どうすればよいですかね?