C言語なるほど実験室の整数の除算結果を作ってみた。

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

この記事を書いている今(令和3年2月11日建国記念日でお休み。)令和2年度(令和3年1月)に受験した、基本情報技術者試験の結果待ちをしています。
それで、待っている時間と次のステップまでの間を利用して、独習ゼミの講師の矢沢久雄先生が書かれた、
「コンピュータのしくみがよくわかる! C言語プログラミング なるほど実験室」という本で勉強しています。

10進数や2進数、文字コードなどの実験を通しながらC言語でのプログラミングを学んでいっています。
C言語の学習サイトのpaizaラーニングを終えたら(だいたい理解出来たら)この本はプログラミング初心者でも十分読めますし、
基本情報技術者試験の復習にもなります。

それで、第3章の演算に関する実験、80ページのOne Pointに、整数データの除算で、
整数データであっても、剰余を10倍して除算を繰り返せば小数点以下の値を求めることができる、興味があれば、キー入力した2つの整数データの除算結果を作ってみて下さいとありましたので、こういうの好きだから作ってみました。

面白かったです。
条件として、

1、剰余が0になるまで剰余を10倍にして繰り返す
2、同じ剰余が出現したら循環小数だから「…」
3、小数点以下最大20桁まで

という制限を設けて作ってみました。

フローチャートはコチラになります。

割り算の結果21桁(整数も含めて)を格納する配列を用意しました。
この配列の初期化を忘れて、なんでなんでなんで???????????????ってなっていました( ;∀;)

除算は後判定のwhileループを使っています。
先ほどの条件1と3を繰返しの条件にしています。

演算結果はまず整数部を出力して、小数点以下は配列に商を入れた分まで出力します。
小数点第一位の所で「.」を出力するようにしています。

ではまず、7÷2を求めてみます。

これは、7を2で割ると、商が3で剰余が1になります。
商の3を配列に入れます。配列の要素を次にインクリメントして、
余りの1に10を掛け、それを被除数にして除算を実行します。
それを剰余が0になるまで繰り返しました。

次に、10÷5を求めてみます。

それから循環小数になる10÷3を求めてみます。

最後に被除数の方が除数より小さい、2÷8を求めてみます。

ではプログラムです。

コードはコチラになります。

#include <stdio.h>
int main(){
int a,b,quotient; //被除数、除数、商
int pos=0; //配列の位置
int res; //剰余
//商を格納する配列。整数の分もあるので21個のサイズ
int quo[21]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//整数データをキー入力する
printf(“被除数(割られる数)=”);
scanf(“%d”,&a);
printf(“除数 (割る数)=”);
scanf(“%d”,&b);
printf(“\n%d ÷ %d の除算結果・・・(=^・^=)mm。。。\n”,a,b);
//除算を行う。剰余が0になるまで剰余を10倍して除算を繰り返す
do{
quotient=a/b;
res=a%b;
quo[pos]=quotient;
pos++;
a=res*10;
}while(res!=0 && pos<=21); //演算結果を表示する for(int i=0;i<=pos-1;i++){ if(i==1){ printf(“.”); } if(i>=2 && (quo[i-1]==quo[i])){
printf(“…”);} //小数点第2位以降、同じ剰余が出現の循環小数を「…」表示
else {
printf(“%d”,quo[i]);
}
}
return 0;
}

ご精読ありがとうございました。
制限時間があったとしたら、2時間かかってしまってオーバーだと思うので、もっと早く作れるように頑張ります。

また、FEの試験勉強中はアルゴリズム対策としてこちらの本を使っていました。

迷ったららこれ。

実際に作ってみたい人はこっちも。
JavaとC言語(読者特典のダウンロード)

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し