- 締切済み
C言語 関数の作り方
1~30の数字を使い、直角三角形が成り立つ組み合わせを見つけよ。(a<=b<=c) ただし、a,b,c辺を見つけて配列に入れる機能は関数にすること。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー #include <stdio.h> int main(void) { int a,b,c,i=0,ct=0; int ahen[20]; int bhen[20]; int chen[20]; for(a=1;a<31;a++) { for(b=1;b<31;b++) { for(c=1;c<31;c++) { if(a*a+b*b==c*c && a<=b && b<=c) { ahen[i]=a; bhen[i]=b; chen[i]=c; i=i+1; ct++; } } } } for(i=0;i<ct;i++) { printf("%d %d %d\n",ahen[i],bhen[i],chen[i]); } return 0; } 実行例: 3 4 5 5 12 13 6 8 10 7 24 25 8 15 17 9 12 15 10 24 26 12 16 20 15 20 25 18 24 30 20 21 29 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー とりあえず、関数を使わない上記のプログラムを作って見ました。 ここから関数を使ったものに変更したいのですが、配列が絡むとさっぱり分かりません。 printfで表示する箇所以外を全て関数にするのだと思いますが、どなたかご教示願います。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yama5140
- ベストアンサー率54% (136/250)
>printfで表示する箇所以外を全て関数にするのだと思いますが、・ main 関数と同じスタイルで作ってみました。 (3辺用の配列を1つにまとめています) 一旦このままでコンパイルしてみて下さい。 ウォーニングが出たかと思います。 コンパイラが、どこの馬の骨とも判らない Sankakukei90 関数にビックリしたんです。 コンパイラがビックリしないためには、 ・Sankakukei90 関数の「定義」を main 関数の前に持ってくる。 ・Sankakukei90 関数の「宣言」を main 関数の前で行う。 このいずれかにします。 なお、宣言の場合、宣言は文なので最後にセミコロン ; が必要となります。 このあたり、「プロトタイプ宣言」で検索してみて下さい。 #include <stdio.h> int main( void ) { int i, iCnt, iSampen[ 30 ][ 3 ]; iCnt = Sankakukei90( iSampen ); for( i = 0; i < iCnt; i++ ){ printf( "%2d %2d %2d\n", iSampen[ i ][ 0 ], iSampen[ i ][ 1 ], iSampen[ i ][ 2 ] ); } return( 0 ); } int Sankakukei90( int iSampen[ 30 ][ 3 ] ) // '30' のみ省略可 { int a, b, c, ct = 0; for( a = 1; a < 31; a++ ){ for( b = a; b < 31; b++ ){ // a <= b for( c = b; c < 31; c++ ){ // b <= c if( ( a * a + b * b ) != ( c * c ) ) continue; iSampen[ ct ][ 0 ] = a; iSampen[ ct ][ 1 ] = b; iSampen[ ct ][ 2 ] = c; ct++; } } } return( ct ); } 注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
- oktuburero
- ベストアンサー率22% (102/446)
引数、戻り値は理解しているのか?