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
© Copyright 2024 Paperzz