プライマリプログラミング第 3 回

2013 年度春学期
1
プライマリプログラミング第 3 回
山田良透
2013 年 4 月 22 日
第 3 回目の演習の目標
• 変数の宣言ができる。
• 文法、宣言文と実行文の違い、順序を理解している。
• 変数の型を理解している。
• 名前として使えるもの・使えないもの (予約語) の違いを理解している。
• 変数を使った簡単な四則演算ができ、結果の型について理解している。
変数または数値の計算として、加減乗除、および割り
1 変数
算のあまりを勉強します。
変数には型があります。型名は、以下の通りです。
#include <stdio.h>
整数型
main()
{
実数型
int a, b;
#include <stdio.h>
printf("*** %d と %d の計算 ***\n", a, b);
main()
printf("%3d + %3d = %3d\n", a, b, a + b);
{
printf("%3d + %3d = %3d\n", a, b, a − b);
int a, b, c;
printf("%3d x %3d = %3d\n", a, b, a ∗ b);
printf("%3d / %3d = %3d\n", a, b, a / b);
a = 3;
printf("%3d / %3d = %3d ... %3d\n", a, b, a /
b, a % b);
b = 4;
c = 5;
変数の名前は、英字から始まり英数字およびアンダース
コアからなる文字列であり、予約語は使えません。変数
は、宣言、初期化 (値を代入すること) した後参照 (値を
使う) することができます。宣言文は、「型名 変数名リ
スト;」で記述します。変数は、初期化するまでは値は不
定です。
変数に値を代入するには、代入演算子 = を使います。
を代入します。
float
double
整数型を使う例です。
b = 8;
左辺の変数に、右辺の式 (上の例では単に数値ですが)
short
int
long
a = 100;
}
printf("
a = %2d,
b = %2d,
c=
%2d\n", a, b, c);
printf("a * a = %2d, b * b = %2d, c * c =
%2d\n", a∗a, b∗b, c∗c);
printf("a * a + b * b = %2d, c * c = %2d\n",
a∗a + b∗b, c∗c);
}
式に変数を使うこともできます。
2013 年度春学期
2
2 変数の内部表現
#include <stdio.h>
main()
変数のビット表現は、IEEE で規定されています。同
{
じビット表現でも、型が違えば違う意味を持つことに注
int a, b, c;
意しましょう。
3 文章をプログラムにする
a = 10;
「2 つの変数 a, b の内容が 10, 100 であったとき、こ
b = 100;
の 2 つの変数を入れ替えてから、入れ替え後のそれぞれ
printf("a = %3d, b = %3d\n", a, b);
の値を出力するプログラムを作りなさい。」という問題
が与えられたら、どう考えたらよいでしょう。
c = a;
a = b;
#include <stdio.h>
b = c;
main()
printf("a = %3d, b = %3d\n", a, b);
{
}
まず、いつもの 4 行は書いておきましょう。次に、プロ
}
4 良くある誤り
グラムの中から大事な表現を切り出してみると、「2 つ
• 宣言文で型名を間違えても、これらを変数と解釈
の変数 a, b の内容が 10, 100 であったとき、まず 2 つ
し、
「宣言されていません」というエラーが出て、さ
の変数の値を出力し、この 2 つの変数を入れ替えてか
らに宣言文中で宣言されている変数を参照するとこ
ら、入れ替え後のそれぞれの値を出力するプログラムを
ろで「宣言されていません」のエラーが出ます。
作りなさい。
」のようになります。変数が二つあって、そ
• 宣言文内の変数リストでカンマを忘れた場合
の初期値が支持されていて、入れ替え前後に値を表示す
るわけですから、
(int a b; など)、その後の変数名 (この場合 b)
に対して、
「エラーが xx の前にあります」というエ
ラーが出ます。
#include <stdio.h>
• たとえば代入文の左辺と右辺を間違えるなどして、
左辺に代入できないもの (定数や式) を置いてしま
main()
{
うと、
「invalid lvalue in assignment」というエラー
int a, b;
がでます。
a = 10;
b = 100;
printf("a = %3d, b = %3d\n", a, b);
/∗ 入れ替え ∗/
printf("a = %3d, b = %3d\n", a, b);
}
というようなプログラムになります。二つの変数を入れ
替えるには、一時的に変数の値を取っておくもう一つの
変数を用意する必要があります。この変数を、仮に c と
すると、次のプログラムのようになります。
5 課題
5.1 課題番号 3 − 1A
2 つの変数 a, b の内容が 8,25 であった時、この 2 変
数の内容を入れ換えてから、入れ換え後のそれぞれの値
を出力するプログラムを作りなさい。(プログラムを印
刷して提出してください)
5.2 課題番号 3 − 2B
3 つの変数 a, b, c の内容を 10, 100, 1000 で初期化し
た後、まず a, b, c を表示、次に a, b を入れ換えて a, b,
c を表示し、さらに b, c を入れ換えてから a,b,c を表示
するプログラムを作りなさい。実行結果は
2013 年度春学期
3
a = 10, b = 100, c = 1000
a = 100, b =
10, c = 1000
a = 100, b = 1000, c =
10
となるはずです。(プログラムを印刷して提出してくだ
さい。)
6 復習
課題をやり終わったら、冒頭の演習の目標が達成でき
たかどうか自己点検してみましょう。課題形式に書い
ていますが、自己点検ですから提出する必要はありま
せん。
■変数の宣言ができる 変数の宣言はどうやってやりま
すか。
型名 変数リスト;
次の「型名」の意味が全て言えますか? int、short、
long、float、double。
■文法、宣言文と実行文の違い、順序を理解している。
実行文とはどういう文ですか?
宣言文と実行文のプログラム中での位置関係のルール
を言えますか?
■変数の型を理解している。
変数の「型」とはどうい
うことですか?
■名前として使えるもの・使えないもの (予約語) の違
いを理解している。
変数の名前としてはどのような
ものが使えるでしょう?変数名の途中で使える文字の種
類と最初で使える文字の種類にはどういうルールがあり
ましたか?そのルールに従っていても使えない名前がい
くつかありますが、どういうものですか?
■変数を使った簡単な四則演算ができ、結果の型につ
いて理解している。
以下の表の列と行のタイプの変
数の四則演算の答えの型が何になるか分かりますか?
short
short
int
long
float
double
int
long
float
double