• 締切済み

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); } コンパイルできません。 教えてください。お願いします。

みんなの回答

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.4

>for(i=0 , i<10 , i++){ >vb[10] = 2*va[10]; >} そもそも、[10]という、配列定義範囲外の領域を参照しようとしているのが間違いなのは、 別の回答者さんからのご指摘どおりです。 せっかく i というループ制御変数を使っているのに、 2倍するところにそれが出てこないことが不自然である、ということに 気づくべきでありましょう。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

後半だけ提示すれば,前半は大丈夫でしょう。 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 */ }

goukaku63
質問者

お礼

前半2倍のところも間違っているぽいのですが、どうすればよいですかね?

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

>for(i=0 , i<10 , i++){ すべてのfor文において、書き方が間違っています。 区切りはカンマで、本当に正しいですか?

goukaku63
質問者

お礼

ありがとうございます。助かりました!

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

コンパイルならどの行か出ているでしょ。 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; } コンパイルには引っかからないが、間違っている。(動かしたらわかります。)

goukaku63
質問者

お礼

ありがとうございます。その通りでした。2倍のところはどうするべきでしょうか?

関連するQ&A

  • c言語の質問です。回答お願いします

    下のプログラムですが、隣り合う配列の値の和を求め、さらにその中で一番大きい値を求めるプログラムです。例えば、下のプログラムの例だと配列の最初を0番目とすると3番目が一番大きく2,3,4番目の値を足して21になります。そして、2,3,4番目の中で値が9の四番目を求めたいのですが2番目の5が求めた値となります。おそらく2回目のfor分の辺りがおかしいと思うのですが・・・ よろしくお願いします。 #include<stdio.h> int main(void){ int va[10]={1,3,5,7,9,0,2,4,6,8}; int a,b,c; int max; int saidai; int i,j; max=va[0]; a=0; b=0; for(a=0;a<10;a++){ if(a==0 && max<va[a]+va[a+1]){ max=va[a]+va[a+1]; b=a; } else if(a==9 && max<va[a-1]+va[a]){ max=va[a-1]+va[a]; b=a; } else if(max<va[a-1]+va[a]+va[a+1]){ max=va[a-1]+va[a]+va[a+1]; b=a; } } saidai=va[b-1]; c=0; i=b-1; for(i=b-1;i<=b+1;i++){ if(va[i]<saidai){ c=i; saidai=va[i]; } } printf("%d番目:最大値%d\n",c+1,saidai); }

  • C言語が分からないので説明していただきたいです

    C言語が分からないので説明していただきたいです #include<stdio.h> intmain(void) { int i; int va[5]={15,20,30}; int vb[5]; for(i=0;i<5;i++) vb[i]=va[i]; printf(”va vb ¥n”); printf(”----------¥n”); for(i=0;i<5;i++) printf(”%3d%3d¥n”,va[i],vb[i]); return(0); } 実行結果 va vb -------- 15 15 20 20 30 30 0 0 0 0 です。回答お願いします!!

  • 2次元配列を使ったC言語の九九表を作りたいんですが、方法がわかりません。

    C言語で、九九の表を作っているのですが2次配列を使わないでの方法なら出来るんですが、 2次配列を使うと出来なくなってします。 下記のように途中まで組んだのですが、どうしてもエラーがでてしまいます。 #include <stdio.h> int main(void) { int i,j,a[9][9]; printf(" "); for(i=1; i<=9; i++) printf("%3d", i); printf("\n"); for(i=0; i<9; i++){ for(j=0; j<9; j++) a[i][j]= {1,2,3,4,5,6,7,8,9},{2,4,6,8,10,12,14,16,18},{3,6,9,12,15,18,21,24,27},{4,8,12,16,20,24,28,32,36},{5,10,15,20,25,30,35,40,45,6,12,18,24,30,36,42,48,54,7,14,21,28,35,42,49,56,63},{8,16,24,32,40,48,56,64,72},{9,18,27,36,45,54,63,72,81} }; for(i=0; i<9; i++){ printf("%3d", i+1); for(j=0; j<9; j++) printf("%3d",a[9][9]); printf("\n"); } return 0; } とやったのですが…以下に書く部分が間違っているようで。 #include <stdio.h> int main(void) { int i,j,a[9][9]; printf(" "); for(i=1; i<=9; i++) printf("%3d", i); printf("\n"); for(i=0; i<9; i++){ for(j=0; j<9; j++) a[i][j]=□ } for(i=0; i<9; i++){ printf("%3d", i+1); for(j=0; j<9; j++) printf("%3d", □); printf("\n"); } return 0; } 色々調べたり、少しずつ変えながら試しているのですが、できません。 どなたかわかるかたいらっしゃいますか。間違いがわかりません… 配列を使用しなくても出来ることは、わかるのですが、配列を使うバージョンでもできるようになりたいんです。 私がしようとおもっているのは、81個分の値を先に計算し、9×9の2次元配列に格納し、次に81個の配列要素の値を出力したいのですが、 間違いと方法がわかる方いらっしゃいませんか。

  • C言語初心者です。

    #include <stdio.h> int main() { int b[100]; int i, n; int a, r, data; int count=0; printf("Please input two integers:"); fflush(0); scanf("%d %d", &a, &r); if(a<=0 || r<=1){ printf("Error\n"); } else{ for(n=0; b[n]<=80.0; n++){ if(n==0){ b[0]=0; count++; } else { for(i=0; i<=n-1; i++){ data*=r; } b[n]=a*data; printf("%d ", b[n]); count++; } } printf("\n"); for(; count>0; count--){ printf("%d ", b[count]); } } return 0; } windows8でeclipseを使ってC言語を書いてます。 eclipse上だと何もエラーが表示されてないのですが、実行し、 Please input two integers: と表示された後、適当な数字2つを入力しても何も反応しません。 稚拙な質問ですいません。どなたか原因を教えてください。

  • c言語について

    #include <stdio.h> MakeData(int *a,int n){ int i,b[5]={5,1,4,7,2}; for(i=0;i<5;i++){a[i]=b[i];} } BubbleSort(int n,int *a){ ここに流れ図に沿ったプログラムを作る } main(){ int i,n,a[100]; n=5; MakeData(a,n); for(i=0;i<n;i++){printf("%4d ",a[i]);}printf("¥n"); printf("並べ替え後¥n"); BubbleSort(n,a); for(i=0;i<n;i++){printf("%4d ",a[i]);}printf("¥n"); } この課題が分かりません。 もし詳しい方がいらっしゃいましたら教えて頂けると助かります。

  • C言語の配列について

    配列を20 定義し値を入力して合計値を出したいのですがどうすればよいのでしょうか 下のソースでエラーはおこりませんでした 何がちがうのでしょうか #include <stdio.h> int main() { int a[20]={}; int i, sum; printf("整数を入力してください:"); scanf("%d",&a); printf("\n"); for (i = 0; i < 10; i++) { sum += a[i]; } printf("sum= %d\n", sum); return 0; }

  • C言語のプログラムについて。

    C言語のプログラミングについて質問です。 入力されたデータの配列とデータ数を渡すと配列に格納された値を逆順にして、格納し直す関数reverse関数を書き結果を出力せよ、というものなのですが下のように書いたのですが、うまく作動しません。どこがいけないのでしょうか...?教えていただきたいです。 #include <stdio.h> void reverse(int *data[], int n); #define MAX 100 int main() { int data[MAX]; int n, i; scanf("%d", &n); if (n >= MAX) n = MAX; for (i = 0; i < n; i ++){ scanf("%d", &data[i]); } reverse(data, n); for (i = 0; i < n; i ++) { printf("%d\n", data[i]); } return 0; } void reverse(int *data[], int n) { int c, i; for (i = 0; i < n; i ++) { c = *data[i]; *data[i] = *data[n - (i + 1)]; *data[n - (i + 1)] = c; } }

  • c言語のしつもんです。回答お願いします。

    以下のプログラムなのですが配列の中に10個の値が入っていて、例えば3番目の配列ならば2、3、4番目の値を足して最も値が大きくなる配列の番数とその値を求めています。 そして、1番目のときは1,2番目を足した値、10番目のときは9、10番目を足した値とします。 実行してみたところ、8番目で18となりました。 実際は四番目で21となると思うのですが・・・ どこがおかしいか教えてください。 #include<stdio.h> int main(void){ int va[10]={1,3,5,7,9,0,2,4,6,8}; int a,b; int max; max=va[0]; for(a=0;a<9;a++){ if(a==0 && max<va[a]+va[a+1]){ max=va[a]+va[a+1]; b=a; } else if(a==9 && max<va[a-1]+va[a]){ max=va[a-1]+va[a]; b=a; } else{ max=va[a-1]+va[a]+va[a+1]; b=a; } } printf("%d番目:最大値%d",b,max); }

  • C言語について

    C言語の問題なのですか、作成したのですが内容がわからないです。テキストを読んでも解説が書いていないので、出来ればどなたか簡単な解説でも教えて頂けるとありがたい。 〈コード〉 #include <stdio.h> int main(void) { short point[] = {234, 819, 18, -6492, 795, 20302, 2431, 9029, 0, -28009}; // 定義と逆順に値を表示する for (int i = sizeof(point) / sizeof(point[0]) - 1; i >= 0; i--) { //sizeofで配列要素数を算出 printf("%d\n", point[i]); } return 0; }

  • C言語 初心者です。

    この合格者一覧のソースについてわからない所があります。 詳しく教えてもらえないでしょうか? #include <stdio.h> #define NUMBER 5 /* 人数 */ int main(void) { int i; int snum = 0; int tensu[NUMBER]; int succs[NUMBER]; puts("点数を入力してください。"); for (i = 0; i <NUMBER ; i++){ printf("%2d番:", i + 1); scanf("%d",&tensu[i]); if (tensu[i] >= 60){ succs[snum++] = i; } } puts("合格者一覧"); puts("-----------"); for (i = 0; i < snum; i++) printf("%2d (%3d点)\n",succs[i] + 1, tensu[succs[i]]); return (0); } そのわからないところとは、 if (tensu[i] >= 60){ succs[snum++] = i; で、特に、succs[snum++] = i について教えてください。  私の考えでは、一回目は、 succs[1] = 0 になるのですが・・・?? それでは、おかしい気がするのです。 この i は どれに代入するのですか?? 全くわかりません。 どうか、回答よろしくお願いします。

専門家に質問してみよう