Ex07Ans
From Prog0
演習第7回
Contents |
解答例
A問題
A-1 配列の初期化・表示・エラー(口頭試問)
ファイル名: ex07a1.c
#include <stdio.h>
int main()
{
int array[15] = {1, 5, 12, 19, 23, 31, 36, 40, 44, 51, 55, 63, 78, 85, 90};
int index;
printf("添字を入力してください: ");
scanf("%d",&index);
if(index >= 0 && index < 15) {
printf("array[%d] = %d\n",index,array[index]);
if (array[index] % 2 == 0)
printf("%dは偶数です。\n",array[index]);
else
printf("%dは奇数です。\n",array[index]);
} 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, max, min;
int data[10];
printf("整数の個数を入力してください(1〜10): ");
scanf("%d", &n);
printf("%d個の整数を空白で区切って入力してください\n",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;
}
