# 기본과제 및 제출 양식
1. 전처리문이 무엇인지 조사하고 다음 전처리문의 용도와 사용 예시를 적으시오. (0.5시간 소요)
전처리문 : 컴파일러가 소스코드를 컴파일 하기 이전에 미리 처리되는 문장을 말함.
C의 전처리문이 오는 줄의 첫 문자는 항상 '#'으로 시작하게 된다.
사용 예시: #include, #define, #undef, #error 등
가. #include :
파일 처리를 위한 전처리문으로, 헤더파일을 포함시키는 전처리문이다. 여기서 헤더파일이란 .h 확장자를 가진 파일인데, 헤더파일을 만들어서 include하는 이유는 자주 쓰는 함수들을 저장해놓고 사용하기 위함임.( 매번 함수를 정의 호출 하기에 불편하므로)
#include<헤더파일> 과 #include"헤더파일" 으로 두 가지 형식이 있는데,
먼저 우리가 자주 보는 #include<헤더파일> 형태는 컴파일러의 라이브러리 폴더에서 헤더파일을 찾지만,
#include"헤더파일" 형식은 현재 디렉토리에서 헤더파일을 찾는다. 만약 존재하지 않는다면, <헤더파일> 형태와 마찬가지로 컴파일러의 라이브러리 폴더에서 헤더파일을 찾는다.
따라서 <헤더파일>보다 "헤더파일"이 범위가 더 크다고 할 수 있고, "헤더파일" 은 주로 사용자가 헤더파일을 만들었을 때 사용한다.
사용 예시 : #include<stdio.h>, #include<math.h> 등
나. #define :
상수값을 지정하기 위한 예약어로 매크로라고 부르며, 구문의 상수로 치환한다.
대표적으로 밑의 예시에 있는 #define PI 3.141592 라는 예문을 보면, 앞으로 PI라는 상수를 계산할 때는 3.141592 라고 인식을 하게 한다.
define으로 정의할 수 있는 것은 숫자만이 아니며, #define SUM(x) ( (x) = (y) + (z) ) 처럼 함수 역할도 할 수 있다.
이 경우 main()에서 SUM을 호출하면 옆에 있는 더하기 코드가 치환 된다.
사용 예시 : #define PI 3.141592
다. #pragma :
컴파일러 제조회사에서 컴파일러의 기능을 확장시킬 수 있도록 하는 지시자이다. 만약 다른 컴파일러에서 해석할 수 없는 pragma directive를 만나면 그냥 무시함으로써 소스 간 호환성 문제를 해결 하고 있다.
사용 예시에는 여러가지가 있는데,
우선 우리가 자주 쓰는 #pragma warning (disable:4996) 라는 문장은 특정 경고 메시지를 무시하는 명령어이다. MS컴파일러에서 경고메시지는 자신의 고유 번호를 갖는데, 소스파일에 이런식으로 적어 놓게 되면 이 지시자가 나타난 순간부터 4996에 관련된 경고 메시지를 무시하고 출력하지 못하게 한다.
또한 #pragma once 는 컴파일러에게 해당 헤더 파일이 한번만 빌드되도록 알려주는 명령어이고,
#pragma comment() 는 여러가지 명령어로 사용이 된다.
가장 대표적으로 #pragma comment(lib, "*.lib")을 많이 사용하고, 이것은 해당 라이브러리를 링크시켜주는 역할을 한다.
2. 다음 값을 define 해보시오. (1.5시간 소요)
가. Log2를 0.3010 으로 define 하시오. 첫글자를 대문자로 하시오.
나. Log3을 0.4771 으로 define 하시오. 첫글자를 대문자로 하시오.
다. Log7을 0.8451 으로 define 하시오. 첫글자를 대문자로 하시오.
라. 가~다를 이용하여 log2 ~ log10의 값을 구하는 코드를 작성해 보시오.
그리고 log2~log10 까지의 값을 printf 로 출력하시오.
제법은 https://namu.wiki/w/%EC%83%81%EC%9A%A9%EB%A1%9C%EA%B7%B8#fn-7 에 있는 [7]번 항목을 참조하시오. 작성한 코드도 업로드하시오
#define Log2 0.3010
#define Log3 0.4771
#define Log7 0.8451
#include<stdio.h>
int main()
{
double log2 = Log2;
double log3 = Log3;
double log4 = 2 * Log2; // 힌트 : 4=2*2
double log5 = 1 - Log2; // 힌트 : 5=10/2
double log6 = Log2 + Log3; // 힌트 : 6=2*3
double log7 = Log7;
double log8 = 3 * Log2; // 힌트 : 8=2*2*2
double log9 = 2 * Log3; // 힌트 : 9=3*3
double log10 = Log2 + log5; // 힌트 : 10=2*5
printf("log2 = %f\n", log2);
printf("log3 = %f\n", log3);
printf("log4 = %f\n", log4);
printf("log5 = %f\n", log5);
printf("log6 = %f\n", log6);
printf("log7 = %f\n", log7);
printf("log8 = %f\n", log8);
printf("log9 = %f\n", log9);
printf("log10 = %f\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 을 참조하시오.
#define PI 3.141592
#pragma warning (disable:4996)
#include<stdio.h>
int main()
{
double r;
printf("반지름 크기를 입력하세요: ");
scanf("%lf", &r);
double s = PI * r * r;
double l = 2 * PI * r;
printf("원의 넓이: %lf\n", s);
printf("원의 둘레: %lf\n", 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 를 참조하시오.
다. char 형 변수를 투자노트 ID의 글자수만큼 만들고, 각 변수에 아스키값을 준 후 자신의 ID를 출력하는 프로그램을 만드시오. 작성한 코드도 업로드하시오.
가.
나.
#pragma warning (disable:4996)
#include<stdio.h>
int main()
{
char ch = 65;
printf("%c\n", ch);
ch = 97;
printf("%c", ch);
return 0;
}
다.
#pragma warning (disable:4996)
#include<stdio.h>
int main()
{
char id1 = 101; // id의 첫번째 글자
char id2 = 108; // id의 두번째 글자
char id3 = 101; // id의 세번째 글자
char id4 = 120; // id의 네번째 글자
char id5 = 105; // id의 다섯번째 글자
char id6 = 111;
char id7 = 110;
char id8 = 49;
printf("%c%c%c%c%c%c%c%c", id1, id2, id3, id4, id5, id6, id7, id8);
return 0;
}
라. 프로그램을 실행하면 비프음이 나오도록 아스키값을 준 후 실행을 확인하시오. 작성한 코드도 업로드하시오.
#pragma warning (disable:4996)
#include<stdio.h>
int main()
{
char ch = 7;
printf("%c", ch);
return 0;
}
실행 결과 비프음이 들렸다.
# 심화과제 제출 양식( 안해도 됨 )
1. 대소문자 변환 프로그램을 만드시오.
가. char형 변수를 선언한 후 소문자를 입력받으시오. 입력받은 소문자를 대문자로 바꾸어 주는 프로그램을 구현하시오. 작성한 코드도 업로드하시오.
#pragma warning (disable:4996)
#include<stdio.h>
int main()
{
char ch;
printf("소문자를 입력하세요: ");
scanf("%c", &ch);
ch = ch - 32;
printf("대문자는 %c입니다.", ch);
return 0;
}
나. char형 변수를 선언한 후 대문자를 입력받으시오. 입력받은 대문자를 소문자로 바꾸어 주는 프로그램을 구현하시오. 작성한 코드도 업로드하시오
#pragma warning (disable:4996)
#include<stdio.h>
int main()
{
char ch;
printf("대문자를 입력하세요: ");
scanf("%c", &ch);
ch = ch + 32;
printf("소문자는 %c입니다.", ch);
return 0;
}
2. 시간 카운터를 만드시오.
가. 1분이 60초임을 define하시오. 이름은 SEC_PER_MIN 으로 하시오.
나. 1시간이 60분임을 define하시오. 이름은 MIN_PER_HOUR로 하시오.
다. 하루가 24시간임을 define 하시오. 이름은 HOUR_PER_DAY으로 하시오.
라. '%'연산자에 대해 조사하고, 용도와 예문을 1줄로 적어보시오.
마. 몇일,몇시간,몇분,몇초인지를 입력하면 총 몇 초인지 계산하는 프로그램을 만드시오. 작성한 코드도 업로드하시오.
바. 0~1000000의 범위에서 '초'를 입력하면 몇일,몇시간,몇분,몇초인지 계산하는 프로그램을 만드시오. 작성한 코드도 업로드하시오. http://tujanote.cafe24.com/bbs/board.php?bo_table=pds2&wr_id=54&sca=C&page=2 를 참조하시오.
#pragma warning (disable:4996)
#define SEC_PER_MIN 60
#define MIN_PER_HOUR 3600
#define HOUR_PER_DAY 86400
#include
int main()
{
int sec, min, hour, day;
printf("날짜를 입력하시오: ");
scanf("%d", &day);
printf("시간을 입력하시오: ");
scanf("%d", &hour);
printf("분 을 입력하시오: ");
scanf("%d", &min);
printf("초 를 입력하시오: ");
scanf("%d", &sec);
int totalSec = day * HOUR_PER_DAY + hour * MIN_PER_HOUR + min * SEC_PER_MIN + sec;
printf("입력하신 날짜는 총 %d초 입니다.", totalSec);
return 0;
}
#define SEC_PER_MIN 60
#define MIN_PER_HOUR 3600
#define HOUR_PER_DAY 86400
#include<stdio.h>
int main()
{
int totalSec, day, hour, min, sec;
printf("총 몇초인지 입력하시오: ");
scanf("%d", &totalSec);
day = totalSec / HOUR_PER_DAY;
hour = (totalSec - day * HOUR_PER_DAY) / MIN_PER_HOUR;
min = (totalSec - hour * MIN_PER_HOUR - day * HOUR_PER_DAY) / SEC_PER_MIN;
sec = totalSec % SEC_PER_MIN;
printf("%d초는 %d일 %d시간 %d분 %d초 입니다.", totalSec, day, hour, min, sec);
return 0;
}
'프로그래밍 > C' 카테고리의 다른 글
C언어 6주차 과제 (0) | 2020.11.02 |
---|---|
C언어 5주차 과제 (0) | 2020.11.02 |
C언어 4주차 과제 (0) | 2020.10.25 |
C언어 2주차 과제 (0) | 2020.10.06 |
C 언어 1주차 과제 (0) | 2020.10.06 |