프로그래밍
1. C++의 컴파일 과정을 설명하라.
첫번째로 High Level Language 로 작성된 원시코드(Source Code) 파일(*.cpp) 가 있다.
이 원시코드는 Compiler를 통하여 목적코드 (Object Code)로 변환되며 이는 기계어 이다. (*.obj)
이 목적코드는 Linker를 통하여 실행파일인 *.exe가 생성된다.
실행파일 *.exe는 Loader를 통하여 메모리상에 올라간다.
- 원시코드 Source Code : *.cpp
Compiler
- 목적코드 Object Code : *.obj
Linker
- 실행파일 : *.exe
Loader
메모리에 실행파일을 올린다.
2. C++언어에서 Char, Integer, Float 변수타입의 컴퓨터 메모리상의 크기는 얼마인가?
- 어떤 OS냐와 컴파일러가 어떤 비트까지 처리 가능한가에 따라 메모리상의 크기가 결정된다.
- 현재 보통 일반적으로는 Integer는 4Byte, Float는 4Byte, Char는 1Byte이다.
- 정확히 알아보기 위해서는 sizeof 연산자를 사용한다.
3. C++ 언어에서 데이터형을 설명하라.
데이터형은 자신이 사용할 메모리의 크기를 설정할 때 사용하는 개념이다.
즉 프로그래밍을 할 때 정보를 저장하기 위해 사용할 데이터의 크기 (메모리)가 얼마인지를 정할 때 사용하는 개념이다.
C++ 에서는 정수형으로써 Char, Integer 가 있고 실수형으로 Float, Double가 있다.
또한 부호개념이 있는데 Unsigned와 Signed 이다. 이는 데이터가 ‘-‘와 ‘+’ 값으로 구분되는가를 볼 때 사용한다.
보통 Singed는 묵시적으로 사용되며 Unsigned를 사용할 경우 명시적으로 표기해야 한다.
또한 Short와 Long의 개념이 있는데 이는 변수가 갖는 데이터의 크기의 범위에 따라 효율성을 증가시키기 위해 사용한다.
현재 보통 4Byte Integer를 사용하는 컴퓨터에서는 Short는 2Byte의 크기를 차지하고 Long은 4~8Byte를 사용한다.(OS마다 차이가 있음)
Float와 Double형의 크기는 4Byte, 8Byte이며 이는 OS의 종류에 무관하게 변하지 않는다는 특징이 있다.
참과 거짓을 판별하는 Bool형 변수도 있다. 이는 True , False 로 구분되며 ‘0’이 아닌 모든 값에 대해서 True로 판단한다.
이 외에 C++ 에서는 사용자가 데이터형을 직접 정의할 수 있으며 이것이 객체지향프로그래밍의 목적과도 같다고 한다.
사용자 정의 데이터형에는 배열(Array), 포인터(Pointer), 구조체(Struct), 클래스(Class) 등이 있다.
4. 다음의 이름과 데이터 타입을 닺는 변수를 선언하는 C++구문을 작성하시오.
(a) 정수형변수 varCustomer
(b) 정수형변수 Customer 1st
(c) 실수형변수 Floating_Pie_value
(d) 문자형변수 Customer2
-------------------------------------------------------------------------------------------------------------
#include <iostream>
using namespace std;
int main()
{
intvarCustomer;
// int Customer 1st;
// Customer 1st 라는 이름을 갖는 변수는 공백이 들어가므로 선언 할 수 없다.
floatFloating_Pie_value;
charCustomer2;
return0;
}
--------------------------------------------------------------------------------------------
5. 다음 C++프로그램을 수행할 때, 13/14/15번 줄의 수행결과를 작성하시오. 단, 아래 프로그램에서 전위연산자와 후위연산자의 순서를 변경 할 수 있음.
11
8
10
6. 다음 C++프로그램을 수행 할 때, 13/14/15번 줄의 수행결과를 작성하시오. 단, 아래 프로그램에서 전위연산자와 후위연산자의 순서를 변경 할 수 있음.
11
12
6
7. 다음 C++ 프로그램은 컴파일/링크가 되지 않는 불완전한 프로그램이다. 이유를 설명하고 잘못된 부분의 올바른 구문을 기술하시오.
함수를 사용할 경우 선언, 정의, 호출 의 단계를 거친다.
함수 정의를 메인 보다 나중에 놓는 경우에는 함수의 원형(프로토타입)을 선언해야 한다.
위의 경우에는 호출, 정의 는 되어있지만 선언 부분이 빠져있다. 따라서 int main() 구문 위에 선언을 해줘야 한다.
--------------------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <iomanip>
using namespace std;
void fun ( int X );
int main()
{
inta = 5;
fun ( a);
cout << a << endl;
return0 ;
}
void fun ( int x )
{
x = x + 3;
return;
}
-----------------------------------------------------------------------------------------------------------------------------
8. 다음 C++ 프로그램을 수행하였을 때, main()의 cout 구문에 의하여 출력되는 a,b,c,d의 값을 기술하시오.
출력 : 1001033
a,b,c,d 의 값 : a는 100, b는 10, c 는 3, d는 3
9. 다음 C++ 프로그램을 수행하였을 때, main()의 cout 구문에 의하여 출력되는 a,b,c,d의 값을 기술하시오.
출력 : 1001010004499
a,b,c,d 의 값 : a 는 100, b는 10, c 는 1000, d는 4499
10. 다음 C++프로그램을 수행하였을 때, 변수 a와 x의 생성/파괴 순서를 기술하시오.
1. a 생성
2. x 생성
3. x 파괴
4. a 파괴
11. 3~19 사이의 두개의 정수 (x,y)를 무작위 생성하여 x의 y제곱을 구하는 프로그램을 작성하시오
---------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
int Pow ( int a , int b );
int main()
{
srand(time(NULL));
intx = rand();
inty = rand();
intresult = Pow(x, y);
// cout << x << " " << y << " " << endl;
// cout << result << endl;
return0;
}
int Pow( int A, int B)
{
returnpow(A,(float)B);
}
-----------------------------------------------------------------------------------------------------------------
※ 이경우 x,y값의 범위를 지정해주지 않아서 x,y값이 클 경우 result값이 출력에 음수로 표시됩니다.
12. 3~19사이의 하나의 정수 (x)를 무작위 생성하여 제곱급을 구하는 프로그램을 작성하시오.
---------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
float Sqrt ( int a );
int main()
{
srand(time(NULL));
intx = rand();
floatresult = Sqrt(x);
// cout << x << endl;
// cout << result << endl;
return0;
}
float Sqrt ( int A)
{
returnsqrt((float)A);
}
-----------------------------------------------------------------------------------------------------------------
13. 교재의 연습문제 4 -36을 작성하시오.
14 교재의 연습문제 프로그램 4-36와 유사한 프로그램으로 아래 조건에 따라 작성하라. Main()함수에서 3~10사이의 난수를 생성하여 Area()함수에 전달한다. Area() 함수에서는 삼각형의 면적을 계산하고 출력한다.
15. 상수의 종류를 설명하고, 예를 들어라.
----------------------------------------------------------------------------------------------------------------------------------------------
#include <iostream>
using namespace std;
/* defined constant
※ # 은 preprocessor(전처리기) 라고한다. 뒤에 세미콜론 (;)은 붙이지 않음 */
#define PI 3.14
int main()
{
/*
literal constant
정수형, 실수형, 문자, 문자열 등의 일반적인 상수
*/
intvarCustomer;
floatFloating_Pie_value;
charCustomer2;
/*
memory constant
예를 들어 float pi=3.14; pi = 3.15 ; 이렇게 다시 바꿀수 있음.
그러나 앞에 const를 붙여주면 초기화값에서 더이상 변하지 않음.(재변경하려할경우 오류)
이러한const가 붙는 것을 memory상수라고 한다.
*/
constfloat pi = 3.14;
return0;
}
-----------------------------------------------------------------------------------------------------------------------------------------------
16 두 개의 정수 (x,y)를 무작위 생성하여 주어지고, 가장 작은 값을 반환하는 smallest() 함수를 작성하라. 이때 두 값의 비교는 조건식을 사용한다.
---------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <ctime>
using namespace std;
int smallest ( int a , int b );
int main()
{
srand(time(NULL));
intx = rand();
inty = rand();
intresult = smallest(x, y);
// cout << x << " " << y << endl;
// cout << result << endl;
return0;
}
int smallest( int A, int B)
{
return( A > B ) ? B : A ;
}
-----------------------------------------------------------------------------------------------------------------
17. 함수 오버로딩에 대해 설명하라.
같은 함수 이름을 가지고 있으나 매개변수, 리턴타입 등의 특징은 다른 여러개의 함수 정의,생성을 가능하게 한다.
C에서는 함수오버로딩이 불가능하나 C++에서는 함수에서 비슷한 작업을 하는 함수를 같은 이름으로 중복해서 오버로딩이 가능하다.
여기에서 함수를 호출하는 기준의 인수들의 전달 리스트(argument)이며 함수의 데이터형은 영향을 주지 않는다.
오버로딩을 통하여 프로그래밍의 복잡함이 감소될 수 있다. 그러나 함수를 중복시킬 경우 함수중복의 모호성을 피해서 함수를 중복해야 한다.
18. call by value, call by reference, 참조변수에 대해 설명하고 예를 들어라.