Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
プログラム講習
第3回
講習スケジュール
前半
9日(月)
10日(火)
11日(水)
12日(木)
13日(金)
最終日

後半

フローチャート
ビルド 進数計算

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

学生総会、お疲れでした!
データ型
変数(後)
for文 w...
課題の解答
if (mode == 1) {
ans = val1 + val2;
} else if (mode == 2) {
ans = val1 - val2;
} else if (mode == 3) {
ans = val1 * val2;
...
復習
•

前回やったこと
•

データ型

•

変数

•

if文 while文 do-while文

•

条件式

•

オーバーフロー/アンダーフロー
データ型
コンピュータでは、
値の「型(種類)」が明確に分けられる
どういうことか
文字は文字用の変数へ
整数は整数用の変数へ
実数は実数用の変数へ
データ型の種類
データ型
文字型

char
short

整数型

int
long
float

表示書式 バイト数
%c
%d
%d
%d
%f

範囲

備考

1

0∼255

基本的に文字を扱う型。
AVRではあまり使わない。

2...
式の種類
第1位

() (カッコ)

第2位

* (乗算)

/ (余算)

第3位

+ (足し算)

- (引き算)

第4位

¦ (OR算)

& (AND算)

第5位

< (比較)

<= (比較)

第6位

== (等しい...
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);
}
print...
"

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);
pri...
復習問題1
START
変数を用意
式を表示

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

入力を待つ

!

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

正解である

No

Yes
正解と表示

END

違うと表示
復習問題1

#include <stdio.h>
int main(void){
int ans;
printf("2 5=?");
scanf("%d",&ans);
if (ans == 10) {
printf("正解!");
} el...
復習問題2
次のようなプログラムを作りなさい。
!

計算式を表示し、
計算に正解するまで何度も入力を
受け付けるプログラム
解答

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

#include <stdio.h>
int main(void){
int ans;
do{
printf("2 5=");
scanf("%d",&ans);
} while (ans != 10);
printf("正解!");
...
復習終わり
本題行きます。
制御文 後編
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...
for文
サンプル1

#include <stdio.h>
int main(void){
int ans, i;
for ( i = 0 ; i < 10 ; i++ ) {
printf("%d回目 5 2=",i);
scanf("%d...
for文
サンプル1

#include <stdio.h>
int main(void){
int ans, i;
for ( i = 0 ; i < 10 ; i++ ) {
printf("%d回目 5 2=",i);
scanf("%d...
#include <stdio.h>
int main(void){
int ans, i;
i = 0;
while (i < 10) {
printf("%d回目 5 2=",i);
scanf("%d",&ans);
i++;
}
ret...
#include <stdio.h>
int main(void){
int ans, i;
i = 0;
while (i < 10) {
printf("%d回目 5 2=",i);
scanf("%d",&ans);
i++;
}
ret...
#include <stdio.h>
int main(void){
int ans, i;
i = 0;
while (i < 10) {
printf("%d回目 5 2=",i);
scanf("%d",&ans);
i++;
}
ret...
#include <stdio.h>
int main(void){
int ans, i;
i = 0;
while (i < 10) {
printf("%d回目 5 2=",i);
scanf("%d",&ans);
i++;
}
ret...
for文
サンプル2

#include <stdio.h>
int main(void){
int ans, i;
for ( i = 0 ; i < 10 ; i++ ) {
printf("%d回目 5 2=",i);
scanf("%d...
for文
サンプル2

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

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

switch (val) {
case 0;
s...
switch-case文 サンプル
!

#include <stdio.h>

case 2:

int main(void){

printf("おしい");

int ans;

break;

printf("舞鶴高専の所在地は?¥n"...
switch-case文 サンプル
!

#include <stdio.h>

case 2:

int main(void){

printf("おしい");

int ans;

break;

printf("舞鶴高専の所在地は?¥n"...
配列
配列とは?

一次元配列
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]);...
配列 サンプルプログラム2
#include <stdio.h>
int main(void){
int array[3];
array[0] = 3;
array[1] = 2;
array[2] = 5;
printf("%d¥n",arr...
配列 サンプルプログラム3
#include <stdio.h>
int main(void){
int array[3],i;
for (i = 0; i < 3; i++) {
scanf("%d",&array[i]);
}
for (i...
配列
サンプル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++) {
...
自作関数
自作関数とは?

プログラムは関数の組み合わせ
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;
}
!

...
自作関数
サンプル1

#include <stdio.h>
!

int TASHIZAN(int atai1,int atai2){
int kotae;
kotae = atai1 + atai2;

コンパイルは上から
実行されるため、...
自作関数
サンプル1

#include <stdio.h>
!

int TASHIZAN(int,int);
!

int main(void){
int val1,val2,ans;
scanf("%d %d",&val1,&val2);...
自作関数
サンプル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");
}
!

i...
自作関数
サンプル3

#include<stdio.h>
!

int ans;
!

void TASHIZAN(void){
int val1, val2;
scanf("%d %d", &val1, &val2);
ans = val1...
自作関数
サンプル3

#include<stdio.h>
#include moter.c
!

int ans;
!

void TASHIZAN(void){
int val1, val2;
scanf("%d %d", &val1, &...
おわり
お疲れさまでした。
Upcoming SlideShare
Loading in …5
×

プログラマ講習第3回

378 views

Published on

Published in: Education
  • Be the first to comment

  • Be the first to like this

プログラマ講習第3回

  1. 1. プログラム講習 第3回
  2. 2. 講習スケジュール 前半 9日(月) 10日(火) 11日(水) 12日(木) 13日(金) 最終日 後半 フローチャート ビルド 進数計算 プログラムとは? 関数 変数(前) 学生総会、お疲れでした! データ型 変数(後) for文 while文 do-while文 配列 演習 if文 条件式 自作関数 予約
  3. 3. 課題の解答
  4. 4. 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); }
  5. 5. 復習 • 前回やったこと • データ型 • 変数 • if文 while文 do-while文 • 条件式 • オーバーフロー/アンダーフロー
  6. 6. データ型 コンピュータでは、 値の「型(種類)」が明確に分けられる どういうことか 文字は文字用の変数へ 整数は整数用の変数へ 実数は実数用の変数へ
  7. 7. データ型の種類 データ型 文字型 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
  8. 8. 式の種類 第1位 () (カッコ) 第2位 * (乗算) / (余算) 第3位 + (足し算) - (引き算) 第4位 ¦ (OR算) & (AND算) 第5位 < (比較) <= (比較) 第6位 == (等しい) != (異なる) 第7位 && (AND比較) 第8位 ¦¦ (OR比較) 第9位 = (代入) += (加算) /= (余算) %= (余り) % (余り) > (比較) >= (比較) -= (減算) *= (乗算)
  9. 9. if文 入力が9だ Yes おしいと表示 No 入力が11だ Yes おしいと表示 No if (条件式1) { //条件式1が真の時の処理 }else if (条件式2) { //条件式2が真の時の処理 } else { //条件式が偽の時の処理 } 違うと表示
  10. 10. while文 while (条件式){ //繰り返す処理 } ! while ( a != 10){ scanf( %d ,&a); } 条件式 繰り返す処理
  11. 11. while文 #include <stdio.h> サンプル int main(void){ int ans = 1; while (ans != 10){ printf("2 5="); scanf("%d",&ans); } printf("正解!"); return 0; }
  12. 12. " do-while文 do{ //繰り返す処理 }while (条件式); ! do{ scanf( %d ,&a); }while ( a != 10); 繰り返す処理 条件式
  13. 13. do-while文 サンプル #include <stdio.h> int main(void){ int ans; do{ printf("2 5="); scanf("%d",&ans); } while (ans != 10); printf("正解!"); return 0; }
  14. 14. 復習問題1 START 変数を用意 式を表示 右のフローチャートで表される 入力を待つ ! プログラムを書きなさい。 正解である No Yes 正解と表示 END 違うと表示
  15. 15. 復習問題1 #include <stdio.h> int main(void){ int ans; printf("2 5=?"); scanf("%d",&ans); if (ans == 10) { printf("正解!"); } else { printf("違うよ!¥n"); } return 0; }
  16. 16. 復習問題2 次のようなプログラムを作りなさい。 ! 計算式を表示し、 計算に正解するまで何度も入力を 受け付けるプログラム
  17. 17. 解答 #include <stdio.h> int main(void){ int ans = 1; while (ans != 10){ printf("2 5="); scanf("%d",&ans); } printf("正解!"); return 0; }
  18. 18. 別解 #include <stdio.h> int main(void){ int ans; do{ printf("2 5="); scanf("%d",&ans); } while (ans != 10); printf("正解!"); return 0; }
  19. 19. 復習終わり 本題行きます。
  20. 20. 制御文 後編 for・switch
  21. 21. for文 for (変数の初期化 ; 条件式 ; 更新処理){ //繰り返す処理 変数の初期化 } ! for( i = 0 ; i < 10 ; i++ ){ printf( %d回目¥n ,i); } 条件式 繰り返す処理 更新処理
  22. 22. for文 for (変数の初期化 ; 条件式 ; 更新処理){ //繰り返す処理 変数の初期化 } ! for(int i = 0 ; i < 10 ; i++ ){ printf( %d回目¥n ,i); } 条件式 繰り返す処理 更新処理
  23. 23. 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; }
  24. 24. 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; }
  25. 25. 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; }
  26. 26. #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; }
  27. 27. #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; }
  28. 28. #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; }
  29. 29. #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; }
  30. 30. 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; }
  31. 31. 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; }
  32. 32. " 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 それ以外
  33. 33. 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; }
  34. 34. 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; }
  35. 35. 配列 配列とは? 一次元配列 0 1 2 10 12 23 いくつもの変数をまとめて用意し、 まとめて使う手法。 データ型 配列名[要素数] ={要素の中身(省略可}; int data[3] = {10, 12, 23};
  36. 36. 配列 データ型 配列名[要素数][要素数] ={{要素, 要素},{要素, 要素}}; 二次元配列 0 0 1 1 2 10 12 23 5 4 34 int data[2][3] = {{10, 12, 23},{5,4,34}};
  37. 37. 配列 サンプルプログラム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; }
  38. 38. 配列 サンプルプログラム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; }
  39. 39. 配列 サンプルプログラム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; }
  40. 40. 配列 サンプル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; }
  41. 41. 自作関数 自作関数とは? プログラムは関数の組み合わせ mainもprintfもscanfも全部関数だった 自分で作る関数が 自作関数 よく使う機能を関数化することで、 見やすいプログラムを作る
  42. 42. 自作関数 書式 データ型 関数名(引数){ //処理 return 戻り値; } int TASHIZAN (int x,int y){ int z; z = x + y; return z; }
  43. 43. 自作関数 サンプル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; }
  44. 44. 自作関数 サンプル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; }
  45. 45. 自作関数 サンプル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; }
  46. 46. 自作関数 サンプル2 #include<stdio.h> ! void function(void){ printf("Hello Function"); } ! int main(void){ function(); return 0; }
  47. 47. 自作関数 サンプル2 #include<stdio.h> ! void function(void){ void ! 「値がない」ことを示す。 ただ処理をしたい時に使う。 printf("Hello Function"); } ! int main(void){ function(); return 0; }
  48. 48. 自作関数 サンプル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; }
  49. 49. 自作関数 サンプル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; }
  50. 50. おわり お疲れさまでした。

×