-
투자노트 금융공학 퀀트 프로그래밍 3주차 과제금융공학 퀀트 프로그래밍 과정 2020. 4. 5. 14:20
# 제출안내
1. 방법 : 본인 블로그에 작성 후 본 게시판에 링크를 업로드
또는 본 게시판에 작성. 제목은 '투자노트 금융공학 퀀트 프로그래밍 과정 x주차과제' 등으로 작성
(※ 본 게시판에 작성한 내용은 주기적으로 삭제 및 정리되오니 강의 내용을 가지고
있으시려면 본인 블로그에 작성하시오)
2. 양 : 최종과제 스크린샷 1장 이상 첨부. 스크린샷을 반드시 첨부하시오.
3. 기한 : 매주 일요일 오후 12시 전까지
# 준비
지난 1주차 과정에서, c를 편집할 수 있는 프로젝트를 생성한 후
다음 기본 코드로부터 시작하여 아래 문제들을 해결하시오.
int main()
{ return 0; }
# 기본과제 및 제출 양식
1. 전처리문이 무엇인지 조사하고 다음 전처리문의 용도와 사용 예시를 적으시오. (0.5시간 소요)
전처리문이란 소스코드를 실행하는 빌드의 과정 중에서 우선적으로 특별한 명령을 미리 처리하는 명령문이다.
가. #include
헤더 파일 또는 임의의 파일을 포함 시킬 때 사용하는 전처리문이다. 소스코드에서 사용하는 함수를 호출하기 위해 헤더파일 선언문이 삽입되어야 한다. 예를 들어 printf 함수를 사용하기 위해서는 키보드와 모니터의 입력과 출력을 제어하는 <stdio.h>라는 헤더파일을 선언해야 한다.
사용법 : #include <파일 이름>, #include "파일 이름"
나. #define
상수, 함수, 문자열 등을 특정 문자로 정의할 때 사용하는 전처리문이다. 소스코드에서 PI와 같이 복잡한 상수를 사용할 일이 있을 때 전처리문에서 #define PI 3.141592를 선언해준 후에 소스코드에서는 간편하게 PI를 3.141592를 대신하여 사용할 수 있다.
사용법 : #define 매크로 치환될 상수나 함수
다. #pragma
컴파일러에게 명령을 하기 위해 사용하는 전처리문이다. #pragma message("")와 같이 컴파일러에게 메시지를 남겨 줄 때, #pragma one와 같이 헤더 파일 중복을 방지할 때, #pragma warning와 같이 컴파일 중 특정한 경고문을 무시할 때, #pragma comment와 같이 프로젝트에 라이브러리를 추가해 줄 때 등 사용할 수 있다.
사용법 : #pragma one, ...
2. 다음 값을 define 해보시오. (1.5시간 소요)
가. Log2를 0.3010 으로 define 하시오. 첫글자를 대문자로 하시오. #define Log2 0.3010
나. Log3을 0.4771 으로 define 하시오. 첫글자를 대문자로 하시오. #define Log3 0.4771
다. Log7을 0.8451 으로 define 하시오. 첫글자를 대문자로 하시오. #define Log7 0.8451
라. 가~다를 이용하여 log2 ~ log10의 값을 구하는 코드를 작성해 보시오.
그리고 log2~log10 까지의 값을 printf 로 출력하시오.
제법은 https://namu.wiki/w/%EC%83%81%EC%9A%A9%EB%A1%9C%EA%B7%B8#fn-7 에 있는 [7]번 항목을 참조하시오. 작성한 코드도 업로드하시오
int main()
{
double log2 = Log2;
double log3 = Log3;
double log4 = Log2 * 2; // 힌트 : 4=2*2
double log5 = 1 - Log3; // 힌트 : 5=10/2
double log6 = Log2 + Log3; // 힌트 : 6=2*3
double log7 = Log7;
double log8 = Log2 * 3; // 힌트 : 8=2*2*2
double log9 = Log3 *2 // 힌트 : 9=3*3
double log10 = Log2 + log5 // 힌트 : 10=2*5
printf("log2=%lf\n", log2);
printf("log3=%lf\n", log3);
printf("log4=%lf\n", log4);
printf("log5=%lf\n", log5);
printf("log6=%lf\n", log6);
printf("log7=%lf\n", log7);
printf("log8=%lf\n", log8);
printf("log9=%lf\n", log9);
printf("log10=%lf\n", log10);
return 0;
}
마. PI값을 3.141592로 define 한 후 반지름을 입력받아 원의 넓이, 둘레를 출력하는 프로그램을 작성하시오. http://tujanote.cafe24.com/bbs/board.php?bo_table=pds2&wr_id=52&sca=C&page=2 을 참조하시오.
#include <stdio.h>
#define PI 3.141592
int main(){
double r, s, l;
printf("반지름을 입력하시오 : ");
scanf("%lf", &r);
s = r * r * PI;
l = 2 * r * PI;
printf("넓이 : %lf\n", s);
printf("둘레 : %lf", l);
return 0;
}
3. 아스키 코드에 대해 조사하시오 (2시간 소요)
가. 아스키코드 표를 구하여 0~127까지의 대응값을 구하고 스크린샷을 첨부하시오.
나. char 형 변수를 선언한 후, 65를 주시오. 이 변수를 출력하면 A가 나옴을 확인하시오. char 형 변수를 선언한 후, 97를 주시오. 이 변수를 출력하면 a가 나옴을 확인하시오. 작성한 코드도 업로드하시오. http://tujanote.cafe24.com/bbs/board.php?bo_table=pds2&wr_id=53&sca=C&page=2 를 참조하시오.
int main(){
char code1 = 65;
char code2 = 97;
printf("code1 = %c\n", code1);
printf("code2 = %c", code2);
return 0;
}
다. char 형 변수를 투자노트 ID의 글자수만큼 만들고, 각 변수에 아스키값을 준 후 자신의 ID를 출력하는 프로그램을 만드시오. 작성한 코드도 업로드하시오.
int main(){
char id1 = 107;
char id2 = 103;
char id3 = 116;
char id4 = 50;
char id5 = 48;
char id6 = 49;
char id7 = 48;
printf("ID : %c%c%c%c%c%c%c", id1,id2,id3,id4,id5,id6,id7); // ID : kgt2010
return 0;
}
라. 프로그램을 실행하면 비프음이 나오도록 아스키값을 준 후 실행을 확인하시오. 작성한 코드도 업로드하시오.
int main(){
char bp = 7;
printf("비프음%c", bp);
return 0;
}
# 심화과제 제출 양식( 안해도 됨 )
1. 대소문자 변환 프로그램을 만드시오.
가. char형 변수를 선언한 후 소문자를 입력받으시오. 입력받은 소문자를 대문자로 바꾸어 주는 프로그램을 구현하시오. 작성한 코드도 업로드하시오.
int main(){
char code1, code2;
printf("소문자 입력 : ");
scanf("%c", &code1);
code2 = code1 - 32;
printf("대문자 변환 : %c", code2);
return 0;
}
나. char형 변수를 선언한 후 대문자를 입력받으시오. 입력받은 대문자를 소문자로 바꾸어 주는 프로그램을 구현하시오. 작성한 코드도 업로드하시오
int main(){
char code3, code4;
printf("대문자 입력 : ");
scanf("%c", &code3);
code4 = code3 + 32;
printf("소문자 변환 : %c", code4);
return 0;
}
2. 시간 카운터를 만드시오.
가. 1분이 60초임을 define하시오. 이름은 SEC_PER_MIN 으로 하시오. #define SEC_PER_MIN 60
나. 1시간이 60분임을 define하시오. 이름은 MIN_PER_HOUR로 하시오. #define MIN_PER_HOUR 60
다. 하루가 24시간임을 define 하시오. 이름은 HOUR_PER_DAY으로 하시오. #define HOUR_PER_DAY 24
라. '%'연산자에 대해 조사하고, 용도와 예문을 1줄로 적어보시오.
용도 : 왼쪽의 피연산자의 값을 오른쪽의 피연산자 값으로 나눴을 때 얻게 되는 나머지를 반환한다.
예문 : num = 7 % 3; // 1을 반환한다.
마. 몇일,몇시간,몇분,몇초인지를 입력하면 총 몇 초인지 계산하는 프로그램을 만드시오. 작성한 코드도 업로드하시오.
#include <stdio.h>
#pragma warning (disable:4996)
#define SEC_PER_MIN 60
#define MIN_PER_HOUR 60
#define HOUR_PER_DAY 24
int main(){
int day=0, hour=0, min=0, sec=0, output;
printf("일(day) 입력 : ");
scanf("%d", &day);
printf("시간(hour) 입력 : ");
scanf("%d", &hour);
printf("분(min) 입력 : ");
scanf("%d", &min);
printf("초(sec) 입력 : ");
scanf("%d", &sec);
output = sec + SEC_PER_MIN * (min + MIN_PER_HOUR * (hour + HOUR_PER_DAY * day));
printf("%d일 %d시간 %d분 %d초는 %d초입니다.", day, hour, min, sec, output);
return 0;
}
바. 0~1000000의 범위에서 '초'를 입력하면 몇일,몇시간,몇분,몇초인지 계산하는 프로그램을 만드시오. 작성한 코드도 업로드하시오. http://tujanote.cafe24.com/bbs/board.php?bo_table=pds2&wr_id=54&sca=C&page=2 를 참조하시오.
#include <stdio.h>
#pragma warning (disable:4996)
#define SEC_PER_MIN 60
#define MIN_PER_HOUR 60
#define HOUR_PER_DAY 24
int main(){
int day=0, hour=0, min=0, sec=0, input=0;
printf("초(sec) 입력(범위 0~1000000) : ");
scanf("%d", &input);
day = input / HOUR_PER_DAY / MIN_PER_HOUR / SEC_PER_MIN;
hour = (input - day * HOUR_PER_DAY * MIN_PER_HOUR * SEC_PER_MIN) / MIN_PER_HOUR / SEC_PER_MIN;
min = (input - day * HOUR_PER_DAY * MIN_PER_HOUR * SEC_PER_MIN - hour * MIN_PER_HOUR * SEC_PER_MIN) / SEC_PER_MIN;
sec = input % SEC_PER_MIN;
printf("%d초는 %d일 %d시간 %d분 %d초 입니다.", input, day, hour, min, sec);
return 0;
}
'금융공학 퀀트 프로그래밍 과정' 카테고리의 다른 글
투자노트 금융공학 퀀트 프로그래밍 과정 6주차 (0) 2020.04.26 투자노트 금융공학 퀀트 프로그래밍 과정 5주차 (0) 2020.04.19 투자노트 금융공학 퀀트 프로그래밍 과정 4주차 과제 (0) 2020.04.12 투자노트 금융공학 퀀트 프로그래밍 과정 2주차 과제 (0) 2020.03.28 투자노트 금융공학 퀀트 프로그래밍 과정 1주차과제 (0) 2020.03.21