언어 자료구조 알고리즘/디딤돌 C언어

[정답] 디딤돌 C언어 50. 인덱스 연산자

언제나 휴일 언제나휴일 2016. 5. 1. 08:07
반응형

[정답] 50. 인덱스 연산자


인덱스 연산자


기본 연습
1. 4
명의 국어 성적을 관리할 있는 배열을 선언하시오.
   
그리고 첫번째 학생은 90, 두번째 학생은 85, 세번째 학생은 69, 네번째 학생은 75점으로 대입합니다.
     
명의 국어 성적의 합계, 평균을 출력하는 프로그램을 작성하시오
:
//4 명의 국어 성적을 관리할 있는 배열을 선언하시오.
//그리고 첫번째 학생은 90, 두번째 학생은 85, 세번째 학생은 69, 네번째 학생은 75점으로 대입
// 명의 국어 성적의 합계, 평균을 출력하는 프로그램을 작성하시오
 
 
#include <stdio.h>
#define MAX_STUDENT 4
 
int main(void)
{
    int scores[MAX_STUDENT];   
    int ni;
    int sum=0;
   
    scores[0] = 90;
    scores[1] = 85;
    scores[2] = 69;
    scores[3] = 75;
 
    for (ni = 0; ni < MAX_STUDENT; ni++)
    {
        sum += scores[ni];       
    }
    printf("합계: %d , 평균: %.2f\n", sum, sum / (double)MAX_STUDENT);
    return 0;
}
 
실행 결과
합계: 319 평균: 79.75
 

 2. 명의 국어, 영어, 수학 성적을 관리하는 프로그램을 작성하시오.  
      a.
국어, 영어, 수학 성적은 초기값을 -1 설정합니다.   
      b.
프로그램은 다음을 반복합니다.
          b.1 “I:
추가 D: 삭제 S:검색 L:전체 출력 E:종료 화면에 출력
          b.2
하나의 문자를 입력받음
          b.3
입력받은 문자가 ‘i’ 혹은 ‘I’ 때는 추가, ‘d’ 혹은 ‘D’ 때는 삭제 , ‘s’ 혹은 ‘S’
때는 검색
                 ‘l’, ‘L’
때는 전체 출력을 수행합니다.  
     *
추가 기능에서는 과목을 선택한 후에 성적을 입력받아 해당 과목의 성적을 설정합니다.  
     *
삭제 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 -1 설정합니다.  
     *
검색 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 출력합니다.  
     *
전체 출력에서는 모든 과목의 성적을 출력합니다.
        (
, E 누르면 프로그램을 종료)

:
// 명의 국어, 영어, 수학 성적을 관리하는 프로그램을 작성하시오.
//a.국어, 영어, 수학 성적은 초기값을 - 1 설정합니다.
//b.프로그램은 다음을 반복합니다.
//b.1 “I: 추가 D : 삭제 S : 검색 L : 전체 출력 E : 종료 화면에 출력
//b.2 하나의 문자를 입력받음
//b.3 입력받은 문자가 ‘i’ 혹은 ‘I’ 때는 추가, ‘d’ 혹은 ‘D’ 때는 삭제, ‘s’ 혹은 ‘S’
//때는 검색,
//‘l’, ‘L’ 때는 전체 출력을 수행합니다.
//* 추가 기능에서는 과목을 선택한 후에 성적을 입력받아 해당 과목의 성적을 설정합니다.
//*삭제 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 - 1 설정합니다.
//*검색 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 출력합니다.
//*전체 출력에서는 모든 과목의 성적을 출력합니다.
//(, E 누르면 프로그램을 종료) 
#include <stdio.h>
enum SubjectType
{
    KOREAN, ENGLISH, MATH, MAX_SUBJECT
};
 
int main(void)
{
    int scores[MAX_SUBJECT] = { -1,-1,-1 };
    const char *titles[MAX_SUBJECT] = { "국어","영어","수학" };
    char key = '\0';
    int si, s;
    while (key != 'E')
    {
        printf("I:추가 D:삭제 S:검색 L:전체 출력 E:종료\n");
        printf("메뉴 선택:");
        scanf_s(" %c", &key, 1); //엔터를 스킵하기 위해 앞에 공백을 포함
        switch (key)
        {
        case 'i': case 'I':
            for (si = 0; si < MAX_SUBJECT; si++)
            {
                printf("%s:%d ", titles[si], si + 1);
            }
            printf("과목 입력:");
            scanf_s("%d", &s);
            if ((s <= 0) || (s>MAX_SUBJECT))
            {
                printf("잘못 선택하셨네요.");
            }
            else
            {
                printf("성적 입력:");
                scanf_s("%d", scores + s - 1);
                if ((scores[s - 1] < 0) || (scores[s - 1]>100))
                {
                    scores[s - 1] = -1;
                }
            }
            break;
        case 'd': case 'D':
            for (si = 0; si < MAX_SUBJECT; si++)
            {
                printf("%s:%d ", titles[si], si + 1);
            }
            printf("과목 입력:");
            scanf_s("%d", &s);
            if ((s <= 0) || (s>MAX_SUBJECT))
            {
                printf("잘못 선택하셨네요.");
            }
            else
            {
                scores[s - 1] = -1;
            }
            break;
        case 's': case 'S':
            for (si = 0; si < MAX_SUBJECT; si++)
            {
                printf("%s:%d ", titles[si], si + 1);
            }
            printf("과목 입력:");
            scanf_s("%d", &s);
            if ((s <= 0) || (s>MAX_SUBJECT))
            {
                printf("잘못 선택하셨네요.");
            }
            else
            {
                printf("%d\n",scores[s - 1]);
            }
            break;
        case 'l': case 'L':
            for (si = 0; si < MAX_SUBJECT; si++)
            {
                if (scores[si] != -1)
                {
                    printf("%s과목 성적:%d\n", titles[si], scores[si]);
                }
                else
                {
                    printf("%s과목 성적:입력하지 않았음\n", titles[si]);
                }
            }
            break;
        case 'E': break;
        default: printf("잘못 선택하셨네요.\n");  break;
        }
 
    }
    return 0;
}
코드를 보시면 같은 작업을 계속 작성하는 부분을 있습니다.
이처럼 같은 코드를 중복하는 것은 유지 보수 비용을 많이 들게 합니다.
이러한 부분들은 함수를 사용하여 구조적으로 프로그래밍하여 개선할 있습니다.

 

3.10 개의 정수를 입력받아 크기 순으로 정렬하시오.  
:
//10 개의 정수를 입력받아 크기 순으로 정렬
#include <stdio.h>
int main(void)
{
    int arr[10];
    int i,j;
   
   
    printf("10개의 정수를 입력하세요.\n");
    //입력
    for (i = 0; i < 10; i++)
    {
        printf("%d 번째:",i+1);
        scanf_s("%d", arr + i);
    }
 
    //순차 정렬
    for (i = 0; i < 10; i++)
    {
        for (j = i; j < 10; j++)
        {
            if (arr[i] > arr[j])//arr[i] arr[j]보다 크면
            {
                // 교환
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
   
    //출력
    for (i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}



본문 50. 인덱스 연산자


반응형