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