プログラムの制御構造 配列・繰り返し
前回の復習 演算子の表の見方 選択 ans1= 1 < 2 < 3; ans2= 3 > 2 > 1; ans1=1,ans1=2+ans1; 選択 If文、switch文 複文(ブロック)
配列 配列=変数名と番号を組み合わせた変数 一次元配列 int data[4]; data[0]=1; data[1]=2; 一次元配列の初期化 int data[]={1,2,3,4}; 1 2 data[0] data[1] data[2] data[3] 添え字(インデックス)は0から始まる! この場合は省略可能
多次元配列 2次元入配列 int data[4][2]; data[0][0]=1; data[0][1]=2; data[1][0]=3; 2次元配列の初期化 int data[][2]={{1,2},{3,4},{5,6},{7,8}}; 3次元配列 Int data[3][4][2]; data[0][0] data[0][1] 1 2 3 4 6 7 8 data[3][0] data[3][1]
プログラムの制御構造 繰り返し while文 基本の繰り返し for文 繰り返し回数が予め決まっている do文 実行部分を必ず1回は実行する
while文 while文 制御式を評価して、真なら文を実行し while文の先頭に戻る。そうでなけれ ばwhile文を終了する。
for文 for文 式1を実行。式2を制御式として {{文}式3}を文とするwhile文 を実行する。
do文 do文 文を最低一回は実行し、その後は while文と同じ。
平均点を求める:while文を使ったもの #include <stdio.h> #define N 100 /* 最大答案数 */ int main(void) { int Data[N], Count, Total, No_of_data; double Average; Count = 0; Total = 0; while(scanf("%d",&Data[Count])!=EOF) { Total += Data[Count++]; } No_of_data = Count; if(No_of_data >0) { Average =(double)Total/no_of_data; printf("Average = %f\n", Average); } else { printf("No data !\n"); コメント(注釈) オブジェクト形式マクロ(マクロ命令) ここを書き換える
平均点を求める: for文を使ったもの #include <stdio.h> #define N 100 int main(void) { int Data[N], Count, Total, No_of_data; double Average; scanf(“%d”,&No_of_data); for(count=0,Total=0;count<No_of_data, count++) { scanf(“%d”,&Data[Count]); Total+=Data[Count]; } if(No_of_data >0) { Average = (double)Total/No_of_data; printf("Average = %f\n", Average); } else { printf("No data !\n");
平均点を求める: do文を使ったもの #include <stdio.h> #define N 100 int main(void) { int Data[N], Count, Total, No_of_data; double Average; scanf(“%d”,&No_of_data); count=0; Total=0; do { scanf(“%d”,&Data[Count]); Total+=Data[Count++]; } while (count<No_of_count) if(No_of_data >0) { Average = (double)Total/No_of_data; printf("Average = %f\n", Average); } else { printf("No data !\n");
繰り返しの制御を途中で変える break breakを含む文の直後に制御を移す continue continueを含む文の最後に空文を仮定し てそこに制御を移す goto gotoで示されたラベルの付いた文に制御 を移す
break,continue,gotoの流れ { break; } { continue; } { goto L1; } L1: 文 or ;/* 空分*/ break continue goto
0点が入力されるまでの平均を求める #include <stdio.h> If(Count >0) { #define N 100 int main(void) { int Data[N], Count, Total, No_of_data; double Average; scanf("%d", &No_of_data); for(Count=0,Total=0;Count<No_of_data; Count++){ scanf("%d",&Data[Count]); if(Data[Count]==0) break; Total+=Data[Count]; } If(Count >0) { Average =(double)Total/Count; printf("Average = %f\n", Average); } else { printf("No data !\n");
60点以上の人の平均点 #include <stdio.h> if(Subcount >0) { #define N 100 int main(void) { int Data[N], Count, Total, No_of_data; double Average; int Subcount; scanf("%d", &No_of_data); for(Count=0,Total=0,Subcount=0;Count<No_of_data; Count++){ scanf("%d",&Data[Count]); if(Data[Count] < 60) coutinue; Total+=Data[Count]; Subcount++; } if(Subcount >0) { Average =(double)Total/Subcount; printf("Average = %f\n", Average); } else { printf("No data !\n");
異常な値が入力されたら終了 #include <stdio.h> #define N 100 int main(void) { int Data[N], Count, Total, No_of_data; double Average; scanf(“%d”,&No_of_data); for(count=0,Total=0;count<No_of_data, count++) { scanf(“%d”,&Data[count]); if(Data[Count]<0 || Data[Count]>100) goto Err; Total+=Data[count]; } if(No_of_data >0) { Average = (double)Total/No_of_data; printf("Average = %f\n", Average); } else { printf("No data !\n"); return(0); Err: printf(“Invarid data is input !\n”);