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