プログラミング実習

プログラミング論
第四回
画面への出力
変数
本日の内容

文字列を出力する
– #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
赤の部分は変数の
値の出力とします。