プログラミング入門...

24
プログラミング入門 回講義 回講義 変数(3) 変数(3) 1+2=3のプログラム(7) i tf復習(9) printf復習(9) scanf(11) 演算とその順序(17) マークのあるサンプルプログラムは /home/course/prog0/public_html/2013/lec/source/ 演算とその順序(17) 下に置いてありますから、各自自分のディレクトリに コピーして、コンパイル・実行してみてください 下に置いてありますから、各自自分のディレクトリに コピーして、コンパイル・実行してみてください Prog-0 2013 Lec02-1 Copyright (C) 1999 - 2013 by Programming-0 Group

Upload: dokhanh

Post on 10-Apr-2018

220 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

プログラミング入門第 回講義第2回講義変数(3)変数(3)1+2=3のプログラム(7)i tf復習(9)printf復習(9)scanf(11)演算とその順序(17)

マークのあるサンプルプログラムは

/home/course/prog0/public_html/2013/lec/source/マークのあるサンプルプログラムは

/home/course/prog0/public_html/2013/lec/source/

演算とその順序(17)

_

下に置いてありますから、各自自分のディレクトリに

コピーして、コンパイル・実行してみてください

_

下に置いてありますから、各自自分のディレクトリに

コピーして、コンパイル・実行してみてください

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

Page 2: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

う式 値#include <stdio.h>main( ){

1+2と言う式の値

(つまり3)が計算され、%dの部分に表

printf("1+2=%d\n",1+2);}

、 部分 表示される

std1dc1{s1000000}1: gcc lec01-3.cしかし、これでは定数 計算しか出来

{ } gstd1dc1{s1000000}2: ./a.out1+2=3

実行実行結果

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

std1dc1{s1000000}3: 実行

変数の使用Prog-0 2013 Lec02-2 Copyright (C) 1999 - 2013 by Programming-0 Group

/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回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

変数とは、メモリーに値を蓄えておく、名前つきの箱

変数の内容は 何回でも書き換え可能1

変数の内容は、何回でも書き換え可能

変数に書き込む事を 「代入」 と呼ぶ2

変数を使用して計算する事で、(定数ではなく)様々な数に対して計算をする事が出来る。な数に対して計算をする事が出来る。

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

Page 4: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

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

a123, _abc, _200 ⇒ OK7abc ⇒ NG

2番目以降の文字は, 半角英字、アンダースコア、2番目以降の文字は, 半角英字、アンダ スコア、半角数字( 0~9 ) でなければいけない

下線以外の記号と空白は使用出来ない下線以外の記号と空白は使用出来ないin-data, a.123 , out data ⇒ NG

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

Page 5: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

大文字と小文字 は区別される大文字と小文字 は区別される

変数名は31文字まで(32文字以降は無視される)

3

予約語 (特別な意味を持つ単語)は使えないint, while, for などが予約語

4

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

意味の分かりやすい名前を付けるresult,sum,total,average など

これは「規則」ではないが、習慣にしよう!

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

これは 規則」ではないが、習慣にしよう!

Page 6: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

変数宣言( 40)変数宣言(p.40)

変数は 宣言 しなければ使えな変数は 宣言 しなければ使えない

「int i,j,result;」5

,j, ;」は、iとjとresult の3つのint型変数をまとめて用意する宣言( つづつ宣言する事も可)めて用意する宣言(一つづつ宣言する事も可)

宣言はまとめてプログラムの 最初 に行う

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

宣言直後の変数の値は不定(何が入っている

6

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

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

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

Page 7: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

「言葉によるプログラム」を作ってみよう

変数「i」,「j」,「result」 を用意する

計算する2つの数をそれぞれ変数「i」 「j」 に代入計算する2つの数をそれぞれ変数「i」,「j」 に代入する

変数「i」と変数「j」の和を計算し、結果を変数 「result」 に代入する変数 「result」 に代入する

変数「result」 の値を表示する

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

Page 8: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

#include <stdio.h> プログラムは全て半角英数字 記号 書く

#

main()数字、記号で書く。

表示などに一部日本語も使用出来る。

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

{int i,j,result = 0; 1:変数用意

i = 1;j = 2;

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

result = i + j; 3:計算

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

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

}

3:計算

4:結果の表示

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

}/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回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

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

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

書式並び

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

このハンドアウトの逆スラッシュ(\)記号は良く見ると他の記号と異

なり、全角になっている。これは日本語のシステムでは半角のバックスラッシュ記号が通貨記号(¥)になってしまうためである。見やすく表示するために

ド ウト は ようにし る 実際にプ グ ムを作成する時に

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

このハンドアウトではこのようにしている。実際にプログラムを作成する時には半角の逆スラッシュを使用する。

Page 10: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

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

前から順に値を表示

⇒ %dの部分が整数型変数の値に置き換わり、「1 2 3 と出力される「1+2=3」と出力される

(「+」や「=」など%d以外の部分はそのまま出力される)

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

Page 11: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

scanf(p.48)(p )

scanfを使うとキーボードから入力することがでscanfを使うとキ ボ ドから入力することができる

大雑把に言うと fは丁度 i tfの反対の大雑把に言うと、scanfは丁度printfの反対のような動作をする。

scanf printfsc p

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

Page 12: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

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

scanf("%d",&i);

変数iにデータが入力される

文は「 進整数を 読 込ん

れる「&」は今はおまじない

10進数の入力

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

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

8

Page 13: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

scanfの使用例scanfの使用例

例えば 年齢を入力するプ グラム(の 部)例えば、年齢を入力するプログラム(の一部)は以下のようになる

int age;printf("How old are you ?\n");printf("How old are you ?\n");scanf("%d",&age);

これによって変数ageにはキーボードから入力された数値(この場合年齢)が代入される。

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

/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回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

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

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

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

10 12

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

32

Page 15: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

scanfの間違いやすい点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

Page 16: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

コラム:ムーアの法則コラム:ム アの法則

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

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

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

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

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

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

(Wikipediaより転載)

Page 17: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

数や変数を演算子で結びつける数や変数を演算子 結び ける

演算と演算子演算子

演算とは:被演算子に対して演算子で定められた演算 演算子

1+2演算子

被演算子

被演算子に対して演算子で定められた操作を行い、式の値とすることである。左は、1+2を計算した3が式の値となる。被演算子

代入演算子

「=」も演算子(代入演算子)である右辺の値を左辺の変数に代入し、式の値自体を代入する値にする(a = 5 の式の値は5)

a = b = 1①

①変数bに1を代入し、式「b=1」の値を1とする②変数aに①で決まった式の値1を代入する

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

② ②変数aに①で決まった式の値1を代入する

Page 18: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

+ :加算

- :減算

算 「 な 注意* :乗算(「x」ではないので注意!)

/ :除算(小数点以下切り捨て)/ :除算(小数点以下切り捨て)

% :剰余算 10剰余算a%b ⇒ aをbで割った余り

10

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

Page 19: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

整数型同士 の演算でなければならない11

3.5 % 2 ⇒ エラーになる

剰余演算子を用いなくても余りは計算できる(剰余演算子を用いなくても余りは計算できる(整数型の場合)a % b ⇒ a ((a / b) * b)a % b ⇒ a - ((a / b) * b)

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

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

Page 20: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

数学の表現では a = a + 1 はおかしい→移項すると0と1が等しくなる??

Cでは「=」の記号は「代入」を表す。まり の演算の意味はつまり、 a = a + 1 の演算の意味は、「変数aの値に1を加え、それをaに代入する」12

代入の時に注意する点

代入とは 左辺 の値を 右辺 の値に書き換えること

つまり以下の二つの式は意味が異なる

13 14

a = 10 (変数aに数10を代入する:OK!)10 = a (数10に変数aの値を代入する:エラー)

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

a+b = 20 もエラー! (代入すべき変数が分らない)

Page 21: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

演算の順序(p 94)演算の順序(p.94)括弧つきの場合、演算子の優先度よりも優先される

2*(3+4) ⇒ 3+4が先に実行される

優先度の高い演算から実行される(巻末に一覧)優先度の高い演算から実行される(巻末に 覧)

優先度(上から優先度の高い順)(、)括弧(、)括弧

乗算 *、 除算 /、 剰余算 %加算 +、 減算 -代入 =

例 1*2+3*4 ⇒ (1*2)+(3*4)

同じ優先度なら、

計算は 左 から順に実行される 1+2+3 ⇒ (1+2)+315

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

代入は 右 から順に実行される a = b = 1 ⇒ a = (b = 1)16

Page 22: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

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

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

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

Page 23: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

#include <stdio.h>i ()

プログラム例main(){int i,j,k,average;

(平均を求める)

printf("3人分の体重(整数kg)を空白で分けて入力してください : ");scanf( "%d%d%d" ,&i,&j,&k);

演算 序

17

average = (i + j + k)/3;

printf("3人の体重はそれぞれ %dkg %dkg %dkgで \n" i j k);

演算順序

printf( 3人の体重はそれぞれ %dkg %dkg %dkgで、\n ,i,j,k);printf("その平均は %dkg となりました\n",average);

}

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

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

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

Page 24: プログラミング入門 第回講義第2回講義web-ext.u-aizu.ac.jp/course/prog0/images/f/f9/Prog0Lec02d.pdf · 1123+2=3 を表示する ... scanf("%d%d%d",&i,&j,&k); printf

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

大部分の人は家にもPCを持 ているのではないかと思う そのPCを使用大部分の人は家にも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など)で自分の大学アカウントとファイルのやりとりをする必要がある。またこの際、漢字コードの違いなどで文字化けする事もあるので、コメントを日本語で書く事はやめたほうが無難である。

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