Ex07Ans
From Prog0
演習第7回
Contents |
解答例
A問題
A-1 配列の初期化・表示・エラー
ファイル名: ex07a1.c
#include <stdio.h> int main() { int array[15] = { 1, 7, 10, 18, 27, 31, 42, 49, 54, 50, 61, 67, 72, 88, 93 }; int index; printf("添字を入力してください: "); scanf("%d",&index); if(index >= 0 && index < 15) { printf("array[%d] = %d\n",index,array[index]); if (array[index] % 3 == 0) printf(" 3の倍数です\n"); else printf(" 3の倍数ではありません\n"); } else { printf("範囲外です!\n"); } return 0; }
A-2 漸化式の計算
ファイル名: ex07a2.c
#include <stdio.h> int main() { int m[11]; /* m0 から m10 まで格納するために 11 個の配列が必要 */ int i; m[0] = 0; /* 初項 (第0項) */ /* 漸化式の計算 */ for (i = 1; i < 11; i++) m[i] = 2 * m[i-1] + 1; /* 結果の出力 */ for (i=0; i<11; i++) printf ("%2d: %7d\n", i, m[i]); return 0; }
B問題
B-1 成績一覧の表示
ファイル名: ex07b1.c
#include <stdio.h> int main() { int score[7]; int i; printf("7人分の評点を入力して下さい。\n"); for (i = 0; i < 7; i++) scanf("%d",&score[i]); for(i = 0; i < 7; i++) { printf("%d: %4d ", i+1, score[i]); /* %4dの4はとくにこだわりません */ if (score[i] >= 80) printf("A\n"); if (score[i] >= 65 && score[i] < 80) printf("B\n"); if (score[i] >= 50 && score[i] < 65) printf("C\n"); if (score[i] >= 35 && score[i] < 50) printf("D\n"); if (score[i] < 35) printf("F\n"); } return 0; }
別のプログラム例
#include <stdio.h> int main() { int score[7]; int i; printf("7人分の評点を入力して下さい。\n"); for (i = 0; i < 7; i++) scanf("%d",&score[i]); for(i = 0; i < 7; i++) { printf("%d: %4d ", i+1, score[i]); /* %4dの4はとくにこだわりません */ if (score[i] >= 80) printf("A\n"); else if (score[i] >= 65) printf("B\n"); else if (score[i] >= 50) printf("C\n"); else if (score[i] >= 35) printf("D\n"); else printf("F\n"); } return 0; }
B-2 配列の最大値と最小値
ファイル名: ex07b2.c
#include <stdio.h> int main() { int i, n=8, max, min; int data[8]; printf("8個の整数を空白で区切って入力してください\n"); for(i = 0; i < n; i++){ scanf("%d",&data[i]); } /* 最大値と最小値探索処理 ここから */ max = data[0]; min = data[0]; for (i = 1; i < n; i++){ if (max < data[i]){ max = data[i]; } if (min > data[i]){ min = data[i]; } } /* ここまで */ printf("最大値は%dです。\n",max); printf("最小値は%dです。\n",min); printf("入力された整数の表示\n"); for(i = 0; i < n; i++){ printf("%d ",data[i]); } printf("\n"); return 0; }
B-3 偶数・奇数の仕分け
ファイル名: ex07b3.c
#include <stdio.h> int main() { int input[100]; int odd[100], even[100]; int inputno, oddno=0, evenno=0; int i; for (inputno=0; inputno < 100; inputno++) { /* 入力用ループ */ scanf("%d",&input[inputno]); if (input[inputno]==0) break; if (input[inputno]%2==0) { even[evenno++]=input[inputno]; /* 偶数に追加 */ } else { odd[oddno++]=input[inputno]; /* 奇数に追加 */ } } printf("Input: "); for (i=0; i<inputno; i++) { printf("%d ", input[i]); } printf("\n"); printf("Odd: "); for (i=0; i<oddno; i++) { printf("%d ", odd[i]); } printf("\n"); printf("Even: "); for (i=0; i<evenno; i++) { printf("%d ", even[i]); } printf("\n"); return 0; }
Extra問題
E-1 配列によるヒストグラムの計算
ファイル名: ex07e1.c
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int i; int score[240]; /* 評点データの配列 */ int hist[11]; /* 11分類 */ srand((unsigned)time(NULL)); for(i = 0; i < 240; i++) { score[i] = rand() % (100 + 1); } /* 配列histの初期化 上の変数宣言のところで初期化もOK */ for(i = 0; i < 11; i++) { hist[i] = 0; } /* 分類処理 */ for(i = 0; i < 240; i++) { if (score[i] == 100) hist[10]++; else hist[score[i]/10]++; } /* 結果出力 */ /* for文を使って「x点からy点の人はn人です」 と繰り返すこと */ /* 最後は「100の人はn人です」 とする */ for(i = 0; i < 10; i++) { printf("%d点から%d点の人は%d人です\n", i*10, (i+1)*10-1, hist[i]); } printf("100点の人は%d人です\n", hist[10]); return 0; }