C言語プログラミング1(四捨五入・桁数カウント)
今年も残りあとわずか、いかがお過ごしでしょうか?
わたしはまたまた風邪をひいていたりします。困るぐらいに声が出ない日が続きました。
あまり声を出さないようにしてクールを装いながら、クールと無口は違うんだなと実感する日々だったりします。
そんなわたしの最近のマイブームが「綺麗なC言語プログラム」です。
C言語という単語、知らない人もけっこういらっしゃいますでしょうか。
多々あるプログラム言語の中でもかなりメジャーな一つなので、知っている方の方が多いかなと勝手に推測しています。
約三十年前に生み出され、現在も第一線で使われているプログラム言語です(C++やJavaとの関連も含め、第一線と表現させていただきました)。
言語としては長い歴史を持っているため、もちろんかなり研究されています。
プログラミングのコンテスト等もありますので。
そんなC言語において、単純な処理を少しでも綺麗に書きたいというのが最近のマイブームなんです。
間違いなくすでに誰かが考えついていることなので、それほど生産性がある行為だとは思っていません。
パズルを解くのと同じような感覚の趣味です。
ただ、ここに書くことでどこかの誰かの役に立ったら良いなぐらいは思います。
ちなみに、綺麗なプログラミングの定義は特にないですが
「提供されている標準ライブラリをあまり用いずできるだけ少ない手順で処理を完了する」
みたいなところでしょうか。
「経験の浅い寿司職人が握り寿司一つに七手かけるのに対して達人は三手しか用いない」みたいなものです。
ただ、わたしは寿司一つに八手かけるぐらいの実力なので、ここに掲載するコードが綺麗だなんて胸を張りはしません。
自分なりの綺麗なソースです。
今回はそんな中で「四捨五入」と「桁数カウント」の二つのコードを掲載します。
※注意
入出力にprintfとscanfを用いているのはポピュラーだからで、ベストだからではありません。
メイン処理のアルゴリズムを考えるのが趣味のため、例外処理は考慮していません。
/*以下、キーボードから入力した正の整数を四捨五入するプログラム*/
#include<stdio.h>
/*指数演算関数 aのb乗*/
int mul(int a,int b){
int c,d=1;
for(c=0;c<b;c++)d*=a;
return d;
}
int main(void){
int a,b;/*a:入力した数値 b:四捨五入対象部分*/
int pla=2;/*整数何桁目で四捨五入するか*/
scanf("%d",&a);
b=a%mul(10,pla);/*pla桁分の数値の取得*/
a=a-a%mul(10,pla)+mul(10,pla)*(b/(mul(10,pla)/2));
printf("%d",a);
return(0);
}
/*以下、キーボードから入力した正の整数の桁数をカウントするプログラム*/
#include<stdio.h>
int main(void){
int a,b=0;
scanf("%d",&a);
while(a>0){
b++;
a/=10;
}
printf("%d",b);
return(0);
}