プログラマ講習第3回
Upcoming SlideShare
Loading in...5
×
 

プログラマ講習第3回

on

  • 223 views

 

Statistics

Views

Total Views
223
Views on SlideShare
223
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

プログラマ講習第3回 プログラマ講習第3回 Presentation Transcript

  • プログラム講習 第3回
  • 講習スケジュール 前半 9日(月) 10日(火) 11日(水) 12日(木) 13日(金) 最終日 後半 フローチャート ビルド 進数計算 プログラムとは? 関数 変数(前) 学生総会、お疲れでした! データ型 変数(後) for文 while文 do-while文 配列 演習 if文 条件式 自作関数 予約
  • 課題の解答
  • 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; #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文 while文 do-while文 • 条件式 • オーバーフロー/アンダーフロー
  • データ型 コンピュータでは、 値の「型(種類)」が明確に分けられる どういうことか 文字は文字用の変数へ 整数は整数用の変数へ 実数は実数用の変数へ
  • データ型の種類 データ型 文字型 char short 整数型 int long float 表示書式 バイト数 %c %d %d %d %f 範囲 備考 1 0∼255 基本的に文字を扱う型。 AVRではあまり使わない。 2 -32768∼ 32767 あまり使わない。 4 -2147486948 ∼2147486948 プログラムでは 基本的にint型を使う。 4 -2147486948 ∼2147486948 VC++ではintと同じ 4 -3.4*10^38 ∼3.4*10^38 小数を使うことができる。 8 -1.7*10^308 ∼1.7*10^308 floatよりスゴイ精度 実数型 double %lf
  • 式の種類 第1位 () (カッコ) 第2位 * (乗算) / (余算) 第3位 + (足し算) - (引き算) 第4位 ¦ (OR算) & (AND算) 第5位 < (比較) <= (比較) 第6位 == (等しい) != (異なる) 第7位 && (AND比較) 第8位 ¦¦ (OR比較) 第9位 = (代入) += (加算) /= (余算) %= (余り) % (余り) > (比較) >= (比較) -= (減算) *= (乗算)
  • if文 入力が9だ Yes おしいと表示 No 入力が11だ Yes おしいと表示 No if (条件式1) { //条件式1が真の時の処理 }else if (条件式2) { //条件式2が真の時の処理 } else { //条件式が偽の時の処理 } 違うと表示
  • while文 while (条件式){ //繰り返す処理 } ! while ( a != 10){ scanf( %d ,&a); } 条件式 繰り返す処理
  • while文 #include <stdio.h> サンプル int main(void){ int ans = 1; while (ans != 10){ printf("2 5="); scanf("%d",&ans); } printf("正解!"); return 0; }
  • " do-while文 do{ //繰り返す処理 }while (条件式); ! do{ scanf( %d ,&a); }while ( a != 10); 繰り返す処理 条件式
  • do-while文 サンプル #include <stdio.h> int main(void){ int ans; do{ printf("2 5="); scanf("%d",&ans); } while (ans != 10); printf("正解!"); return 0; }
  • 復習問題1 START 変数を用意 式を表示 右のフローチャートで表される 入力を待つ ! プログラムを書きなさい。 正解である No Yes 正解と表示 END 違うと表示
  • 復習問題1 #include <stdio.h> int main(void){ int ans; printf("2 5=?"); scanf("%d",&ans); if (ans == 10) { printf("正解!"); } else { printf("違うよ!¥n"); } return 0; }
  • 復習問題2 次のようなプログラムを作りなさい。 ! 計算式を表示し、 計算に正解するまで何度も入力を 受け付けるプログラム
  • 解答 #include <stdio.h> int main(void){ int ans = 1; while (ans != 10){ printf("2 5="); scanf("%d",&ans); } printf("正解!"); return 0; }
  • 別解 #include <stdio.h> int main(void){ int ans; do{ printf("2 5="); scanf("%d",&ans); } while (ans != 10); printf("正解!"); return 0; }
  • 復習終わり 本題行きます。
  • 制御文 後編 for・switch
  • for文 for (変数の初期化 ; 条件式 ; 更新処理){ //繰り返す処理 変数の初期化 } ! for( i = 0 ; i < 10 ; i++ ){ printf( %d回目¥n ,i); } 条件式 繰り返す処理 更新処理
  • for文 for (変数の初期化 ; 条件式 ; 更新処理){ //繰り返す処理 変数の初期化 } ! for(int i = 0 ; i < 10 ; i++ ){ printf( %d回目¥n ,i); } 条件式 繰り返す処理 更新処理
  • 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; }
  • 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; }
  • 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; }
  • #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; } #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; } #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; } #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; } #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; }
  • 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; }
  • 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; }
  • " 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=1 n=? n=2 それ以外
  • switch-case文 サンプル ! #include <stdio.h> case 2: int main(void){ printf("おしい"); int ans; break; printf("舞鶴高専の所在地は?¥n"); case 3: printf("1:京都 2:福井 3:大阪¥n"); printf("だったらいいね"); printf("->"); break; scanf("%d",&ans); default: switch (ans) { printf("エラー"); case 1: break; printf("正解"); } break; return 0; }
  • switch-case文 サンプル ! #include <stdio.h> case 2: int main(void){ printf("おしい"); int ans; break; printf("舞鶴高専の所在地は?¥n"); case 3: printf("1:京都 2:福井 3:大阪¥n"); printf("だったらいいね"); printf("->"); break; scanf("%d",&ans); default: switch (ans) { printf("エラー"); case 1: break; printf("正解"); } break; return 0; }
  • 配列 配列とは? 一次元配列 0 1 2 10 12 23 いくつもの変数をまとめて用意し、 まとめて使う手法。 データ型 配列名[要素数] ={要素の中身(省略可}; int data[3] = {10, 12, 23};
  • 配列 データ型 配列名[要素数][要素数] ={{要素, 要素},{要素, 要素}}; 二次元配列 0 0 1 1 2 10 12 23 5 4 34 int data[2][3] = {{10, 12, 23},{5,4,34}};
  • 配列 サンプルプログラム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; }
  • 配列 サンプルプログラム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; }
  • 配列 サンプルプログラム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; }
  • 配列 サンプル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; }
  • 自作関数 自作関数とは? プログラムは関数の組み合わせ mainもprintfもscanfも全部関数だった 自分で作る関数が 自作関数 よく使う機能を関数化することで、 見やすいプログラムを作る
  • 自作関数 書式 データ型 関数名(引数){ //処理 return 戻り値; } int TASHIZAN (int x,int y){ int z; z = x + y; return z; }
  • 自作関数 サンプル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; }
  • 自作関数 サンプル1 #include <stdio.h> ! int TASHIZAN(int atai1,int atai2){ int kotae; kotae = atai1 + atai2; コンパイルは上から 実行されるため、 } ! ! 自作関数の場所は main関数より上。 return kotae; int main(void){ int val1,val2,ans; scanf("%d %d",&val1,&val2); ans = TASHIZAN(val1,val2); printf("ans = %d",ans); return 0; }
  • 自作関数 サンプル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); …もしくは、 名前だけmain関数の上 return 0; } ! int TASHIZAN(int atai1,int atai2){ int kotae; kotae = atai1 + atai2; return kotae; }
  • 自作関数 サンプル2 #include<stdio.h> ! void function(void){ printf("Hello Function"); } ! int main(void){ function(); return 0; }
  • 自作関数 サンプル2 #include<stdio.h> ! void function(void){ void ! 「値がない」ことを示す。 ただ処理をしたい時に使う。 printf("Hello Function"); } ! int main(void){ function(); return 0; }
  • 自作関数 サンプル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; }
  • 自作関数 サンプル3 #include<stdio.h> #include moter.c ! int ans; ! void TASHIZAN(void){ int val1, val2; scanf("%d %d", &val1, &val2); グローバル変数 ans = val1 + val2; ! Cファイルのどこからでも 呼び出せる変数 } ! int main(void){ TASHIZAN(); printf("答え:%d", ans); return 0; }
  • おわり お疲れさまでした。