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

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