問1
省略、各自調べよ。
問2
授業でつくったソートを、main内で使われている形に直し、入れるだけ。
main内でsort関数は「sort(a,n,-1);」「sort(a,n,1);」と使われており
sort(ポインタ,データ数,謎の自然数) であることが分かる。
(すなわち sort(int *a,int n,int y) のように関数を宣言する)
少し見ると「謎の自然数」が-1 のときデータは小さい順で
1 のとき大きい順になっているから、そこを調節してやればよい。
つまりifをつかって自然数が-1 なら小さい順、そうでなければ大きい順にすればよい。
授業でつくったソートが大きい順にしろ、小さい順にしろ、
ソート内の不等号の向きを1ヶ所変えれば行けるはずである。
解答例(バブルソート仕様)
解答例(セレクションソート仕様)
問3
問題文を見る限り、whileのループ内で入力された3数が辺になりうるか(0以下でないか)、と
その3数は三角形を構成できるか(三角不等式を満たすか)、がポイントである。
前者は3数のうちどれか1つでも0未満であれば繰り返させればいいので
「a<=0 || b<=0 || c<=0」である、これがwhileの条件である。
後者に関しては、「必要な関数を付け加え」る必要がある。
mainを見るとifの中に「check(a,b,c)」があるので、
これで「2辺の和は他の一辺よりも長い」ことを調べているのではないかと予想できる。
check関数が1であればheron関数で面積を求めさせるので、
三角不等式を満たせば戻り値は整数で1、満たさなければ他の値を戻すようにすればよい。
解答例
問4
ポイントはfscanfが使用できるかと、最大値、最小値を求めるには比較するデータが必要だということ。
fscanfに関しては授業で扱うため各自調べよ。
最大値、最小値は、まず1つ目のデータだけ比較する基準作りとして少し特別にしなければならない。
例としては解答例1のようにループの外で読み取らせる方法。
もう1つとして解答例2の、ループの中で「1つ目のデータならば~」のように読み取らせる方法。
他にもあるはずなので各自考えてみよ。
date.txtの始めのデータは「データ数を表すデータ」なので、最大値などには関係ない。
なので適当に読み取らせて平均値の計算に使えばいいだろう。
なお平均値の計算の際、整数型のままやると小数が無視されてしまうので気を付けよ。
解答例1
解答例2
最終更新:2012年04月02日 23:27