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 odd[100], even[100];
int oddno=0, evenno=0;
int data, i;
while(1) { /* 入力用ループ */
scanf("%d",&data);
if (data==0) break;
if (data%2==0) {
even[evenno++]=data; /* 偶数に追加 */
} else {
odd[oddno++]=data; /* 奇数に追加 */
}
}
if (oddno==evenno) printf("偶数と奇数が同数\n");
else if (oddno>evenno) printf("奇数が多い!!\n");
else printf("偶数が多い!!\n");
if (oddno>=evenno) {
for (i=0; i<oddno; i++) { /* 奇数の表示処理 */
printf("%4d ",odd[i]); /* 4以外の数字でも採点できます */
}
printf("\n");
}
if (oddno<=evenno) {
for (i=0; i<evenno; i++) { /* 偶数の表示処理 */
printf("%4d ",even[i]); /* 4以外の数字でも採点できます */
}
printf("\n");
}
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: %d ", i+1, score[i]);
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: %d ", i+1, score[i]);
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 array[10];
int i, j;
for (i=0; i<10; i++) {
scanf("%d",&array[i]);
if (array[i]==-1) break;
}
j = i;
printf("Input order: ");
for (i=0; i < j; i++) {
printf("%4d ",array[i]); /* 桁数書式指定はなくてもよい */
}
printf("\n");
printf("Reversed order: ");
for (i = j-1; i >= 0; i--) {
printf("%4d ",array[i]); /* 桁数書式指定はなくてもよい */
}
printf("\n");
return 0;
}
Extra問題
E-1 フィボナッチ数列
ファイル名: ex07e1.c
#include <stdio.h>
int main()
{
int Fibonacci[21];
int i;
double goldenratio = 1.6180339887;
Fibonacci[0] = 0;
Fibonacci[1] = 1;
for( i = 2; i < 21; i++ ) {
Fibonacci[i] = Fibonacci[i-1] + Fibonacci[i-2];
}
for( i = 0; i < 21; i++ ) {
printf( "Fibonacci[%d] = %d\n", i, Fibonacci[i] );
}
for( i = 1; i < 20; i++ ) {
printf( "Fibonacci[%d]/Fibonacci[%d] - goldenratio = %10.3e\n", i+1, i, (double)Fibonacci[i+1] / (double)Fibonacci[i] - goldenratio );
}
return 0;
}
