C언어 23

C언어 <윤년, 사분면, 알람시계, 오븐 시계>

문제 연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서 , 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만 2000년은 400의 배수이기 때문에 윤년이다. 문제 두 숫자를 입력해서 몇 사분면에 위치하는지 알 수 있는 프로그램을 작성하시오. 범위 (-1000

C언어 2023.08.05

C언어 <파일 입출력 파일>

표준 입출력 파일은 파일 open, close, 입출력 버퍼 설정, 초기화 등을 시스템이 자동으로 처리한다. 입출력 버퍼 cpu의 속도와 디스크 드라이브의 속도 차이로 인한 처리 지연을 개선하기 위해 고급수준의 함수는 이러한 것들을 반든시 별도로 선언해야 한다. fopen()함수 파일 개발 FILE = fopen(char*fname, char *mode); fname: 개방하고자 하는 file이름 mode: 파일에 대한 접근 모드, 행하고자 하는 직업의 형태 결정 fclose()함수 스트림이 성공적으로 종결되면 정수값 0을 리턴, 에러발생하면 EOF(-1)리턴 쓰기 모드로 "test.dat"파일을 열고 다시 닫는 예 fputs()함수 함수원형: int fputs(const char* str, FILE* ..

C언어 2023.08.05

C언어 <조건부 컴파일>

조건부 컴파일 조건부 컴파일을 사용하면 지정한 조건에 따라 코드의 일정 부분을 컴파일할지 안 할지 지정할 수 있다. 이러한 조건문 컴파일에 사용할 수 있는 컴파일 지시자의 종류 1. #if 2. #ifdef #if 지시자를 이용한 조건부 컴파일의 사용법은 c언어의 if조건문과 매우 비슷 #if 조건식1 컴파일할 명령문1 #elif 조건식2 컴파일할 명령문2 #else 컴파일할 명령문3 #endif #if 지시자 다음에 나오는 조건식1의 결과가 0이 아니면 참, 0이면 거짓으로 간주 또한 #elif 지시자를 사용하여 조건식을 여러개 사용할 수도 있다. #else 지시자를 사용하여 모든 조건에 해당하지 않는 경우를 지정할 수도 있다. 하지만 c언어의 조건문과는 달리 #endif 지시자를 사용하여 반드시 조건..

C언어 2023.08.05

C언어 <공용체>

공용체 union 키워드를 사용하여 선언하며, 한 가지를 제외한 모든 면에서 구조체와 같다. 바로 모든 멤버 변수가 하나의 메모리 공간을 공유한다는 점만이 다르다. 모든 멤버 변수가 같은 메모리를 공유하므로, 공용체는 한 번에 하나의 멤버 변수 밖에 사용할 수 없다. 공용체는 순서가 규칙적이지 않고, 미리 알 수 없는 다양한 타입의 데이터를 저장할 수 있도록 설계된 타입이다. 열거형 하나의 이름으로 서로 관련있는 정수 값을 갖는 상수 집합 여러개의 값 리스트를 하나의 이름으로 코드 상에 묶어서 관리할 수 있는 장점 열거형 사용방법 enum키워드를 사용 enum 열거형명{ 열거형변수1 = 기본값1, 열거형변수2 = 기본값2, 열거형변수3 = 기본값3 }; 프로그램이 실행되기 위해서 메모리가 필요하다. 컴파..

C언어 2023.08.05

C언어 <구조체>

구조체 사용자가 c언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것 구조체 정의 변수 선언을 동시에 하기 struct 구조체 이름{ 멤버변수1의타입 멤버변수1의이름; 멤버변수2의타입 멤버변수2의이름; ... }구조체변수이름; ex) struct book{ char title[30]; char author[3]; int price; }my_book; 구조체를 가리키는 포인터 구조체의 이름은 구조체를 가리키는 주소가 아니다. 따라서 포인터 할당할 때에는 반드시 주소 연산자(&a)를 사용해야 한다. struct 구조체이름*구조체포인터이름; ex) struct book*ptr_my_book; 구조체 포인터를 이용하여 구조체의 멤버에 접근하는..

C언어 2023.08.05

C언어 <가변인자>

가변인자 printf()함수에는 인자를 1개만 넣어도 되고, 2개만 넣어도 되고, 3개, 4개 그 이상을 넣어도 문제없이 돌아간다. printf의 원형(컴파일러에 따라 printf의 실제 구형과는 원형이 다를 수 있다.) printf함수의 두 번째 인자로 사용되는 ...이 가변인자 혹은 가변파라미터라고 불리는 것이다. printf를 쓸 때, 인자(파라미터)로 아무것도 넘겨주지 않을 수도 있고, 혹은 여러 개의 인자를 넘겨줄 수 있다. 가변인자를 이용해서 모든 파라미터를 더해주는 sum()함수를 만든 것이다. 가변인자에 필요한 것들 va_list 각 가변인자의 시작 주소를 가리킬 포인터 내부적으로는 char*로 정의되어 있다. va_start va_list로 만들어진 포인터에게 가변인자 중 첫 번째 인자의..

C언어 2023.08.05

C언어 <문자열> <함수 포인터>

배열로 문자열 선언 1.메모리 공간을 미리 할당하는 방법 ex) char a[11] = "hello world"; 메모리를 미리 할당한다. 2. 컴파일러가 문자열 길이를 보고 알아서 할당시켜주는 방법 ex) char a[]="hello world"; 메모리 공간은 컴파일러가 알아서 할당한다. 포인터 문자열 선언 포인터로 선언하는 방법 *a : 포인트 변수 char*a= "hello world" 코드 작성 순서 1. 메모리 어딘가에 "hello world"가 할당된다. 2. char *a변수가 선언된다. 3. a는 h의 주소값을 가리킨다. (*a='h') 여기서 a라는 변수는 포인터 변수로 선언되었기 에 주소값을 저장할 수 있다. 저 주소값은 문자열의 첫 번째 항을 가르킨다. 즉 'h'문자를 가리키고 있다..

C언어 2023.07.26

C언어 <포인터>

포인터 포인터: 주소를 저장하는 변수 사실 포인터는 아주 간단하다. int a;를 살펴보자 정수형 변수 a가 선언되고 4바이트 메모리 방이 할당된다는 걸 이미 알고 있다. 여기 메모리 방에는 정수 값이 저장될 수 있다. 메모리 방에 주목하고 간단한 질문에 대한 대답을 생각해보자 우리집에도 있고 친구 집 등 모든 집에 있는 것은 무엇일까? 정답은 그 집에 해당하는 주소이다. 메모리도 마찬가지이다. 우리가 원하는 정보를 저장하는 메모리 방에도 해당하는 메모리 방의 주소가 있다. 다시 int a;를 생각해보자 int a;가 수행되는 순간 컴퓨터는 정수를 저장할 수 있는 메모리 방을 잡는다. 컴퓨터 안에는 사용할 수 있는 메모리 방이 수없이 많다. 그 중에서 4바이트 크기의 정보를 저장할 수 있는 메모리 방을 ..

C언어 2023.07.25