【C/C++第2回】C言語を利用した計算
今日はC言語を利用して簡単な四則演算を行うところまでやりたいと思います。
最初に足し算を行うプログラムを載せたいと思います。
#include<stdio.h> int main(int argc, char *argv[]) { int a, b, ans1; printf("1つめの数字を入力してください:"); scanf("%d", &a); printf("2つめの数字を入力してください:"); scanf("%d", &b); ans1 = a + b; printf("答えは%d\n", ans1); return 0; }
まず、このプログラムを打ち込んで足し算を行ってみてください。実行結果は以下のようになります。
1つめの数字を入力してください:1 2つめの数字を入力してください:2 答えは3
ちゃんと足し算できていることが分かりますね。
※文字化けする場合はコンパイルするときに以下の引数を追加してください。文字コードの関係でうまく表示できていないので文字コードの種類を指定します。
--exec-charset=cp932
例
gcc -o keisan keisan.c --exec-charset=cp932
つぎに、少数を含む足し算をしてください。すると以下のようにうまく動かないとこが分かると思います。
1つめの数字を入力してください:1.5 2つめの数字を入力してください:答えは1
では、なぜ動かなかったのかを変数の型というものに注目して解説していきたいと思います。
C言語では以下のように変数宣言というものを行って変数を使えるようにします。
int a, b, ans;
このように変数を宣言することで、aとbとansという変数を使えるようにします。変数の名前は基本的には何でもよくて自分の好きな名前を使うことができます。しかし、予約語と呼ばれるものや数字から始まるものは変数として使用することができません。
変数名として使えないものの例:for、while、break、1a、123
少数を扱うためにはどのようにするかですが、変数の型には様々な種類があります。よく使われる変数の型を以下に示したいと思います。
型の名称 | 分類 | ビット長 | 記憶できる数値 |
int | 整数型 | 32bit | -2147783648 ~ 2147783648 |
char | 整数型 | 16bit | -128 ~ 127 |
unsigned char | 符号なし整数型 | 8bit | 0 ~ 255 |
float | 浮動小数点型 | 32bit | -2^127 ~ -2^-128, 0.0, 2^128 ~ 2^127 |
double | 倍精度浮動小数点型 | 64bit | 2^1023 ~ -2^1024, 0.0, 2^-1024 ~ 2^1023 |
※intは16ビットのコンパイラも存在します。
※charは文字型としても使用できます。
この表からわかる通り、intは整数型だったために少数を扱うことができなかったわけですね。それでは浮動小数点型のfloatを使ってプログラムを組んでみましょうか。
#include<stdio.h> int main(int argc, char *argv[]) { float a, b, ans1; printf("1つめの数字を入力してください:"); scanf("%f", &a); printf("2つめの数字を入力してください:"); scanf("%f", &b); ans1 = a + b; printf("答えは%f\n", ans1); return 0; }
変数をfloatにしてみました。ここで注意しなければならない部分は標準入力のscanfとprintfの部分です。int型だったときは%dでしたがfloatの場合は%fにする必要があります。
以下にscanf時とprintf時のフォーマットを示します。
変数の型 | printf時 | scanf時 |
int | %d | %d |
float | %f | %f |
double | %f又は%lf | %lf |
このようになります。charやunsigned charは計算には使っても基本的に出力には使いません。文字型という機能も持っているためややこしいのです。気になる人はchar型の変数で標準入出力する方法を調べてみてください。
というわけで最後に四則演算を行うプログラムを載せたいと思います。
#include<stdio.h> int main(int argc, char *argv[]) { float a, b, ans1, ans2, ans3, ans4; printf("1つめの数字を入力してください:"); scanf("%f", &a); printf("2つめの数字を入力してください:"); scanf("%f", &b); ans1 = a + b; ans2 = a - b; ans3 = a * b; ans4 = a / b; printf("a+b=%f\na-b=%f\na*b=%f\na/b=%f\n", ans1, ans2, ans3, ans4); return 0; }
ちなみに、printfにある”\n”は改行を意味するものです。
宿題
このプログラムは2つの文字を入力して四則演算をしました。来週までに3つの変数を入力してその合計をするプログラムを組んできてください。
実行結果の例
1つめの数字を入力してください:1.23 2つめの数字を入力してください:2.79 3つめの数字を入力してください:5.23 a + b = 9.250000
12月21日(金)にmbedを使う予定なので、STM32F303K8とジャンパ線、ブレッドボード、330Ω抵抗、LEDの準備をしてください。
抵抗とLEDはひとり2つくらいあると便利です。