C++ 2주차
C언어 문법 정리1 식별자 / 리터럴 / 자료형 / 변수 / 전처리기 / 연산자
프로그래밍 언어의 자료형
프로그래밍 언어의 자료형(data type)은 데이터의 종류를 나타내는 것으로, 변수가 메모리에 어떤 종류의 데이터를 저장할 수 있는지, 그리고 그 데이터가 어떤 크기와 범위를 가질 수 있는지 결정합니다.
대표적인 자료형에는 다음과 같은 것들이 있습니다:
1. 정수형(Integer types): 정수 값을 표현하기 위한 자료형입니다. 예를 들어, C/C++에서는 int, short, long 등이 있고, Java에서는 byte, short, int, long 등이 있습니다.
2. 실수형(Floating-point types): 소수점을 포함하는 실수 값을 표현하기 위한 자료형입니다. 예를 들어, C/C++에서는 float, double 등이 있고, Java에서도 같은 이름의 실수형을 사용합니다.
3. 문자형(Character types): 문자나 문자열을 표현하기 위한 자료형입니다. 예를 들어, C/C++에서는 문자 하나를 표시하는 'char'와 문자열을 표시하는 'string'이 있으며, Java에서는 'char'와 'String' 클래스가 이에 해당합니다.
4. 논리(Boolean types): 참(true) 또는 거짓(false)만을 값으로 가지는 논리값을 표시하는 자료형인데 대부분의 언어에서 'boolean'으로 명명되어 있습니다.
5. 복합(Compound types): 여러 개의 다른 타입들을 한꺼번에 담을 수 있는 타입으로 배열(array), 구조체(structure), 클래스(class), 연합체(union) 등이 이에 해당합니다.
각 프로그래밍 언어마다 지원하는 자료 형태와 그 세부 사항은 다르므로 학습 시 각양각색의 문서나 참조자료를 활용해야 합니다.
정수형과 실수형 차이점 표
기준 | 정수형(Integer Type) | 실수형(Floating Point Type) |
값의 종류 | 정수만 표현 가능합니다. 예를 들어, -1, 0, 1, 2 등입니다. | 소수점을 포함하는 숫자를 표현 가능합니다. 예를 들어, -1.23, 0.0, 3.14 등입니다. |
메모리 사용량 (일반적인 경우) | 일반적으로 메모리 사용량이 적습니다 (예: C++에서 int는 보통 4바이트). | 일반적으로 메모리 사용량이 많습니다 (예: C++에서 double은 보통 8바이트). |
정확도 | 값에 대한 완벽한 정확성을 제공합니다. 즉 오차가 없습니다. | 값에 대한 완벽한 정확성을 제공하지 않을 수 있습니다(소숫점 이하 자릿수가 많아질 때 오차 발생 가능성). 이는 부동 소숫점 연산의 한계 때문입니다. |
연산 속도 | 일반적으로 빠른 연산 속도를 가집니다. | 일반적으로 정수 연산보다 느린 연산 속도를 가집니다. |
자동으로 만들어진 C++ 소스
int main()
{
std::cout << "Hello World!\n";
}
프로그래밍 언어에서 모니터에 출력하는 대표적인 함수 비교
언어 | 출력 함수 | 예제 |
C | printf() | printf("Hello, World!\n"); |
C++ | std::cout | std::cout << "Hello, World!" << std::endl; |
Java | System.out.println() | System.out.println("Hello, World!"); |
JavaScript | console.log() | console.log("Hello, World!"); |
C# | Console.WriteLine() |
Console programming : C++ vs C
#include <iostream> //C++
#include <stdio.h> //C
int main()
{
std::cout << "Hello World!\n"; //C++
printf("Hello"); //C
}
#include <iostream>
using namespace std;
//네임스페이스로 std 사용, 잘 쓰지 않음
int main()
{
cout << "Hello" << endl;
return 0;
}
#include <iostream>
using std::cout; //더 좋은 방법
using std::endl;
//이제부터 cout은 std::cout을 참조하겠다!
int main()
{
cout<<"Hello"<<endl;
return 0;
}
입출력 스트림 객체 cout, cin
#include <iostream>
using std::cout;
using std::cin;
int main()
{
int input;
cout << "나이를 입력하세요: ";
cin >> input;
cout << "당신의 나이는: " << input << "살 입니다.";
return 0;
}
여러 변수 값 출력(printf vs cout)
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int a, b, c;
a = 100;
b = 200;
c = a + b;
printf("%d, %d, %d\n", a, b, c);//C, 함수
cout << a << ',' << b << ',' << c;//C++, 객체
return 0;
}
C언어 소스를 C++ 소스로 변경하기
//#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
#include <iostream>
using std::cout;
using std::cin;
int main(void)
{
int num;
//printf("숫자 하나를 입력하세요=");
cout << "숫자 하나를 입력하세요= ";
//scanf("%d", &num);
cin >> num;
//printf("입력받은 수는 %d입니다.\n", num);
cout << "입력받은 수는 " << num << "입니다.";
return 0;
}
#include <iostream> // iostream 헤더 파일을 포함. std::cin과 std::cout를 사용하기 위해 필요합니다.
int main() { // 프로그램의 시작점인 main 함수를 선언합니다.
int num; // 정수형 변수 num을 선언합니다.
std::cout << "숫자 하나를 입력하세요="; // 사용자에게 숫자 입력을 요청하는 메시지를 출력합니다.
std::cin >> num; // 사용자로부터 입력받은 숫자를 변수 num에 저장합니다.
std::cout << "입력받은 수는 " << num << "입니다.\n"; // '입력받은 수는' 이라는 문자열과 변수 num의 값을 출력합니다.
return 0; // 프로그램이 정상적으로 종료되었음을 운영체제에 알립니다.
}
구두점(punctuator) : 토큰을 구분
프로그래밍 언어에서 {}, [], () 사용의 의미
1. {} (중괄호)
대부분의 프로그래밍 언어에서 코드 블록을 정의하는데 사용됩니다. 예를 들어, 함수나 제어 구조(if, for, while 등)의 본문을 나타내는데 사용됩니다.
if (condition) {
// 이 부분이 if 문의 본문입니다.
}//cpp
JavaScript나 Python 등 일부 언어에서는 객체를 정의하는데도 사용됩니다.
2. [] (대괄호)
배열에 접근하거나 배열을 정의하는 데에 주로 사용됩니다.
int arr[5] = {1, 2, 3, 4, 5}; // C++에서 배열을 정의하고 초기화합니다.
int firstElement = arr[0]; // 배열의 첫 번째 요소에 접근합니다.
//cpp
Python이나 JavaScript와 같은 언어에서는 리스트 또는 배열을 생성할 때도 사용합니다.
3. () (소괄호)
함수 호출시 인자를 전달하는데 사용됩니다.
print("Hello World!") # Python에서 print 함수를 호출하고 "Hello World!" 문자열을 인자로 전달합니다.
//python
문장 끝에 ;를 사용하는 언어
1. C
2. C++
3. Java
4. JavaScript
5. PHP
6. Perl
7. Swift (하지만, Swift에서는 세미콜론은 선택사항이며, 대부분 생략 가능합니다)
8. Go
예약어(reserved word, keyword)
키워드와 대응하는 매크로(macro)
C언어 소스 C++로 변경하기
//#include <stdio.h> printf()함수 원형이 선언되어 있음, 전처리기
#include <iostream>
using std::cout;
int main(void) //콘솔 기반 C프로그램의 시작점
{ //main()함수의 시작
int num1, num2; //변수 선언문, 실행문 보다 먼저 씀
/* 변수명: 영문자(A-Z, a-z), 숫자(0-9), 밑줄(_)로 구성
변수(variable):프로그램이 실행되는 동안 자료를
기억시키기 위한 기억장소의 이름 */
num1 = 100; //대문자와 소문자는 다른 변수로 인식
num2 = -300; //변수에 상수 대입;
cout << "두 수의 합은" << num1 + num2 << "입니다.";
//표준 라이브러리 함수
return 0;
} //main()함수의 끝
프로그래밍 언어에서 식별자를 만드는 공통적인 규칙
1. 문자와 숫자: 식별자는 알파벳(대소문자 모두), 숫자, 밑줄(_)로 구성됩니다.
2. 시작 문자: 대부분의 언어에서 식별자는 숫자로 시작할 수 없습니다. 보통 알파벳이나 밑줄로 시작합니다.
3. 대소문자 구분: 대부분의 프로그래밍 언어는 대소문자를 구분합니다. 예를 들어, myVariable과 myvariable은 서로 다른 식별자로 취급됩니다.
4. 예약어 사용 금지: 각 언어의 예약어(reserved words)나 키워드(keywords)를 식별자로 사용할 수 없습니다. 예를 들면 if, else, for, while 등입니다.
5. 길이 제한: 일부 프로그래밍 언어에서는 식별자의 길이에 제한을 두기도 합니다(하지만 이제 많은 현대 언어들에서는 이런 제한을 두지 않습니다).
6. 특수 문자 사용 금지: 일반적으로 특수 문자(@, #, $, % 등)는 식별자에 포함시킬 수 없습니다(일부 언어에서는 허용되기도 합니다).
카멜 표기법
1. Lower Camel Case (소문자 카멜 표기법): 첫 번째 단어의 첫 글자는 소문자로, 그 후의 모든 단어의 첫 글자는 대문자로 시작합니다. 예를 들면 firstName, isAvailable, printHelloWorld 등입니다.
2. Upper Camel Case (대문자 카멜 표기법): 모든 단어의 첫 글자가 대문자로 시작합니다. 일반적으로 클래스 이름을 지을 때 많이 사용됩니다. 예를 들면 Person, BankAccount, PrintStream 등입니다.
리터럴(literal)
이스케이프 시퀀스(확장 문자열)
이스케이프 시퀀스를 사용하는 언어
1. C
2. C++
3. Java
4. JavaScript
5. Python
6. PHP
7. Ruby
8. Swift
문자형(character) 리터럴
#include <iostream> // iostream 헤더 파일을 포함시킵니다. 이 헤더는 C++의 입출력 기능을 제공합니다.
using std::cout; // std 네임스페이스의 cout 객체를 사용하기 위해 선언합니다.
// 이렇게 하면 "std::cout" 대신 "cout"만으로도 cout 객체를 사용할 수 있습니다.
int main() // 프로그램의 시작점인 main 함수를 정의합니다.
{
int a = 10; // 정수형 변수 a를 선언하고, 그 값을 10으로 초기화합니다.
cout << 'a'; // 문자 'a'를 출력합니다. 이때 'a'는 문자 리터럴입니다.
cout << a; // 변수 a의 값을 출력합니다. 즉, 숫자 10을 출력하게 됩니다.
return 0; // 프로그램이 성공적으로 종료되었음을 운영 체제에 알리기 위해 main 함수에서 0을 반환합니다.
}
자동 형 변환
자동 형 변환을 하는 프로그래밍 언어
1. C
2. C++
3. Java
4. Python
5. JavaScript
6. PHP
ex)
#include <iostream>
using std::cout;
int main()
{
cout << 10 / 4 <<" " << 10.0 / 4 << " " << 10 / 4.0 << " " << 10.0 / 4.0; //2 2.5 2.5 2.5
return 0;
}
증가, 감소 연산자
증가, 감소 연산자 예
#include <stdio.h>
int main(void)
{
int a = 10, b = 10, c = 20, d = 20;
int ap, bp, cm, dm;
ap = ++a; // a=a+1; ap=a; ap=11, a=11
printf("a=%d, ap=%d\n", a, ap);
bp = b++; // bp=b; b=b+1; bp=10, b=11
printf("b=%d, bp=%d\n", b, bp);
cm = --c; // c=c-1; cm=c; cm=19, c=19
printf("c=%d, cm=%d\n", c, cm);
dm = d--; // dm=d; d=d-1; dm=20, d=19
printf("d=%d, dm=%d\n", d, dm);
printf("%d\n", dm++);
printf("%d\n", ++dm);
return 0;
}
cast 연산자
#include <iostream>
using std::cout;
int main(void)
{
cout << 10 / 4 << " " << 10.0 / 4 << " " << 10 / 4.0 << "\n"; //자동 형 변환
cout << 10 / (double)4 << " " << (double)10 / 4; //강제 형 변환
return 0;
}
출처: C++ 프로그래밍 강의 자료