プログラミング学習の記録 #003(C)
卒業研究のテーマの方向性を考える中で、いくつか文献を見てみたり、どこかの研究組織のWebサイトを見てみたりしている。色々と見ていく中で、自分の興味の方向性がわかってきたような気がする。卒業研究として扱っていくテーマと趣味の研究として扱っていくテーマ、という感じになるだろう。来週、指導教員の先生と相談する予定なので、それまでにもう少し色々と調べておきたい。
前回の復習
前回の学習では、特にこれといって新しく学習したこともなかったから、復習することもない。
% rm a.out
remove a.out?
rmコマンドで確認を求めるように設定したが、しっかりと機能していることが確認できた。
変数宣言とデータ型
数値計算を行うためにC言語を学習しているわけだが、数値ばかりを扱うわけにもいかないだろう。つまり、京大生協で本を買うときには生協組合員なら10%引きになるが、いつも電卓みたいに「2000 ×(1 - 0.1)」のように入力して計算するのは、購入数が多いときには時間がかかって面倒である。そこで、商品価格を文字に置き換えて式を整理すると、たとえば、商品価格$${B}$$として、「$${0.9B}$$」のように書ける。この式を基にして、$${B = 2000,3000,4000}$$などと順番に代入して計算した方が楽である。このような方法で計算するために、C言語では「変数宣言」を行う必要があり、そのときに重要になってくるのが「データ型」である。簡単な足し算を行うコードを書いた(というか、教科書に載っていたものを写した)。
#include <stdio.h>
int main()
{
int a,b,c; //変数宣言
a = 10; //代入
b = 20; //代入
c = a + b; //計算と代入
printf("%d+%d=%d\n", a,b,c);
return 0;
}
「int a,b,c」によって、変数3つを宣言している。その後、変数a,bにそれぞれ値を代入し、その和を計算して変数cに代入している。ちなみに、「//」は、コメントアウトを行うためのものである。コメントアウトについては、このサイトを参考にした。変数宣言において、「int」は、整数を指定している。これはデータ型と呼ばれるものである。データ型は、他にもいくつかある。
整数 int 4バイト
実数 float 4バイト
実数 double 8バイト
文字列 char 1バイト
ということらしい。同じ実数でも、floatは4バイトなので32桁、doubleは8バイトなので64桁まで対応可能ということだろう。とりあえず、doubleを使っておけばよいということか。
変数は、必ずしも「a」や「x」といった1文字の変数でなくてもよい。ただ、変数名の付け方には制約があるらしい。このサイトによると、4つの制約があるとのことである。これに注意しつつ、変数名を付けていきたい。京大生協で原価2880円の本を買うときに生協組合員が支払うべき金額を求めるコードは、以下の通りである。
#include <stdio.h>
int main()
{
double price_pay, price_org, discount, tax;
discount = 0.1;
tax = 0.1;
price_org = 2880;
price_pay = price_org * (1 - discount) * (1 + tax);
printf(" You should pay %f yen.\n", price_pay);
return 0;
}
ちなみに、教科書のコード例を少し変えただけである。これをTerminalで実行すると、
% cc 1103-3.c
% ./a.out
You should pay 2851.200000 yen.
と表示された。余談だが、2023年1月から、書籍の10%割引が廃止され、10%ポイント還元になるらしいので、早めに買いにいかねばならない。
加減乗除の計算
なんとなく知ってはいたので、確認しただけで終わった。
加算 +
減算 -
乗算 *
除算 /
余り % (コードでは%%と書く)
scanf
これまでは、あらかじめコード内に数値を入力しておき、計算するだけであったが、Terminalで数値を適宜入力して計算することもできる。このときに、scanfを用いる。scanfの使い方は、コード例を見て理解した。データ型ごとの変換指定子は、以下の通りである。データ型、printfの変換指定子、scanfの変換指定子の順である。
int %d %d
float %f,%e %f,%e
double %f,%e %lf,%le
char %c %c
教科書を参考にして、2つの数を入力し、その数を用いて加減乗除と余りの計算を行うコードを書いた。
#include <stdio.h>
int main()
{
int Number1, Number2;
int Sum, Dif, Pro, Quo, Rem;
printf(" Input the Number 1: ");
scanf("%d", &Number1);
printf(" Input the Number 2: ");
scanf("%d", &Number2);
Sum = Number1 + Number2;
Dif = Number1 - Number2;
Pro = Number1 * Number2;
Quo = Number1 / Number2;
Rem = Number1 % Number2;
printf(" %d + %d = %d\n", Number1, Number2, Sum);
printf(" %d - %d = %d\n", Number1, Number2, Dif);
printf(" %d * %d = %d\n", Number1, Number2, Pro);
printf(" %d / %d = %d\n", Number1, Number2, Quo);
printf(" %d %% %d = %d\n", Number1, Number2, Rem);
return 0;
}
これをTerminalで実行してみる。Number 1を21、Number 2を15とすると、
% ./a.out
Input the Number 1: 21
Input the Number 2: 15
21 + 15 = 36
21 - 15 = 6
21 * 15 = 315
21 / 15 = 1
21 % 15 = 6
と表示された。除算の計算結果が1となったのは、おそろく、変数をint(整数)で定義したからだろうと思う。次に、Engel係数を求めるコードを書いた。
#include <stdio.h>
int main()
{
double engel, food, house;
printf("Input your food expenditure: ");
scanf("%lf", &food);
printf("Input your household expenditure: ");
scanf("%lf", &house);
engel = food / house * 100;
printf("Engel\'s coefficient is %f.\n", engel);
return 0;
}
プログラム完了のときに(余談)
友人がTwitterで、
とツイートしていた。なるほど確かに、と思ったので、これからは、コードの最後に似たような文章を付けてみようと思う。とりあえず、
printf("HAPPY SMILE (^_^)v\n");
と付けることにする。今後、変わるかもしれない。
-----
動け!タイムライン