• 締切済み

プログラミング

C++で、五個の配列を確保し、それらを関数を使って逆順にしたいのですが、別の配列にコピーして逆順にしたいです。下記のプログラムを作ったのですが、どこがいけないのでしょうか? #include "stdafx.h" #include <stdio.h> void reverse (int z[],int w[]); int main(void) { int p[5]={1,2,3,4,5},u[5]; reverse(p,u); printf("逆順=%d\n",p); return 0; } void reverse(int z[],int w[]) { int i; for(i=0;i<=5;i++){ w[i]=z[i-1]; } }

みんなの回答

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

C++ で書くなら std::reverse_copy() を使うだけでよいでしょう。 std::reverse_copy(a, a+5, u);

  • aigaion
  • ベストアンサー率47% (287/608)
回答No.1

下のfor文が問題ですね. forの中ですが,i<=5となっています. p[5]とした場合,p[0],p[1],p[2],p[3],p[4]の5つが生成され,p[5]は存在しません. w[i] = z[i - 1] では,配列を一個ずらしているだけです. w[0] = z[4] w[1] = z[3] ... w[4] = [0] となるように,iの値を変化させるように工夫しましょう. あと,配列の表示ですが printf("逆順=%d\n",p); では無理です. printf("逆順=%d\n",p[0]); のように,配列の要素をprintf関数に与えて1つずつ表示しましょう.

関連するQ&A

  • プログラミング 関数

    逆順する関数reverseを作成したいんです。 以下のは関数reverseを利用したmainのプログラムです。 #include <stdio.h> void reverse(char str1[],char str2[]); int main (void) { char strin[255]="abcdefg"; char strout[255]; reverse(strin, strout); printf(" input=%s\n",strin); printf("output=%s\n",strout); return 0; } 教えてください。

  • プログラミングについて

    以下のプログラムをコンパイル、実行しようとするとコアダンプと表示されてしまいます。 おそらく配列がうまくいっていないというのは察したのですが、どううまくいっていないのかがわかりません。 原因を教えていただきたいです。 このプログラムは、Nを入力し、0~100までの乱数をN個表示させるものです。 配列を使っているのは、このプログラムが完成したのち、改良してその乱数同士を計算するプログラムにしたいためで、その途中段階でした。 環境は、Cygwinです。 ―――以下ソースコード――― #include <stdio.h> #include <math.h> #include <stdlib.h> int main(void){ int i,N; double u[N]; int ransu; printf("Define N : \n"); //得たい乱数の数を設定 scanf("%d",&N); for(i = 0; i < N; i++) { ransu = rand() % 101 ; //0~100までの乱数を得る u[i] = (double) ransu; printf("%.0f ", u[i]); } printf(" \n"); return 0; } 教えていただける方、いらっしゃいましたら教えていただきたいです。よろしくお願いします。

  • C言語 逆順の配列の仕方を教えてください

    今、大学でC言語の課題をやっています。サンプルが与えられています。 その課題は、配列の逆順です。 for文を使って、実行結果は以下のようにならなければならなく、「並び替えの結果は再び num1, num2 に保存される」という条件なのですが、逆順になるにはどのようなプログラムを組めば良いのでしょうか? ソースの「 /* ここに処理を書く */」にプログラムを書かなければいけないのですが、まったくの初心者でわかりません。誠にお手数ですが、教えていただければ幸いです。宜しくお願いいたします。 -----実行結果----- C:\c_lang>reverse --- before --- 2 4 9 10 5 3 1 7 8 6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 --- after --- 6 8 7 1 3 5 10 9 4 2 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 -----以下ソース----- #include <stdio.h> void print_num( int *num, int len ); void reverse_num( int *num, int len ); int main( void ) { int num1[10]={2,4,9,10,5,3,1,7,8,6}; int num2[15]={1,2,3,4,5,6,7,8,9,10, 11,12,13,14,15}; printf("--- before ---\n"); print_num( num1, 10 ); print_num( num2, 15 ); /* 逆順に並べ替え */ reverse_num( num1, 10 ); reverse_num( num2, 15 ); printf("--- after ---\n"); print_num( num1, 10 ); print_num( num2, 15 ); return 0; } void print_num( int *num, int len ) { int i; for( i=0; i<len; i++ ){ printf( "%d ", num[i] ); } printf("\n"); } void reverse_num( int *num, int len ) { /* ここに処理を書く */ } -----ソースここまで-----

  • C言語プログラミングについて

    #include <stdio.h> int main(void) { printf("hello,world\n"); } □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ #include <stdio.h> int main(void) { printf("hello"); printf(",world"); printf("\n"); } 上の2つのプログラムをコンパイルするとどのような違いが生じるんですか??printfってどんな働きをするんですか?

  • c言語の文字列の逆順のプログラムがわかりません

    文字列を逆順して出力するプログラミングがわかりません。 #include <stdio.h> #include <string.h> void reverse(char *moji, char *gyaku); int main(void) { char x[30]; char y[30]; puts("文字を入力してください。\n"); scanf("%s", x); reverse(x, y); printf("逆順すると%sです。\n", y); return (0); } void reverse(char *moji, char *gyaku) { int i, len; len = strlen(moji); gyaku = moji + len - 1; for(i = 0; i < len; i ++){ putchar((int)*gyaku); gyaku--; } } 理想とする実行結果は 文字を入力してください。 abcdefg 逆順するとgfedcbaです。 なんですが、 上記のソースを実行すると 文字を入力してください。 abcdefg gfedcba逆順すると(謎の漢字)です。 となります。 どこがおかしいんでしょうか? よろしくおねがいします。

  • プログラミング 配列 合計

    配列の要素に値を読み込んで表示させるプログラムは 1#include <stdio.h> 2 3int main(void) 4{ 5 6 int i; 7 int vc[5]; 8 9 for (i = 0; i < 5; i++) 10 vc[i] =i + 1; 11 12 for(i = 0; i < 5; i++) 13 printf("vc[%d] = %d\n", i, vc[i]); 14 15 return (0); }でこれを書きなおして配列の値を合計するプログラムはどういうプログラムになるか教えていただけませんか?

  • 引数で指定された配列の要素数の取得

    どうもこんにちは。 C言語でプログラムを作成しています。 ある関数に配列を渡すことを考えていますが、渡した配列の要素数を取得する方法は何かありますか? 標準の関数を見ても、配列の先頭アドレスのポインタとともに、配列の要素数を渡しているものばかりで、配列のポインタを渡しているものは見かけません。 要素数があらかじめわかっていれば、それを引数の型に指定できますが、呼び出されるまで不明な場合はうまくいきません。 配列の要素数も引数として一緒に渡す必要がありますか? [作ってみたサンプル] #include <stdio.h> #include <stdlib.h> #include <string.h> // func1 と func2 をまとめられないだろうか。。。 void func1(int (*p)[10]) { ________int n = sizeof(*p) / sizeof((*p)[0]); ________int i; ________for (i = 0; i < n; i++) { ________________printf("%d\n", (*p)[i]); ________} ________printf("\n"); } void func2(int (*p)[5]) { ________int n = sizeof(*p) / sizeof((*p)[0]); ________int i; ________for (i = 0; i < n; i++) { ________________printf("%d\n", (*p)[i]); ________} ________printf("\n"); } int main(int argc, char *argv[]) { ________int ary1[10] = { 2, 4, 6, 8, 0, 1, 3, 5, 7, 9 }; ________int ary2[5] = { 3, 6, 9, 12, 15 }; ________func1(&ary1); ________func2(&ary2); ________return 0; }

  • プログラミング C++

    プログラミングのC言語で入力文字を関数を使ってポインタを使わずに逆順にするプログラムを作りたいのですが、ポインタを使ってならできるのですが、ポインタを使わずにはどのように考えればいいでしょうか?。 #include <string.h> void reverse (char *ss); int main(void) { char ss[14]; gets(ss); reverse(ss); printf("逆順=%s\n",ss); return 0; } void reverse(char *ss) { int a,b,c; b=0; c=strlen(ss)-1; while(b<c){ a=*(ss+b); *(ss+b)=*(ss+c); *(ss+c)=a; b++; c--; } }

  • プログラミングのソース

    次のソースについてです。 #include<stdio.h> int main(void) { int i; int A[5][2]; A[0][0] = 20; A[0][1] = 120; A[1][0] = 21; A[1][1] = 121; A[2][0] = 22; A[2][1] = 122: A[3][0] = 23; A[3][1] = 123; A[4][0] = 24; A[4][1] = 124; for(i = 0; i<=4; i++) { printf("A[%d]さん\n", i); printf("体重:%dで身長:%d\n", A[i][0], A[i][1]); } return 0; } この2次元配列で[ ]内の0とか1とか2とかはどういう組み合わせというか、 順番なのですか? 説明お願いします(_ _)

  • ポインタ配列

    配列をポインタでとって、配列要素を足していこうと思ったのですが、 #include <stdio.h> int main (void) { int p[11]={11,23,43,66,54,67,51,88,22,43,-1}; int *e=p; int x=0; int i=0; while( *e!=-1 ) { x + = ( * (e+i) ); i++; } printf("%d\n",x); return 0; } x = ( * ( e+i ) ); ↑この部分がなぜだめなのか理解できません どなたか教えてくださるとありがたいです

専門家に質問してみよう