式の計算と変数・配列の概念
(01) sowa ← 0, saiko ← 0, saitei ← 100 (02) 配列 TNin のすべての要素を 0 にする (03) bango を 1 から 50 まで 1 ずつ増やしながら, (04) s ← Tensu [bango] (05) sowa ← + (06) もし s > ならば (07) ← s (08) を実行する (09) もし s < ならば (10) ← s (11) を実行する (12) TNin [ ] を 1 増やす (13) を繰り返す (14) heikin ← sowa / 50 ア イ ウ エ オ カ キ 条件判定文 繰返し文 代入文: 変数に値を代入(格納)する ための文 sowa ÷ 50 の値を heikin に代入する (センター入試23年度数学 ② 「情報関係基礎」 第3問) 50人の生徒の点数の平均点,最高点・最低点を求めるプログラム
計算プログラム
/* と */ で囲まれた文字列 は注釈(コメント) 注釈はプログラムの実行に は関係しない プログラムを終了させる部分には return 0 ; と書く プログラムの本体(body)は 中括弧「{ 」ではじめ,中括弧 「}」で終える ※Cプログラムは文の列から なる。文末は 「; 」(セミコロン) をつける プログラムの先頭に必ず書く オマジナイ /* 台形の面積を求めるプログラム */ #include <stdio.h> int main(void) { puts("上底4,下底8,高さ6の台形の面積を求めます") ; printf("面積は %d です¥n", (4+8)*6/2) ; return 0 ; } 「面積は」 と表示して 「, 」以降に指定される式の値を10進整数で表示し, 最後に「改行」する(¥n) 「 %d 」の部分が式の値に置き換わって画面に表示される (%d は10進(decimal)整数で値を表示することを意味する) printf("面積は %d です ¥n" , (4+8)*6/2 ) ;◆ 文字列 / 数値を表示する
puts (put string) 関数
• 表示したい文字列を 「"」(二重引用符) で囲む。表示後,自動的に 改行される。
printf (print with format) 関数
• 表示したい文字列を 「"」(二重引用符) で囲む。改行するには「¥n」と書く。 • 文字列のほかに,「式の値」も表示できる。
cf. printf(“面積は (4+8)*6/2 です ¥n” ) ; と書いてしまうと, 「面積は (4+8)*6/2 です」 と表示されます。
式の値を表示
9 20
printf ("%d %d¥n", 4+5, 4*5)
途中で改行して表示
1
2
printf("%d¥n%d", 1, 2)
整数と文字を表示
10 と -20
printf("%dと%d", 10, -20)
文字列と整数を表示
答 10
printf("答 %d",10)
整数を表示
10
printf("%d",10)
文字列を表示
Bye !
printf("Bye !")
説明
表示
例
◆ 演算子
加算 + 減算 – 乗算 * 除算 / 整数同士の除算結果は小数点以下切捨て又は四捨五入 剰余 % 整数同士の場合のみ演算可◆ 演算の優先順位
z 加算,減算 < 乗算,除算,剰余 ← 算数で習う順序と同じ (同じ優先順位の場合は左から順に計算される) z 小括弧付きの式があれば,小括弧内の演算が優先される (小括弧のみ使用可。中括弧,大括弧は使用不可) (a+b) ×(c+d)(u+v) ×(x+y) ⇒ (a + b)*(c + d) / ((u +v)*(x + y))
あるいは (a + b)*(c + d) / (u +v) / (x + y) a×b
u×v ⇒ a*b / u*v は間違い, a*b / u / v と表記する あるいは a*b / (u*v) と表記する
計算プログラム
このプログラムでは, 上底4,下底8,高さ6の台形 の面積しか計算できない ↓ 上底,下底,高さの値をキー ボードから入力できるようにす るには ? 「変数」の利用 /* 台形の面積を求めるプログラム */ #include <stdio.h> int main(void) { puts("上底4, 下底8, 高さ6の台形の面積を求めます") ; printf("面積は %d です¥n", (4+8)*6/2) ; return 0 ; }「変数」の概念
z 「変数」 : 値を保存(格納)する場所
z 「変数」を使うには,「変数の宣言」 が必要
int a, b, h ;
int : integer(整数) の意味
z キーボードからの数値の入力
scanf(
"%d
", &a) ;
キーボードから10進整数を読み込んで,その値を変数 a に格納する
int main(void) { int a,b,h; puts("台形の面積を求めます"); printf("上底は ?"); scanf("%d",&a) ; printf("下底は ?"); scanf("%d",&b) ; printf("高さは ?"); scanf("%d",&h) ; ・・・ キーボードから数値を読み 込むには scanf 関数を使う scanf関数では変数の前に &を付けることに注意! 変数宣言 1行に複数の文を書いてもよい (意味にまとまりがあれば,1行で書いたほうがよい)scanf の働き
scanf("%d", &a) ; ① scanf("%d", &b) ; ② scanf("%d", &h) ; ③int a, b, h ;
4 ?a
b
① a の場所に4 が格納される ?b
変数の値の保存場所がメモリ内に確保される キーボードから,最初に「 4」 と入力すると, 4 8a
b
② b の場所に8 が格納される 次に「 8 」 と入力すると, ? : 不定値 注意 : scanf 関数では,変数名の前に必ず & を付ける ?h
?h
?h
次に「 6 」 と入力すると, … 場所を確保した だけでは,どん な値になってい るかわからない変数を使った計算プログラム
キーボードから数値を読み込 むには scanf 関数を使う scanf関数では変数の前に & を付けることに注意! 変数宣言 /* 台形の面積を求めるプログラム */ #include <stdio.h> int main(void) { int a, b, h ; puts("台形の面積を求めます") ; printf("上底は ?"); scanf("%d",&a) ; printf("下底は ?"); scanf("%d",&b) ; printf(“高さは ?"); scanf("%d",&h) ; printf("面積は %d です¥n", (a+b)*h/2) ; return 0 ; }変数の値を使った計算
printf("面積は %d です¥n", (a+b)*h/2) ; 4 8a
b
z 式 (a + b)*h/2 はそれぞれの変数(a,b,h)の値を使って計算される 6h
変数を使った計算プログラム
/* 台形の面積を求めるプログラム */ #include <stdio.h> int main(void) { int a, b, h ; puts("台形の面積を求めます") ; printf("上底は ?"); scanf("%d", &a ) ; printf("下底は ?"); scanf("%d", &b ) ; printf(“高さは ?"); scanf("%d", &h ) ;printf(“面積は %d です¥n”, ( a + b ) * h / 2 ) ;
return 0 ; }
配列(array)
変数:
一つの変数には一つの値を保持する
配列:
一つの配列に複数の値を保持することができる
例 : A という名前の5個の要素をもつ整数型の配列
整数
整数
整数
整数
整数
第0要素 第1要素 第2要素 第3要素 第4要素A [0]
A [1]
A [2]
A [3]
A [4]
C言語での整数型配列の宣言
int A[5] ;
添え字(subscript) 配列名 配列の添え字は 0から始まる配列を使った計算プログラム
キーボードから数値を読み 込むには scanf 関数を使う scanf関数では変数の前に & を付けることに注意! 配列の宣言 /* 台形の面積を求めるプログラム */ #include <stdio.h> int main(void) { int A[3] ; puts("台形の面積を求めます") ; printf(“上底は ?”); scanf(“%d”, &A[0]) ; printf(“下底は ?”); scanf(“%d”, &A[1]) ; printf(“高さは ?”); scanf(“%d”, &A[2]) ;printf(“面積は %d です¥n”, (A[0]+A[1])*A[2] / 2 );
return 0 ; }
課題
(1-1) 平成元号年を入力して,西暦年を表示するプログラムを作成し,正しく動作すること を確認せよ。 例えば,23 と入力したら,『平成23年は西暦2011年です』と表示させ る。(「平成23年は」という部分も表示させることに注意) (ヒント:平成の元号年を a とすると,西暦年は1988+a ) (1-2) 鶴と亀の頭の数の合計と足の数の合計を入力して, 鶴が何羽,亀が何匹いるかを 表示するプログラムを作成し,正しく動作することを確認せよ。 (ヒント:頭の数と足の数を変数として,鶴の数と亀の数について連立方程式を作り, 解を与える式の値を表示させればよい) 【考察事項】 頭の数の合計を9,足の数の合計を28としたとき,どのような結果が 得られるか。その結果は正しいか。 また,頭の数の合計を5,足の数の合計を28 とした場合にはどのような結果が得られるか。その結果は正しいか,正しくないと するとなぜ正しくないか,考察せよ。 (1-3) キーボードから入力される5個の整数を配列に格納し,総和と平均を表示するプロ グラムを作成し,正しく動作することを確認せよ。課題
z 作成したプログラム(ソースプログラム)とその実行結果をメールで送る。 メール本文中には,必ずプログラムが正しくできていることの根拠を示すこと。 (例えば,『△△のテストデータを与えてプログラムを実行させたら,○○の結果 が得られた。したがってプログラムは正しいことが確認できた。』といったような 形式で報告すること。(1-2)については,【考察事項】の内容について報告すれ ばよい。 ) z今日の授業についての自分の理解の程度,難しかった点,感想/コメントなどがあれば 書いてください。 z上記により作成したメールを,[email protected]宛に送る。 zメールの【件名】欄は[11/28課題△時限](△は自分の授業時限)とする。 zメールの文末に自分の「署名」を付けること。(11/7授業課題(2))頭の数を a, 足の数をb として,鶴の数を x,亀の数を y とすると 次の連立方程式が成り立つ。 x + y = a ① 2x + 4y = b ② ①,②を x と y について解くと, x = ○○○○ y = △△△△ ○○○○ と △△△△ の式の値を表示すればよい。 「①と②の式をプログラム中に書いて,x と y の 値 を 表 示 さ せ る 」 と い う の は ダ メ 。 (コンピュータはそれほど賢くない) scanf(“%d”, &a); scanf(“%d”,&b); x + y = a ; 2*x + 4*y =b ; printf(“鶴は%d羽,亀は %d匹”, x,y); これではダメ! aとbからなる式