• 締切済み

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で表示する箇所以外を全て関数にするのだと思いますが、どなたかご教示願います。

みんなの回答

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.2

>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 ); } 注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。

回答No.1

引数、戻り値は理解しているのか?

関連するQ&A

専門家に質問してみよう