C言語プログラム応用 第2回 本日のメニュー 2014.4.17 • 繰返し文 (教科書75ページ) do文,while文,for文 List4-14 (教科書77ページ) • 配列 List5-1,5-2, 5-3 (教科書88~90ページ) • 配列の初期化,配列のコピー,配列を順番に並べ替える List5-5 (教科書92ページ) List5-6 (教科書93ページ) List5-8 (教科書95ページ) • オブジェクト形式マクロ #define List5-11 (教科書98ページ) • 演習問題2-1 ★提出 • 演習問題2-2 ★提出 3種類の繰返し文 for文 for (初期値; 条件式;増分量 ){ 文; } while文 while ( 式 ){ 文; } do文 do { 文; } while ( 式 ); 少なくとも1回は 文を実行する int no; int sum= 0; for( no=1; no < 6; no++) { sum += no ; } int no =1; int sum= 0; while( no < 6){ sum += no ; no++; } int no =1; int sum= 0; do { sum += no ; no ++; } while ( no < 6) ; 文を実行しない こともある List4-11 整数を指示された個数だけ読み込んで合計値・平均値を表示 #include <stdio.h> int main(void) { int i = 0 ; int sum = 0; int num, tmp; printf(“整数は何個ですか:”); scanf(“%d”, &num); while (繰返し条件式) { 点数を読み込んで加算 } iの値を1つ増やした後 表示する while( i < num){ printf(“No.%d :”, ++i) ; scanf(“%d”, &tmp); sum += tmp; } printf(“合計値:%d¥n", sum); printf(“平均値:%.2f¥n”, (double)sum / num); return(0); } 実行例 整数は何個ですか : 3 No.1 :15 No.2 :20 No.3 :30 合計値:65 平均値: 21.67 List4-14 指定された個数だけ整数を読み込で合計値・平均値を表示(for文) #include <stdio.h> int main(void) { int i; int sum = 0; int num, tmp; printf("整数は何個ですか:"); scanf("%d", &num); for(i =0; i < num; i++) { for (初期値; 条件式;増分 ){ printf(“No.%d : ", i+1); 文; scanf("%d", &tmp); } sum += tmp; } 整数は何個ですか:4 printf(“合計値: %d¥n", sum); No.1 : 5 printf("平均値: %.2f¥n", (double)sum / num); return(0); } No.2 : 45 No.3 : 8 No.4 : 90 合計値: 148 平均値: 37.00 List 5-2 学生数 5人 配列の宣言 vc[5] 各配列は vc[0], vc[1], vc[2], vc[3], vc[4] 配列の各要素を先頭から順に1,2,3,4,5を代入して表示 #include <stdio.h> int main() { int vc[5]; /*要素が5の配列*/ vc[0]=1; vc[1]=2; vc[2]=3; vc[3]=4; vc[4]=5; printf(" vc[0] = %d ¥n", vc[0] ); printf(" vc[1] = %d ¥n", vc[1] ); printf(" vc[2] = %d ¥n", vc[2] ); printf(" vc[3] = %d ¥n", vc[3] ); printf(" vc[4] = %d ¥n", vc[4] ); return(0); } 1 2 3 4 5 vc[0] vc[1] vc[2] vc[3] vc[4] 出力 vc[0] = vc[1] = vc[2] = vc[3] = vc[4] = 1 2 3 4 5 List 5-3 配列の各要素を先頭から順に1,2,3,4,5 を代入して表示(for文) 配列と繰返し文 (for文) の組み合せ #include <stdio.h> int main() { int i; int vc[5]; for(i=0;i<5;i++) vc[i]=i+1; vc[0] vc[1] vc[2] /*値の代入*/ for(i=0;i<5;i++) /*表示*/ printf(“vc[%d] = %d ¥n", i, vc[i] ); return(0); } 1 2 3 4 5 vc[3] vc[4] 出力 vc[0] = vc[1] = vc[2] = vc[3] = vc[4] = 1 2 3 4 5 List 5-5 配列の各要素の先頭から順に1,2,3,4,5で初期化 #include <stdio.h> int main() { int i; int vc[5]={1,2,3,4,5}; / *初期化*/ for(i=0;i<5;i++) printf(“vc[%d] = %d ¥n", i, vc[i] ); return(0); } 出力 vc[0] = vc[1] = vc[2] = vc[3] = vc[4] = 1 2 3 4 5 List 5-6 配列の全要素を別の配列にコピー #include <stdio.h> int main(){ int i; int va[5]={15,20,30}; int vb[5]; /* {15,20,30,0,0}で初期化 */ for(i=0;i<5;i++) vb[i]=va[i]; /*配列と配列のコピー*/ puts(" va vb"); puts("--------"); for(i=0;i<5;i++) printf(“%3d%3d ¥n", va[i] ,vb[i] ); return(0); } List 5-8 配列の全要素を逆順に並べかえる int main() d:¥2008¥ホームエレ¥C言語¥c10 { int i; int vx[5]; for(i=0;i<5;i++){ printf(“vx[%d] :",i); scanf("%d",&vx[i]); } for(i=0;i<2;i++){ int temp = vx[i]; i=0のとき:vx[0]とvx[4]を交換 vx[i] = vx[4-i]; i=1のとき: vx[1]とvx[3]を交換 vx[4-i] = temp; } for(i=0;i<5;i++) printf(“vx[%d]=%d ¥n",i, vx[i] ); return (0); } List 5-11 マクロ命令 #define #define文で 配列要素数を設定 配列宣言で tensu [n] 変数nで宣言はできない #include<stdio.h> #define NUMBER 5 /* 人数 */ オブジェクト形式の int main(void){ マクロ命令 int i; int tensu[NUMBER]; /*学生の点数*/ int max,min; /*最高点・最低点*/ puts("点数を入力してください。"); for(i=0;i<NUMBER ;i++){ printf("%2d番:",i+1); scanf("%d",&tensu[i]); } min=max=tensu[0]; for(i=0;i<NUMBER ;i++){ if (tensu[i] > max) max = tensu[i]; /*最大*/ if (tensu[i] < min) min = tensu[i]; /*最小*/ } printf ("最高点:%d ¥n",max); printf ("最低点:%d ¥n",min); return(0); } 演習問題2-1 /* 読み込んだ整数値を0までカウントダウン */ while文を使った右のList4-7 のプログラムをfor文を使った プログラムに変更せよ. ソースと実行結果を提出. #include <stdio.h> int main(void) { int count; printf("整数を入力して下さい:"); scanf("%d", &count); while (count >= 0) { printf("%3d ", count); count--; } printf(“!! ¥n”); return(0); } 演習問題2-2 配列を用いて10人の学生の点数(100点満点)を読み込み、60点 未満の不合格者リストと出力例にある再試験日等を表示せよ. ただし,添付する実行結果は2人以上不合格者になる点数を入 力せよ. 出力例 点数を入力して下さい 1番:95 2番:50 3番:80 ・ ・ 9番:100 10番:55 ------------------不合格者リスト 2番 6番 10番 再試験日:2014年7月7日(金)9:30~11:00 場所: W707教室 演習問題2-2 ヒント #include<stdio.h> #define MEMBER int main (void) { 10 /* 人数 */ int i ; int point[MEMBER] ; /*学生の点数*/ puts("点数を入力してください。"); for ( i=0; i < MEMBER ; i++ ) { printf ( "%2d番:“, i+1); scanf ( "%d“, &point[i] ); } puts (“------------------------”); puts (“不合格者リスト”); for ( i=0; i<MEMBER; i++ ) { /* 不合格者の出力: } /* 再試の出力*/ return(0); } if 文を使って60点未満なら、その番号を出力する*/
© Copyright 2024 ExpyDoc