50
プログラム講習 第3回

プログラマ講習第3回

Embed Size (px)

Citation preview

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

プログラム講習第3回

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

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

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

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

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

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

if文 条件式

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

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

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

課題の解答

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

#include <stdio.h> int main(void){ int mode; float ans, val1, val2; printf("モード選択¥n"); printf("+:1 -:2 ×:3 ÷:4¥n"); printf("->"); scanf("%d",&mode); printf("数字を入力"); scanf("%f %f",&val1,&val2);

if (mode == 1) { ans = val1 + val2; } else if (mode == 2) { ans = val1 - val2; } else if (mode == 3) { ans = val1 * val2; } else if (mode == 4) { ans = val1 / val2; } printf("ans = %f",ans); return 0; }

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

復習• 前回やったこと

• データ型

• 変数

• if文 while文 do-while文

• 条件式

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

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

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

どういうことか

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

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

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

文字型 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 8: プログラマ講習第3回

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

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

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

if文if (条件式1) { //条件式1が真の時の処理 }else if (条件式2) { //条件式2が真の時の処理 } else { //条件式が偽の時の処理 }

違うと表示

入力が9だ

おしいと表示Yes

入力が11だ

No

Yesおしいと表示

No

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

while文

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

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

条件式

繰り返す処理

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

while文 サンプル

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

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

繰り返す処理

条件式

do-while文

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

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

"

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

do-while文 サンプル

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

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

復習問題1

正解である

正解と表示 違うと表示Yes

No

START

変数を用意

式を表示

入力を待つ

END

右のフローチャートで表される !

プログラムを書きなさい。

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

復習問題1 #include <stdio.h> int main(void){ int ans; printf("2×5=?"); scanf("%d",&ans); if (ans == 10) { printf("正解!"); } else { printf("違うよ!¥n"); } return 0; }

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

復習問題2次のようなプログラムを作りなさい。

!

計算式を表示し、

計算に正解するまで何度も入力を

受け付けるプログラム

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

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

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

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

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

復習終わり本題行きます。

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

制御文 後編for・switch

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

for文for (変数の初期化 ; 条件式 ; 更新処理){ //繰り返す処理 } !

for( i = 0 ; i < 10 ; i++ ){ printf(“%d回目¥n”,i); }

条件式

繰り返す処理

変数の初期化

更新処理

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

for文for (変数の初期化 ; 条件式 ; 更新処理){ //繰り返す処理 } !

for(int i = 0 ; i < 10 ; i++ ){ printf(“%d回目¥n”,i); }

条件式

繰り返す処理

変数の初期化

更新処理

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

for文 サンプル1 #include <stdio.h>

int main(void){ int ans, i; for ( i = 0 ; i < 10 ; i++ ) { printf("%d回目 5×2=",i); scanf("%d",&ans); } return 0; }

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

for文 サンプル1 #include <stdio.h>

int main(void){ int ans, i; for ( i = 0 ; i < 10 ; i++ ) { printf("%d回目 5×2=",i); scanf("%d",&ans); } return 0; }

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

for文 サンプル1 #include <stdio.h>

int main(void){ int ans, i; for ( i = 0 ; i < 10 ; i++ ) { printf("%d回目 5×2=",i); scanf("%d",&ans); } return 0; }

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

#include <stdio.h> int main(void){ int ans, i; for ( i = 0 ; i < 10 ; i++ ) { printf("%d回目 5×2=",i); scanf("%d",&ans); } return 0; }

#include <stdio.h> int main(void){ int ans, i; i = 0; while (i < 10) { printf("%d回目 5×2=",i); scanf("%d",&ans); i++; } return 0; }

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

#include <stdio.h> int main(void){ int ans, i; for ( i = 0 ; i < 10 ; i++ ) { printf("%d回目 5×2=",i); scanf("%d",&ans); } return 0; }

#include <stdio.h> int main(void){ int ans, i; i = 0; while (i < 10) { printf("%d回目 5×2=",i); scanf("%d",&ans); i++; } return 0; }

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

#include <stdio.h> int main(void){ int ans, i; for ( i = 0 ; i < 10 ; i++ ) { printf("%d回目 5×2=",i); scanf("%d",&ans); } return 0; }

#include <stdio.h> int main(void){ int ans, i; i = 0; while (i < 10) { printf("%d回目 5×2=",i); scanf("%d",&ans); i++; } return 0; }

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

#include <stdio.h> int main(void){ int ans, i; for ( i = 0 ; i < 10 ; i++ ) { printf("%d回目 5×2=",i); scanf("%d",&ans); } return 0; }

#include <stdio.h> int main(void){ int ans, i; i = 0; while (i < 10) { printf("%d回目 5×2=",i); scanf("%d",&ans); i++; } return 0; }

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

for文 サンプル2

#include <stdio.h> int main(void){ int ans, i; for ( i = 0 ; i < 10 ; i++ ) { printf("%d回目 5×2=",i); scanf("%d",&ans); if (ans == 10) { break; } } return 0; }

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

for文 サンプル2

#include <stdio.h> int main(void){ int ans, i; for ( i = 0 ; i < 10 ; i++ ) { printf("%d回目 5×2=",i); scanf("%d",&ans); if (ans == 10) { break; } } return 0; }

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

switch-case文switch (変数) { case 値1; //処理 break; case 値2; //処理 break; : default; //処理 break; }

"

switch (val) { case 0; scanf(“%d”,a); break; case 1; scanf(“%d”,b); break; default; printf(“エラー”); break; }

n = ?

n = 2 n = 1 それ以外

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

switch-case文 サンプル#include <stdio.h> int main(void){ int ans; printf("舞鶴高専の所在地は?¥n"); printf("1:京都 2:福井 3:大阪¥n"); printf("->"); scanf("%d",&ans); switch (ans) { case 1: printf("正解"); break;

! case 2: printf("おしい"); break; case 3: printf("だったらいいね"); break; default: printf("エラー"); break; } return 0; }

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

switch-case文 サンプル#include <stdio.h> int main(void){ int ans; printf("舞鶴高専の所在地は?¥n"); printf("1:京都 2:福井 3:大阪¥n"); printf("->"); scanf("%d",&ans); switch (ans) { case 1: printf("正解"); break;

! case 2: printf("おしい"); break; case 3: printf("だったらいいね"); break; default: printf("エラー"); break; } return 0; }

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

配列配列とは? いくつもの変数をまとめて用意し、

まとめて使う手法。

一次元配列 データ型 配列名[要素数] ={要素の中身(省略可};

0 1 210 12 23

int data[3] = {10, 12, 23};

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

配列

二次元配列 データ型 配列名[要素数][要素数] ={{要素, 要素},{要素, 要素}};

0 1 2

0 10 12 23

1 5 4 34

int data[2][3] = {{10, 12, 23},{5,4,34}};

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

配列 サンプルプログラム1#include <stdio.h> int main(void){ int array[3] = {3,2,5}; printf("%d¥n",array[0]); printf("%d¥n",array[1]); printf("%d¥n",array[2]); return 0; }

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

配列 サンプルプログラム2#include <stdio.h> int main(void){ int array[3]; array[0] = 3; array[1] = 2; array[2] = 5; printf("%d¥n",array[0]); printf("%d¥n",array[1]); printf("%d¥n",array[2]); return 0; }

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

配列 サンプルプログラム3#include <stdio.h> int main(void){ int array[3],i; for (i = 0; i < 3; i++) { scanf("%d",&array[i]); } for (i = 0; i < 3; i++) { printf("%d¥n",array[i]); } return 0; }

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

配列 サンプル4

#include <stdio.h> int main(void){ int array[5][5],i,j,b,c; for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { array[i][j] = i * j; } } printf("数字を入力¥n->"); scanf("%d %d",&b,&c); printf("%d * %d = %d",b,c,array[b][c]); return 0; }

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

自作関数自作関数とは? プログラムは関数の組み合わせ

mainもprintfもscanfも全部関数だった

よく使う機能を関数化することで、 見やすいプログラムを作る

自分で作る関数が 自作関数

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

自作関数 書式データ型 関数名(引数){ //処理 return 戻り値; }

int TASHIZAN (int x,int y){ int z; z = x + y; return z; }

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

自作関数 サンプル1 #include <stdio.h>

!int TASHIZAN(int atai1,int atai2){ int kotae; kotae = atai1 + atai2; return kotae; } !int main(void){ int val1,val2,ans; scanf("%d %d",&val1,&val2); ans = TASHIZAN(val1,val2); printf("ans = %d",ans); return 0; }

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

自作関数 サンプル1 #include <stdio.h>

!int TASHIZAN(int atai1,int atai2){ int kotae; kotae = atai1 + atai2; return kotae; } !int main(void){ int val1,val2,ans; scanf("%d %d",&val1,&val2); ans = TASHIZAN(val1,val2); printf("ans = %d",ans); return 0; }

コンパイルは上から 実行されるため、

!

自作関数の場所は main関数より上。

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

自作関数 サンプル1

#include <stdio.h> !int TASHIZAN(int,int); !int main(void){ int val1,val2,ans; scanf("%d %d",&val1,&val2); ans = TASHIZAN(val1,val2); printf("ans = %d",ans); return 0; } !int TASHIZAN(int atai1,int atai2){ int kotae; kotae = atai1 + atai2; return kotae; }

…もしくは、 名前だけmain関数の上

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

自作関数 サンプル2

#include<stdio.h> !void function(void){ printf("Hello Function"); } !int main(void){ function(); return 0; }

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

自作関数 サンプル2

#include<stdio.h> !void function(void){ printf("Hello Function"); } !int main(void){ function(); return 0; }

void !

「値がない」ことを示す。 ただ処理をしたい時に使う。

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

自作関数 サンプル3

#include<stdio.h> !int ans; !void TASHIZAN(void){ int val1, val2; scanf("%d %d", &val1, &val2); ans = val1 + val2; } !int main(void){ TASHIZAN(); printf("答え:%d", ans); return 0; }

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

自作関数 サンプル3

#include<stdio.h> #include”moter.c” !int ans; !void TASHIZAN(void){ int val1, val2; scanf("%d %d", &val1, &val2); ans = val1 + val2; } !int main(void){ TASHIZAN(); printf("答え:%d", ans); return 0; }

グローバル変数 !

Cファイルのどこからでも 呼び出せる変数

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

おわりお疲れさまでした。