• ベストアンサー

C言語の質問です!

#include "stdafx.h" #include <iostream> #include <string> #include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <conio.h> using namespace std; double arrayMin(double array[][], int n){ double Min=9999999999999999999999.999999; for(int N=0;N<n;N++){ if(array[N][0]!=NULL&&array[N][0]<Min){ Min=array[N][0]; } } return Min; } double arrayMax(double array[][], int n){ double Max=-9999999999999999999999.999999; for(int N=0;N<n;N++){ if(array[N][0]!=NULL&&array[N][0]<Max){ Max=array[N][0]; } } return Max; } int main(){ double data[3][10] = {{2.0, 1.0, 5.0, 3.0, 2.0, 21.0, 4.0, 5.0, 4.0, 28.0}, {1.0, 1.0, 5.0, 3.0, 2.0, 21.0, 4.0, 5.0, 4.0, 28.0}, {3.0, 1.0, 5.0, 3.0, 2.0, 21.0, 4.0, 5.0, 4.0, 28.0}}; double min, max; min=arrayMin(data, 3); max=arrayMax(data, 3); printf("min = %lf, max = %lf\n", min, max); return 0; } 二次元配列の1行目の配列の最大値と最小値を求めることを考え,上のようなプログラムを書いたのですが, 1>.\maxmin.cpp(12) : error C2087: 'array' : 添字がありません。 1>.\maxmin.cpp(21) : error C2087: 'array' : 添字がありません。 1>.\maxmin.cpp(34) : error C2059: 構文エラー : ']' 1>.\maxmin.cpp(35) : error C2664: 'arrayMax' : 1 番目の引数を 'double [3][10]' から 'double [][1]' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 というようなエラーが出てしまいます. 途中のarray[N][0]!=NULLは二次元配列dataが3行より少ない場合に対応させています. どなたかアドバイスをいただけますでしょうか? よろしくお願いいたします!

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

 タイトルは、内容がわかるように。 C か、C++ かはっきりすること。 C ならこんな感じ。 #include <stdio.h> double arrayMin(double array[][10], int n) { double Min = array[0][0]; int N; for(N = 1; N < n; N ++){ if(array[N][0] < Min){ Min = array[N][0]; } } return Min; } double arrayMax(double array[][10], int n) { double Max = array[0][0]; int N; for(N = 1; N < n; N ++){ if(array[N][0] > Max){ Max = array[N][0]; } } return Max; } int main(void) { double data[3][10] = {{2.0, 1.0, 5.0, 3.0, 2.0, 21.0, 4.0, 5.0, 4.0, 28.0}, {1.0, 1.0, 5.0, 3.0, 2.0, 21.0, 4.0, 5.0, 4.0, 28.0}, {3.0, 1.0, 5.0, 3.0, 2.0, 21.0, 4.0, 5.0, 4.0, 28.0}}; double min, max; min = arrayMin(data, 3); max = arrayMax(data, 3); printf("min = %lf, max = %lf\n", min, max); return 0; }

macky1985
質問者

お礼

ご回答どうもありがとうございます! double arrayMin(double array[][], int n){ を double arrayMin(double array[][10], int n) にして if(array[N][0]!=NULL&&array[N][0]<Max){ の不等号を直したらうまく動かせました,ありがとうございます(><)

その他の回答 (3)

  • pyonmae
  • ベストアンサー率64% (40/62)
回答No.3

このプログラムは、二次元配列の動きをテストするために試験的に作ったものでしょうか。 関数への引数に二次元以上の配列を渡す場合、関数としてはその配列の大きさがわからないので、それで怒っているのです。 例えば、9列5行の以下のような二次元配列を考えてみます。  int array[5][c]; /* 型はなんでもよい。cは定数 */   0123456………c  0□□□□□□□□□  1□□□□□□□□□  2□□□■□□□□□  3□□□□□□□□□  4□□□□□□□□□ この場合、■(array[2][3])の部分のアドレスを算出するには、  2×c+3 という計算が行われ、これにcの値が必要になります。 話を戻しまして、関数に配列のポインタを渡す時、配列先頭(上の場合はarray[0][0])のアドレスだけが渡り、配列の大きさは関数には知らされません。(質問者様もarray[N][0]!=NULLでチェックを行っているくらいですから、既にご存知かも知れませんが) ですので、配列の計算が不能となり、ご質問のエラーメッセージにつながるわけです。 これを解決するには、関数の宣言時に   double arrayMin(double array[3][10], int n) などと配列の大きさを指定してやるとか、配列の大きさを引数で渡して関数内で自分で再計算するとかいった方法が考えられます。(どちらもあまりスマートではありませんが) 蛇足ですが、array[N][0]でのチェックについてですが、これは  double data[1][10] = {・・・ などと宣言されたりした時の対策でしょうか。 だとすると、配列の領域外へのアクセスは危険ですし、そもそもそこがNULLである保障もありませんので、別の方法を検討される事をお勧めいたします。 そうでなく、配列の大きさは変わらず、中のデータが書き換わるというのであれば、問題ありません。(私なら'NULL'は使いませんが)

macky1985
質問者

お礼

ご回答どうもありがとうございます! 配列とポインタの内容の理解が不十分でした,しっかり理解するようにしたいです,ありがとうございました(><)

回答No.2

C言語にusing namespace なんて必要ないかと思いますが^^; 最小限のIncludeでいいんじゃないでしょうかね。 あと >二次元配列の1行目の配列の最大値と最小値を求める これは、二次元配列の1列目最大値最小値をもとめるということでいいのかな??(プログラム見る限りそんな感じですが…) 最小値・最大値を求める関数を呼び出している部分ですが、 必要な数値のみを配列に取り出して、渡してあげたらいいんじゃないでしょうか? 3x10の二次元配列をそのまま渡しても、データの無駄に思えます。 {2.0, 1.0, 5.0, 3.0, 2.0, 21.0, 4.0, 5.0, 4.0, 28.0} {1.0, 1.0, 5.0, 3.0, 2.0, 21.0, 4.0, 5.0, 4.0, 28.0} {3.0, 1.0, 5.0, 3.0, 2.0, 21.0, 4.0, 5.0, 4.0, 28.0} 上記の二次元配列だと、最大値と最小値を判断するのは、 2.0、1.0、3.0 の3つだけですよね?? それなら、この3つを配列に格納して、その配列を関数に渡せばいいようにしたらだめなの?

macky1985
質問者

お礼

ご回答どうもありがとうございます! 二次元配列は600*50程度の大きさの値を読み込んで処理することを考えています! 二次元配列の1列目最大値最小値をもとめる流れです,なんとかうまく動かせました,ありがとうございます(><)

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

arrayって名前が拙いんじゃないの? 大きなお世話かもしれませんが、行と列が間違って ますよ。Fortranの世界みたい。

macky1985
質問者

お礼

二次元配列の1行目の配列の最大値と最小値を求めることを考え,上のようなプログラムを書いたのですが, という部分の1行目は1列目ですね! ご指摘ありがとうございます!

関連するQ&A

  • C言語のプログラムでおかしな動作をするのですが教えて頂けないでしょうか?

    VisualStudio2008使用しています。 問題は、サイコロを200回振ってその出た目の数の個数分*を表示するプログラムです。 サイコロの目はランダムで出しています。 次のプログラムは正常に動作するものです。 /* #include <stdio.h> #include<stdlib.h> #include<time.h> #define N 200 int DICE(int min,int max); int main() { int n,i,j; int y[7]={0}; srand((unsigned int)time(NULL)); for(i=0;i<N;i++){ n=DICE(1,6); y[n]++; } for(i=1;i<7;i++){ printf(" %2d: ",i); for(j=0;j<y[i];j++){ printf("*"); } printf("\n"); } return 0; } int DICE(int min,int max) { return min+(int)(rand()*(max-min+1.0)/(1.0+RAND_MAX)); } */ 次のプログラムが問題で、授業で先生が配列にはstaticをおまじないとしてつけないと暴走すると言われたので、つけて見ると明らかに間違ってると思われるプログラムで動作するのですが原因を教えて頂けないでしょうか? 以下問題のプログラム! 配列の前にstaticをつけたら、添え字をいくつにしても正常に動作します。普通は添え自分しか領域って確保されないですよね??? /* #include <stdio.h> #include<stdlib.h> #include<time.h> #define N 200 int DICE(int min,int max); int main() { int n,i,j; //以下が問題の配列宣言 static int y[2]={0}; srand((unsigned int)time(NULL)); for(i=0;i<N;i++){ n=DICE(1,6); y[n]++; } for(i=1;i<7;i++){ printf(" %2d: ",i); for(j=0;j<y[i];j++){ printf("*"); } printf("\n"); } return 0; } int DICE(int min,int max) { return min+(int)(rand()*(max-min+1.0)/(1.0+RAND_MAX)); } 質問の意味が正確に伝わらなかった場合は補足しますので、ご回答よろしくお願いします。

  • C言語から質問です。

    C言語から質問です。 /* main関数の中で初期化した配列 data[10]={60,30,70,25,20,9,92,55,20,10}; を関数 keisan() に引数として渡して、関数keisan()内で 平均値、最大値,最小値 を求め、その結果をmain関数に戻し、main関数内で 平均値、最大値,最小値を表示させるプログラムを作成せよ。 int keisan(const int data[], int data_kosuu, double answer[]) { return 0; } とする。 (注) プロトタイプ宣言を用いよ。 ヒント:平均値,最大値,最小値の3つの値を main関数に戻すやり方として、配列answer[]を使うとよい。 data_kosuu は、配列の要素数を与えるものです。 ヒント: (int型の変数)/(int型の変数)=int型の値です。 int型同士の割り算の答えANSWERをdoubleにしたい場合は、  ANSWER=(double)(int型の変数)/(int型の変数);    と(double) キャストという操作をする必要がある */ #include <stdio.h> int keisan(const int data[], int data_kosuu, double answer[]); int main(void) { int i; int a[10]={60,30,70,25,20,9,92,55,20,10}; // この値を使ってください double ans[3]; keisan(a,10); /* keisan関数に配列と配列要素数を引数で与える */ for(i=0; i<10 ; i++) printf("a[%d]=%d\n",i,a[i]); printf("平均=%lf 最小値=%d 最大値=%d\n",ans[0],ans[1],ans[2]); return 0; } /* 合計・最大値・最小値を求める関数 */ int keisan(const int data[], int data_kosuu, double answer[]) { int i; int sum; int min,max; min=10; /* min の初期化 */ max=10; /* max の初期化 */ sum=0; /* 合計値の初期化 */ for (i=0; i<10 ; i++){ sum = sum+data[i]; if(data[i] > max) max=data[i]; if(data[i] < min) min=data[i]; } sum=sum/10; answer[0]=sum; answer[1]=min; answer[2]=max; } エラー error C2198: 'keisan' : 呼び出しに対する引数が少なすぎます。 とでて先に進めません。 教科書などを見ても間違いがわかりません; 虫食いになってるところを自分なりにやってみたため、 根本的に間違ってるかもしれませんが、 どうかアドバイスや指摘などをお願いします。

  • 下記のc言語のプログラム(LU分解を用いた連立一次方程式)を起動させた

    下記のc言語のプログラム(LU分解を用いた連立一次方程式)を起動させたいのですがエラーがでてしまいます。 どのようにしたら動作しますか? #include <stdio.h> #include <stdlib.h> #include <float.h> #define MAX_DIM 10 #define MIN_DIM 1 int get_dimension(int, int); double *get_matrix( int ); double *get_vector( int ); void set_matrix( int, double* ); void set_vector( int, double* ); void LU( int, double*, double*, double* ); void L_equ( int, double*, double*, double* ); void U_equ( int, double*, double*, double* ); void pr_vector( int, double* ); void matrixcpy( int, double*, double* ); void make_I( int, double* ); void main( void ) { int n , i ; double *A, *b ; double *L, *U ; double *c, *x ; n = get_dimension( MAX_DIM, MIN_DIM ); if( ( A = get_matrix( n ) ) == (double *) NULL || ( L = get_matrix( n ) ) == (double *) NULL || ( U = get_matrix( n ) ) == (double *) NULL || ( b = get_vector( n ) ) == (double *) NULL || ( c = get_vector( n ) ) == (double *) NULL || ( x = get_vector( n ) ) == (double *) NULL ) { fprintf( stderr, "メモリ所得エラーです!!\n" ); } else { set_matrix( n, A ); set_vector( n, b ); LU( n, A, L, U ); L_equ( n, L, c, b ); U_equ( n, U, x, c ); printf( "解は、" ) ; pr_vector( n, x ) ; } }

  • C言語 最大値と最小値を求めて表示するプログラム

    はじめまして。 C言語を学習中です。 下記の問題演習の解答として記載されているプログラムがどうしても理解できません。 特にプログラムの最後の方のwhile文で最大値と最小値の判定をしているのかと思いますが、どのような計算をして判定しているのでしょうか。 while (array[i] != -1) { if (array[i] > *max) *max = array[i]; if (array[i] < *min) *min = array[i]; i++; 具体的に教えてください。 よろしくお願い致します。 ●問題 0~100の範囲で入力された複数の数値の中から、 最大値と最小値を求めて表示するプログラムを作成せよ。 -1が入力された場合は入力の終わりと判定する。 ただし、最大値と最小値はmain関数以外の一つの関数の中で求める。 また、入力された数値を記憶する配列の要素数は10とし、 それ以上入力された場合はエラーが起きても仕方ないこととする。 ヒント:配列の中に -1 があればデータの終わりだと判断できる。 ヒント:最小値を探すには、最大値を記憶した変数との比較を繰り返せば良い。 ●解答 #include <stdio.h> void maxmin(int array[],int *max,int *min); int main(void) { int i = 0,array[10],max,min; do { printf("%d 番目の数:",i + 1); scanf("%d",&array[i]); i++; } while (array[i - 1] != -1); maxmin(array,&max,&min); printf("最大値 %d : 最小値 %d\n",max,min); return 0; } void maxmin(int array[],int *max,int *min) { int i = 0; *max = 0; *min = 100; while (array[i] != -1) { if (array[i] > *max) *max = array[i]; if (array[i] < *min) *min = array[i]; i++; } }

  • C言語 strtok

    失礼します。現在こちらでアドバイスを頂きfgetcを使用して配列に格納をすることができたのですが、CSVをカンマ区切りで格納したいのですが上手くいかず困っています。strtokを使用方法をドキュメントを読んでもうまく区切ったものを配列に入れる方法がわかりません 何卒よろしくお願いします。 ソースコード #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include<string.h> #define MAXITEM 1400 int split(char *str, const char *delim, char *outlist[]) { char *tk; int cnt = 0; tk = strtok(str, delim); while (tk != NULL && cnt < MAXITEM) { outlist[cnt++] = tk; tk = strtok(NULL, delim); } return cnt; } int main(void) { FILE *fp; char *fname = "testfile.csv"; char *tp; char *array[1400]; char *test[11][1400]; char c; int i = 0; int n,y; char *tp[1400]; fp = fopen(fname, "r"); if (fp == NULL) { printf("%sファイルが開けません¥n", fname); return -1; } while ((c = fgetc(fp)) != EOF) { array[i] = (char)c; i++; } tp = strtok(array, ","); puts(*tp); while (tp != NULL) { tp = strtok(NULL, ","); if (tp != NULL)puts(tp); } for (n = 0; n < 11; n++) { for (y = 0; y < 1400; y++) { test[n][y] = tp[y]; printf("%c", test[n][y]); } } fclose(fp); 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; } }

  • Visial C++おけるπの使い方

    自宅でCプログラミングの練習をするためVisial C++ 2008を使って プログラムをしています。y<sin(πx)となった時の 割合などを計算するプログラムで                「M_PIが定義されていない識別子です」 とでてきます。所持している本を参考にしてもM_PI=πとして用いる と書いてあり、math.hもインクルードしてるので原因が分からなくて 困ってます。Visial c++ではπの使い方には何か別の使い方がある のでしょうか?よろしくお願いします。 *↓が実際に作ったプログラムです。 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> int main(void){ int i,n,count=0; double x,y,r,error; srand((unsigned)time(NULL)); /*乱数の初期化*/ printf("How many trials?"); scanf("&d",&n); for(i=0;i<n;i++){ x=rand()/(RAND_MAX+1.0); y=rand()/(RAND_MAX+1.0); if(y<sin(M_PI*x)){ count++; } } r=(double)count/n; /*キャスト演算子を使用*/ error=2/M_PI-r; printf("Result is %f (Error: %f)\n",r,error); return 0; }

  • C言語 配列からランダムに素数を取り出す

    初心者です 素数を生成するプログラムをネットから拾いました 順番に配列に格納されています しかし、そこからランダムな素数の配列を作りたいんです 乱数を使用すると思うんですが、 調べてみても乱数を生成するものだけで した 皆さん、よろしくお願いします #include <stdio.h> #include <stdlib.h> #include <limits.h> int isprime( unsigned long long n ); int main( int ac, char *av[] ) { unsigned long long n, n2, min_n, max_n, i; /* コマンドラインから素数探索範囲を決定する */ if( ac < 3 ) return; min_n = strtouq( av[1], NULL, 10 ); max_n = strtouq( av[2], NULL, 10 ); /* 探索範囲の数を調べる */ for( n = min_n; n <= max_n; n++ ) { /* 2n + 1 を求める */ n2 = 2 * n + 1; /* 素数かどうか調べる */ if( isprime( n2 ) ) printf( "%qu \n",n2); } } int isprime( unsigned long long n ) { unsigned long long i, n2, pn2; /* 1は素数ではない */ if( n == 1 ) return( 0 ); /* 2以外で2で割り切れたら合成数 */ if( n != 2 && n % 2 == 0 ) return( 0 ); /* sqrt(n)以上の出来るだけ小さい値を求める */ pn2 = n2 = n; while( n2 * n2 > n || n2 * n2 < n2 ) { pn2 = n2; n2 /= 2; } if( pn2 >= n ) n2 = n - 1; else n2 = pn2; /* n2以下の奇数での剰余が0かどうか調べる */ for( i = 3; i <= n2; i += 2 ) { if( n % i == 0 ) return( 0 ); } /* 素数 */ return( 1 ); } 結果 3 5 7 11 13 17 19

  • C言語について質問です。

    前に質問した訂正です。前の質問に関しては質問の意図が伝わりにくい文章で本当に申し訳ないと思っています。 乱数列の要素数Nの値を変えていきバブルソートの交換回数、比較回数を数えるプログラムを作り、後は処理時間について調べたいのですが、処理時間を出力させることはできたんですが、単位がわかりません。教えてください。 以下に乱数を生成するrand.cとバブルソートを行うbubblesort.cを記載します。 rand.c #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000 int num[N]; int makeDataFile ( void ) { int i; FILE *fp; char s[100]; int num[N]; srand ( ( unsigned )time ( NULL ) ); fp = fopen ("rand1.txt", "w" ); if ( fp == NULL ) exit(1); for ( i = 0; i < N; i++ ){ fprintf ( fp, "%d\n", rand()%100 ); } fclose ( fp ); fp = fopen ( "rand1.txt", "r" ); if ( fp == NULL ) exit(1); while( fgets ( s, sizeof (s), fp ) ) { printf ( s ); } fclose ( fp ); return N; } bubblesort.c #include <stdio.h> #include <time.h> extern int makeDataFile ( void ); extern int num[]; void BubbleSort ( int x[] , int n ); void Show ( int x[] , int n ); int comp; int swap; void BubbleSort ( int x[] , int n ) { int i, j, tmp; for ( i = 0; i < n-1; i++ ) { for ( j = n-1; j > i; j-- ){ comp++; if ( x[i] > x[j] ){ swap++; tmp = x[j]; x[j] = x[i]; x[i]= tmp; Show ( x , n ); } } } } void Show ( int x[] , int n ) { while ( n-- ) printf ( "%d " , *x++ ); printf ( "\n" ); } int main(void) { int i, j, n , tmp; FILE *fp; comp = 0; swap = 0; n = makeDataFile(); clock_t start , finish; double duration; start = clock(); fp = fopen ( "rand1.txt", "r" ); if ( fp == NULL ) return 1; for ( i = 0; i < n; i++ ){ fscanf ( fp, "%d", &(num[i] ) ); } fclose ( fp ); printf ( "\nbefore bubblesort\n" ); Show ( num , n ); printf ( "\n" ); printf ( "progress bubblesort\n" ); BubbleSort ( num , n ); printf ( "\n" ); printf ( "after bubblesort\n" ); Show ( num , n ); printf ( "\n" ); finish = clock(); duration = (double)(finish-start) / CLOCKS_PER_SEC; printf ( "count of comparisons : %d\n" , comp ); printf ( "count of swap : %d\n" , swap ); printf ( "%lf\n" , duration ); return 0; } 実行結果: >gcc rand.c bubblesort.c (ソートは省略) count of comparisons : 499500 count of swap : 14848 2.950000 と出力されたのですが読み方?単位が分かりません。教えてください。自分の答えとしては2分55秒だと思うんですが合ってますか?連続質問ですいません。

  • C言語について質問です。

    ソートについて勉強していて、乱数列の要素数Nの値を変えていきバブルソートの交換回数、比較回数を数えるプログラムを作り、後は処理時間について調べたいのですが、処理時間を出力するのはどうやってやるのですか?教えてください。以下に乱数を生成するrand.cとバブルソートを行うbubblesort.cを記載します。これに処理時間を出力するようにしてもらいたいのですが、どうしたらいいですか?解説とソースファイルをよろしくお願いします。 rand.c #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000 int num[N]; int makeDataFile ( void ) { int i; FILE *fp; char s[100]; int num[N]; srand ( ( unsigned )time ( NULL ) ); fp = fopen ("rand1.txt", "w" ); if ( fp == NULL ) exit(1); for ( i = 0; i < N; i++ ){ fprintf ( fp, "%d\n", rand()%100 ); } fclose ( fp ); fp = fopen ( "rand1.txt", "r" ); if ( fp == NULL ) exit(1); while( fgets ( s, sizeof (s), fp ) ) { printf ( s ); } fclose ( fp ); return N; } bubblesort.c #include <stdio.h> #include <time.h> extern int makeDataFile ( void ); extern int num[]; void BubbleSort ( int x[] , int n ); void Show ( int x[] , int n ); int comp; int swap; void BubbleSort ( int x[] , int n ) { int i, j, tmp; for ( i = 0; i < n-1; i++ ) { for ( j = n-1; j > i; j-- ){ comp++; if ( x[i] > x[j] ){ swap++; tmp = x[j]; x[j] = x[i]; x[i]= tmp; Show ( x , n ); } } } } void Show ( int x[] , int n ) { while ( n-- ) printf ( "%d " , *x++ ); printf ( "\n" ); } int main(void) { int i, j, n , tmp; FILE *fp; comp = 0; swap = 0; n = makeDataFile(); fp = fopen ( "rand1.txt", "r" ); if ( fp == NULL ) return 1; for ( i = 0; i < n; i++ ){ fscanf ( fp, "%d", &(num[i] ) ); } fclose ( fp ); printf ( "\nbefore bubblesort\n" ); Show ( num , n ); printf ( "\n" ); printf ( "progress bubblesort\n" ); BubbleSort ( num , n ); printf ( "\n" ); printf ( "after bubblesort\n" ); Show ( num , n ); printf ( "\n" ); printf ( "count of comparisons : %d\n" , comp ); printf ( "count of swap : %d\n" , swap ); return 0; }

専門家に質問してみよう