#include <stdio.h>
#include <string.h>
#define COUNT 3
void ex01()
{
char name[COUNT][10], key[10], temp_name[10]; //3명의 이름 입력
int kor[COUNT], eng[COUNT], math[COUNT], tot[COUNT], i, j, rank[COUNT], temp_int;
double avg[COUNT], temp_avg;
for (i = 0; i < COUNT; i++)
{
printf("%d번 이름 입력 : ", i + 1);
scanf("%s", name[i]);
printf("국어 성적 입력: ");
scanf("%d", &kor[i]);
printf("영어 성적 입력: ");
scanf("%d", &eng[i]);
printf("수학 성적 입력: ");
scanf("%d", &math[i]);
tot[i] = kor[i] + eng[i] + math[i];
avg[i] = (double)tot[i] / COUNT;
rank[i] = 1;
}
for (i = 0; i < COUNT - 1; i++)
{
for (j = i + 1; j < COUNT; j++)
{
if (strcmp(name[i], name[j]) > 0) //앞이 큰 경우 양수, 뒤에가 클 경우 음수, 같으면 0
{
strcpy(temp_name, name[i]); //i번째를 임시변수에 넣는다
strcpy(name[i], name[j]);
strcpy(name[j], temp_name);
temp_int = kor[i];
kor[i] = kor[j];
kor[j] = temp_int;
temp_int = eng[i];
eng[i] = eng[j];
eng[j] = temp_int;
temp_int = math[i];
math[i] = math[j];
math[j] = temp_int;
temp_int = tot[i];
tot[i] = tot[j];
tot[j] = temp_int;
temp_avg = avg[i];
avg[i] = avg[j];
avg[j] = temp_avg;
}
}
}
for (i = 0; i < COUNT - 1; i++)
{
for (j = i + 1; j < COUNT; j++)
{
if (avg[i] < avg[j])
rank[i]++;
else if (avg[i] > avg[j])
rank[j]++;
}
}
printf("조회할 이름을 검색: ");
scanf("%s", key);
int n = binary_search(name, key);
if (n == -1)
printf("찾는 값이 없습니다.\n");
else
{
printf("탐색 결과 배열주소는 [%d] 입니다. \n", n);
printf(" 성명 국어 영어 수학 총점 평균 석차 \n");
printf("%7s %5d %5d %5d %5d %5.1lf %5d \n", name[n], kor[n], eng[n], math[n], tot[n], avg[n], rank[n]);
}
}
int binary_search(char name[][10], char key[10])
{
int high = COUNT-1;
int low = 0;
int mid = 0;
while (low<=high)
{
mid= (high + low) / 2;
if (strcmp(name[mid],key) == 0)
return mid;
else if (strcmp(name[mid], key) > 0)
high = mid - 1;
else
low = mid + 1;
}
return -1;
}