Upload
yuma-yoshimoto
View
133
Download
0
Embed Size (px)
Citation preview
プログラム講習第3回
講習スケジュール前半 後半
9日(月) フローチャート ビルド 進数計算
プログラムとは? 関数 変数(前)
10日(火) 学生総会、お疲れでした!
11日(水) データ型 変数(後)
if文 条件式
12日(木) for文 while文 do-while文 配列 自作関数
13日(金) 最終日 演習 予約
課題の解答
#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; }
復習• 前回やったこと
• データ型
• 変数
• if文 while文 do-while文
• 条件式
• オーバーフロー/アンダーフロー
データ型コンピュータでは、 値の「型(種類)」が明確に分けられる
どういうことか
文字は文字用の変数へ 整数は整数用の変数へ 実数は実数用の変数へ
データ型の種類データ型 表示書式 バイト数 範囲 備考
文字型 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よりスゴイ精度
式の種類第1位 () (カッコ)第2位 * (乗算) / (余算) % (余り)第3位 + (足し算) - (引き算)第4位 | (OR算) & (AND算)第5位 < (比較) <= (比較) > (比較) >= (比較)第6位 == (等しい) != (異なる)第7位 && (AND比較)第8位 || (OR比較)
第9位= (代入) += (加算) -= (減算) *= (乗算)/= (余算) %= (余り)
if文if (条件式1) { //条件式1が真の時の処理 }else if (条件式2) { //条件式2が真の時の処理 } else { //条件式が偽の時の処理 }
違うと表示
入力が9だ
おしいと表示Yes
入力が11だ
No
Yesおしいと表示
No
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
正解である
正解と表示 違うと表示Yes
No
START
変数を用意
式を表示
入力を待つ
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; 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; }
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 = ?
n = 2 n = 1 それ以外
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; }
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; }
配列配列とは? いくつもの変数をまとめて用意し、
まとめて使う手法。
一次元配列 データ型 配列名[要素数] ={要素の中身(省略可};
0 1 210 12 23
int data[3] = {10, 12, 23};
配列
二次元配列 データ型 配列名[要素数][要素数] ={{要素, 要素},{要素, 要素}};
0 1 2
0 10 12 23
1 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; 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関数より上。
自作関数 サンプル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関数の上
自作関数 サンプル2
#include<stdio.h> !void function(void){ printf("Hello Function"); } !int main(void){ function(); return 0; }
自作関数 サンプル2
#include<stdio.h> !void function(void){ printf("Hello Function"); } !int main(void){ function(); return 0; }
void !
「値がない」ことを示す。 ただ処理をしたい時に使う。
自作関数 サンプル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; } !int main(void){ TASHIZAN(); printf("答え:%d", ans); return 0; }
グローバル変数 !
Cファイルのどこからでも 呼び出せる変数
おわりお疲れさまでした。