みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

投稿日時 - 2011-01-16 17:39:27

QNo.6452262

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

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

投稿日時 - 2011-01-17 11:36:44

ANo.1

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

投稿日時 - 2011-01-16 19:02:02

あなたにオススメの質問