Ex07Ans

From Prog0

Jump to: navigation, search

演習第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;
}
Personal tools