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