- 변수(variable)
- 변수 선언 방법 : 자료형 변수이름;
ex) int x;
- 변수 선언이란 컴파일러에게 지금부터 이러한 변수를 사용하겠다고 미리 알리고 어떤 종류의 데이터가 그 변수에 저장되는지를 미리 알리는 것이다.
- 변수를 선언하면 메모리 공간에 값들을 저장할 수 있는 상자가 만들어진다고 보면 된다. 메모리 공간에 변수가 만들어지고 이름이 붙여진다.
- 참고) 파이썬은 변수를 선언하지 않고도 사용 가능
- 변수 여러 개를 한 줄에 선언 가능. ex) int x y;
- 변수는 메모리 공간의 일부를 사용하는 공간이다. 변수는 컴퓨터 안의 메모리 공간에 만들어진다.
- 변수 이름으로 변수들을 구별한다.
- 변수의 초기화(initialization) 방법 (변수를 선언 + 값을 넣음) : 자료형 변수이름 = 초기값;
ex) int x = 100;
- 변수를 초기화시키지 않는 경우, 아무 의미 없는 값인 쓰레기값이 변수에 들어가게 된다.
참고) 정적 타입 VS 동적 타입 : 컴퓨터 프로그래밍 언어에서 변수의 타입에 대한 두 가지 접근 방식이다.
정적 타입은 컴파일 시간에 변수의 타입이 결정되는 언어이다. 이 경우 각 변수의 타입은 코드에서 명시적으로 선언되어야 하며, 컴파일러는 변수에서 수행되는 모든 작업이 선언된 타입에 대해 유효한지 확인한다. 이렇게 하면 개발 프로세스 초기에 오류를 포착하고 성능을 향상시킬 수 있지만, 코드 작성에 더 많은 노력이 필요할 수도 있다.
일반적으로 정적 타입 언어는 대규모 소프트웨어 개발에 더 많이 사용된다. 정적 타입 언어로는 C, C++, Java가 있다.
정적 타입 언어의 장점은 신뢰성이 있다는 것, 단점은 자료형을 적어 주어야 한다는 것이다.
동적 타입은 변수의 타입이 실행시간에 결정되는 언어이다. 이 경우 변수는 코드에서 선언된 특정 타입을 가질 필요가 없으며, 타입은 프로그램 실행 중에 변경될 수 있다. 이렇게 하면 코딩이 더 빠르고 쉬워질 수 있지만, 실행 시간에 타입 검사가 필요하기 때문에 오류가 더 많이 발생하고 성능이 저하될 수 있다.
일반적으로 동적 유형 언어는 종종 스크립팅 및 빠른 프로토타이핑에 사용된다. 동적 타입 언어로는 Python, JavaScript, 루비가 있다.
동적 타입 언어의 장점은 유연하다는 것, 단점은 예기치 않은 실행 오류이다.
- 변수 이름 짓기
- 규칙
- 알파벳 문자와 숫자, 밑줄 문자 _로 이루어져야한다.
- 이름 중간에 공백이 들어가면 안 된다.
- 첫 번째 문자는 반드시 알파벳 또는 밑줄 문자 _이여야 한다. 따라서 이름은 숫자로 시작할 수 없다.
- 대문자와 소문자를 구별하여 서로 다른 것으로 취급한다.
- C언어에서 사용하고 있는 키워드(keyword)와 같은 이름은 허용되지 않는다.
- 변수의 이름은 원하는 만큼 길게 할 수 있으나, 일반적으로 컴파일러는 처음 63개의 문자만을 사용하여 구별한다. 처음 31개의 문자만을 사용할 수 있는 경우도 있다. 따라서 변수의 이름을 필요 이상으로 길게 하지 않아야 한다.
- 키워드(keyword) : C언어에서 고유한 의미를 가지고 있는 특별한 단어이다.
- 예약어(reserved words)라고도 한다.
- 키워드는 사용자가 다시 정의하거나 사용하는 것이 금지되어 있다. 따라서 키워드는 식별자로서(변수의 이름으로) 사용할 수 없다.
- 최근에는 한글 이름의 변수도 사용할 수 있다.
참고) 나중에 읽기 쉽게 변수 이름을 알아보기 쉽도록 적는 것이 좋다. 변수 이름을 i,k,j 보다는 year, month, date로 짓는 것과 같다.
참고) 여러 단어로 된 변수 이름을 나타내는 방법 중 가장 많이 쓰이는 방법은 BankAccount처럼 단어의 첫 번째 글자를 대문자로 하는 것과, bank_account처럼 중간에 밑줄 문자를 사용하는 것이 있다.
- 자료형(data type) : 변수에 저장되는 데이터의 종류. 변수가 저장할 데이터의 종류(타입)이다.
- 자료형에는 정수형, 부동소수점형, 문자형이 있다.
- 정수형은 12, -35와 같은 정수를 나타내는 자료형으로 정수의 범위에 따라 short, int, long, long long으로 나누어진다.
- 부동소수점형은 소수점을 가지는 실수값을 나타내며, 실수의 범위에 따라 float, double, long double로 나누어진다.
- 문자형은 하나의 문자를 나타내는 자료형으로 char뿐이다.
- 연산자
- 대입 연산자(assignment operator, =연산자, 할당 연산자) : 우변의 값을 좌변의 변수에 저장한다.
- =의 좌변에는 항상 변수가 위치, 우변에는 값이 위치한다.
ex) int x = 10;
x = y;
- 산술 연산자
- 덧셈 연산자 +
- 뺄셈 연산자 -
- 곱셈 연산자 *
- 나눗셈 연산자 /
- 나머지 연산자 %
ex) sum = x + y 는 변수 x에 들어있는 값과 변수 y에 들어있는 값을 더해서 변수 sum에 대입한 것임. 여기서 +는 연산자이고, 피연산자는 x와 y이다.
- 입력과 출력
* 입출력을 위한 라이브러리 함수가 있기에, 입출력을 위한 코드를 직접 작성할 필요가 없음.
- printf() : 모니터에 출력을 하기 위한 표준 출력 함수.
- 문자열 출력뿐만 아니라 특정한 형식을 지정하여 상수나 변수의 값을 출력하는 기능도 있음.
- 형식 지정자를 사용하기
사용 방법 (ex) printf( "%d", sum);
- 형식 지정자의 종류
- %d : 정수 형태로 출력
- %f, %lf : 실수 형태로 출력
- %c : 문자 형태로 출력
- %s : 문자열 형태로 출력
* 형식 지정자 자리에 변수의 값이 대치되어서 출력된다. 형식 지정자와 변수들은 1개 이상일 수 있고 중간에 문자열이 있을 수 있음.
* 주의할 점 : 형식 지정자와 변수의 자료형은 반드시 일치하여야 함. 정수형 변수는 %d로, 부동소수점형 변수는 %f나 %lf로 출력하여야 함(float형의 값은 %f, double형의 값은 %lf를 이용하여 출력).
* 부동소수점형이란 실수값을 저장할 수 있는 자료형임.
- scanf() : 키보드에서의 입력을 위한 표준 입력 함수. 키보드로부터 입력된 데이터를 지정된 형식으로 변환하여 변수에 저장하는 라이브러리 함수이다.
- 사용 방법 (ex) scanf( "%d", &x);
- %d는 정수 형태로 데이터를 입력받겠다는 의미이며, &x는 입력을 받을 변수의 주소(포인터)이다.
- 변수 이름 앞에 &(앰퍼센트) 기호가 있음을 유의하자. scanf()는 printf()와 달리 변수에 값을 저장하여야 하기 때문에, 변수의 주소를 알아야 한다.
- scanf()가 호출되면 컴퓨터는 사용자가 숫자 입력을 마칠 때까지 기다리게 된다. 사용자가 정수를 입력하고 엔터키를 누르면 비로소 정수가 변수에 저장되어서 scanf() 호출이 끝나게 된다.
- printf()와 형식 지정자가 대부분 같음.
- 만약 여러 개의 입력값을 받으려면 아래와 같이 하면 된다.
- scanf( "%d %f", &number, &score);
- 형식 지정자가 문자인 경우를 제외하면 scanf()는 모든 여백을 건너뛴다. 즉, 스페이스나 탭, 줄바꿈은 무시한다.
- scanf()도 형식 지정자와 변수의 자료형이 일치해야 한다.
참고) 비주얼 스튜디오 2022에서 scanf() 함수를 사용하면 안전하지 않다며 scanf_s()를 사용하라는 오류가 뜨는데, 소스코드 맨 첫 부분에 _CRT_SECURE_NO_WARNINGS를 정의하면 사용 가능하다. 반드시 stdio.h 헤더 파일을 포함하는 문장 위에 있어야 한다.
사용 방법) #define _CRT_SECURE_NO_WARNINGS
- scanf_s()를 사용해도 되지만, 이 함수는 복잡한 입력시에 scanf_s("%s", name, sizeof(name))과 같이 변수의 크기를 넘겨야 한다. 문자열 복사 함수인 strcpy()에서도 문제가 발생한다. 또한 메모리 오류가 수정되고 나면 더 이상 안전한 함수가 필요하지 않고, 항상 메모리 경계를 감시하기 때문에 성능을 낮추며, 기존코드와의 호환성 때문에 scanf()를 추천.
- 필드폭(width)
- printf()를 사용하여 출력할 때, 데이터가 출력되는 필드의 크기 지정 가능.
- 필드폭은 %와 형식 지정자 사이에 들어간다.
ex) %10d : 필드폭은 10문자 크기
- 만약 필드폭이 출력되는 데이터보다 크면 데이터는 필드 안에서 오른쪽 정렬되어서 출력된다.
- 만약 데이터가 필드보다 크면 필드폭은 자동으로 넓어지게 됨.
- 정밀도(precision)
- 소수점 이하 자릿수를 지정 가능.
- 정밀도를 지정하지 않으면 소수점 이하는 반올림되어서 6자리로 출력됨.
- %f나 %lf를 사용하여 실수를 출력할 때, %10.3이라고 하면 전체의 필드폭은 10이고 그중에서 소수점 이하 자릿수가 3이라는 의미가 됨. %.3도 가능.
- 오류 수정 및 디버깅
- 오류를 발생하는 시간에 따라 나누어 보면 다음과 같음.
- 컴파일 시간 오류 : 대부분 문법적 오류.
- 실행 시간 오류 : 실행되는 도중에 발생하는 오류.
- 논리 오류 : 논리적으로 잘못되어서 결과가 의도했던 대로 나오지 않는 것.
- 소스파일(.c)을 컴파일러(compiler)를 통해 오브젝트 파일(.obj)로 바꾸는 과정에서 생기는 오류와 오브젝트 파일(.obj)을 링커(linker)를 통해 실행파일(.exe)로 바꾸는 과정에서 생기는 오류가 컴파일 시간 오류. 실행파일(.exe)를 실행(execution)했는데 생기는 오류는 실행 시간 오류와 논리 오류.
- 오류를 심각성의 정도에 따라 나누어보면 다음과 같음.
* 수정하지 않아도 문제가 없는 경우가 종종 있지만, 가능하면 경고 메시지도 나타나지 않도록 프로그램을 작성하여야 한다.
- 에러(error) : 컴파일, 링크나 실행이 불가능한 심각한 오류.
- 경고(warning) : 컴파일, 링크는 가능하고 실행도 가능하나 잠재적인 문제를 일으킬 수 있는 경미한 오류.
기타) 체크 디지트 (check digit)
'프로그래밍 언어 > C언어_기초 프로그래밍' 카테고리의 다른 글
[ C언어 기초 ] 6. 반복문 (2) | 2024.09.16 |
---|---|
[ C언어 기초 ] 5. 조건문 (7) | 2024.09.16 |
[ C언어 기초 ] 4. 수식과 연산자 (0) | 2024.09.04 |
[ C언어 기초 ] 3. 자료형 (1) | 2024.08.28 |
[C언어 기초] 1. 기초사항 (0) | 2024.07.09 |