Presentation is loading. Please wait.

Presentation is loading. Please wait.

C-언어와 기반구조 정보보호학과 이정수 교수.

Similar presentations


Presentation on theme: "C-언어와 기반구조 정보보호학과 이정수 교수."— Presentation transcript:

1 C-언어와 기반구조 정보보호학과 이정수 교수

2 1. c- 언어란? 켄 톰슨과 데니스 리치가 만든 하드웨어를 제어하는 고급언어
서로 다른 컴과 플랫폼에 유닉스를 호환시키기 위한 언어 기반구조 : 집합, 함수, 변수, 메크로 명령어 결정적 구조 = “함수 구조” 를 형식언어에 응용

3 2. C-언어와 함수의 기능적인 구조 f(x) = 2x+5 함수의 구성 : 함수의 이름, 입력변수, 출력변수, 함수의 연산기능
함수의 구성 : 함수의 이름, 입력변수, 출력변수, 함수의 연산기능 c- 코드의 기반구조 = 함수의 기능을 그대로 모방 void main ( ) { 데이터 처리(연산 포함) 작업지시 } 함수의 이름 : 코드의 기능을 함축적으로 나타내는 것 입력변수 : 함수이름뒤에 부착, ( ) 출력 변수 : 함수 이름 앞에 부착, 출력되는 자료의 형태를 표시 함수의 바디 : 집합으로 표시하고 데이터처리 및 작업지시

4 // program Name : MyHello.cpp
#include <iostream.h>; void main() { cout << “Hello, this is my first C++ program \n”; }

5 진짜 대상 파일이 됨<- os가 사용하게 될 대상파일
2-1 c-언어로 코딩한 프로그램의 처리 텍스트 프로그램 파일 MyHello.cpp 텍스트 코드가 컴파일 후 진짜 대상 파일이 됨<- os가 사용하게 될 대상파일 (Myhello.obj) User 가 사용토록 링크 후, user가 사용하개 되는 실행 파일 MyHello.EXE 텍스트 프로그램 파일 MyHello.cpp

6 2-3 c-언어의 장점 ◈ C는 독립적인 실행 파일(.EXE)을 만들어 낸다. ◈ C가 만들어 내는 실행파일의 크기가 작다.
◈ 소스 파일을 컴파일하여 .obj 파일로 만들고 이것을 링크하여 .EXE로 만드는 과정이 매 우 빠르게 진행된다. ◈ 신뢰성이 있고 사용하기 쉽다. ◈ C 컴파일러와 링커를 괜찮은 소프트웨어 공급자에게서 납득할 수 있는 가격에 구입 할 수 있다.

7 3. 예제 MyHello.cpp 의 coding 분석
// 주석문 : 해설문으로 컴파일러가 읽지 않는 참조문 #include <iostream.h> : 입출력 흐름( Input-Output Stream )을 제어 하는 정보파일 (head file). 바디에 있는 작업지시문 (cout) 를 실행토록 하는 정보가 들어있는 파일 main 함수는 main processor 로서 OS를 건드려 함수바디에 지시된 작업을 실행하게 하는 기능함수이다. main은 함수이지만 따로 입력 데이터를 받지 않는다. 즉 main ( ) 으로 표현된다. 그러므로 출력도 없다. -> void main ()으로 표시 된다.

8 3. 예제 MyHello.cpp 의 coding 분석
왜 main()이란 함수 이름을 사용하는 것일까? C/C++에서는 반드시 main() 함수를 호출해야 한다. MyHello.cpp 프로그램을 작성해서 실행시키면 이 함수가 가장 먼저 실행된다. 문장종결자(실행지시자 ;)를는 코딩된 순서데로 컴파일러로 하여금 문장을 실행하게 한다. \n 문자는 캐리지 리턴(carriage return: 줄의 앞으로 옮김)/라인 피드(line feed: 새 줄로 이동) 문자로서, “Hello, this is my first C++ program”이란 문장을 출력하고 나서 다음 줄의 첫 칸으로 curser 를 반환( 이동)하도록 한다. 입력한 문자열은 반드시 큰 따옴표로 둘러 싸야(“ ”) cout은 화면(콘솔)에 문자를 출력하는 기능을 가지고 있는데, 일단은 함수로 생각할 수 있다. 그렇다면 코드는 어디에 있을까? 실제로 화면에 문자를 보내주는 코드를 누가 작성한 것일까? 아무튼 이것 역시 비주얼 C++에 들어있지만 여러분은 컴파일러에게 cout은 미리 준비된 함수라는 것을 알려주어야 한다. cout에 대한 모든 정보는 iostream.h라는 파일에 들어있다.

9 3-1 main 바디에서 자료 처리하는 예제 변수: 데이터를 담는 기억장소(주소를 가짐), 이름으로 구분
1. 변수처리 2. 선언 3. return : 데이터를 제대로 주고 받기 // Program Name: Addition.cpp #include <iostream.h> void main() <- 프로그램의 entry point { int x, y, z ; x = 2; // 변수를 값으로 setting y = 3; z = x + y; // = : 수학과는 달리 값을 입력한다는 뜻이다. cout << “The result is: \n”; cout << z; cout << “\n”; } 변수: 데이터를 담는 기억장소(주소를 가짐), 이름으로 구분 변수 선언 : 변수의 이름과 변수의 타입을 같이 사용. 즉, 변수가 어떤 타입 문자열이냐, 실수냐, 정수냐의 데이터를 담을 것인지를 정해 주는 것 int타입 : 정수 자료 타입

10 4. 함수를 이용한 자료처리 c- 언어는 디자인이다. 디자인 측면에서 바라봐야 한다.
Program Name: AddFcn.cpp #include <iostream.h> void main() { int x, y, z; x = 2; y = 3; z = AddIt(x, y); cout << “The result is: \n”; cout << z; cout << “\n”; } c- 언어는 디자인이다. 디자인 측면에서 바라봐야 한다. z 는 두 입력 데이터 x,y에 의해 연산 가공된 결과를 함수(AddIt)값으로 받아들인다. 함수 호출방식으로 자료를 처리한 예이다.

11 함수표현법 4. 함수를 이용한 자료처리 // Program Name: AddFcn.cpp
# include <iostream.h> ; int AddIt( int, int); //함수원형 선언 void main() { int iNum1; int iNum2; int iResult; iNum1 = 2; iNum2 = 3; iResult = AddIt(iNum1, iNum2); cout << “The result is: \n”; cout << iResult; cout << “\n”; } 함수의 원형과 바디로 구성되어 있다. 함수의 구성은 1. 함수의 이름, 2. 입력변수, 3. 출력변수 4. 연산가공 으로 되어 있다. 그리고 1,2,3을 조합하여 표현한 형태를 함수의 원형이라 한다. f(x,y) 대신에 Addit (int , int ) 로 표시 z=f(x,y) 대신에 int AddIt(int, int) 함수표현법

12 6. 함수를 이용한 자료처리 함수호출에 의한 자료처리 coding 주석 Program Name: AddFcn.cpp
# include <iostream.h> ; int AddIt( int, int); //함수원형 선언 void main() { int iNum1; int iNum2; int iResult; iNum1 = 2; iNum2 = 3; iResult = AddIt(iNum1, iNum2); cout << “The result is: \n”; cout << iResult; cout << “\n”; } // 함수 AddIt 의 구현은 아래의 code에 있다 : int AddIt(int x, int y) int z; z= x+ y; return z ; * Main의 바디 부분은 대부분 작업지시문으로 coding 하는 것을 원칙 자료처리는 함수를 불러오거나 링커해서 사용하도록함 함수원형등 바깥에서 불러올 자료는 main 바디 위쪽에 위치 하도록 함 함수구현 소스 코드는 main 바디 아래쪽에 위치 시킴 함수는 바디에서 연산 실행된 값을 반드시 주어진 함수에 반환(return ) 하는 것을 원칙 Return z to AddIt 함수구현할 때 입력변수는 함수에 바로 입력하면된다. 따로 변수 선언을 할 필요가 없다. 함수는 파라미터를 받아오는 것이지 변수 자체를 받는 것이 아니다. 즉 변수에 저장된 값을 담아오기 때문이다.

13 6. 함수를 이용한 자료처리 함수호출에 의한 자료처리 coding 주석(변수의 활용범위)
Program Name: MulFcn.cpp # include <iostream.h> int MulIt( int, int); void main() { int iNum1; int iNum2; int iResult; iNum1 = 2; iNum2 = 3; iResult = MulIt(iNum1, iNum2); // 함수의 파라미터에 세팅한 값을 넣어 연산수행하기 cout << “The result is: \n”; cout << iResult; cout << “\n”; } int MulIt(int x, int y) int z; z= x y; return z; * Main의 바디 부분은 대부분 작업지시문으로 coding 하는 것을 원칙 자료처리는 함수를 불러오거나 링커해서 사용하도록함 함수원형등 바깥에서 불러올 자료는 main 바디 위쪽에 위치 하도록 함 함수구현 소스 코드는 main 바디 아래쪽에 위치 시킴 함수는 바디에서 연산 실행된 값을 반드시 주어진 함수에 반환(return ) 하는 것을 원칙 Return z to MulIt Main의 바디에서 선언된 변수는 main에서 활동하는 함수에 의해 호출 가능 main 밖의 함수 mulIt(같은 함수) 를 구현 할 때는 새로운 파라미터 변수 x,y 그리고 값을 받아야야 할 변수z를 함수 바디에 새롭게 선언해야 한다.

14 6. 함수를 이용한 자료처리 함수호출에 의한 자료처리 coding 주석 main 함수 바깥에 coding되는 변수나 함수는
변수도 main 위쪽에 선언하여 main에 부속된 함수나 작업지시자들이 사용하도록 한다. base (밑변의 길이), height (높이늬 길이), area (삼각형의 면적) 모두를 main 바디 바깥에 위치 double 은 자료의 형태로서 소수 2째 자리 까지 표현 가능 함수는 바디에서 연산 실행된 값을 반드시 주어진 함수에 반환(return ) 하는 것을 원칙 Return area to Area, return 0 (to main) 모니터에 Enter Height of Triangle 를 보고 키보드로 삼각형의 높이를 처 넣어라! 모니터의 지시에 따라 키보드로 숫자를 넣으면 그 숫자는 height 변수에 copy (입력) 된다. 함수는 파라미터를 받아오므로 형식화된 변수이름을 사용하여 공식으로 연산하여 값을 넘겨 받는다. 즉 area= (0.5 * base * height) main 바디 바깥에 선언된 변수는 누구나 호출해서 사용 가능하다. // Program name: Area.cpp // Area of triangle = (Base length of triangle * Height of triangle)/2 #include <iostream.h> // 프리컴파일된 헤더 double base,height,area; //전역변수 설정 double Area(double, double); int main() { cout << “Enter Height of Triangle: ”; cin >> height; cout << “Enter Base of Triangle: ”; cin >> base; area = Area(base, height); cout << “The Area of the Triangle is: ” << area << endl ; // area 값을 출력 return 0; } double Area (double base, double height) area = (0.5*base*height); return area ;

15 6. 함수를 이용한 자료처리 함수호출에 의한 자료처리 (값을 반환하지 않은 경우) coding 주석
main 함수 바깥에 coding되는 변수나 함수는 main에서 불러 사용한다는 데 의미가 있다. 함수는 바디에서 연산 실행된 값을 반드시 주어진 함수에 반환(return ) 하는 것을 원칙 Main 함수는 값을 반환 받지 않으므로 return 0 (to main) Area 함수도 값을 반환 받지 않고 연산된 값을 바로 (종속) 변수 area 에 넘겨줄 수 있다. void Area (double base, double height) { area = (0.5*base*height); } 그러나 main의 바디에서는 연산이 다음과 같이 실행되어야 한다. 즉 Area (base, height ) ; main 바디 바깥에 선언된 변수는 누구나 호출해서 사용 가능하므로 cout 가 area 변수를 호출하여 결과값을 모니터에 뛰운다. // Program name: Area.cpp // Area of triangle = (Base length of triangle * Height of triangle)/2 #include <iostream.h> // 프리컴파일된 헤더 double base,height,area; //전역변수 설정 void Area(double, double); int main() { cout << “Enter Height of Triangle: ”; cin >> height; cout << “Enter Base of Triangle: ”; cin >> base; Area(base, height); cout << “The Area of the Triangle is: ” << area << endl ; // area 값을 출력 return 0; } void Area (double base, double height) area = (0.5*base*height);

16 3. 상수로 변수를 고정하기 const double pi =3.14
5. 과적의 기술(함수의 overloading) 프로그램 이름 Overloading.cpp #include <iostream.h> double base,height,radius; // 전역 변수 double Area_of_triangle,Area_of_circle; int choice; double Area (double,double); // 함수 원형 double Area (double); const double pi = 3.14 //상수 void main() { cout << “To find the area of a Triangle, input 1 endl”; cout << “To find the area of a Circle, input 2 endl”; cin >> choice; if (choice == 1) { // 삼각형의 면적을 구하는 작업지시 cout << “Enter the base of the triangle: ”; cin >> base; cout << “Enter the height of the triangle: ”; cin >> height; Overloading F(x) F(x,y) Area(double) Area(double,double) 일변수 함수 함수의 이름 : F 2변수 함수 함수의 이름은 같지만 다른 함수로 사용 서로 다른 함수로 본다 변수의 개수가 다르므로 다른 함수로 사용 함수의이름 공유 상수 설정 방식 1. 이름설정 pi 2. 자료형태 설정 및 값 설정 double pi =3.14 3. 상수로 변수를 고정하기 const double pi =3.14

17 5. 과적의 기술(함수의 overloading)
프로그램 이름 Overloading.cpp Area_of_triangle = Area(base,height); cout << “The Area of the Triangle is: ”<< Area_of_triangle << endl;} if(choice == 2) { // 원의 면적을 구하는 작업지시 cout << “Enter radius of the Circle: ”; cin >> radius; Area_of_circle = Area(radius); cout << “The area of the Circle is: ”<<Area_of_circle<<endl; } if (choice != 1 && choice != 2) { cout << “Sorry! You must enter either 1 or 2 endl”;} double Area (double base, double height) { return (0.5*base*height); (// double areaoft; areaoft = (0.5*base*height); return areaoft ; ) } double Area(double radius) // 원의 면적을 구하는 함수 {return(pi*radius*radius); } subroutine의 구성 If 문 { } If 문 { } If 문 { } 서브 루틴을 구성 일반함수는 main에서 바디 불허 if 문은 main 처럼 바디를 만듬 if ( 결정변수 ) ( ) 안에 선택사항을 넣어 case를 분할 if 문은 Case를 선택 if 문에 부속된 바디로 새로운 작업 지시 바디로 구현 If 문 = if ( case 문의 예 ) if(choice == 2) : 선택 변수의 값이 2와 일치 한다면 if (choice != 1 && choice != 2)

18 5. 변수와 주소(address) 변수이름과 메모리 셀 변수 변수명 Main에서 호출 변수의 참조변수 주소 호출 & 변수명
// Program name: Address.cpp #include <iostream.h>; double base = 5.0; int radius = 2; void main() { cout<<“The VALUE of base is: ”<<base<<endl; cout<<“The ADDRESS of base is: ”<<&base<<endl; cout<<“The SIZE of double base is: ”<<sizeof(double)<<“bytes endl”; cout<<“The VALUE of radius is: ” <<radius<<endl; cout<<“The ADDRESS of radius is: ”<<&radius<<endl; cout<<“The SIZE of integer radius is: ”<<sizeof(int)<<“bytes endl”; } 변수 변수명 & 변수명 int * 변수명 메모리 셀에서의 실제 위치는? 데이터가 copy 되는 곳 변수에 copy 된 자료를 호출 연산식에서도 변수로 계산 Main에서 호출 포인터 변수 변수의 주소 호출 참조변수 변수 자료형태의 사이즈를 알려면? sizeof( int ) sizeof( double )

19 5. 포인터변수로 자료 처리하기 void ChangeIt(int* ) void main() { int iToBeChanged;
변수이름과 메모리 셀 void ChangeIt(int* ) void main() { int iToBeChanged; int* pToBeChanged; iToBeChanged = 2; pToBeChanged = &iToBeChanged; ChangeIt( pToBeChanged); cout << “iToBeChanged = \n”; cout << iToBeChanged; cout << “\n”; } void ChangeIt(int* pMyVariable) *pMyVariable = *pMyVariable + 1; 변수 변수명 & 변수명 int * 변수명 메모리 셀에서의 실제 위치는? 데이터가 copy 되는 곳 변수에 copy 된 자료를 호출 연산식에서도 변수로 계산 Main에서 호출 포인터 변수 변수의 주소 호출 참조변수 (명목 )변수 : iToBeChanged 참조변수 :& iToBeChanged 포인터변수 : piToBeChanged

20 5. String으로 text 자료 처리 문자열.cpp S-주석문 entrypoint void main() 고객 바디구현
#include <iostream.h> #include<string.h> 정보파일호출 <string.h> sMyString[100] Char sMyString[100] strcpy ( , ) 문자열을 다루는 정보파일 함수 strcpy ( 문자열 변수, 타켓text) 을 main에서 실행 문자열 변수 이름 [100] : 100자 까지 지정 문자열 변수 문자열 복사함수 문자열 변수선언 반드시 문자열 변수임을 선언 entrypoint void main() 고객 { char sMyString[100]; 바디구현 strcpy(sMyString, “ABC”); 문자열 변수지정 및 호출 cout << sMyString ; cout << “endl”; } Main coding 정보파일 coding Strcpy 함수 사용법 문자열이란 자료 타입은 없다. 그렇다면 문자열은 어떻게 다루어 낼까? 실제로 문자열은 한문자, 한문자를 모아서 만든다. 그리고 text 는 문자열로 구성 된다 “This is my string”은 문자열이다. Prototype : strcpy ( 문자열 변수, text ) 의미 : 주어진 문자열 변수에 text 를 카피

21 5. 고객의 자료를 메모리에 확보(구조체이용) 고객의 자료를 변수화.cpp S-주석문 entrypoint
#include <iostream.h>; 정보파일호출 #include<string.h>; Struct MYSTRUCTURE <string.h> sMyString[100] Char sMyString[100] strcpy ( , ) 문자열을 다루는 정보파일 함수 strcpy ( 문자열 변수, 타켓text) 을 main에서 실행 문자열 변수 이름 [100] : 100자 까지 지정 문자열 변수 문자열 복사함수 문자열 변수선언 반드시 문자열 변수임을 선언 { char sName[100] 구조체 선언 및 구현 Int iAge }; entrypoint void main() 고객 { MYSTRUCTURE MyStructure; 바디구현 strcpy(MyStructure.sName, “David”); 구조체 변수지정 및 호출 MyStructure.iAge =13; cout << “endl”; } Main coding 정보파일 및 구조체 coding int, float, char, long 따위의 자료 타입들은 이미 C/C++에서 정의된 것들이기 때문에, 컴파일러에게 일일이 무슨 뜻인지 알려줄 필요는 없다. C/C++는 이렇게 미리 정의된 자료 타입 외에도 스스로 만들어서 이용할 수 있는 자료 타입을 허용한다. 어떻게 다루어 낼까? 구조체란? 사용자가 정의한 자료타입 Strcpy 함수 사용법 Prototype : strcpy ( 문자열 함수, text ) 의미 : 주어진 문자열 함수에 text 를 카피

22 NPS 측정 예시 NPS설문 4. How to calculate NPS 일반적 설문 순 추천 고객 6명
비추천고객 8명 (마이너스 10%) 전반적으로 서비스에 만족하십니까? A회사를 다른 사람에게 추천할 의향이 있습니까? X사의 상품이나 서비스를 앞으로도 재구매할 의향이 있습니까? 리커드 측도 :1,2,3,4,5 일반적 설문 당신은 A회사를 친구나 동료에게 추천할 의사가 있습니까? 0,1,2,3,4,5,6,7,8,9,10 순 추천 고객(9,10), 중립고객(7,8), 비추천고객(나머지) NPS설문


Download ppt "C-언어와 기반구조 정보보호학과 이정수 교수."

Similar presentations


Ads by Google