- ベストアンサー
C言語の関数設計について
以下のようなプログラムがあり、(1)~(5)の部分を関数化せよという問題なのですが成功しません。どなたか関数化してください。できれば解説付きでよろしくお願いします。 #include<stdio.h> #include<stdlib.h> #include<math.h> #define K_INT 32 #define K_DEC 32 /*小数用*/ int main(void){ double dd; int bi[K_INT], bd[K_DEC]; int ki,kd,q,i; /*--------------(1)入力---------------------------*/ printf("10進数値(少数含): "); scanf("%lf", &dd); q = (int)floor(dd); i = 0; /*---------------ここまで(1)----------------------*/ /*---------------(2)整数部の変換------------------*/ while (q > 0){ bi[i] = q % 2; q= q/2; i++; } /*----------------ここまで(2)---------------------*/ ki = i; /*--------------(3)整数部の表示-------------------*/ for(i=ki-1; i>=0; i = i-1) printf("%d", bi[i]); /*---------------ここまで(3)----------------------*/ /*---------------(4)少数部の変換------------------*/ dd = dd - floor(dd); i = 1; while ((i < K_DEC) && (dd > 0)){ dd = dd * 2.0; bd[i] = (int)floor(dd); dd = dd - floor(dd); i++; } /*--------------ここまで(4)-----------------------*/ kd = i-1; printf("."); /*--------------(5)少数部の表示-------------------*/ for(i=1; i <= kd; i++) printf("%d",bd[i]); /*--------------ここまで(5)-----------------------*/ printf("\n"); return 0; }
- みんなの回答 (4)
- 専門家の回答
補足
すみません。記述不足でした。(1)番目の範囲指定も間違っていました。引数をどうするか具体的な明示はありません。結果をどのように返すかですが、 (1)では10進数の小数(整数可)を読み込んで返す。 (2)では整数部を2進に変換した値を返す。 (3)では整数部を表示する。 (4)少数部2進変換 (5)少数部表示 と自分は考えています。 以下にトライしたソースを記述します。 (1) double input_unit(void){ double dd; printf("10進数値(少数含): "); scanf("%lf", &dd); return(dd); } (2) int i_t_unit(int q,int i){ int bi[K_INT]; q = (int)floor(dd); i = 0; while (q > 0){ bi[i] = q % 2; q= q/2; i++; } } (3)void i_e_unit(int ie){ for(i=ki-1; i>=0; i = i-1) printf("%d", bi[i]); } 間違いが多いかもしれませんがよろしくお願いします。