390 likes | 546 Views
第六回 プログラミング. 情報社会学科. 今日の演習の目標. これまでの復習 2次元配列をマスター switch 文をマスター プログラムを作成 例題:基本、標準、専門 課題:基本、標準、応用1,2 メールレポートを提出. これまでやったことの復習 毎回毎回ちょっとくどいけど. フローチャート. アルゴリズムを記述する図的な表現 JIS C 6270 で標準化されている. 処理. 出力操作. 入力操作. 準備. 出力. 手操作入力. 処理の内容. 他にもたくさん図の種類はあるが …. 表示. 判断 条件. 変数の型と変数宣言. 形式
E N D
第六回 プログラミング 情報社会学科
今日の演習の目標 • これまでの復習 • 2次元配列をマスター • switch文をマスター • プログラムを作成 • 例題:基本、標準、専門 • 課題:基本、標準、応用1,2 • メールレポートを提出
これまでやったことの復習毎回毎回ちょっとくどいけどこれまでやったことの復習毎回毎回ちょっとくどいけど
フローチャート • アルゴリズムを記述する図的な表現JIS C 6270で標準化されている 処理 出力操作 入力操作 準備 出力 手操作入力 処理の内容 他にもたくさん図の種類はあるが… 表示 判断 条件
変数の型と変数宣言 • 形式 • 型名 変数名; /* コメント(変数の用途など) */ • 型名 • 整数型: int • 実数型: float • 文字型: char • 文字列型: ナ・イ・ショ!! • 前もって宣言する。 • 必ず初期化する。
逐次構造 手順A 手順1 { /* 手順A */ 手順1; 手順2; 手順n; } 手順2 … 手順n
分岐構造 if (条件1) { 条件1を満たす時 } else if (条件2){ 条件2を満たす時 } else … いくつでも連ねることができる 条件1 不成立 成立 条件2 不成立 成立 … 条件2 成立時 条件1 成立時
while文 No 条件 Yes 手順1 反復構造(while文) while (条件) { 手順1; } 条件により繰り返し を終了するとき
反復構造(for文) for文 初期文 for (初期文;条件;繰り返し文){ 手順1; } No 条件 Yes 手順1 繰り返しの回数が 決まっているとき 繰り返し文
関係演算子 • AとBが等しい A == B • AとBが等しくない A != B • AかつB A && B • AまたはB A || B • Aではない ! A
同じ型の要素 1次元配列 配列 0番 1番 2番 3番
1次元配列の例 整数型の要素 score[0] int score[100] score[1] score[2] score[3] ・・・・ ・・・・ score[99]
1次元配列の初期化の例~~~テストの点数~~~1次元配列の初期化の例~~~テストの点数~~~ #define NUM_STD 100 ... int score[NUM_STD]; for (i = 0; i < NUM_STD; i++) score[i] = 0;
1次元配列の初期化の例~~~3択クイズの答え~~~1次元配列の初期化の例~~~3択クイズの答え~~~ #define NUM_QUIZ 5 ... int answer[NUM_QUIZ] = {1,2,3,2,1}; ...
1次元配列の使用例~~~ 100人分のテストの点数の入力~~~ #define NUM_STD 100 /* 生徒の人数 */ ... int score[NUM_STD]={0}; /* テストの点数を格納する配列 */ ... /* 点数の入力 */for (i = 0; i < NUM_STD; i++) { printf(“%d番の点数?”,i+1); scanf(“%d”, &score[i]);}
1次元配列の使用例~~~ 100人分のテストの平均点の計算~~~ #define NUM_STD 100 /* 生徒の人数 */ ... int score[NUM_STD]={0}; /* テストの点数を格納する配列 */ int total; /* テストの点数の総合計 */ int mean; /* テストの点数の平均点 */ ... /* 平均点の計算 */total = 0;for (i = 0; i < NUM_STD; i++) { total = total + score[i];} mean = total / NUM_STD;
1次元配列のまとめ • 宣言型名 配列名[要素数]; /* 説明 */ • 取り扱い配列名[添字] 添字は0~(要素数-1) • for文を使った初期化for (i = 0; i < 要素数; i++) 配列名[i]=初期値; • 宣言時の初期化型名 配列名[要素数]={初期値,…};
2次元配列 • 「配列」とは、同じ型の変数を複数あわせて構成した「変数群」
2次元配列 a棟3F-2号 a棟 1F 同じ型の要素 2F 3F 4F 1号 2号 3号 マンション
2次元配列の例 • 100人の学生の5科目の点のデータを処理したいときint scr_a_k1, scr_a_k2, scr_a_k3,...・・・気が遠くなりそう • 一学生の一科目の成績成績[学生番号][科目番号] • こういうときは2次元配列を使うと便利int score[100][5];
2次元配列の例 int score[100][5] 教科0 教科1 教科2 教科3 教科4 0番目 score[1][2] 1番目 2番目 ・・・・ ・・・・ ・・・・ ・・・・ ・・・・ ・・・・ score[99][3] 99番目
2次元配列の初期化 • 使用する前に、すべての要素を必ず初期化をする。
2次元配列の初期化~~~テストの点数~~~2次元配列の初期化~~~テストの点数~~~ #define NUM_STD 100 #define NUM_SBJ 5 ... int score[NUM_STD][NUM_SBJ]; for (i = 0; i < NUM_STD; i++) for (j = 0; j < NUM_SBJ; j++) score[i][j] = 0;
・・・・ ・・・・ ・・・・ ・・・・ ・・・・ 2次元配列の初期化 内ループ j for (j = 0; j < NUM_SBJ; j++) for (i = 0; i < NUM_STD; i++) 外ループ i
**** ****** *** *** ** ** ** ** *** *** ****** **** 2次元配列の初期化と用例~~~花文字~~~ /* 花文字「○」の表示 */ for (y = 0; y < CY; y++) { for (x = 0; x < CX; x++) { if (maru[y][x] == 1) printf(“*”); else printf(““); } printf(”\n”); } return 0; } #include <stdio.h> #define CX 8/* 文字のxサイズ */ #define CY 8/* 文字のyサイズ */ int main(void) { int x,y; int maru[CX][CY] ={/*○パターン*/ {0, 0, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 0, 0, 1, 1, 1}, {1, 1, 0, 0, 0, 0, 1, 1}, {1, 1, 0, 0, 0, 0, 1, 1}, {1, 1, 1, 0, 0, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 0, 0} };
2次元配列の使用例~~~ 100人分のテストの点数の入力~~~ #define NUM_STD 100 /* 生徒の人数 */ #define NUM_SBJ 5 /* 科目の数 */ ... int score[NUM_STD][NUM_SBJ]; /* テストの点数を格納する配列 */ ... /* 点数の入力 */for (i = 0; i < NUM_STD; i++) { for (j = 0; j < NUM_SBJ; j++) { printf(“%d番の科目%dの点数?”, i+1, j+1); scanf(“%d”, &score[i][j]); }}
2次元配列の使用例~~~ 100人分の各科目の平均点の計算~~~ #define NUM_STD 100 /* 生徒の人数 */ #define NUM_SBJ 5 /* 科目の数 */ ... int score[NUM_STD][NUM_SBJ]; /* 各科目の点数を格納する配列 */ int total[NUM_SBJ], mean[NUM_SBJ];/* 各科目の点数の総合計と平均点 */ ... /* 平均点の計算 */ for (kamoku = 0; kamoku < NUM_SBJ; kamoku++) {total[kamoku] = 0;} for (nin = 0; nin < NUM_STD; nin++) { for (kamoku = 0; kamoku < NUM_SBJ; kamoku++) { total[kamoku] = total[kamoku] + score[nin][kamoku]; } } for (kamoku = 0; kamoku < NUM_SBJ; kamoku++) { mean[kamoku] = total[kamoku] / NUM_STD; }
2次元配列のまとめ • 宣言型名 配列名[行数][列数]; /* 説明 */ • 取り扱い配列名[行][列] 添字は0~(要素数-1) • for文を使った初期化for (i = 0; i < 行数; i++) for (j = 0; j < 列数; j++) 配列名[i][j]=初期値; • 宣言時の初期化型名 配列名[行数][列数]={{初期値,...},…};
switch文 if (answer == 1) { daisuki = daisuki + 1; } else if (answer == 2) { suki = suki + 1; } else if (answer == 3) { futsuu = futsuu + 1; } else if (answer == 4) { kirai = kirai + 1; } else if (answer == 5) { daikirai = daikirai + 1; } else { printf(“不適切な入力です!”); } switch (answer) { case 1: daisuki = daisuki + 1; break; case 2: suki = suki + 1; break; case 3: futsuu = futsuu + 1; break; case 4: kirai = kirai + 1; break; case 5: daikirai = daikirai + 1; break; default: printf(“不適切な入力です!”); }
例題 • 基本例題 2次元配列「九九の表」 • 標準例題 2次元配列「表計算」 • 専門例題 switch文
5 2 8 4 3 7 1 9 6 18 8 16 6 10 14 12 4 2 21 6 24 12 3 27 18 15 9 8 4 24 16 12 32 28 20 36 45 5 40 30 15 20 10 25 35 24 18 36 48 30 54 6 12 42 21 28 63 7 35 14 56 42 49 40 16 64 56 32 72 48 24 8 72 9 18 36 81 63 54 45 27 基本例題:九九の表 int kuku[10][10] 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
+ + →1976 + + →2005 標準例題:行の和 mat[M][N] 0 1 2 3 1971 4 1 0 2000 4 1 1
今日の課題 • 基本課題:表計算 • 標準課題:三択クイズ • 応用課題1:アンケート1 • 応用課題2:アンケート2
+ + → 1976 + + + + + → 2005 ↓ 3971 ↓ 8 ↓ 2 3981 基本課題:行,列の和 mat[M][N] 0 1 2 3 1971 4 1 0 2000 4 1 1 2
n-1 人目 標準課題:回答一覧表 int answer[2][N_MAX] 0人目 1人目 2人目 3人目 4人目 5人目 N_MAX 3 2 3 3 1 3 1 0題目 1 1 1 2 3 1 1 1題目 全問正解したのは、0 2 5 ... 番目の人です。
メールレポートの提出 • 〆切:12/1(金)朝9時 • 送先E-mail Address:秘書さんです。 • 詳しくはホームページを参照