プログラミング論 第四回 画面への出力 変数 本日の内容 文字列を出力する – #include ? –;? – 1行に複数文を記述する – コメントを入れる 変数 – 変数の型とは? – 整数型の場合の処理 Cプログラムの構成 #include <stdio.h> int { main(void) 次は,これ。 これは,Cのプログラムに,まず 間違いなく必ず最初に書いてあ る文です。一体,どんな意味が あるのでしょう? printf("How are you?\n"); ここは 終了。 return 0; } こういう時は,「じゃ,無かったら どうなるの?」と考えましょう。 この行を消して,コンパイルして みましょう。 コンパイルの結果 こんな警告が出ます。 警告 W8065 ensyu3.c 4: プロトタイプ宣言のない 関数 ‘printf’ の呼び出し(関数 main) ということは・・・? 「プロトタイプ宣言」とは,「こういう関数を使いますよ!」 とあらかじめ宣言することです。 #include <stdio.h> という部分が,「printfっていうのは,こ んな関数ですよ」って教えてくれている(定義している)部分? その通り! #include文 英単語「include」は,「含む」という意味ですね。 つまり,#include <stdio.h> という文は,「このプログ ラムは,stdio.h というファイルを含みます」という意味 です。 stdio.hは,「Standard Input Output」の意味で,標準 入出力,という意味になります。 .hで終わるファイルは,「ヘッダファイル」と呼ばれ,いろ いろな関数が定義されています。 stdio.hには,「標準的な入出力に関する関数が定義さ れている」訳です。printfもその一つです。 つまり,Cが用意してくれている関数を使う場合は,その 関数が定義されているヘッダファイルをインクルードし ないと使えない,ということです。 Cプログラムの構成 プリプロ セッサ #include <stdio.h> int { main(void) printf("How are you?\n"); main関数 return 0; } 次は,これ。 Cプログラムの構成を整理。 プリプロセッサ – ヘッダファイルの読み込み,プログラム内で利用する関数の定義など を行います。 関数 – 独立に作成出来る最小単位のプログラムです。 – 必要な関数を集める事により,所望のプログラムを作っていきます。 – main関数はプログラムに必ず1つあり,最初に実行されます。他の関 数を呼び出して実行します。 – 関数の範囲は,{ } で示されます。これを区切子といいます。 副文 – 複数の「文」のまとまりです。 – 繰り返す範囲や処理を分岐するときに実行する処理範囲の事です。 これらの範囲は,{ } で示されます。 文 – 処理の最小単位です。 – 文の終わりは,; (セミコロン)で表します。 書き方の工夫 #include <stdio.h> 改行 int { main(void) 空白 printf("How are you?\n"); 改行 return 0; } 区切子{ }ごとに文を字下げ すると見やすくなります。 空白や余分な改行は無視されます。 読みやすいように工夫しましょう。 書き方の工夫 #include <stdio.h> int main(void) { printf("How are you?\n"); return 0; } #include <stdio.h> int main(void){printf("How are you?\n");return 0;} どちらが理解しやすいでしょうか? 全て1行に書いてしまったらどうなるでしょう? 次のプログラムを実行してみましょう。 ensyu4.c /* sample program ensyu4.c */ #include <stdio.h> int { main(void) printf("今日は良い天気です。\n"); printf("今日は"); printf("良い天気"); printf("です。\n"); printf("今日は"); printf("良い天気"); printf("です。\n"); return 0; } 複数の文の記述 /* sample program ensyu4.c */ #include <stdio.h> int { main(void) printf("今日は良い天気です。\n"); printf("今日は"); printf("良い天気"); printf("です。\n"); printf("今日は"); printf("良い天気"); printf("です。\n"); return 0; ; で文末が判断されるので,1行に複数の文も可能です。 } コメント文-1 /* sample program ensyu4.c */ #include <stdio.h> int { main(void) /* で始まり */ で終わる範囲は コメントとなります。実行処理 からは無視されます。 printf("今日は良い天気です。\n"); printf("今日は"); printf("良い天気"); printf("です。\n"); printf("今日は"); printf("良い天気"); printf("です。\n"); return 0; } コメント文-2 /* sample /* program */ ensyu4.c */ #include <stdio.h> /* */ の範囲内に,さらに/* */を 入れる事は出来ません。 int main(void) 試しにコンパイルしてみましょう。 { printf("今日は良い天気です。\n"); printf("今日は"); printf("良い天気"); printf("です。\n"); printf("今日は"); printf("良い天気"); printf("です。\n"); return 0; } コメント文-3 #include <stdio.h> // sample program ensyu4.c int { main(void) このようなコメントも可能です。 // が書かれた位置からその行の 最後までがコメントとなります。 printf("今日は良い天気です。\n"); printf("今日は"); printf("良い天気"); printf("です。\n"); printf("今日は"); printf("良い天気"); printf("です。\n"); return 0; } 演習 右のように表示され るプログラムを作成し してください。 printf処理は1回だけ 実行してください。 プログラムには,学 生番号と氏名をコメ ント文として入れてく ださい。 表示した後にビープ 音が鳴るようにしてく ださい。 Hello, C World タブ一つ C言語を勉強します。 1行空白 printfを勉強しました。 Z:\C>_ 変数とは? コンピュータでは,入力された数値データ や文字データを,いろいろと加工(処理) して,仕事をする(結果を出す)ものです。 入力されるデータは一つではありません し,何度も変更,利用されます。 ということは。。 データは,どこかに保管されていて,いつで も何度でも変更,利用できるという事ですね。 変数とは? コンピュータの中には,データを保管するため の箱を用意することができます。 この箱の中身は,いろいろと「変化」します。 だから,このデータが保管されている箱のこと を「変数」といいます。 箱には,だいたい自由に名前を付けることがで きます。その名前を「変数名」といいます。 – アルファベット(大文字,小文字),数値,_ ,だけが 使えます。 – 数字で始まる名前は付けることができません。 次のプログラムを実行しましょう。 ~変数の値を出力する~ // ensyu5.c // 「10+20」の答えを計算して表示する #include <stdio.h> int main(void) { int a, b, c; a = 10; b = 20; c = a + b; printf("%d\n",c); return 0; } まずは,ここから考えましょう。 // ensyu5.c // 「10+20」の答えを計算して表示する #include <stdio.h> int main(void) { int a, b, c; a = 10; b = 20; c = a + b; printf("%d\n",c); return 0; } 変数の宣言 int a, b, c; の意味を考えましょう。 これは,「int型(integer : 整数)の変数とし て,3つの変数を用意する。変数名は,そ れぞれ a, b, c である。」という意味です。 C言語では,「これから,これらの変数を使 うので準備してください」というお願いを,プ ログラムの最初に必ず行っておく必要があ ります。 変数の宣言 // ensyu5.c // 「10+20」の答えを計算して表示する #include <stdio.h> int main(void) { // int a, b, c; a = 10; b = 20; c = a + b; printf("%d\n",c); return 0; } コメント文にして 無視してみましょう コンパイル結果は どうなりますか? 変数の宣言 こんなエラーが表示されます エラー E2451 : 未定義のシンボル a エラー E2451 : 未定義のシンボル b エラー E2451 : 未定義のシンボル c 「こんな名前のものは定義されていない から分からない」ってことですね。 つまり,「使いたいのなら,ちゃんと最初 に定義しなければならない」ってことです。 変数の宣言 int a, b, c; は, int a; int b; int c; のように,3行に渡って記述することもできます。 もちろん, int a; int b; int c; と1行に3文書くこともできます。 実際にプログラムで確認しましょう。 変数の宣言 int a, b, c; の意味を考えましょう。 これは,「int型(integer : 整数)の変数とし て,3つの変数を用意する。変数名は,そ ? れぞれ a, b, c である。」という意味です。 C言語では,「これから,これらの変数を使 うので準備してください」というお願いを,プ ログラムの最初に必ず行っておく必要があ ります。 変数の型 1~10の間に,「整数」はいくつあるでしょう? では,同じく1~10の間に,「実数」はいくつある でしょう? 実数だったら,何桁もの数字を表現しなければ ならないので,大きい箱を用意する必要がありま す。整数だったら(この場合)2桁で十分ですね。 最初に「整数ですよ」と分かっていれば,小さめ の箱を用意すればいいので,効率がよい,と言 えます。 変数の型 プログラムの最初に変数を定義するとき, それが,「整数」なのか「実数」なのか「文 字」なのか,決めておく必要があります。 これを「変数の型を定義する」といいます。 ensyu5.cでは,どの変数も整数型として 定義されているので,10や20が代入され ています。 では,試しに,5.5などのような実数値を 代入してみたらどうなるでしょう? 変数の型 警告もエラーも出ずに,とりあえず実行できて結果 が出力されます。 でも,実数としては出力されません。どう処理されて いるのでしょう? a = 5.5; b = 20.7; c = a + b; a には,5 が代入されます。 b には,20 が代入されます。 c には,25 が代入されます。 つまり,小数点以下は切り捨て(丸める)られることになります。 変数の型 それでは,次に,ものすごく大きな値を入 れてみましょう。 int a, b, c; a = 2147483649; b = 2147483650; c = a + b; 変数の型 前ページの例の場合,答えは「3」と表示 されるはずです。 つまり,あまりに大きい数字だと,箱の中 に入れきれなくて誤動作してしまう,とい うことです。 この場合,4バイトの大きさの箱しか用意 されていないため,表現できる数字は次 の範囲の整数になります。注意しましょう。 -2147483648 ~ +2147483647 次は,ここを考えてみましょう。 // ensyu5.c // 「10+20」の答えを計算して表示する #include <stdio.h> int main(void) { int a, b, c; a = 10; b = 20; c = a + b; printf("%d\n",c); return 0; } 値を代入する 今まで何気なく使ってきましたが, a = 10; というのは,「変数aに10という値を代入 する」という意味であり,「aが10と等しい」 という意味ではありません。 10 a 値を代入する それでは,これはどういう意味でしょう? a=a a+50; まず,今のaの値 を取り出します。 その値に50 を加えます 50を加えた結果を aの箱に戻します a つまり,aの値が50大きくなります。 値を代入する この場合は。 c = a + b; この場合は,aとbの和を計算して,その 結果をcに代入します。 aとbの値は元のままで変化しません。 値を代入する:演習 ensyu5.cにおいて – 問題1 a = 10; の文の後に,a = a+10; の文を挿入して,結果を 確認しましょう。 – 問題2 a = 10; の文の前に,a = a+10; の文を挿入して,結果を 確認しましょう。問題1の場合と結果が違う場合は,その理 由を考えましょう。 – 問題3 a = 10; の文を消して,a = a+10; の文だけにしたらどう なるでしょう。 値の代入:プログラムの流れ int a, b, c; a b c 3つの箱が 用意される。 a, b, c の最初の値は不定であり分からない 10 a=10; b=20; a 10 c=a+b; a 20 b 20 b c 30 c a, bの値は変化しない aに10,bに20 が代入される。 cに30が代入 される。 つぎは,ここに注目。 // ensyu5.c // 「10+20」の答えを計算して表示する #include <stdio.h> int main(void) { int a, b, c; a = 10; b = 20; c = a + b; printf("%d\n",c); return 0; } 整数型変数の出力 printf(“%d\n”,c); これは,整数型変数cの値を出力するための指示です。 初めて見るのは,%のついた部分ですね。 %dは,「変換仕様」または「書式」と呼ばれる記号で す。”d”の部分が変わることでいろんな意味になります。 %dは,「10進数の整数」という意味です。 つまり,「ここに10進数の整数値を出力してください」と いう意味になります。 どの変数の値を出力するかは,” “, の後ろに変数名 を記入します。 整数型変数の出力 出力させる値は変数で指定する必要はな く,次のように式を書く書き方もできます。 printf(“%d\n”, a+b); 実際に上のようにprintf文を書き直して, きちんと出力されることを確認してくださ い。 変換仕様 代表的な変換仕様を次に示します。 変換仕様 意味 %o 8進数で出力する。 %d 10進数で出力する。 %x または %X 16進数で出力する。 %f 浮動小数点数として出力する。 %c 文字として出力する。 %s 文字列として出力する。 %o, %x で出力させてみましょう。 メッセージ付出力 メッセージを付けて,次のように出力させ ることもできます。 printf(“cの値は%dです。\n”, c); cの値が30だとすると, 次のように出力されます。 cの値は30です。 Z:\C> 複数の変数出力 ひとつのprintf文で複数の変数の値を出 力することができます。 printf(“aの値は%dで,bの値は%dです。\n”, a, b); この場合,最初の%dが最初の変数aに,二番 目の%dが二番目に書かれた変数bに,それぞ れ対応します。 aの値が10,bの値が20とすると,次のように出力されます。 aの値は10で,bの値は20です。 Z:\C> 演習 ensyu5.cにおいて – 「10+20=30」と出力されるように printf文を作りなさい。赤の部分 は変数値が出力されるようにし なさい。 – %dは,%3dと指定することによ り,「10進数3桁の整数で出力す る」と桁数を指定できる。この機 能を利用して,aの値,bの値,a とbの和であるcの値を,右のよう に桁をそろえて縦書きに出力す るようにprintf文を作りなさい。 5 +100 ---105 赤の部分は変数の 値の出力とします。
© Copyright 2024 ExpyDoc