Prog Lec02-1 Copyright (C) by Programming-0 Group プログラミング入門 第2回講義 マークのあるサンプルプログラムは /home/course/prog0/public_html/2013/lec/source/ 下に置いてありますから、各自自分のディレクトリに コピーして、コンパイル・実行してみてください マークのあるサンプルプログラムは /home/course/prog0/public_html/2013/lec/source/ 下に置いてありますから、各自自分のディレクトリに コピーして、コンパイル・実行してみてください 変数 (3) 1+2=3 のプログラム (7) printf 復習 (9) scanf(11) 演算とその順序 (17)
Prog Lec02-2 Copyright (C) by Programming-0 Group 1+2 を計算するプログラム(復 習) #include main( ){ printf("1+2=%d \ n",1+2); } #include main( ){ printf("1+2=%d \ n",1+2); } std1dc1{s }1: gcc lec01-3.c std1dc1{s }2:./a.out 1+2=3 std1dc1{s }3: std1dc1{s }1: gcc lec01-3.c std1dc1{s }2:./a.out 1+2=3 std1dc1{s }3: 実行 実行結果 1+2と言う式の 値 (つまり3)が計 算され、%dの部 分に表示される /home/course/prog0/public_html/2013/lec/source/lec01-3.c しかし、これでは 定数の計算しか出 来ず、あまり実用 的ではない 変数の使用
Prog Lec02-3 Copyright (C) by Programming-0 Group 変数とは (p.40) 変数とは、メモリーに値を蓄えておく、名前つ きの箱 変数の内容は、何回でも書き換え可能 変数に書き込む事を 「代入」 と呼ぶ 変数を使用して計算する事で、(定数ではな く)様々な数に対して計算をする事が出来る。 1 2
Prog Lec02-4 Copyright (C) by Programming-0 Group 変数名の規則 (1)(p.62) 変数の最初の文字は、半角英字 ( A ~ Z, a ~ z ) 、 アンダースコア ( 下線: _ ) でなければいけない a123, _abc, _200 ⇒ OK 7abc ⇒ NG 2番目以降の文字は, 半角英字、アンダースコ ア、 半角数字 ( 0 ~ 9 ) でなければいけない 下線以外の記号と空白は使用出来ない in-data, a.123, out data ⇒ NG
Prog Lec02-5 Copyright (C) by Programming-0 Group 変数名の規則 (2) 大文字と小文字 は区別される 変数名は 31 文字まで (32 文字以降は無視される ) 予約語 (特別な意味を持つ単語)は使えな い int, while, for などが予約語 printf, scanf などは予約語ではないが、実質 的には使用できない。 意味の分かりやすい名前を付ける result,sum,total,average など これは「規則」ではないが、習慣にしよう! 3 4
Prog Lec02-6 Copyright (C) by Programming-0 Group 変数宣言 (p.40) 変数は 宣言 しなければ使えない 「 int i,j,result; 」 は、 i と j と result の3つの int 型変数を まとめて用意する宣言(一つづつ宣言する 事も可) 宣言はまとめてプログラムの 最初 に行う プログラムの途中で宣言するとエラーになる! 宣言直後の変数の値は不定(何が入ってい るかわからない) ⇒代入文を用いた 初期化 が必要 5 6 7
Prog Lec02-7 Copyright (C) by Programming-0 Group 1+2=3 を表示するプログラム 言葉によるプログラム 「言葉によるプログラム」を作ってみよう 変数「 i 」, 「 j 」, 「 result 」 を用意する 計算する 2 つの数をそれぞれ変数「 i 」, 「 j 」 に代入する 変数「 i 」と変数「 j 」の和を計算し、結果を 変数 「 result 」 に代入する 変数「 result 」 の値を表示する
Prog Lec02-8 Copyright (C) by Programming-0 Group = 3 を出力するプログラム #include main() { int i,j,result = 0; i = 1; j = 2; result = i + j; printf("%d \ n",result); } #include main() { int i,j,result = 0; i = 1; j = 2; result = i + j; printf("%d \ n",result); } 1 :変数用意 2 :変数に値代入 3 :計算 4 :結果の表示 /home/course/prog0/public_html/2013/lec/source/lec02-1.c プログラムは全て半角 英数字、記号で書く。 表示などに一部日本語 も使用出来る。 代入文 : 右辺の値を左辺の変数に代入 数学の等号( = )とは意味が異 なる いったん値を代入してから使用す る 宣言時に変数を初期化す る事も出来る
Prog Lec02-9 Copyright (C) by Programming-0 Group printf(p.43) (第1回の復習) printf( "%d \ n",result ); 値を出力する変数名。 18 のような定数や、 a+b のよ うな式でも良い 書式並び %d :整数型変数の値を 10 進数で出力す る \ n :改行 このハンドアウトの逆スラッシュ(\)記号は良く見ると他の記号と 異 なり、全角になっている。これは日本語のシステムでは半角のバック スラッシュ記号が通貨記号 (\) になってしまうためである。見やすく表 示するためにこのハンドアウトではこのようにしている。実際にプロ グラムを作成する時には半角の逆スラッシュを使用する。
Prog Lec02-10 Copyright (C) by Programming-0 Group もう少し複雑な書式付出力 (p.44) printf("%d+%d=%d \ n",i,j,result); ⇒ %d の部分が整数型変数の値に置き換わり、 「 1+2=3 」と出力される (「+」や「=」など %d 以外の部分はそのまま出 力される) 前から順に 値を表示
Prog Lec02-11 Copyright (C) by Programming-0 Group scanf(p.48) scanf を使うとキーボードから入力するこ とができる 大雑把に言うと、 scanf は丁度 printf の反対 のような動作をする。 scanf printf
Prog Lec02-12 Copyright (C) by Programming-0 Group scanf の使用方法 scanf の基本形は以下の通りである。 この scanf 文は「10進整数を一つ読み込ん で、 int 型変数 i に代入する 」事を示している。 scanf("%d",&i); 変数 i にデータが入力さ れる 「&」は今はおまじな い 10進数の入力 8
Prog Lec02-13 Copyright (C) by Programming-0 Group scanf の使用例 例えば、年齢を入力するプログラム(の一 部)は以下のようになる これによって変数 age にはキーボードから 入力された数値(この場合年齢)が代入さ れる。 int age; printf("How old are you ? \ n"); scanf("%d",&age); int age; printf("How old are you ? \ n"); scanf("%d",&age); /home/course/prog0/public_html/2013/lec/source/lec02-2.c
Prog Lec02-14 Copyright (C) by Programming-0 Group 複数データの入力 (p.105) 一度に複数データを入力する場合は以下のようにする 。 printf と同様に、3つ並んだ「 %d 」は順に変数 i,j,k に対 応 「 %d %d %d 」のように空白をあけても構わない。 データは のように1つ以上の空白をあけて 入力する。あるいは以下のように改行で区切っても良 い。 scanf("%d%d%d",&i,&j,&k);
Prog Lec02-15 Copyright (C) by Programming-0 Group scanf の間違いやすい点 「 "" 」内には %d 等の書式指定および空白以外は書かない。 特に改行 ( \ n ) を書くと、 トラブル(バグ) の元になる。 入力する変数には必ず「 & 」をつける。この意味は後期 Programming C で習う。それまでは「おまじない」だと 思っていて差し支えない。(興味のある人は自習してみる と良い) scanf("%d \ n", & i); scanf("%d", i); 9
Copyright (C) 1999 – 2013 by Programming-0 Group Prog Lec02-16 コラム:ムーアの法則 コンピュータのトランジスタ数は18~2 4ヶ月で倍になると言う経験則をムーアの 法則と言う。 CPU の性能やメモリ容量はだいたいトラン ジスタ数に比例していると言って良い。 ムーア氏はインテルの設立者の一人で、現 在は同社の名誉会長である。 トランジスタサイズには物理的限界があり、 早晩この法則は成り立たなくなると見られ ているが、頻繁な技術革新(パラダイムシ フト)により当分は成り立つのではないか と考える人も多い。 同時にコンピュータ自体のデザインも、よ り少ないコスト(トランジスタ数)で高い 性能が出るよう工夫され始めた。 CPU 自体 ではインテルのハイパースレッディング、 システムとしては PC クラスタなどが挙げ られる。 ( Wikipedia より転載)
Prog Lec02-17 Copyright (C) by Programming-0 Group 数や変数を演算子で結びつける 演算と演算子 1+2 演算子 被演算子 「 = 」も演算子(代入演算子)である 右辺の値を左辺の変数に代入し、式の値自体を代入 する値にする ( a = 5 の式の値は5) a = b = 1 ① ② ①変数 b に 1 を代入し、式「 b=1 」の値を1 とする ②変数 a に①で決まった式の値1を代入する 演算とは: 被演算子に対して演算子で定められた 操作を行い、式の値とすることである。 左は、 1+2 を計算した3が式の値となる。 演算とは: 被演算子に対して演算子で定められた 操作を行い、式の値とすることである。 左は、 1+2 を計算した3が式の値となる。 代入演算子
Prog Lec02-18 Copyright (C) by Programming-0 Group (整数型の)四則演算 (p.43,89) + :加算 - :減算 * :乗算(「x」ではないので注 意!) / :除算(小数点以下切り捨て) % :剰余算 a%b ⇒ a を b で割った余り 10
Prog Lec02-19 Copyright (C) by Programming-0 Group 剰余算の注意 (p.90) 整数型同士 の演算でなければならない 3.5 % 2 ⇒ エラーになる 剰余演算子を用いなくても余りは計算でき る(整数型の場合) a % b ⇒ a - ((a / b) * b) 上の式の意味を考えてみよう 11
Prog Lec02-20 Copyright (C) by Programming-0 Group a = a + 1 という演算を考えてみよう 数学の表現では a = a + 1 はおかしい → 移項すると0と1が等しくなる?? Cでは「 = 」の記号は「代入」を表す。 つまり、 a = a + 1 の演算の意味は、 「変数 a の値に1を加え、それを a に代入する」 12 代入の時に注意する点 代入とは 左辺 の値を 右辺 の値に書き換えること つまり以下の二つの式は意味が異なる a = 10 ( 変数 a に数 10 を代入する: OK!) 10 = a ( 数 10 に変数 a の値を代入する:エラー ) a+b = 20 もエラー! ( 代入すべき変数が分らない ) 1314
Prog Lec02-21 Copyright (C) by Programming-0 Group 演算の順序 (p.94) 括弧つきの場合、演算子の優先度よりも優先され る 2*(3+4) ⇒ 3+4が先に実行される 優先度の高い演算から実行される(巻末に一覧) 優先度(上から優先度の高い順) (、)括弧 乗算 * 、 除算 / 、 剰余算 % 加算 + 、 減算 - 代入 = 例 1*2+3*4 ⇒ (1*2)+(3*4) 同じ優先度なら、 計算は 左 から順に実行される 1+2+3 ⇒ (1+2) +3 代入は 右 から順に実行される a = b = 1 ⇒ a = (b = 1) 15 16
Prog Lec02-22 Copyright (C) by Programming-0 Group 演算の順序の例 (p.94) a = b = 2*3 + 4*5/ 演算の順序
Prog Lec02-23 Copyright (C) by Programming-0 Group #include main() { int i,j,k,average; printf(" 3人分の体重 ( 整数 kg) を空白で分けて入力してください : "); scanf( "%d%d%d", & i, & j, & k); average = (i + j + k)/3; printf(" 3人の体重はそれぞれ %dkg %dkg %dkg で、\ n",i,j,k); printf(" その平均は %dkg となりました\ n",average); } #include main() { int i,j,k,average; printf(" 3人分の体重 ( 整数 kg) を空白で分けて入力してください : "); scanf( "%d%d%d", & i, & j, & k); average = (i + j + k)/3; printf(" 3人の体重はそれぞれ %dkg %dkg %dkg で、\ n",i,j,k); printf(" その平均は %dkg となりました\ n",average); } std1dc1{s }1:./a.out 3人分の体重 ( 整数 kg) を空白で分けて入力してください : 3人の体重はそれぞれ 57kg 72kg 49kg で、 その平均は 59kg となりました std1dc1{s }2: std1dc1{s }1:./a.out 3人分の体重 ( 整数 kg) を空白で分けて入力してください : 3人の体重はそれぞれ 57kg 72kg 49kg で、 その平均は 59kg となりました std1dc1{s }2: 演算順序 /home/course/prog0/public_html/2013/lec/source/lec02-3.c プログラム例 (平均を求める) 17 整数演算のため切捨て
Copyright (C) 1999 – 2013 by Programming-0 Group Prog Lec02-24 コラム:自宅で C プログラミング 大部分の人は家にも PC を持っているのではないかと思う。その PC を 使用してプログラミングしたい(休日とか深夜など)場合が出てく るかもしれない。 そこで自宅からのプログラミングに関してまとめておく 大学環境をそのまま使う場合 SSH を使用し、大学のコンピュータに接続し自分のアカウントにログインして利用する。 SSH の利用方法は以下の ISTC のページに説明されている。 この場合は自分のアカウントにあるプログラムを直接編集・実行出来る。 自分の PC でコンパイル・実行する場合 Windows の場合は検索すると色々出てくる。例えば などにリストアップされているので試してみると よいだろう。 では Visual C Express を利用して C プロ グラムを作成する方法を説明している。インストール、設定ともに非常に簡単である。 この場合は何らかの方法 (ftp など ) で自分の大学アカウントとファイルのやりとりをする必要 がある。またこの際、漢字コードの違いなどで文字化けする事もあるので、コメントを日本 語で書く事はやめたほうが無難である。