プログラミング論 第七回 数字の計算,整数の入出力 本日の内容 配列とは? 変数の初期化 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメント演算子 演習 char型配列a[8]に,HAMAMOTOという文字列 リテラルを入力し,表示するプログラムを作りま しょう。 ensyu9.cを完成させてください。 a[0]からスタートするので,8文字の文字列です が,a[8]は使いませんね。なぜでしょう? – 出力させた結果の最後がおかしくなっていると思い ます。それと関係がありそうです。 – a[8]に,’\0’を代入してみてください。どうなります か? 一文字ずつでなく,一度に文字列を代入する方 法もあります。ensyu10.cを実行してみてくださ い。 その他の配列 配列は,その他のデータ型でも,もちろん作る事 が出来ます。 int a[10]; int型の変数を10個用意してく れます。 a[0], a[1], a[2], ……, a[9]の 10個です。 個別に利用出来るので, a[3]=100; という使い方が出来ます。 [ ]内の数字を添字といいます。 変数の初期化 「変数を宣言したとき,最初の値は不定で分 からない」といったことを思い出してください。 「んっ?忘れた。」という場合は,ensyu11.c を実行してみてください。 入力した覚えのない数値が出力されますよ ね。 変数の初期化 変数は,宣言するときに「初期化」する事が出来ます。 int a = 100; これは,これと同じ処理です。 int a; a = 100; 配列には,次のような初期化の方法があります。 int d[4] = {10, 20, 30, 40}; int d[4]; d[0]=10; d[1]=20; d[2]=30; d[3]=40; これと同じ意味です int d[] = {10, 20, 30, 40} char s[5] = “abcde”; char s[] = “abcde”; これらも 同じ意味 です。 これも実は同じ意味です。 char s[5]; s[0] = ‘a’; s[1] = ‘b’; s[2] = ‘c’; s[3] = ‘d’; s[4] = ‘e’; s[5] = ‘\0’; 演習 ensyu12.cのプログラムを完成させなさい。 – char型配列変数nameを宣言しなさい。その 時,自分の名前を初期値として与えなさい。 – double型変数tallを宣言する際,自分の身 長を初期値として与えなさい。 – 「~さんの身長は~cmです。」と出力する printf文を作りなさい。 ~の部分には変数値が与えられるようにしなさ い。 身長は,整数部3桁,小数部1桁で表示されるよ うに指定しなさい。 加減乗除を行う 加減乗除を行うときは,算術演算子を用います。 算術演算子は,次の通りです。 演算子 + * / % 説明 加算 減算 乗算 除算 余り 例 a=b+c; a=b-c; a=b*c; a=b/c; a=b%c; 算術演算子の注意点 整数値同士で除算を行うと,小数点以下 は切り捨てられる。 整数に対して%演算を使用すると,余り を求めることができる。 0で除算を行うことはできない。 整数と実数を混ぜて計算すると,答えは 実数表現になる。 ensyu13.cで確認しましょう。 算術演算子の優先順位 *, / は,+, - より先に計算されます。 ( )で囲むと,その中が先に計算されま す。 同じ優先順位(*や/)の算術演算子が連 続する場合は,左側から先に計算されま す。 – a/b/cの場合は,まず,a/bが計算され,その 結果とcの除算が計算されます。 演習 次の計算結果を予測しなさい。 ensyu14.cを実行し確認しなさい。 int n = n = n = n = n = n; 2 * 3 + 4 * 5; 16 / 3 – 6 / 2; 23 % 5 * 3; 2 * ( 3 + 4 ) / 2; 3 * ( 100 + ( 5 – 3) / 2); 考えてみましょう 5 4 (3 1) 23 右の式は,プログラ ム上ではどのように 表現されると思いま すか? 下のプログラムは,どんな式を意味していると 思いますか? 5 (2 1) 3 / 8 3 7 インクリメント演算子と デクリメント演算子 プログラムの中で,「1だけ加算」「1だけ減算」と いうのは,よく使います。 特に繰り返しの処理で。詳しくは後日。 C言語では,これらのために,特別なコンパクト な記述ができます。 aの値を1だけ加算 a=a+1; a++ または ++a 同様に,「1だけ減らす」は,a--, --a インクリメント演算子と デクリメント演算子 次のプログラムの動作を確認しましょう。(ensyu15.c) #include <stdio.h> int main(void) { int a = 5; a=a+1;が実行されます a++; 再度a=a+1;が実行されます ++a; printf("a=%d\n",a); } a++と++aの違い 次のプログラムを実行してみましょう。ensyu16.c // ensyu16.c ++aとa++の違い #include <stdio.h> 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); } a++と++aの違い 実行結果はこうなります。 b=++a;の結果 b=6 a=6 b=a++;の結果 b=5 a=6 Press any key to continue なぜ,結果がちがうのでしょう??? b=++a;の意味は。 結果から予想されることは, 「aの値が1加算された後にbに代入された」 ということです。 つまり a = a + 1; b = a; と同じです それでは,b=a++;の意味は。 結果から予想されることは, 「aの値がbに代入された後に,aの値が1加算された」 ということです。 つまり b = a; a = a + 1; と同じです 演習 kadai3.cのプログラムを完成させてください。 – int型変数としてaを宣言し,初期値として30を与 え,これを二進数に変換して表示するプログラ ムです。 – 2で割って,その余りを配列d[]に入れていきま す。d[0]が二進数の最下位桁とします。 – 先に筆算で二進数を求め,その通りの計算をプ ログラムしてみてください。 考え方 十進数30を二進 数に変換する。 2 ) 30 2 ) 15 ・・0 2 ) 7 ・・1 2 ) 3 ・・1 1 ・・1 結果: 1 1 1 1 d[0]=a%2; a=a/2; aは15になる d[1]=a%2; a=a/2; aは7になる d[2]=a%2; a=a/2; aは3になる 0 d[4],d[3],d[2],d[1],d[0] d[3]=a%2; d[4]=a/2; 演算子:その他 変数aに10を代入する a = 10; 変数bに変数aの値を代入する b = a; 1文で書けないかな? このように書けます! b = a = 10; この優先順位で 計算されます。 演習 ensyu17.cで,b=a=10;の代入文の働き を確認してください。 a=5; b=5; c=5; のような,同じ値を代入 する代入文は,1文で表現できます。この 代入文を,b=a=10;を参考にして考えて みましょう。 インクリメント演算子,デクリメ ント演算子の演習 次の代入文を実行した後の変数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=
© Copyright 2025 ExpyDoc