今回は以下のプログラムの書き方を解説していきます。
1 以上の整数を一つ入力し,その数字の順番を逆にして表示するようなプログラムを作成せよ
「配列」といった知識がある方は簡単に書けるかもしれませんが、今回は配列を使用せずに力技の方法を紹介します。
*「配列」は今後また解説していきます。
サンプルコードと実行結果
1 以上の整数を一つ入力し,その数字の順番を逆にして表示するようなプログラムを作成せよ
サンプルコード
コードは以下の通り (/**/で囲まれた部分は説明文のためコードではないです)
#include<stdio.h>
int main(){
/*整数型変数n,countを定義*/
int n,m,i,count;
/*nの数値をキーボードから代入*/
/*while(1)またはfor(;;)で無限ループ*/
/*breakで無限ループ終了*/
while(1){
printf("入力:n=");
scanf("%d",&n);
if(n<=0){
printf("0以上の数値を入力してください.\n");
}else{
break;
}
}
/*mにnを記憶*/
m=n;
/*桁数を取得*/
/*countを初期化*/
/*n>0なら10で割り、countを1増やす*/
count=0;
while(n>0){
count++;
n/=10;
}
/*10で割った余りを改行無しで表示していく*/
/*iを増やしていきcountに達するまで繰り返す*/
printf("出力:n=");
i=0;
while(i<count){
printf("%d",m%10);
m/=10;
i++;
}
return 0;
}
実行結果
実行結果は以下の通り
入力:n=12345
出力:n=54321
サンプルコードの挙動
- 入力された整数の桁数を求める
- 桁数の数だけ整数を10で割っていき、その都度「余り」を表示する
ざっくり説明すると以上の工程になります。
実際に簡単な数字で見ていきましょう。
例えば「n=12345」と入力したとします。
桁数を求める際にはじめに入力した「n」を10で割っていってしまうため、「n」を他の変数に覚えさせておいてください。ここでは「m」に覚えさせておきます。
/*mにnを記憶*/
m=n;
まずは桁数を求めます。
求め方は、商が0になるまで割っていき、割った回数をカウントします。
*「/」は商を、「%」は余りを表示します
- 12345÷10=1234余り5 count=1
- 1234÷10=123余り4 count=2
- 123÷10=12余り3 count=3
- 12÷10=1余り2 count=4
- 1÷10=0余り1 count=5
count=0;
while(n>0){
count++;
n/=10;
}
桁数を求めたら、あとは余りを順に表示していくだけです。
最初に初期値を覚えさせておいた「m」を使います。
printf("出力:n=");
i=0;
while(i<count){
printf("%d",m%10);
m/=10;
i++;
}
whileループの中でmを10で割っていきます。ここでは10で割った余りを表示したいので「%」を使います。
制御用変数iの初期値をi=0とし、1回10で割るごとにいiを+1します。
i<countを満たさなくなったらループを抜けます。(count=5)
- 12345÷10=1234余り5 表示:5
i=1 i<5 - 1234÷10=123余り4 表示:4
i=2 i<5 - 123÷10=12余り3 表示:3
i=3 i<5 - 12÷10=1余り2 表示:2
i=4 i<5 - 1÷10=0余り1 表示:1
i=5 i<5× ➝ 満たさなくなったのでループを抜ける
表示:54321
おすすめ参考書紹介
「苦しんで覚えるC言語」はひとつひとつの要素をスローモーションでゆっくり確実に解説していることが特徴です。真面目にC言語を覚えたい初心者向けで、コツコツと確実に力をつけていくことができます。
「スッキリわかるC言語入門 第2版 (スッキリわかる入門シリーズ)」は「苦しんで覚えるC言語」に比べより親しみやすいイラストや構成で苦手意識を持ちにくい工夫が施されています。
コメント