Algorithm/Do it

[자료구조와 함께 배우는 알고리즘 입문 - C언어 편] 2장 기본 자료구조 연습문제 Q12 답안 p.93

Bonita SY 2019. 10. 12. 10:38
728x90
반응형

Q12. 실습 2-13 프로그램의 시력 분포를 오른쪽처럼 그래프 모양으로 출력하도록 프로그램을 작성하세요.

0.1 ~ : *

0.2 ~ : ***

0.3 ~ : *

... 이하 생략 ...


코드)

#include <stdio.h>
#define VMAX 21

typedef struct {
  char name[20];
  int height;
  double vision;
} PhysCheck;

double ave_height(const PhysCheck dat[], int n) {
  int i;
  double sum=0;

  for(i=0; i<n; i++)
    sum += dat[i].height;

  return sum / n;
}

void dist_vision(const PhysCheck dat[], int n, int dist[]) {
  int i;

  for(i=0; i<VMAX; i++)
    dist[i] = 0;

  for(i=0; i<n; i++)
    if(dat[i].vision >= 0.0 && dat[i].vision <= VMAX/10.0)
      dist[(int)(dat[i].vision * 10)]++;
}

int main(void) {
  int i;
  PhysCheck x[]= {
    {"박현규", 162, 0.3},
    {"황진아", 173, 0.7},
    {"최윤미", 175, 2.0},
    {"홍연의", 171, 1.5},
    {"이수진", 168, 0.4},
    {"김영준", 174, 1.2},
    {"박용규", 169, 0.8}
  };
  int nx = sizeof(x) / sizeof(x[0]);
  int vdist[VMAX];
  puts("■ □ ■ 신체 검사표 ■ □ ■");
  puts(" 이름          키 시력 ");
  puts("-----------------------");
  for(i=0; i<nx; i++)
    printf("%-18.18s%4d%5.1f\n", x[i].name, x[i].height, x[i].vision);

  printf("\n 평균 키 : %5.1f cm\n", ave_height(x, nx));

  dist_vision(x, nx, vdist);
  printf("\n 시력 분포 \n");
  for(i=0; i<VMAX; i++) {
    int j;
    printf("%3.1f ~ : ", i/10.0);
    for(j=0; j<vdist[i]; i++)
      printf("*");
    printf("\n");
  }

  return 0;
}

실행 결과)

sy@sy:~/algorithm/doit/chap02$ gcc q12.c -o q12
sy@sy:~/algorithm/doit/chap02$ ./q12
■ □ ■ 신체 검사표 ■ □ ■
 이름          키 시력
-----------------------
박현규          162  0.3
황진아          173  0.7
최윤미          175  2.0
홍연의          171  1.5
이수진          168  0.4
김영준          174  1.2
박용규          169  0.8

 평균 키 : 170.3 cm

 시력 분포
0.0 ~ :
0.1 ~ :
0.2 ~ :
0.3 ~ : **
0.6 ~ :
0.7 ~ : **
1.0 ~ :
1.1 ~ :
1.2 ~ : *
1.4 ~ :
1.5 ~ : *
1.7 ~ :
1.8 ~ :
1.9 ~ :
2.0 ~ : *
728x90
반응형