見出し画像

プログラミング学習の記録 #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で、

プログラムの最後に
print("All process succeeded.")
と付けておくと幸せになれるのでよく付けている,自然な文かは知らない

とツイートしていた。なるほど確かに、と思ったので、これからは、コードの最後に似たような文章を付けてみようと思う。とりあえず、

printf("HAPPY SMILE (^_^)v\n");

と付けることにする。今後、変わるかもしれない。

-----

動け!タイムライン

いいなと思ったら応援しよう!

flowes_oyr
動物園か水族館にいきたいですね。

この記事が参加している募集