"덧셈" 프로그램 #1
일반적인 프로그램은 외부로부터 데이터를 받아서(입력단계), 데이터를 처리한 후에(처리단계), 결과를 화면에 출력(출력단계)한다.
데이터 입력 -> 데이터 처리-> 결과출력
주석
주석이란?
주석 (comment)
- /*와 */로 묶어진 부분
- 프로그램이 하는 일을 설명하는 설명글로서 프로그램의 실행 결과에 영향을 끼치지 않는다
- 프로그램을 읽는 사람을 위한 것이다
- 프로그램의 가독성을 높인다
- 보통 프로그램의 구조와 동작을 설명해주는 문장들이 들어간다
/* 두 수를 더하는 프로그램 */
#include <iostream>
using namespace std;
int main()
{
return 0;
}
주석을 붙이는 방법
- 이중 슬래시(//)는 현재 위치에서부터 줄의 끝까지가 주석이라는 것을 나타낸다
- 주의할 점은 주석 안에 다른 주석이 들어가면 안 된다
/* 한 줄로 된 주석*/
/* 여러
줄로
된 주석*/
// 이 줄은 주석이다.
주석의 중요성
- 많은 시간이 흘렀다면, 만든 사람이라고 하더라도 내용을 잘 기억할 수 없는 경우도 있기 때문에 주석이 필요하다
- 훨씬 쉽게 프로그램의 내용을 알 수 있다
- 주석을 반드시 추가하는 편이 좋다
- 좋은 주석은 코드를 반복하거나 코드를 설명하지 않는 것이다
- 그 대신 주석에는 코드를 작성한 의도를 명확히 나타내는 편이 낫다
들여쓰기
들여쓰기(indentation)
- 소스 코드의 가독성을 높이기 위하여 같은 수준에 있는 문장들을 왼쪽 끝에서 몇 자 안으로 들였는 것이다
- 소스를 보기가 아주 편하다
- 문장은 한 줄에 하나만 쓰는 것이 좋다
- 문장과 문장 사이에 적절한 빈 줄을 두어서 의미적으로 구분하는 것도 프로그램을 이해하는데 도움이 된다
전처리기
모든 전처리기 지시어는 # 기호로 시작하고 첫 번째 열부터 시작하는 것이 보통이다
헤더파일 (header file)
- 코드의 일부분이 들어 있는 텍스트 파일로서 ".h"의 확장자를 가진다.
- 실제로 stdio.h에는 표준 입력과 표준 출력에 관한 라이브러리 함수들의 정의가 들어있다
표준 입력
- 키보드로부터의 입력을 의미
표준 출력
- 모니터로의 출력
함수
함수(function)
- 특정 기능을 수행하는 처리 단계들을 괄호로 묶어서 이름을 붙인 것이다
함수 안에 들어있는 것
문장(statement)
- 함수의 중괄호 안에는 작업의 세부 단계들이 나열되어 있으며 이러한 작업의 세부 단계를 말한다
- 프로그램을 이루는 가장 기본적인 단위
- 문장이 모여서 함수가 되고 함수가 모여서 프로그램이 된다.
- 문장의 끝은 항상 세미콜론(;)으로 끝나게 된다
변수
변수(variable)
- 데이터를 일시적으로 저장할 목적으로 사용하는 메모리 공간
- 변수에도 담을 수 있는 데이터의 종류나 범위에 따라 여러 가지 유형(type)이 있다
자료형(data type)
- 변수가 저장할 데이터가 정수인지, 실수인지, 아니면 또 다른 어떤 데이터인지를 지정하는 것
- 자료형에는 정수형, 실수형, 문자형이 있다
- 정수의 범위에 따라 다시 short, int, long, long long으로 나누어진다
- 실수의 범위에 따라 float, double, long double로 나누어진다
- 문자형은 하나의 문자를 나타내는 자료형으로 char 뿐이다
자료형 | 명칭 | 크기 | 표현범위 |
정수형 | char | 1byte | -128 ~ 127 |
short | 2byte | -32,768 ~ 32,767 | |
int | 4byte | -2,147,483,648 ~ 2,147,483,647 |
|
long | 4byte | -2,147,483,648 ~ 2,147,483,647 |
|
long long | 8byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
실수형 | float | 4byte | +-3.4*10^-37 ~ +-3.4*10^38 |
double | 8byte | +-1.7*10^-307 ~ +-3.4*10^308 |
|
long double | 8byte 이상 | double 이상의 표현범위 |
변수는 사용하기 전에 선언되어야 한다!
C언어에서 변수를 사용하려면 먼저 변수를 선언해야 한다.
변수 선언
- 컴파일러에게 지금부터 이러 이러한 변수를 사용하겠다고 미리 말을 해두는 것
- 어떤 타입의 데이터가 그 변수에 저장되는지도 컴파일러에게 미리 알리는 것이다.
- 변수를 선언하는 것도 하나의 문장이므로 반드시 세미콜론으로 끝나야 한다.
int x;
- 변수는 선언되면 메모리 안에 공간이 확보되며 이 공간에 이름이 매긴다
변수의 이름짓기
변수는 반드시 이름이 있어야 한다
변수의 이름이나 함수의 이름은 모두 식별자의 일종이다
식별자(identifier)
- 변수 이름, 함수 이름 등에 사용되어서 다른 것들과 식별할 수 있게 해주는 것이다
식별자의 규칙
- 영문자와 숫자, 밑줄 문자(_)로 이루어진다
- 중간에 공백이 들어가면 안된다
- 첫 글자는 반드시 영문자 또는 밑줄 기호여야 한다. 숫자로 시작할 수 없다
- 대문자와 소문자는 구별된다. 변수 index, Index, INDEX는 모두 서로 다른 변수이다
- C언어의 키워드와 똑같은 식별자는 허용되지 않는다
키워드(keyward)
- C언어에서 고유한 의미를 가지고 있는 특별한 단어이다
- 키워드를 예약어(reserved words)라고도 한다
- 사용자가 다시 정의하거나 사용하는 것이 금지되어 있다.
- 프로그래머들에게는 변수 이름을 짓는 관례(convertion)가 있으며, 이를 따르는 것이 좋다
- 일반적으로 컴파일러는 처음 63개의 문자만을 사용하여 구별한다
- 컴파일러에 따라서는 처음 31개의 문자만을 사용할 수 있는 경우도 있다
- 비주얼 스튜디오에서는 한글도 식별자로 사용할 수 있다. 왜냐하면 유니코드이면 무엇이던지 식별자가 된다
좋은 변수 이름
- 변수의 이름을 지을 때는 변수의 역할을 가장 잘 설명하는 이름을 지어야 한다
- 전체 프로그램을 읽기 쉽게 만든다
- 밑줄 문자를 사용하는 것이다
- 첫 번째 글자를 대문자로 하는 것이다.
변수 초기화
변수가 선언되면 변수의 값을 아직 정의되지 않은 상태가 된다
변수의 초기화(initialization)
- 변수를 선언과 동시에 값을 넣는 방법은 변수 이름 뒤에 =을 붙이고 초기값을 적어 넣으면 된다
- 변수를 선언과 동시에 초기화하는 것은 먼저 선언한 후에 값을 대입하는 것과 동일하다
- 동일한 타입의 변수인 경우, 같은 줄에서 선언과 동시에 변수들을 초기화할 수 있다.
int x=10; // 여기서 10은 초기값이다.
int width=100, height=200;
수식과 연산
변수에 값 저장하기
변수에 값을 저장하는 방법은 =연산자가 바로 변수에 값을 저장한다
대입 연산자(assignment operator)
- = 연산자 이다
- =의 좌변에는 항상 변수가 위치하고 우변에는 값이 위치한다
- =연산자는 우변의 값을 좌변의 변수에 저장한다
- 변수의 값은 몇 번이든 변경이 가능하다
int value;
value=10;
value=20;
- 변수에는 다른 변수의 값도 대입할 수 있다
int value1=10;
int value2;
value2=value1;
산술연산
컴퓨터는 기본적으로 계산을 하는 기계이다
프로그램 안에서 산술 연산을 할 수 있다
산술 연산자는 일반적으로 수학에서 사용하는 연산 기호이다
사칙 연산자들은 이항 연산자라고 불리는데 두 개의 피연산자를 가지기 때문이다
printf()
라이브러리 함수
- 컴파일러가 프로그래머에게 사용할 수 있도록 제공하는 함수들
printf()
- 모니터에 출력을 하기 위한 표준 출력 함수
scanf()
- 키보드에서의 입력을 위한 표준 입력 함수
printf()와 scanf()을 사용하면 형식화된 입출력이 가능하다
문자열 출력
printf()를 적어주고 필요한 데이터를 ()안에 넣으면 된다
printf("Hello World!");
함수 호출 시에는 함수 이름 뒤에 괄호를 붙이고 괄호 안에 데이터를 나열하게 된다
인수(argument)
- 함수에게 전달하는 데이터
- 함수를 호출하는 측이 함수에게 제공하는 데이터가 된다
변수 출력
%d는 출력 형식을 지정한다
형식 지정자 | 의미 |
%d | 10진 정수로 출력 |
%f | 실수로 출력 |
%c | 문자로 출력 |
%s | 문자열로 출력 |
형식 지정자와 변수들은 1개 이상일 수 있고 중간에 문자열이 있을 수 있다. 이 경우에는 형식 지정자와 변수들이 다음과 같이 대응된다.
printf("%d %f", number, grade);
형식 지정자의 자리에 변수의 값이 대체되어서 출력된다고 생각하면 된다.
주의할 점은 형식과 변수의 자료형들은 반드시 일치하여야 한다.
scanf()
scanf()
- scanf() 함수는 키보드로부터 입력된 데이터를 지정된 형식으로 변환하여 변수에 저장하는 라이브러리 함수이다
scanf("%d", &x); //%d는 형식지정자, &x는 값을 지정하는 변수의 주소
- 첫 번째 인수인 "%d"는 형식 지정자로서 정수형의 데이터를 받을 것임을 지정한다
- 두 번째 인수인 &x은 입력을 받을 변수의 주소를 나타낸다
- 변수는 메모리에 생성되고 따라서 주소를 가지고 있다. 변수 이름 앞에 &를 붙이면 변수의 주소를 의미한다.
- scanf()기 호출되면 컴퓨터는 사용자가 숫자 입력을 마칠 때까지 기다리게 된다.
형식 지정자 | 의미 |
%d | 정수를 10진수로 입력한다 |
%f | float 형의 실수를 입력한다 |
%lf | double 형의 실수로 입력한다 |
%c | 문자 형태로 입력한다 |
%s | 문자열 형태로 입력한다. |
- double형의 실수는 float 형의 실수보다 더 정밀하다
- 형식 지정자의 타입과 변수의 타입은 일치하여야 한다
- 여기서 형식 지정자가 문자인 경우를 제외하면 scanf()는 모든 여백을 건너뛴다
비주얼 스튜디오 2019에서의 scanf_s() 함수
scanf()는 약간의 위험한 함수이다. 변수의 주소를 받아서 변수의 값을 저장함수라서 잘못된 주소가 전달되면 엉뚱한 곳에 값을 저장할 수 있다.
하지만 C언어는 운영체제나 리눅스, 임베디드 프로그래밍에 주로 사용되는데, 그곳에서는 아직도 scanf() 함수가 사용되고 있다
소스 코드의 맨 첫 부분에 _CRT_SECURE_NO_WARNINGS를 정의하고 scanf() 함수를 그대로 사용하기로 하였다
gcc 컴파일러를 사용하는 리눅스 사용자나 임베디드 프로그래머는 _CRT_SECURE_NO_WARNINGS을 사용하지 않아도 된다.
'CS > C' 카테고리의 다른 글
쉽게 풀어쓴 C 언어 EXPRESS 개정 3판 챕터4. 변수의 자료형 (0) | 2025.05.11 |
---|---|
쉽게 풀어쓴 C 언어 EXPRESS 개정 3판 챕터1. 프로그래밍의 개념 (1) | 2025.04.02 |