MSBOOKS

プログラミングとか深層学習とか日常の出来事とか

【C言語入門】part3 : 演算子と四則演算,scanf文

前回はC言語のプログラムの構造,printf文,データの型(変数)についてやりました.
今回は演算子と四則演算,scanf文についてやっていきます.

演算子と四則演算

前回,敵のHPは3だったものに直接2を代入しました.でもこれいちいち書いていくのは大変ですし,初期値によって代入する値も変えていくのは面倒です.1ダメージの攻撃であるなら"enemyHP-1"の計算をして,enemyHPに代入すれば初期値に依存しないですよね.C言語での数値の計算は以下のように書けます.
・test3-1.c

#include <stdio.h>
int main(void){
   int enemyHP = 3;
   printf("敵のHP:%d\n",enemyHP);
   enemyHP = enemyHP - 1;
   printf("敵のHP:%d\n",enemyHP);
   return 0;
}

・実行結果

C:\Users\ユーザ名\Desktop>test3-1.exe
敵のHP:3
敵のHP:2

このように書くことで初期値に依存せずにダメージを与えることができますね.前回変数へ値を代入する値が後ろ,代入先が前に書くと言いましたが,計算式も同様です.以下の図のようになります.
f:id:msteacher:20181229231432p:plain
引き算は私たちがよく使うマイナス記号-を使いますが,C言語での計算式(これから演算子と呼びます)は普段使うものと少し異なるものがあります.以下にC言語で用いる主な演算子を紹介します.

・+:足し算
・-:引き算
・*:掛け算
・/:割り算(商)
・%:剰余(余り)
先ほどは変数を使った計算を紹介しましたが,普通の計算も以下のようにできます.
・test3-2.c

#include <stdio.h>
int main(void){
   int ichitasuichiha;
   ichitasuichiha = 1 + 1;
   printf("カメラマン「1足す1はー?」\nみんな「%d!」\n",ichitasuichiha);
   return 0;
}

・実行結果

C:\Users\ユーザ名\Desktop>test3-2.exe
カメラマン「1足す1はー?」
みんな「2!」

数学の方程式ではカッコ( )で囲った中身は先に計算するといった規則がありますが,C言語の計算式でも同様のことができます.
・test3-3.c

#include <stdio.h>
int main(void){
   int ans;
   ans = (2+8)/2;
   printf("(2+8)/2=%d",ans);
   return 0;
}

・実行結果

C:\Users\ユーザ名\Desktop>test3-3.exe
(2+8)/2=5

scanf文

今まで数値を表示することをしてきました.ここではキーボードから実際に数値を入力し,コンピュータに計算させることをしてみましょう.そこで使うのがscanfになります.それでは早速以下のプログラムを実行してみてください.
・test3-4.c

#include <stdio.h>
int main(void){
   int enemyHP;
   printf("敵のHPを入力してね:");
   scanf("%d",&enemyHP);
   printf("敵のHP:%d",enemyHP);
   return 0;
}

・実行結果

C:\Users\ユーザ名\Desktop>test3-4.exe
敵のHPを入力してね:_

このような_が点滅しているところでプログラムが止まっていると思います.これが入力待ち状態です.この状態で,キーボードから数値を入力し,エンターキーを押すとプログラムは進みます.
・実行結果(続き)

C:\Users\ユーザ名\Desktop>test3-4.exe
敵のHPを入力してね:3
敵のHP:3

それではscanf文の書き方を見てみましょう.
・scanf関数

scanf("書式文字",&変数名);

printf文のときと違い変数名の前に&が付くのが特徴です.なぜ&を付けるのかについてはポインタの分野で詳しくやりますので,今のところはおまじないとして付けてください.printfの時の変数名から書式文字へ代入するものでしたが,その逆のイメージがscanfで,書式文字から変数名のほうへ代入するイメージです.
f:id:msteacher:20181230004447p:plain
ここまで学べば,足し算機みたいなものも作れますね.
・test3-5.c

#include <stdio.h>
int main(void){
   int ans;
   int a;
   int b;
   printf("a+bを計算するよ\naを入力してね:");
   scanf("%d",&a);
   printf("bを入力してね:");
   scanf("%d",&b);
   ans = a + b;
   printf("答え:%d",ans);
   return 0;
}

・実行結果

C:\Users\ユーザ名\Desktop>test3-5.exe
a+bを計算するよ
aを入力してね:3
bを入力してね:5
答え:8

それでは今回も練習問題を載せるので,ぜひ解きながら学んでいってください.
お疲れさまでした.

練習問題

・問題1
 主人公のHPを表す整数型変数(heroHP)を定義し,キーボード入力から受け付け,その変数へ代入した後,敵から3ダメージを受けた後の主人公のHPを表示するプログラム(test3-6.c)を作成してみよう.(前回のtest2-3.cが参考になると思います)
・実行結果例

C:\Users\ユーザ名\Desktop>test3-6.exe
主人公のHPを入力してね:5
今の主人公のHP:5
主人公は敵から3のダメージを受けた!
今の主人公のHP:2

・問題2
 test3-5.cを参考にしながら,整数型変数aとbに数値を入力させ,a÷bの商と余りを求めるプログラム(test3-7.c)を書いてみましょう.
・実行結果例

C:\Users\ユーザ名\Desktop>test3-7.exe
a/bを計算するよ
aを入力してね:5
bを入力してね:3
a/b=1余り2

練習問題の解答例

・問題1
 ・test3-6.c

#include <stdio.h>
int main(void){
   int heroHP;
   printf("主人公のHPを入力してね:");
   scanf("%d",&heroHP);
   printf("今の主人公のHP:%d\n",heroHP);
   printf("主人公は敵から3のダメージを受けた!\n");
   heroHP = heroHP - 3;
   printf("今の主人公のHP:%d\n",heroHP);
   return 0;
}

・問題2
 ・test3-7.c

#include <stdio.h>
int main(void){
   int ans1;
   int ans2;
   int a;
   int b;
   printf("a/bを計算するよ\naを入力してね:");
   scanf("%d",&a);
   printf("bを入力してね:");
   scanf("%d",&b);
   ans1 = a / b;
   ans2 = a % b;
   printf("a/b=%d余り%d",ans1,ans2);
   return 0;
}