63
プログラム講習 第2回

プログラマ講習第2回

Embed Size (px)

Citation preview

Page 1: プログラマ講習第2回

プログラム講習第2回

Page 2: プログラマ講習第2回

講習スケジュール前半 後半

9日(月) フローチャート ビルド 進数計算

プログラムとは? 関数 変数(前)

10日(火) 学生総会、お疲れでした!

11日(水) データ型 変数(後)

if文 条件式

12日(木) for文 while文 do-while文 配列 自作関数

13日(金) 最終日 演習 予約

Page 3: プログラマ講習第2回

復習• 前回やったこと

• 進数変換

• OR算・AND算・XOR算・NOT算

• Shift算

• フローチャート

• ビルド

• 変数

• 関数

Page 4: プログラマ講習第2回

フローチャート

プログラムの流れを示すもの。

「こんなプログラムを組んで」

と言われて、

頭に流れが浮かぶようになれば完璧

START

起きる

時間がある

着替える 課題やる

END

Yes

No

Page 5: プログラマ講習第2回

変数

プログラムにおいて、

値を保存する場所。

int a, b; ◀このように宣言する。

種類については、今日講習します。

Page 6: プログラマ講習第2回

#include int main(void) { int a,b;

コンパイラ

ソースコード (プログラミング言語)

1000101011101010110101110101010100010111

オブジェクトファイル (機械語)

100010101110101011010111010101010001

実行ファイル (機械語)

リンカ

1000101011101010110101110101010100010111

1000101011101010110101110101010100010111

+

+

コンパイル

リンク

Page 7: プログラマ講習第2回

これだけ全部が

ビルド

コンパイル リンク ビルド

Page 8: プログラマ講習第2回

関数

プログラムは関数の集まりだと言える。

printfもscanfも全部関数。

!

C言語プログラムには必ず main関数 が存在し、

始めは main関数 から実行される。

Page 9: プログラマ講習第2回

復習1問目1. 10進数の18を2進数に変換しなさい

2. 2進数の(0010 1100)を10進数と16進数に変換しなさい

3. AND、OR、XOR、NOTの真理値表を書きなさい

4. 2進数の(0010 1100)を左へ2ビットシフトしなさい

Page 10: プログラマ講習第2回

解答

1. (0001 0010)

2. 10進数:44  16進数:2C

!

4. (1011 0000)

Page 11: プログラマ講習第2回

解答

x y z

0 0 0

0 1 1

1 0 1

1 1 1

x y z

0 0 0

0 1 0

1 0 0

1 1 1

x y z

0 0 0

0 1 1

1 0 1

1 1 0

x z

0 1

1 0

OR AND XORNOT

3.

Page 12: プログラマ講習第2回

復習2問目

「S-ken」と表示するプログラム

Page 13: プログラマ講習第2回

解答

#include<stdio.h> int main(void){ printf(“S-ken”); return 0; }

START

S-kenと 表示

OSへ応答を 返す

END

Page 14: プログラマ講習第2回

復習3問目

数値を入力してもらい、 !

入力された数値をそのまま表示するプログラム

Page 15: プログラマ講習第2回

解答

#include<stdio.h> int main(void){ int x; scanf(“%d”, &x); printf(“%d”,x); return 0; }

START

変数を用意

入力を待つ

END

変数を表示

Page 16: プログラマ講習第2回

復習終わり本題に入ります。

Page 17: プログラマ講習第2回

計算しよう

Page 18: プログラマ講習第2回

入力された変数を 表示するプログラム

#include<stdio.h> int main(void){ int x; scanf(“%d”, &x); printf(“%d”,x); return 0; }

START

変数を用意

入力を待つ

END

変数を表示

Page 19: プログラマ講習第2回

二つの数字の足し算を 表示するプログラム

#include<stdio.h> int main(void){ int x, y, z; scanf(“%d %d”, &x, &y); z = x + y; printf(“%d”,z); return 0; }

START

変数を用意

入力を待つ

足し算する

END

結果を表示

Page 20: プログラマ講習第2回

式の種類第1位 () (カッコ)第2位 * (乗算) / (余算) % (余り)第3位 + (足し算) - (引き算)第4位 | (OR算) & (AND算)第5位 < (比較) <= (比較) > (比較) >= (比較)第6位 == (等しい) != (異なる)第7位 && (AND比較)第8位 || (OR比較)

第9位= (代入) += (加算) -= (減算) *= (乗算)/= (余算) %= (余り)

Page 21: プログラマ講習第2回

二つの数字の足し算を 表示するプログラム

#include<stdio.h> int main(void){ int x, y, z; scanf(“%d %d”, &x, &y); z = x % y; printf(“%d”,z); return 0; }

START

変数を用意

入力を待つ

余り算する

END

結果を表示

Page 22: プログラマ講習第2回

二つの数字の足し算を 表示するプログラム

#include<stdio.h> int main(void){ int x, y, z; scanf(“%d %d”, &x, &y); z = x | y; printf(“%d”,z); return 0; }

START

変数を用意

入力を待つ

OR算する

END

結果を表示

Page 23: プログラマ講習第2回

二つの数字の足し算を 表示するプログラム

#include<stdio.h> int main(void){ int x, y, z; scanf(“%d %d”, &x, &y); z = x & y; printf(“%d”,z); return 0; }

START

変数を用意

入力を待つ

AND算する

END

結果を表示

Page 24: プログラマ講習第2回

変数とデータ型

Page 25: プログラマ講習第2回

変数<ソースコード> #include<stdio.h> int main(void) { int x, y, z; scanf(“%d %d”, &x, &y); z = x + y; printf(“%d”,z); return 0; }

変数宣言int x, y, z;全ての変数は、 変数宣言しないと使えない

Page 26: プログラマ講習第2回

変数変数宣言

int x, y, z;全ての変数は、 変数宣言しないと使えないWhat’s this ?

データ型の宣言

Page 27: プログラマ講習第2回

データ型コンピュータでは、 値の「型(種類)」が明確に分けられる

どういうことか

文字は文字用の変数へ 整数は整数用の変数へ 実数は実数用の変数へ

Page 28: プログラマ講習第2回

データ型

なぜデータ型があるのか?

コンピュータに対し、 変数用に確保すべきメモリの量を示すため

Page 29: プログラマ講習第2回

データ型の種類データ型 表示書式 バイト数 範囲 備考

文字型 char %c 1 0~255 基本的に文字を扱う型。 AVRではあまり使わない。

整数型

short %d 2 -32768~ 32767

あまり使わない。

int %d 4 -2147486948 ~2147486948

プログラムでは 基本的にint型を使う。

long %d 4 -2147486948 ~2147486948

VC++ではintと同じ

実数型float %f 4 -3.4*10^38

~3.4*10^38小数を使うことができる。

double %lf 8 -1.7*10^308 ~1.7*10^308

floatよりスゴイ精度

Page 30: プログラマ講習第2回

#include<stdio.h> int main(void){ char val_char; short val_short; int val_int; long val_long; float val_float; double val_double; val_char = ‘a’; val_short = 20.7; val_int = 20.7;

val_long = 20.7; val_float = 20.7; val_double = 20.7; printf("%c ",val_char); printf("%d ",val_short); printf("%d ",val_int); printf("%d ",val_long); printf("%f ",val_float); printf("%lf ",val_double); return 0; }

Page 31: プログラマ講習第2回

#include<stdio.h> int main(void){ char val_char; short val_short; int val_int; long val_long; float val_float; double val_double; val_char = ‘a’; val_short = 20.7; val_int = 20.7;

val_long = 20.7; val_float = 20.7; val_double = 20.7; printf("%d ",val_char); printf("%d ",val_short); printf("%d ",val_int); printf("%d ",val_long); printf("%f ",val_float); printf("%lf ",val_double); return 0; }

Page 32: プログラマ講習第2回

#include<stdio.h> int main(void){ char val_char; short val_short; int val_int; long val_long; float val_float; double val_double; val_char = 97; val_short = 20.7; val_int = 20.7;

val_long = 20.7; val_float = 20.7; val_double = 20.7; printf("%c ",val_char); printf("%d ",val_short); printf("%d ",val_int); printf("%d ",val_long); printf("%f ",val_float); printf("%lf ",val_double); return 0; }

Page 33: プログラマ講習第2回

#include<stdio.h> int main(void){ char val_char; short val_short; int val_int; long val_long; float val_float; double val_double; val_char = 97; val_short = 20.7; val_int = 97;

val_long = 20.7; val_float = 20.7; val_double = 20.7; printf("%c ",val_char); printf("%d ",val_short); printf("%c ",val_int); printf("%d ",val_long); printf("%f ",val_float); printf("%lf ",val_double); return 0; }

Page 34: プログラマ講習第2回

説明すること

• int型、char型とか

• オーバーフロー、アンダーフロー

Page 35: プログラマ講習第2回

制御文 前編if・while・do-while

Page 36: プログラマ講習第2回

今までのプログラム#include<stdio.h> int main(void){ int a; scanf(“%d”,&a); a = a * 10; printf(“答えは%d”,a); return 0; }

START

変数を用意

入力を待つ

計算する

END

結果を表示

Page 37: プログラマ講習第2回

分岐するプログラム

正解である

正解と表示 違うと表示Yes

No

START

変数を用意

式を表示

入力を待つ

END

Page 38: プログラマ講習第2回

if文の書式

if (条件式) { //条件式が真(正しい)ときの //処理内容 }else { //条件式が偽(誤り)のときの //処理内容 } }省略可

Page 39: プログラマ講習第2回

#include<stdio.h> int main(void){ int a; //入力用変数 printf(“2×5=“); scanf(“%d”,&a); if(a == 10){ printf(“正解!”); }else{ printf(“違う!”); } return 0; }

Page 40: プログラマ講習第2回

さらに分岐するプログラム

入力が10だ

正解と表示

違うと表示

Yes

No

入力が9だ

おしいと表示Yes

入力が11だ

No

Yesおしいと表示

No

Page 41: プログラマ講習第2回

if文の書式

if (条件式1) { //条件式が真ときの処理内容 }else if (条件式2){ //条件式2が真の時の処理内容 }else { //条件式が偽の時の処理内容 }

Page 42: プログラマ講習第2回

if文の書式if (条件式1) { //条件式が真ときの処理内容 }else if (条件式2){ //条件式2が真の時の処理内容 }else if (条件式3){ //条件式3が真の時の処理内容 }else { //条件式が偽の時の処理内容 }

Page 43: プログラマ講習第2回

#include<stdio.h> int main(void){ int a; printf(“2×5=“); scanf(“%d”,&a); if(a == 10){ printf(“正解!”); }else if(a == 9){ printf(“おしい!”); }

else if(a == 11){ printf(“おしい!”); }else{ printf(“違う!”); } return 0; }

Page 44: プログラマ講習第2回

入力が10だ

正解と表示

違うと表示

Yes

No

入力が 9か11だ

おしいと表示Yes

No

さらに分岐するプログラム

Page 45: プログラマ講習第2回

OR ANDOR

AND

(条件A) もしくは (条件B)( a == 9 ) || ( a == 11)どちらかが真ならば、真

(条件A) かつ(条件B)

両方が真の時、真( a == 9 ) && ( b == 11)

a == 9 a == 11

OR

b == 11a == 9

AND

Page 46: プログラマ講習第2回

#include<stdio.h> int main(void){ int a; printf(“2×5=“); scanf(“%d”,&a); if(a == 10){ printf(“正解!”); }else if((a == 9) || (a == 11)){ printf(“おしい!”); }else{ printf(“違う!”); } return 0; }

Page 47: プログラマ講習第2回

さらに分岐するプログラム

入力が10だ

正解と表示Yes

No

入力9以下

小さいと表示Yes

No

大きいと表示

Page 48: プログラマ講習第2回

#include<stdio.h> int main(void){ int a; printf(“2×5=“); scanf(“%d”,&a); if(a == 10){ printf(“正解!”); }else if(a <= 9){ printf(“答えより小さい¥n”); }else{ printf(“答えより大きい”); } return 0; }

Page 49: プログラマ講習第2回

if文の書式

if (条件式) { //条件式が真(正しい)ときの //処理内容 }else { //条件式が偽(誤り)のときの //処理内容 }

Page 50: プログラマ講習第2回

#include<stdio.h> int main(void){ int a; scanf(“%d”,&a); a = (a == 10); printf(“%d”,a); return 0; }

Page 51: プログラマ講習第2回

式の種類第1位 () (カッコ)第2位 * (乗算) / (余算) % (余り)第3位 + (足し算) - (引き算)第4位 | (OR算) & (AND算)第5位 < (比較) <= (比較) > (比較) >= (比較)第6位 == (等しい) != (異なる)第7位 && (AND比較)第8位 || (OR比較)

第9位= (代入) += (加算) -= (減算) *= (乗算)/= (余算) %= (余り)

Page 52: プログラマ講習第2回

#include <stdio.h> int main(void) { int a; scanf(“%d”,&a); if(a == 2) { int b; b = 10+a; } else { int c; c = 20+a; } printf("%d",b); return 0; }

Page 53: プログラマ講習第2回

繰り返すプログラムを 書こう

正解である

正解と表示 違うと表示Yes

No

START

変数を用意

式を表示

入力を待つ

END

違う間ループ

START

式を表示

END

変数を用意

正解だ

入力を待つ

ループ終了処理

違うと表示 Yes

No

正解と表示

Page 54: プログラマ講習第2回

while文

while (条件式){ //繰り返す処理 } !

while ( a != 10){ scanf(“%d”,&a); }

条件式

繰り返す処理

Page 55: プログラマ講習第2回

while文 サンプル

#include <stdio.h> int main(void){ int ans = 1; while (ans != 10){ printf("2×5="); scanf("%d",&ans); } printf("正解!"); return 0; }

Page 56: プログラマ講習第2回

while文 サンプル

#include <stdio.h> int main(void){ int ans = 1; while (ans != 10){ printf("2×5="); scanf("%d",&ans); } printf("正解!"); return 0; }

Page 57: プログラマ講習第2回

while文 サンプル

#include <stdio.h> int main(void){ int ans = 1; while (ans != 10){ printf("2×5="); scanf("%d",&ans); } printf("正解!"); return 0; }

Page 58: プログラマ講習第2回

繰り返す処理

条件式

do-while文

do{ //繰り返す処理 }while (条件式); !

do{ scanf(“%d”,&a); }while ( a != 10);

"

Page 59: プログラマ講習第2回

繰り返す処理

条件式

do-while文

do{ //繰り返す処理 }while (条件式); !

do{ scanf(“%d”,&a); }while ( a != 10);

"

Page 60: プログラマ講習第2回

do-while文 サンプル

#include <stdio.h> int main(void){ int ans; do{ printf("2×5="); scanf("%d",&ans); } while (ans != 10); printf("正解!"); return 0; }

Page 61: プログラマ講習第2回

do-while文 サンプル

#include <stdio.h> int main(void){ int ans; do{ printf("2×5="); scanf("%d",&ans); } while (ans != 10); printf("正解!"); return 0; }

Page 62: プログラマ講習第2回

do-while文 サンプル

#include <stdio.h> int main(void){ int ans; do{ printf("2×5="); scanf("%d",&ans); } while (ans != 10); printf("正解!"); return 0; }

Page 63: プログラマ講習第2回

課題• 電卓を作ってください。

• 最初に計算モード

(足し算、引き算、かけ算、割り算)

を選択し、二つの数字を入力すると、

計算結果が出力される。