プログラミング入門 第2回講義

24
Prog-0 2013 Lec02-1 Copyright (C) 1999 - 2013 by Programming-0 Group プププププププププ プププ ププププププププププププププププ /home/course/prog0/public_html/2013/lec/source/ プププププププププププ ププププププププププププ プププププ ププププププ ププププププププププ 、・ ププ (3) 1+2=3 ププププププ (7) printf ププ (9) scanf(11) プププププププ (17)

Upload: brock

Post on 04-Jan-2016

40 views

Category:

Documents


3 download

DESCRIPTION

プログラミング入門 第2回講義. 変数 (3) 1+2=3 のプログラム (7) printf 復習 (9) scanf(11) 演算とその順序 (17).   マークのあるサンプルプログラムは /home/course/prog0/public_html/2013/lec/source/ 下に置いてありますから、各自自分のディレクトリに コピーして、コンパイル・実行してみてください. 1+2 を計算するプログラム(復習) . 1+2と言う式の値 (つまり3)が計算され、%dの部分に表示される. #include main( ){ - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: プログラミング入門 第2回講義

Prog-0 2013 Lec02-1 Copyright (C) 1999 - 2013 by Programming-0 Group

プログラミング入門第2回講義

プログラミング入門第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)

Page 2: プログラミング入門 第2回講義

Prog-0 2013 Lec02-2 Copyright (C) 1999 - 2013 by Programming-0 Group

1+2 を計算するプログラム(復習) 

1+2 を計算するプログラム(復習) 

#include <stdio.h>main( ){ printf("1+2=%d \ n",1+2);}

#include <stdio.h>main( ){ printf("1+2=%d \ n",1+2);}

std1dc1{s1000000}1: gcc   lec01-3.c std1dc1{s1000000}2: ./a.out1+2=3std1dc1{s1000000}3:

std1dc1{s1000000}1: gcc   lec01-3.c std1dc1{s1000000}2: ./a.out1+2=3std1dc1{s1000000}3: 実行

実行結果

1+2と言う式の値(つまり3)が計算され、%dの部分に表示される

/home/course/prog0/public_html/2013/lec/source/lec01-3.c/home/course/prog0/public_html/2013/lec/source/lec01-3.c

しかし、これでは定数の計算しか出来ず、あまり実用的ではない

変数の使用

Page 3: プログラミング入門 第2回講義

Prog-0 2013 Lec02-3 Copyright (C) 1999 - 2013 by Programming-0 Group

変数とは (p.40)変数とは (p.40)

変数とは、メモリーに値を蓄えておく、名前つきの箱変数の内容は、何回でも書き換え可能変数に書き込む事を 「代入」  と呼ぶ変数を使用して計算する事で、(定数ではなく)様々な数に対して計算をする事が出来る。

1

2

Page 4: プログラミング入門 第2回講義

Prog-0 2013 Lec02-4 Copyright (C) 1999 - 2013 by Programming-0 Group

変数名の規則 (1)(p.62)変数名の規則 (1)(p.62)

変数の最初の文字は、半角英字 ( A ~ Z, a ~z ) 、アンダースコア ( 下線: _ ) でなければいけない

a123, _abc, _200   ⇒  OK7abc   ⇒  NG

2番目以降の文字は , 半角英字、アンダースコア、半角数字 ( 0 ~ 9 )  でなければいけない下線以外の記号と空白は使用出来ない

in-data, a.123 , out data ⇒ NG

Page 5: プログラミング入門 第2回講義

Prog-0 2013 Lec02-5 Copyright (C) 1999 - 2013 by Programming-0 Group

変数名の規則 (2)変数名の規則 (2)

大文字と小文字  は区別される変数名は 31 文字まで (32 文字以降は無視される )予約語  (特別な意味を持つ単語)は使えない

int, while, for などが予約語printf, scanf などは予約語ではないが、実質的には使用できない。

意味の分かりやすい名前を付けるresult,sum,total,average などこれは「規則」ではないが、習慣にしよう!

3

4

Page 6: プログラミング入門 第2回講義

Prog-0 2013 Lec02-6 Copyright (C) 1999 - 2013 by Programming-0 Group

変数宣言 (p.40)変数宣言 (p.40)変数は 宣言 しなければ使えない

「 int i,j,result; 」は、 i と j と result の3つの int 型変数をまとめて用意する宣言(一つづつ宣言する事も可)宣言はまとめてプログラムの 最初 に行う

プログラムの途中で宣言するとエラーになる!

宣言直後の変数の値は不定(何が入っているかわからない)

⇒代入文を用いた 初期化 が必要

5

6

7

Page 7: プログラミング入門 第2回講義

Prog-0 2013 Lec02-7 Copyright (C) 1999 - 2013 by Programming-0 Group

1+2=3 を表示するプログラム言葉によるプログラム

1+2=3 を表示するプログラム言葉によるプログラム

「言葉によるプログラム」を作ってみよう変数「 i 」 , 「 j 」 , 「 result 」 を用意する計算する 2 つの数をそれぞれ変数「 i 」 , 「 j」 に代入する変数「 i 」と変数「 j 」の和を計算し、結果を変数 「 result 」 に代入する変数「 result 」 の値を表示する

Page 8: プログラミング入門 第2回講義

Prog-0 2013 Lec02-8 Copyright (C) 1999 - 2013 by Programming-0 Group

1 + 2 = 3 を出力するプログラム

1 + 2 = 3 を出力するプログラム

#include <stdio.h>

main(){ int i,j,result = 0;

i = 1; j = 2;

result = i + j; printf("%d \ n",result);}

#include <stdio.h>

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/home/course/prog0/public_html/2013/lec/source/lec02-1.c

プログラムは全て半角英数字、記号で書く。表示などに一部日本語も使用出来る。

代入文 :右辺の値を左辺の変数に代入数学の等号( = )とは意味が異なる

いったん値を代入してから使用する

宣言時に変数を初期化する事も出来る

Page 9: プログラミング入門 第2回講義

Prog-0 2013 Lec02-9 Copyright (C) 1999 - 2013 by Programming-0 Group

printf(p.43)  (第1回の復習)

printf(p.43)  (第1回の復習)

printf( "%d \ n",result );

値を出力する変数名。18 のような定数や、 a+b のような式でも良い

書式並び

%d :整数型変数の値を 10 進数で出力する\ n :改行

このハンドアウトの逆スラッシュ(\)記号は良く見ると他の記号と異なり、全角になっている。これは日本語のシステムでは半角のバックスラッシュ記号が通貨記号 (\) になってしまうためである。見やすく表示するためにこのハンドアウトではこのようにしている。実際にプログラムを作成する時には半角の逆スラッシュを使用する。

Page 10: プログラミング入門 第2回講義

Prog-0 2013 Lec02-10 Copyright (C) 1999 - 2013 by Programming-0 Group

もう少し複雑な書式付出力(p.44)

もう少し複雑な書式付出力(p.44)

printf("%d+%d=%d \n",i,j,result);

⇒ %d の部分が整数型変数の値に置き換わり、「 1+2=3 」と出力される(「+」や「=」など %d 以外の部分はそのまま

出力される)

前から順に値を表示前から順に値を表示

Page 11: プログラミング入門 第2回講義

Prog-0 2013 Lec02-11 Copyright (C) 1999 - 2013 by Programming-0 Group

scanf(p.48)scanf(p.48)

scanf を使うとキーボードから入力することができる大雑把に言うと、 scanf は丁度 printfの反対のような動作をする。

scanf printf

Page 12: プログラミング入門 第2回講義

Prog-0 2013 Lec02-12 Copyright (C) 1999 - 2013 by Programming-0 Group

scanf の使用方法scanf の使用方法

scanf の基本形は以下の通りである。

この scanf 文は「10進整数を一つ読み込んで、int 型変数 i に代入する 」事を示している。

scanf("%d",&i);scanf("%d",&i);

変数 i にデータが入力される「&」は今はおまじない10進数の入力

8

Page 13: プログラミング入門 第2回講義

Prog-0 2013 Lec02-13 Copyright (C) 1999 - 2013 by Programming-0 Group

scanf の使用例 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/home/course/prog0/public_html/2013/lec/source/lec02-2.c

Page 14: プログラミング入門 第2回講義

Prog-0 2013 Lec02-14 Copyright (C) 1999 - 2013 by Programming-0 Group

複数データの入力 (p.105)複数データの入力 (p.105)

一度に複数データを入力する場合は以下のようにする。

printf と同様に、3つ並んだ「 %d 」は順に変数 i,j,kに対応「 %d %d %d 」のように空白をあけても構わない。データは 10 12 32 のように1つ以上の空白をあけて入力する。あるいは以下のように改行で区切っても良い。

10 12 32 

scanf("%d%d%d",&i,&j,&k);scanf("%d%d%d",&i,&j,&k);

Page 15: プログラミング入門 第2回講義

Prog-0 2013 Lec02-15 Copyright (C) 1999 - 2013 by Programming-0 Group

scanf の間違いやすい点scanf の間違いやすい点

「 "" 」内には %d 等の書式指定および空白以外は書かない。特に改行 ( \ n) を書くと、 トラブル(バグ) の元になる。

入力する変数には必ず「&」をつける。この意味は後期Programming C で習う。それまでは「おまじない」だと思っていて差し支えない。(興味のある人は自習してみると良い)

scanf("%d \ n",&i);scanf("%d \ n",&i);

scanf("%d", i);scanf("%d", i);

9

Page 16: プログラミング入門 第2回講義

Copyright (C) 1999 – 2013 by Programming-0 Group

Prog-0 2013 Lec02-16

コラム:ムーアの法則

コンピュータのトランジスタ数は18~24ヶ月で倍になると言う経験則をムーアの法則と言う。

CPU の性能やメモリ容量はだいたいトランジスタ数に比例していると言って良い。

ムーア氏はインテルの設立者の一人で、現在は同社の名誉会長である。

トランジスタサイズには物理的限界があり、早晩この法則は成り立たなくなると見られているが、頻繁な技術革新(パラダイムシフト)により当分は成り立つのではないかと考える人も多い。

同時にコンピュータ自体のデザインも、より少ないコスト(トランジスタ数)で高い性能が出るよう工夫され始めた。 CPU 自体ではインテルのハイパースレッディング、システムとしては PC クラスタなどが挙げられる。( Wikipedia より転載)

Page 17: プログラミング入門 第2回講義

Prog-0 2013 Lec02-17 Copyright (C) 1999 - 2013 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が式の値となる。

代入演算子

Page 18: プログラミング入門 第2回講義

Prog-0 2013 Lec02-18 Copyright (C) 1999 - 2013 by Programming-0 Group

(整数型の)四則演算(p.43,89)

(整数型の)四則演算(p.43,89)

+ :加算- :減算* :乗算(「x」ではないので注意!)/ :除算(小数点以下切り捨て)% :剰余算    a%b ⇒ a を b で割った余り

10

Page 19: プログラミング入門 第2回講義

Prog-0 2013 Lec02-19 Copyright (C) 1999 - 2013 by Programming-0 Group

剰余算の注意 (p.90)剰余算の注意 (p.90)

整数型同士  の演算でなければならない3.5 % 2 ⇒ エラーになる剰余演算子を用いなくても余りは計算できる(整数型の場合) a % b a - ((a / b) * b)⇒  

 上の式の意味を考えてみよう

11

Page 20: プログラミング入門 第2回講義

Prog-0 2013 Lec02-20 Copyright (C) 1999 - 2013 by Programming-0 Group

a = a + 1 という演算を考えてみよう

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 14

Page 21: プログラミング入門 第2回講義

Prog-0 2013 Lec02-21 Copyright (C) 1999 - 2013 by Programming-0 Group

演算の順序 (p.94)演算の順序 (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

Page 22: プログラミング入門 第2回講義

Prog-0 2013 Lec02-22 Copyright (C) 1999 - 2013 by Programming-0 Group

演算の順序の例 (p.94)演算の順序の例 (p.94)

a = b = 2*3 + 4*5/2 - 1     

7 6 1 4 2 3 5 演算の順序

Page 23: プログラミング入門 第2回講義

Prog-0 2013 Lec02-23 Copyright (C) 1999 - 2013 by Programming-0 Group

#include <stdio.h>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 <stdio.h>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{s1000000}1: ./a.out3人分の体重 ( 整数 kg) を空白で分けて入力してください : 57 72 493人の体重はそれぞれ  57kg 72kg 49kg で、その平均は  59kg となりましたstd1dc1{s1000000}2:

std1dc1{s1000000}1: ./a.out3人分の体重 ( 整数 kg) を空白で分けて入力してください : 57 72 493人の体重はそれぞれ  57kg 72kg 49kg で、その平均は  59kg となりましたstd1dc1{s1000000}2:

演算順序

/home/course/prog0/public_html/2013/lec/source/lec02-3.c/home/course/prog0/public_html/2013/lec/source/lec02-3.c

  プログラム例(平均を求める)  プログラム例(平均を求める)

17

整数演算のため切捨て

Page 24: プログラミング入門 第2回講義

Copyright (C) 1999 – 2013 by Programming-0 Group

Prog-0 2013 Lec02-24

コラム:自宅で C プログラミング

大部分の人は家にも PC を持っているのではないかと思う。その PCを使用してプログラミングしたい(休日とか深夜など)場合が出てくるかもしれない。

そこで自宅からのプログラミングに関してまとめておく大学環境をそのまま使う場合

SSH を使用し、大学のコンピュータに接続し自分のアカウントにログインして利用する。 SSH の利用方法は以下の ISTC のページに説明されている。

http://web-int.u-aizu.ac.jp/labs/istc/ipc/topic/sshgate/sshgate.html この場合は自分のアカウントにあるプログラムを直接編集・実行出来る。

自分の PC でコンパイル・実行する場合 Windows の場合は検索すると色々出てくる。例えば http://www.ooyashima.net/db/prog.htm

などにリストアップされているので試してみるとよいだろう。 http://cvwww.ee.ous.ac.jp/vc10prog.html では Visual C++ 2010 Express を利用して C プロ

グラムを作成する方法を説明している。インストール、設定ともに非常に簡単である。 この場合は何らかの方法 (ftp など ) で自分の大学アカウントとファイルのやりとりをする必要

がある。またこの際、漢字コードの違いなどで文字化けする事もあるので、コメントを日本語で書く事はやめたほうが無難である。