C言語

さて、数値は整数と少数の2種類であることは自明ですね?

では、整数と少数を混在させて計算した場合、一体どうなるのでしょうか?

今回は敢えて説明する前に、どうなるのか予想してみて下さい。

想14:整数と少数を混在させて計算した場合、返される値は整数でしょうか? 少数でしょうか?

今回の問題は正解することが目標ではありません。自分で理論を考えることに意味があるのです。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

double Answer = 5 / 2;
この計算を行うと、Answerの値は2になります。
なぜなら、5 / 2の答えは整数の世界では、2余り1だからです。
今、左辺値は確かに少数型ですが、計算そのものは整数型で行っているので、返却される値は整数型です。(5 / 2という方程式が返す値は整数型)

一方、
double Answer = 5 / 2.0;

この場合、Answerの値は2.5になります。
整数÷少数の計算をした場合、少数型へ合わせられます。
なぜなら、整数も少数の範囲だからです。

つまり、少数{整数}ということです。
50


問15:double Answer = 5.0 ÷ 2の計算結果はなんでしょうか?


補足なのですが、整数と少数を混在させる計算をする場合、計算結果を格納する変数は、少数型にして下さい。

もし整数型に結果を格納する場合、計算結果は必ず整数になります。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
それでは整数と少数を混在させた計算の練習をしてみましょう。

問16:double 型の変数Answerへ 20 ÷ 3.0 の計算結果を代入し、printfにて変数Answerの値を表示するプログラムを書いて下さい。


問17:double 型の変数Answerへ -3.3 ÷ 3 の計算結果を代入し、printfにて変数Answerの値を表示するプログラムを書いて下さい。


難18:int 型の変数Answerへ、7.0 / 2の計算結果を代入し、printfにて変数Answerの値を表示するプログラムを書きなさい。


この一連の自動的な型変換を、暗黙の型変換と呼びます。
暗黙の型変換とは、コンパイラが計算上の都合で自動的に型を変換することです。
つまりプログラマは、暗黙の型変換も計算に入れてコーディング(記述)しなければなりません。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
暗黙の型変換とは違い、明示的な型変換もあります。キャスト演算子を使えば、型変換を明示的に行えます。

キャストを行うには、(変換したい型)を変数の前に付けるだけです。

例えば、double Number = 10.5; をint型へキャストするには、(int)Number;と記述すればよいです。

但し!

キャストは演算子です。即ち、演算の結果として型変換された値が返却されるのです。

ということは、返却される値を保存しておく必要があります。

Number = (int)Number; このように記述すれば、Numberを明示的に型変換した値をNumberへ保存することができます。

問19:次のコードを実行すると、画面にはなんと表示されるでしょう?



難20:double Number = 11.1; という変数を宣言し、printfにてNumberの値を表示しなさい。但し、フォーマット指定子には%dを使用しなさい。
このエントリーをはてなブックマークに追加

倍精度浮動小数点数と書くと、なんだかとっても難しそうですが、そんなことはありません。
ただの少数です。あるいは少数の変数です。

少数とは、例えば2.0や、-1.33333, 3.1415などのことです。

少数型の変数を宣言するには、doubleを使用します。

double PI = 3.1415;

これだけです。後は整数の演算の時と同じように使用できます。


43


このソースコードにはいくつかの重要なPOINTがあります。
第一に、DNum = DNum + 3.0;の部分です。DNum + 3.0;だけだと、計算結果をどこへ代入すればよいか分かりません。また、DNum = を付加することで、DNumの値を上書きしています。
(変数は一度に1つの値しか保存できません)

第二に、printfのフォーマット指定子が%fになっています。これは、浮動小数点数へ変換することを意味します。%dだとうまく表示されないのでご注意下さい。

第三に、上で学習した初期化を使用していることです。この書き方の方がスマートですね。

難13:変数DNumberと変数PIをそれぞれ20.0と3.1415で初期化し、DNumber * DNumber * PIの計算結果を変数Answerへ代入し、変数Answerの値を画面へ表示しなさい。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
では最後に、printfをより柔軟に使用する方法を学びましょう。

printf関数の引数は可変長引数となっています。引数とは、関数へ渡す値のことです。

つまり、printf関数のカッコには、任意の数だけ値を渡すことができるのです。

値はで区切って渡します。下の例だと、"文字列", 整数, 少数 の3つの値を渡しています。
また、変換は左から順次行われます。

45


もちろん今まで通り、変数を表示することもできます。

46


更に、printfの内部で計算することもできます。
C言語では、計算式もなので、
printfに限らず様々な関数内で計算式を渡すことができます。

47
このエントリーをはてなブックマークに追加

プログラムを書いていて、プログラムそのものにメモを書き込みたくなったことはありませんか?

C言語では /*でコメントの始まりを、*/ でコメントの終わりを意味します


実行結果
39


また、C++では // とスラッシュを2つ重ねることでもコメントを表現できます。
この場合、その行末までをコメントとみなします。(複数行にまたがることはできません)


実行結果
40

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
C++はC言語をほぼ完全に内包しています。
C++の名前をよく見てみましょう。

そうです、++はインクリメント演算子です。
つまり、Cを一歩進めた言語という由来があるのです。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
実は、変数の宣言と代入は同時に行うことができます。

このことを、変数の初期化と言います。

int Num = 0;

これにて、変数Numの値は0となりました。(元々は不定)

41

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
そろそろ画像を表示したくなってきましたか?
画像を表示する方法は様々ありますが、DxLib.hをインクルードして、DrawGraphic関数を使用することが最も簡単でしょう。

ですが、それはあくまで画像表示の中で簡単というだけの話であり、そもそも画像を表示するのは難しいのです。

今後も文字列ベースで学習を進め、C言語の基礎を固めましょう。
画像を表示する講座はその内作ります。




このエントリーをはてなブックマークに追加

C言語での演算は数学での演算と同じルールです。

例えば
5+3×2
の答えは11になります。

それに加えて、変数を使用した演算が可能です。

この講義では、まず演算記号の使い方を学び、変数を用いた演算の方法を練習します。

主な演算記号を下に示します。優先度が高い程先に評価されます。
[優先度7] ++(その値に1を加算する)
[優先度6] --(その値から1を減算する)
━━━━━━━━━━━━━━━━━━━━
[優先度5] *(掛け算)
[優先度4] /(割り算の答えを求める)
[優先度3] %(割り算の余りを求める)
[優先度2] +(足し算)
[優先度1] -(引き算)
━━━━━━━━━━━━━━━━━━━━
[優先度0] =(右辺値を左辺値へ代入する)


これらの記号を使うには、直接ソースコードへ記述するだけです。

それでは、C言語で1+1の計算をして、その結果を変数へ代入してみたいと思います。

29


28


Cのコンパイラが
Answer = 1 + 1;
の行へたどり着いた時、まず右辺値をチェックします。
この式全体の右辺値は1 + 1なので、1 + 1という式が評価され、その後=が評価されます。
結果、1 + 1の答えがAnswerへ代入されるのです。

31


つまり、
+演算子の方が、=演算子よりも優先順位が高いので、まず+演算子が評価されます。
その後、=演算子(代入演算子)が評価されるので、変数Answerへ計算結果が格納されるのです。

では、演算子の使い方を練習してみましょう。

問6:234 × 312の計算結果を変数Answerへ代入し、変数Answerの値を画面へ表示するプログラムを書きましょう。


問7:6 ÷ 2の計算結果を変数Answerへ代入し、変数Answerの値を画面へ表示するプログラムを書きましょう。


難8:5 ÷ 2を整数値で計算すると、2余り1になります。余りの部分を変数Answerへ代入し、変数Answerの値を画面へ表示するプログラムを書きましょう。


難9:100-55 × 2の計算結果を変数Answerへ代入し、変数Answerの値を画面へ表示するプログラムを書きましょう。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
これで四則演算はマスターしましたね。

では続いて、C言語特有の演算方法である、インクリメントとデクリメントを学びましょう。

++演算子は、変数の前に付けることができます。
変数の前に付けると、その変数の値を1増やします。

例えば……

int Number;
Number = 3;
++Number;


と書くと、Numberの値は4になります。
デクリメント演算子はその逆で、変数の値を1減らします。

例えば……

int Number;
Number = 3;
--Number;


と書くと、Numberの値は2になります。

インクリメント演算子とデクリメント演算子は、上で上げた演算子の中で最も優先度が高いので、真っ先に評価されます。

それでは、インクリメント演算子とデクリメント演算子の練習です。

問10:変数Numberには100を代入しておき、インクリメント演算子を使用してNumberの値を101にしなさい。また、演算後のNumberの値をprintfで表示しなさい。


問11:変数Numberには33を代入しておき、デクリメント演算子を使用してNumberの値を32にしなさい。また、演算後のNumberの値をprintfで表示しなさい。


難12:変数Numberには-10を代入しておき、デクリメント演算子を使用してNumberの値を-11にしなさい。また、演算後のNumberの値をprintfで表示しなさい。


このエントリーをはてなブックマークに追加

前回の講座でhello worldを出力するプログラムは書けるようになりました。

では、hello worldと出力した後、次の行にhello C language と出力するプログラムを書いてみましょう。



これで動きそうですね。それでは実行結果を見てみます。

21


おや、改行されませんね。

そうです。プログラム上では改行されていますが、そもそも改行とは"改行という文字"なのです。
僕たちが普段文字列を入力する時に、Enterキーを押しますが、Enterキーは改行文字を入力するキーなのです。
つまり改行文字を文章に入れてあげないと、改行されないのです。

改行文字は \n です。

\nを文字列上に埋め込んで、初めてそこで改行がされるのです。
また、環境によっては、\記号は「¥」と表示されたり、「\」と表示されます。
キーボード上では「¥」となっています。バックスペース(1文字消す)の左にあるキーを押して入力して下さい。

hello world を出力した後、改行する。


実行結果
22


うまくいきましたね。
Cのコンパイラは文字列を走査している時、改行文字を発見するとOSに改行文字を伝えます。
すると、OSが文字列の段を1つ下げ、改行を行うのです。

それでは、問題です。

問4:次の実行結果になるプログラムを書きなさい。
23


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
プログラムの文末にあるは、文末記号と言って、その文章の終わりであることを意味します。

日本語で言うところの 英語で言うところの.ですね。

つまり;が付いているところが文章の終わりなので、例えば

return         0     ;

や、

return



0
;

などと言った書き方もOKです。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
変数について説明しておきます。
変数とは、変化する値のことです。

変化する値は古今東西様々なプログラムで使われています。
ゲームであれば敵や味方のHPであったり、家電であればエアコンの温度であったり、数値を操作するコンピュータがあればまず使わないことはありません。

Cで変数を宣言するには

型 名前;

で宣言します。

型は全部で3種類あり、
char  文字型(一文字を格納できる)
int   整数型(1, 100, -245などを格納できる)
double 浮動小数点数型(3.1415などを格納できる)

です。
変数の名前は自由に付けて下さい。(数値から始まったり、_以外の記号を含んだり、全角文字はNG)
また、C言語では大文字と小文字は別の文字として扱われます。Number と number は違う変数を意味します。

こんな感じです。
24


それでは実際にプログラム上で宣言してみましょう。

このプログラムを実行すると、Enemy1HPという名の領域がコンピュータのメモリ上に確保されます。
25
このプログラムを実行しても、なにも表示されません。変数を表示する命令を書いていませんから。

問5:Enemy1HPという変数は何型ですか? また、どのようなデータを格納できますか?


さて、変数とは変化する値のことでしたね。それでは文字通り変化させてみましょう。



Cでは値の代入はで行います。
数学のとは意味が異なりますのでご注意下さい。

このプログラムではEnemy1HPという領域 へ 200という整数を代入しています。
=は右辺値を左辺値へ代入(上書きして挿れる)する効果を持ちます。
もともとEnemy1HPの値は不定でしたが、= 200により、Enemy1HPの値は200へと変化しました。
26


しかしこのプログラムも実行したところで何も表示しません。
本当にEnemy1HPの値が200になっているのか、確かめてみましょう。

ところで文字列を表示するのには何という関数を使うのでしたっけ。
そうです、printfですね。実は数値も文字列として扱うことができるので、printfで表示することができます。

その為には、フォーマット指定子をprintfへ指定してやる必要があります。

printf("Enemy1HPの値は%d", Enemy1HP);

フォーマット指定子は%と何らかの文字を組み合わせて使います。
printfのカッコの"文字列"内に%dと書くことで、表示する時になんらかの値と変換することができます。変換する値は,で区切ります。

Enemy1HPの値を画面へ表示するプログラムを書いてみましょう。

27


このエントリーをはてなブックマークに追加

↑このページのトップヘ