Download presentation
Presentation is loading. Please wait.
Published byしゅんすけ かせ Modified 約 8 年前
1
プログラミング論 第八回数字の計算,整数の入出力
2
本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子
3
演習 ensyu12.c のプログラムを完成させな さい。 ensyu12.c のプログラムを完成させな さい。 –char 型配列変数 name を宣言しなさい。そ の時,自分の名前を初期値として与えな さい。 –double 型変数 tall を宣言する際,自分の身 長を初期値として与えなさい。 – 「~さんの身長は~ cm です。」と出力す る printf 文を作りなさい。 ~の部分には変数値が与えられるようにしな さい。 ~の部分には変数値が与えられるようにしな さい。 身長は,整数部 3 桁,小数部 1 桁で表示される ように指定しなさい。 身長は,整数部 3 桁,小数部 1 桁で表示される ように指定しなさい。
4
加減乗除を行う 加減乗除を行うときは,算術演算子を用い ます。 加減乗除を行うときは,算術演算子を用い ます。 算術演算子は,次の通りです。 算術演算子は,次の通りです。 演算子説明例 +加算a=b+c; -減算a=b-c; *乗算a=b*c; /除算a=b/c; %余りa=b%c;
5
算術演算子の注意点 整数値同士で除算を行うと,小数点以 下は切り捨てられる。 整数値同士で除算を行うと,小数点以 下は切り捨てられる。 整数に対して%演算を使用すると,余 りを求めることができる。 整数に対して%演算を使用すると,余 りを求めることができる。 0で除算を行うことはできない。 0で除算を行うことはできない。 整数と実数を混ぜて計算すると,答え は実数表現になる。 整数と実数を混ぜて計算すると,答え は実数表現になる。 ensyu13.c で確認しましょう。 ensyu13.c で確認しましょう。
6
算術演算子の優先順位 *, / は, +, - より先に計算されます。 *, / は, +, - より先に計算されます。 ( )で囲むと,その中が先に計算さ れます。 ( )で囲むと,その中が先に計算さ れます。 同じ優先順位( * や / )の算術演算子が 連続する場合は,左側から先に計算さ れます。 同じ優先順位( * や / )の算術演算子が 連続する場合は,左側から先に計算さ れます。 –a/b/c の場合は,まず, a/b が計算され,そ の結果と c の除算が計算されます。
7
演習 次の計算結果を予測しなさい。 ensyu14.c を実行し確認しなさい。 次の計算結果を予測しなさい。 ensyu14.c を実行し確認しなさい。 int n; n = 2 * 3 + 4 * 5; n = 16 / 3 – 6 / 2; n = 23 % 5 * 3; n = 2 * ( 3 + 4 ) / 2; n = 3 * ( 100 + ( 5 – 3) / 2);
8
考えてみましょう 右の式は,プログ ラム上ではどのよ うに表現されると 思いますか? 右の式は,プログ ラム上ではどのよ うに表現されると 思いますか? 下のプログラムは,どんな式を意味してい ると思いますか? 下のプログラムは,どんな式を意味してい ると思いますか?
9
インクリメント演算子と デクリメント演算子 プログラムの中で,「 1 だけ加算」「 1 だけ 減算」というのは,よく使います。 プログラムの中で,「 1 だけ加算」「 1 だけ 減算」というのは,よく使います。 特に繰り返しの処理で。詳しくは後日。 特に繰り返しの処理で。詳しくは後日。 C 言語では,これらのために,特別なコンパ クトな記述ができます。 C 言語では,これらのために,特別なコンパ クトな記述ができます。 a=a+1; a の値を 1 だけ加算 a++ または ++a 同様に,「 1 だけ減らす」は, a--, --a
10
インクリメント演算子と デクリメント演算子 次のプログラムの動作を確認しましょう。 (ensyu15.c) 次のプログラムの動作を確認しましょう。 (ensyu15.c) #include int main(void) { int a = 5; a++; ++a; printf("a=%d\n",a); } a=a+1; が実行されます 再度 a=a+1; が実行されます
11
a++ と ++a の違い 次のプログラムを実行してみましょう。 ensyu16.c 次のプログラムを実行してみましょう。 ensyu16.c // ensyu16.c ++a と a++ の違い #include int main(void) { int a,b; a=5;b=++a; printf("b=%d a=%d\n",b,a); a=5;b=a++; printf("b=%d a=%d\n",b,a); }
12
a++ と ++a の違い 実行結果はこうなります。 実行結果はこうなります。 b=6 a=6 b=5 a=6 Press any key to continue b=a++; の結果 b=++a; の結果 なぜ,結果がちがうのでしょう???
13
b=++a; の意味は。 結果から予想されることは, 「 a の値が 1 加算された後に b に代入された」 ということです。 結果から予想されることは, 「 a の値が 1 加算された後に b に代入された」 ということです。 つまり a = a + 1; b = a; と同じです
14
それでは, b=a++; の意味 は。 結果から予想されることは, 「 a の値が b に代入された後に, a の値が 1 加算さ れた」 ということです。 結果から予想されることは, 「 a の値が b に代入された後に, a の値が 1 加算さ れた」 ということです。 つまり b = a; a = a + 1; と同じです
15
演習 kadai1.c のプログラムを完成させてくだ さい。 kadai1.c のプログラムを完成させてくだ さい。 –int 型変数として a を宣言し,初期値として 30 を与え,これを二進数に変換して表示するプ ログラムです。 –2 で割って,その余りを配列 d[] に入れていき ます。 d[0] が二進数の最下位桁とします。 – 先に筆算で二進数を求め,その通りの計算を プログラムしてみてください。
16
考え方 ) 30 2 15 2 ) ・・0 ) 2 7・・1 ) 2 3 1 十進数 30 を二進 数に変換する。 結果: 1 1110 d[0]=a%2; a=a/2; d[1]=a%2; a=a/2; d[2]=a%2; a=a/2; d[3]=a%2; d[4]=a/2; d[4],d[3],d[2],d[1],d[0] a は 15 になる a は 7 になる a は 3 になる
17
演算子:その他 変数 a に 10 を代入する 変数 a に 10 を代入する a = 10; 変数 b に変数 a の値を代入する 変数 b に変数 a の値を代入する b = a; 1 文で書けないかな? このように書けます! b = a = 10; この優先順位で 計算されます。
18
演習 ensyu17.c で, b=a=10; の代入文の働 きを確認してください。 ensyu17.c で, b=a=10; の代入文の働 きを確認してください。 a=5; b=5; c=5; のような,同じ値を 代入する代入文は, 1 文で表現できま す。この代入文を, b=a=10; を参考に して考えてみましょう。 a=5; b=5; c=5; のような,同じ値を 代入する代入文は, 1 文で表現できま す。この代入文を, b=a=10; を参考に して考えてみましょう。
19
インクリメント演算子,デク リメント演算子の演習 次の代入文を実行した後の変数 a と b の値を予想しな さい。プログラムを作成し確認しなさい。 次の代入文を実行した後の変数 a と b の値を予想しな さい。プログラムを作成し確認しなさい。 計算答え 例題 a=50; ++a; a=51 問題1 a=50; b=++a; a= b= 問題2 a=66; b=a++; a= b= 問題3 a=30; b=--a; a= b= 問題4 a=31; b=a--; a= b=
20
整数の入出力を行う キーボードから整数値データを入力す る キーボードから整数値データを入力す る // ensyu18.c // 整数値をキーボードから入力する #include int main(void) { int a; scanf("%d", &a); printf("a=%d\n",a); return 0; } まずは実行して みましょう。
21
整数の入出力を行う キーボードから整数値データを入力す る キーボードから整数値データを入力す る // ensyu18.c // 整数値をキーボードから入力する #include int main(void) { int a; scanf("%d", &a); printf("a=%d\n",a); return 0; } これが初めてみる 関数ですね。
22
scanf 関数 キーボード(標準入力)からの入力に は,一般に scanf 関数を利用します。 キーボード(標準入力)からの入力に は,一般に scanf 関数を利用します。 変換仕様(書式)の指定により,数値 (整数,浮動小数点数),文字,文字 列も入力出来ます。 変換仕様(書式)の指定により,数値 (整数,浮動小数点数),文字,文字 列も入力出来ます。 scanf( “ %d ”, &a); これが変換仕様。 “ “ で囲みます。 ここに変数名を指定します。 この変数に値が代入されます。 &はどうして必要なの?
23
scanf 関数の変換仕様 変換仕様意味 %d 10 進数として入力する %lf 浮動小数点 (double) として入力 する %f 浮動小数点 (float) として入力す る %c文字(一文字)として入力する %s文字列として入力する
24
そもそも,どうして変換仕様 の指定が必要なの? キーボードから, 56 と入力された時。。 あなたなら,どう解釈しますか? コンピュータでは, 5 というキーと 6 というキーが 押された,という判断しかできません。 「ごじゅうろく」という整数かもしれない。実数かも しれない。 いや, 16 進数の「ご・ろく」かもしれない。いや,8 進数? ‘ 5 ’ という文字と ’ 6 ’ という文字の 2 文字の文字列かもしれ ない。 いろんな解釈があって,決められません。 そこで, %d と指定 することで 十進数の 56 という数値データだ,と判断出来るわけです。
25
変換仕様の働き-演習 ensyu18.c において, ensyu18.c において, – 変換仕様をさまざまに変更して,その時 の出力をみてみましょう。 – 変数 a の型を変更してみましょう。 – 変数の型と変換仕様が一致していないと 正確に動作しないことを確認してくださ い。
26
では, & はなぜ必要なの? では,試しに, & を無くしてみましょ う。 では,試しに, & を無くしてみましょ う。 コンパイルは通るけど,実行するとエ ラーが出ます。 コンパイルは通るけど,実行するとエ ラーが出ます。 何か意味がありそうです(当たり 前!) 何か意味がありそうです(当たり 前!) コンピュータの身になって考えてみま しょう コンピュータの身になって考えてみま しょう
27
& の意味 scanf( “ %d ”, &a); は,「キーボードから入力された十進数値を, 変数 a に代入してください」という意味です。 変数 a の箱は,メモリ上のどこかにあるはずです。 「56」 a メモリの中 変数 a の箱 はどこ? メモリの中のどこに変数 a があるかわからない!
28
& の意味 じゃ,どうすればいい? 「56」 a メモリの中 メモリの中の変数 a の箱の場所 変数 a 様 OK! 56 これが&a の意味です!
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.