Ex07Ans

From Prog0

Jump to: navigation, search

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