160 likes | 381 Views
C ++ 다지기 1 부. 1. ex_1.1_grade. 문제 학생의 이름을 묻고 입력 받으시오 . 그 후 중간고사와 기말고사 성적을 입력받으시오 . 그 후 과제 성적을 묻고 입력받으시오 . 단 과제 성적은 몇 개가 되던 상관 없이 입력받을 수 있도록 하시오 .( 최소 3 개 이상입력 ) 과제 입력 종료는 콘솔창에서 컨트롤 +z 키입니다 . 과제값은 평균 값 을 내서 반영하도록 하시오 . 과제 값의 비율은 중간 20% 기말 40% 과제 40% 입니다. 1. ex_1.1_grade.
E N D
1. ex_1.1_grade • 문제 • 학생의 이름을 묻고 입력 받으시오. 그 후 중간고사와 기말고사 성적을 입력받으시오. 그 후 과제 성적을 묻고 입력받으시오. 단 과제 성적은 몇 개가 되던 상관 없이 입력받을 수 있도록 하시오.(최소3개 이상입력) 과제 입력 종료는 콘솔창에서 컨트롤+z 키입니다. 과제값은평균 값을 내서 반영하도록 하시오. • 과제 값의 비율은 중간 20% 기말 40% 과제 40% 입니다.
1. ex_1.1_grade • 스코프(scope) 및 namespace • 스코프란 그 이름이 프로그램 상에서 의미를 갖는 범위을 말함. • 즉, std::cout는 한정된 이름으로써 :: (스코프연산자)를 사용한다. • 여기서 std는 네임스페이스를 지칭. Namespace 는 왼쪽처럼 쓸 수도 있고 오른쪽처럼 개별적으로 정의할 수도 있다.
1. ex_1.1_grade • 입출력문 • C++ 의 입력은 cout로 이루어진다. • cout << “hi”; • cout << “안녕하세요” << endl; • C++ 의 출력은 cin으로 이루어진다. • cin >> final; • cin >> midterm >> final;
1. ex_1.1_grade • end-of-file • 콘솔창에서 입력을 그만 받고자 할 때 사용한다 • ctrl + z 키를 누르면 입력을 그만 받는다. ^z 가 바로 ctrl + z 키를 누르면 나오는 동작
1. ex_1.1_grade • while 조건식을 cin 으로? • while 조건식으로 cin >> x 와 같이 입력을 받을 수 있다. • 이렇게 한다면 조건식을 테스트 할 뿐 아니라 x에 값을 읽어들이는 작업까지 한번에 처리가 가능하다. while 문 조건식 안에 입력을 받는 모습
1. ex_1.1_grade • 정밀도(자리수) 정하기 • setprecision() 함수를 이용하면 원하는 자리수 만큼 숫자를 출력할 수 있다. • 단 자릿수 출력시 출력이 끝난 후 다시 초기화를 해주어야 한다. setprecision() 을 이용해서 자리수를 출력하는 예제와 출력 결과
1. ex_1.2_gradeVector • 문제 • 학생의 이름을 묻고 입력 받으시오. 그 후 중간고사와 기말고사 성적을 입력받으시오. 그 후 과제 성적을 묻고 입력받으시오. 단 과제 성적은 몇 개가 되던 상관 없이 입력받을 수 있도록 하시오.(최소3개 이상입력) 과제 입력 종료는 콘솔창에서 컨트롤+z 키입니다. 과제값은중간 값을 내서 반영하도록 하시오. • 과제 값의 비율은 중간 20% 기말 40% 과제 40% 입니다.
1. ex_1.2_gradeVector • 평균값 대신 중앙값 사용하기 • 중앙값이란 들어온 데이터들을 정렬해서 그 정렬된 값들중 중앙에 존재하는 값 • 중앙값을 사용하는 이유는 전체 평균에 큰 타격을 줄 수 있는 급격히 낮은 성적에 영향을 받지 않으면서 어느정도 일정한 성능을 내주기 때문. 평균값을 사용한 결과 (상) 중앙값을 사용한 결과 (하)
1. ex_1.2_gradeVector • 중앙값 사용하기 • 중앙값을 사용하기 위해서는 모든 과제성적을 읽고 저장해야 한다. 그 후 데이터를 정렬하고 그 중간에 해당하는 값을 선택하면 된다. • 하지만 기존의 방식의 경우 한번 입력받고 저장하고 다시한번 입력받고 저장하는 작업을 반복한뒤 최종적으로 sum / count 형식으로 나누어주기 때문에 중앙값을 구할 수 없다. • 보편적으로 배열을 떠올릴 수 있지만 우리는 vector 를 이용하여 계산한다.
1. ex_1.2_gradeVector • Vector • vector 은 주어진 타입에 대한 일련의 값을 저장하고 추가적인 값들을 허용 할 수 있도록 필요한 때에 크기가 커지며 개별값들을 효과적으로 접근 가능하다. • 즉, 우리가 잘 알고 있는 배열과링크드리스트의 장점을 합쳐놓았다고 볼 수 있다. vector 의 맴버함수
1. ex_1.2_gradeVector • Vector 입력받기 • Vector 안에 있는 push_back 함수를 이용하여 입력받은 데이터를 순차적으로 저장. 기존 ex_1.1의 입력부분 (좌), vector를 이용한 입력(우)
1. ex_1.2_gradeVector • Vector 사이즈 확인 • 중간 값을 알기전에 vector 의 사이즈를 확인한다. • 여기서 typedef 는 코드 작성시 typedef 를 넣게 되면 그 이름을 변수로 사용하는 것이 아니라 해당 타입에 대한 동의어로써 정의 하는것. 즉 vec_sz 라는 변수의 이름을 vector<double>::size_type 에 대한 동의어로 정의한 것이다. • 아래 구문은 vec_sz 라는 변수를 vector 이 제공하는 vector이 담을 수 있는 최대 값을 저장할 수 있는 적절한 타입인 size_type 로 정의한다. 라고 해석할 수 있다. • 왜 int 형을 사용하지 않고 vector 클래스가 제공하는 size_type 를 사용하는가? • 그 이유는 vec_sz 의 값은 homework 의 크기에 따라 달라지는데 만일 homework 의 값이 int 형으로 표현 가능한 길이보다 더욱더 큰 값을 가지고 있다면 int 형으로는 그 값을 감당 할 수 없기 때문에 미리 정의한 타입을 사용하는 것이 좋은 방법이다. homework 라는 백터의 사이즈를 확인하는 구문
1. ex_1.2_gradeVector • Vector 정렬 • sort 를 이용하여 오름차순으로 데이터를 정렬하고 중간위치를 찾는다. sort 함수를 이용하여 백터의 값을 정렬
1. ex_1.2_gradeVector • 중간값을 찾기 위한 삼항연산자 • 데이터가 정렬되고 나면 중간값을 찾을 수 있는데 중간값을 구하는 방법은 데이터의 개수가 짝수일 때, 홀수일 때 두가지 경우로 나눌 수 있다. • if 와 else 로 나눠서 사용할 수도 있지만 우리는 코드를 간결하게 하기 위해삼항연산자를 사용한다. • 삼항연산자 아래와 같은 형식으로 동작한다 • (조건문) ? (참인 경우) : (거짓인 경우) 3항 연산자를 사용하여 homework 의 중간 값을 구한다
1. ex_1.3_gradeVector • 문제 • 여러개의 정수 값을 읽어들여 먼저 모든 수를 출력하고 그 다음에 그 중 가장 큰 네개의 값들만 출력하시오.