본문 바로가기

Developing

[C언어 강의 - 16] 파일 입출력 파일 입출력에 사용되는 다음과 같은 함수가 있다. 파일 열고 닫기 프로그램에서 파일을 사용하기 위해서는 파일을 열어야 하고, 파일에 대한 사용이 끝나면 닫아야 한다. 파일을 열때 담당하는 함수가 fopen 인데, path 파일을 모드 형태로 열고, 파일 포인터를 반환하는데 이는 다른 입출력 함수에서 사용된다. mode 설명 r 읽기 전용, 파일이 반드시 존재해야 함 w 쓰기 전용, 파일은 없어도 되고 이미 존재한다면 기존 내용은 삭제 a 추가용, 파일이 없어도 되고 이미 존재한다면 기존 내용 뒤에 추가 rb 바이너리 파일 읽기 전용 wb 바이너리 파일 쓰기 전용 ab 바이너리 파일 추가용 r+ 읽기와 쓰기용 w+ 쓰기와 읽기용 FILE *fp; fp = fopen("input.txt", "r") ====.. 더보기
[C언어 강의 - 15] 표준 입출력 키보드를 통해 입력받기 위해 scanf 함수를 사용했고, 모니터에 출력하기 위해 printf 함수를 지금까지 사용해왔다. 이와 같이 키보드로 입력받는 것을 표준 입력이라 하며 모니터로 출력하는 것을 표준 출력이라 한다. 표준 입력과 표준 출력을 하는 함수에는 다음의 종류가 있다. 한 문자 입출력 getchar 함수는 표준 입력장치를 통해 한 문자를 입력받아 반환하는데, 만약 파일의 끝을 만나거나 오류가 발생하면 EOF(End Of File)를 리턴한다. EOF는 보통 '-1'로 정의되어 있다. 또한 getchar 함수를 포함한 대부분의 입출력 함수는 "stdio.h" 헤더 파일에 정의되어 있기 때문에 해당 헤더 파일을 포함해야 한다. 그리고 puchar 함수는 표준 출력장치에 한 문자를 출력한다. 위의 .. 더보기
[C언어 강의 - 14] 기억클래스, 변수 C 언어 첫 번째 포스팅에서 변수란 어떠한 데이터 값을 담아놓는 공간이라 설명하였다. 이런 변수가 생성될 때 변수에게 메모리 공간을 지정하는 것을 기억장소 '할당' 이라고 하며, 변수의 사용이 끝난 뒤 할당되었던 메모리 공간을 다시 가용 공간으로 만드는 것을 '회수' 라고 한다. 기억 클래스에 따라 변수에게 할당되는 메모리 영역이 각자 다른데, 기억 클래스는 다음과 같이 4 가지가 있다. 기억 클래스는 변수를 선언할 때 지정할 수 있는데, 다음과 같이 데이터 타입 앞에 위치한다. 기억 클래스에 대한 구체적인 내용을 알기 위해서는 메모리에 적재되어 실행 중인 프로그램의 구조를 알아야 하는데, 이를 그림으로 나타내면 아래와 같다. 텍스트 영역 : 프로그램 코드 저장 정적 : 변수 할당 영역 (크기 지정) 스.. 더보기
[C언어 강의 - 13] 함수 함수 함수를 공부하기 전에 잠깐 다른 이야기를 해보면, 사람과 컴퓨터 중 누가 더 똑똑한지 질문하면 일단은 사람이 더 똑똑하다는 것이 정답이다. 물론 의문이 들수도 있는데, 컴퓨터가 사람보다 우월한 것은 바로 속도이다. 예를 들어 "1~10 숫자를 전부 다 더하면 얼마일까" 라는 질문을 던지면 대부분의 사람들은 답이 55 라는것을 알지만 컴퓨터는 일일이 계산해서 결과를 출력하는데 이 속도는 사실상 비슷하다. 그렇다면 "1 ~ 345" 숫자를 전부 다 더하면 얼마일까" 라는 질문을 던지면 사람과 컴퓨터 모두 일일이 계산하는데, 컴퓨터는 순식간에 계산해버린다. 즉, 컴퓨터는 연산의 속도가 어마어마 하기 때문에 얼핏 보기에는 컴퓨터가 더 똑똑해 보이지만 실제로는 사람이 더 똑똑한 것이다. 굳이 함수 포스팅에서.. 더보기
[C언어 강의 - 12] 배열 배열 여러 데이터를 묶어서 하나의 단위로 처리하는 데이터 타입을 "구조적 데이터 타입" 이라 한다. 구조적 데이터 타입은 배열, 구조체, 공용체 등으로 구분할 수 있는데, 본 포스팅에서는 우선 배열을 먼저 알아본다. 배열을 왜 배워야 하는지 알아보기 위해 우선 다음의 프로그램을 살펴보자. 우선 위의 프로그램에는 몇 가지 문제가 있다. 1. 입력 받아야 하는 성적의 개수의 이상으로 변수가 필요하다. (입력 성적이 100개면 100개 이상의 변수가 필요) 2. 숫자를 제외하고 동일한 부분이 계속 반복된다. (효율성 떨어짐) 즉, 위와 같은 경우에 배열을 사용하면 편한데, 배열을 선언하는 형식은 다음과 같다. 크기가 5 인 int 데이터 타입 변수로 이루어.. 더보기
[C언어 강의 - 11] 제어문 break 문 때로는 반복문의 중간 지점에서 반복문을 종료해야 하는 경우가 있다. switch, while, for, do-while 문에서 'break' 문을 사용하면 강제로 벗어나게 된다. 사용 형식은 다음과 같다. break 문을 사용한 프로그램을 몇가지 보도록 하자. 02 행 : sqrt 함수를 사용하기 위한 헤더 파일 추가 08 행 : 숫자 1은 논리적으로 보면 True와 같음 15 행 : sqrt(num)은 num의 제곱근을 구해주는 함수 a와 b를 0~3 까지 반복하되, a가 b보다 작으면 break; continue 문 continue 문은 while, for, do-while 문 등의 반복문에서 현재 반복문을 멈추고 다음 반복을 하도록 하는 것이다. continue 문의 사용 형식은 다음.. 더보기
[C언어 강의 - 10] 반복문 반복문 "Hello World" 라는 문자열을 10번 출력해야 한다고 가정하면 다음과 같이 코딩할 수 있다. 동작은 잘 되겠지만 우선 소스코드 자체가 참...... 동일한 내용이 단순히 10번 반복되는 이 코드는 정말 효율성이 떨어지는 코드이다. 즉, 위아 같이 비슷한 내용을 여러번 반복해야 할 때 사용하는 것이 바로 반복문이다. 반복문은 종종 제어문과 같이 쓰이기 마련인데 우선 반복문의 종류에 대해 알아보자. while 문 while 문의 형식은 다음과 같은데, 식이 거짓이면 실행하지 않고 while 문을 종료한다. 식이 참이면 문장을 실행하고 다시 식을 평가한다. 이를 이용하여 앞서 살펴본 Hello World을 10번 출력하는 프로그램을 다음과 같이 코딩할 수 있다. 05 행 : 반복 변수 i를 초.. 더보기
[C언어 강의 - 09] 조건문 조건문 앞서 공부한 프로그램은 전부 위에서부터 아래로 순차적으로 실행되었다. 그러나 조건문/제어문 등을 이용하면 프로그램 실행 순서에 변화를 가져올 수 있다. 다음과 같이 성적의 기준이 있다고 가정한다. 성적 (100점 만점) 등급 90 ~ 100 A 80 ~ 89 B 70 ~ 79 C 60 ~ 69 D 0 ~ 59 F 성적에 따라 등급이 달라지는 것을 알 수 있는데 이와 같이 특정 조건에 따라 처리되는 내용이 달라지는 경우에 조건문을 사용한다. 조건문이란, 조건에 따라 둘 또는 그 이상의 실행 경로 중에서 하나를 선택할 수 있는 수단을 제공하는 방식인데, C 언어의 조건문은 식의 참(True)/거짓(False)에 따라 선택하는 if 조건문과 식의 값에 따라 여러 경로 중에서 하나를 택하는 switch .. 더보기
[C언어 강의 - 08] 비트 연산자 비트 연산자 Bit(비트)란 정보를 저장하는 최소 단위이다. C언어에서는 비트를 다루는 연사자가 제공되는데, 바로 비트 연산자이다. 비트 연산자는 char, short, int, long 등 정수 데이터 타입에서 사용이 가능하다. 비트 연산자의 종류에는 다음과 같은 것들이 있다. & (AND) 연산자 & 연산은 다음과 같이 대응되는 비트가 모두 1 이면 결과는 1 이 되고, 이외의 경우에는 0 이 된다. 0 & 0 => 0 0 & 1 => 0 1 & 0 => 0 1 & 1 => 1 예를 들어 아래의 그림처럼 a 변수에 '01000001' 이 저장되어 있고, b 변수에 '00111001' 이 저장되어 있으면 a&b 연산의 결과는 대응되는 비트가 1일 때만 1이 되어 00000001 이 된다. 아래의 프로그.. 더보기
[C언어 강의 - 07] 관계, 논리 연산자 관계 연산자 관계 연산자는 좌측 값과 우측 값의 크기를 비교하는 연산자로 초등학교 때 배운 부등호를 생각하면 된다. C언어에서 제공하는 관계 연산자를 표로 나타내면 다음과 같다. 연산자 설명 사용 예 == 좌측 값과 우측 값이 같은가 a == b != 좌측 값과 우측 값이 다른가 a != b 좌측 값이 우측 값보다 큰가 a > b = b 관계 연산자는 조건을 만족하면 참(True)를 나타내는 1을 반환하고, 만족하지 않으면 거짓(False)를 나타내는 0을 반환한다. 또한 관계 연산자 중에서 2개 이상의 연산자가 합쳐진 관계 연산자의 경우 (==, !=, =) 좌/우 연산자간의 순서가 바뀌지 않아야 하며 공백 또한 없어야 한다. 관계 연산자를 쉽게 이해하기 위한 프로그램에는 다음과 같은 프로그램이 있다... 더보기
[C언어 강의 - 06] 대입, 증가/감소 연산자 대입 연산자 변수에 값을 저장하거나 변경할 때 사용하는 '=' 연산자가 바로 대입 연산자이다. a = 7 ; // 이런 식으로 a 변수에 정수 7를 대입할 수도 있고 a = b = c = 7 ; // 이런 식으로 한번에 변수 a, b, c 에 정수 7를 대입할 수도 있다. 대입 연산자의 종류에는 위와 같이 일반적인 형태도 있지만 '복합 대입 연산자'라는 것도 존재하는데, 이것은 산술 연산자와 대입 연산자를 합친 형태이다. a = a + 7 ; // 현재 a의 값에 7을 더한 값을 a에 저장하라는 식인데, 이것을 복합 대입 연산자로 나타내면 아래와 같다. a += 7 ; // 이와 같이 복합 대입 연산자로 간단하게 나타낼 수 있다. 대입 연산자의 종류를 표로 나타내면 다음과 같다. 연산자 설명 사용 예 =.. 더보기
[C언어 강의 - 05] 산술 연산자 산술 연산자 산술 연산자는 덧셈, 뺄셈, 곱셈, 나눗셈 등을 수행하는 연산자로 다음과 같은 것들이 잇다. 연산자 설명 사용 예 + 값을 더함 a + b - 값을 뺌 a - b * 값을 곱함 a * b / 값을 나눔 a / b % 값을 나눈 나머지 a % b 나눗셈 연산 '/' 은 정수와 실수 모두 가능한데, 정수에 대한 나눗셈에서는 소수점 이하를 버리지만, 소수점에 대한 나눗셈에서는 나누어 떨어질 때까지 연산한다. 간략하게 정리하자면 다음과 같다. 식 결과 설명 5 / 2 2 정수에 대한 나눗셈이기 때문에 소숫점 이하는 버림 5.0 / 2.0 2.5 실수에 대한 나눗셈이기 때문에 나누어 떨어질 때까지 나눔 5.0 / 2 2.5 정수 5를, 실수 5.0으로 변환하여 연산 나머지 연산 '%'은 정수에 대해서.. 더보기
[C언어 강의 - 04] 데이터 타입 정수 데이터 타입 이전에 설명한 것처럼 C 언어에서 사용되는 정수는 8진수, 10진수, 16진수가 있다. 아래의 프로그램은 변수에 각각 진수들을 저장하고 출력하는 프로그램이다. 05 행에서 변수 a, b, c를 int 타입으로 선언한다. 07 행에서 a 변수에 10진수 21를 대입한다. 08 행에서 b 변수에 8진수 34를 대입한다. (앞에 0 가 붙으면 8진수를 의미) 09 행에서 c 변수에 16진수 AC를 대입한다. (앞에 0x 가 붙으면 16진수를 의미) 11 행에서 모든 변수를 10진수로 출력한다. (8진수와 16진수가 자동으로 10진수로 변환되어 출력) 13 행에서 모든 변수를 각각의 진법에 맞게 출력한다. %o : 8진수 %x : 16진수 출력 결과는 아래와 같다. 위의 프로그램에서 가장 중요.. 더보기
[C언어 강의 - 03] 표준 입출력 (함수) STDIO (Standard Input Output) 요전에도 아주 잠깐 설명한 적이 있다. 다시 설명하자면 컴퓨터에서 표준 입력은 키보드를 의미하고, 표줄 출력은 모니터를 의미한다. 또한 이전에 보았던 프로그램, 앞에서 볼 프로그램, 앞으로 여러분들이 코딩하는 프로그램의 99%는 "stdio.h" 라는 헤더 파일을 include(참조) 하는 부분이 있을 것이다. 우선 Output, 즉 출력부터 살펴보는데, 아래의 프로그램을 보자. 눈치가 빠른 사람들은 이미 알것이다. printf 라는 함수가 바로 출력 함수라는 것을 말이다. 즉 printf 함수를 호출하면 뒤에 나올 데이터(Hello STDIO)를 표준 출력인 모니터로 출력하라는 소리이다. (위 프로그램 상에서 별도의 입/출력 장치를 선언하지 않았기 .. 더보기
[C언어 강의 - 02] 상수와 변수 대부분의 프로그램은 데이터를 이용하는데, 데이터는 상수와 변수로 구분할 수 있다. 상수란 프로그램이 실행되는 동안 변하지 않는 고정적인 값이고, 변수란 프로그램이 실행되는 동안 값을 저장하는 일종의 공간으로 언제든지 변경될 수 있다. 상수 printf ("Hello World"); a = 3 ; 위와 같은 상황에서 우리는 "Hello World"와 숫자 "3"을 상수라 한다. 상수의 종류에는 다음과 같은 것들이 있다. 상수 예 정수 21, 034, 0xAC 실수 3.14, 0.7e3 문자 'A', 'C', 'f', 'z' 문자열 "Hello World", "안녕하세요" * 정수를 보면 034, 0xAC처럼 일반적인 숫자처럼 보이지 않는 정수들이 있다. 이런 정수는 8진수 16진수를 의미한다. 즉, 8진수.. 더보기
[C언어 강의 - 01] C언어 개요 우선 C 언어를 알기 전에 프로그래밍 언어를 알아야 한다. 프로그래밍 언어는 컴퓨터 시스템을 동작시키는 프로그램을 작성하기 위한 언어이다. 컴퓨터 시스템은 스스로 인식할 수 있는 명령어들로 이루어진 프로그램에 의해 동작된다. 프로그래밍 언어란 이러한 프로그램을 작성하기 위한 인공적인 언어이다. 또한 프로그래밍 언어는 사람이 얼마나 사용하기 편리한가에 따라 고급 언어와 저급 언어로 나뉜다. 고급 언어 : C, C++, Java 등 대부분의 언어 고급 언어란, 사람이 이해하기 쉬운 언어를 말하며. Java의 경우 Write Once, Run Anyware (한번 코딩, 어느 플랫폼에서나 실행)를 지원하며 다른 고급 언어도 기본적인 문법은 비슷하고 플랫폼에 따라 조금씩만 수정하면 된다. 저급 언어 : 어셈블리.. 더보기
Python 01 - 배너 그래이빙 지금 부터 진행되는 대부분의 파이썬 강좌는 리눅스에서 실행되며, 파이썬 버전은 2.X 버전입니다. 우선 포트 스캐너를 만들기 전에 배너그래이빙을 위해서 간단하게 소켓을 이용한 스크립트를 짜볼것이다. 소켓 모듈은 import 하고 소켓 클래스로부터 새로운 변수인 s를 선언한다. 다음으로 IP주소와 포트에 네트워크로 연결하기 위한 connect() 함수를 사용한다. 연결이 성공하면 소켓으로 네트워크를 통해 읽기/쓰기가 가능하게 된다. recv(1024) 함수는 소켓에서 1024 바이트를 읽어온다는 뜻이다. 위에서 읽어온 1024 바이트를 ans 변수에 저장하고 이를 프린트 해본 결과 192.168.7.200 IP에서는 21번 포트를 이용해서 FTP 서비스를 하고 있음을 알고있다. 여기서 "AnonSE FTP.. 더보기
Python 13 - 라이브러리 (외장 함수) sys.argv sys 모듈은 파이썬 인터프리터가 제공하는 변수들과 함수들을 직접 접근하여 제어할 수 있게 해주는 모듈이다. C:\Python_Study > python test.py python c java 위의 사진에서 보듯이 python testpy 뒤에 또 다른 값들을 넣어주면 sys.argv라는 리스트에 그 값들이 추가된다. 간단한 이해를 돕기 위해 다음과 같인 파일을 만든다. 파일이 저장되는 경로는 필자의 기준으로 " C:\Python_Study " 에 저장된다. 이제 도스창에서 다음과 같이 실행한다. 위처럼 python이란 명령어 뒤의 모든 파라미터 들이 공백을 기준으로 나뉘어 sys.argv 리스트이 요소가 됨을 알 수 잇다. sys.exit sys.exit는 스크립트를 강제로 종료하는 방.. 더보기
Python 12 - 라이브러리 (내장 함수) 지금까지 파이썬을 따라왔다면 본인이 원하는 프로그램을 직접 코딩할 수도 있을 것이다. 하지만 프로그래머는 늘 염두해야 할 것이 자신이 만들려는 프로그램을 이미 누군가가 만들어 놓았을지도 모른다는 사실이다. 물론 공부를 목적으로 누군가가 만들어 놓은것을 또 만들수 있지만 공부가 아니라면 굉장히 어리석은 행동이다. 또한 이미 만들어진 것들은 수많은 테스트를 거친 것이라 안정적이기도 하다. 특히나 파이썬 배포판에 함께 들어 있는 라이브러리들에 대해서 살펴보는 것은 공부를 위해 굉장히 중요한 작업이다. 우선 라이브러리를 살펴보기 전에 파이썬 내장 함수를 먼저 보도록 한다. 내장 함수 여지껏 사용한 함수들 대부분이 내장 함수이다. 바로 print, del, type, raw_Input 등이 이것이다. 이러한 파이.. 더보기
Python 11 - 예외처리 예외 처리 (try, except) 코딩을 하다 보면 수없이 많은 에러가 난다. 오죽하면 "코딩 후 처음 실행(컴파일)시 에러가 없다면 그 자체가 에러다" 라는 소리도 있다. 물론 에러가 나는 이유는 해당 프로그램이 오동작 하지 않기 위한 프로그래밍 언어의 배려이다. 하지만 때로는 이런 에어를 무시하거나 에러가 날 때 적절한 처리를 하고 싶을 때가 있다. 이에 파이썬은 try, except 라는 것을 이용하여 에러를 처리할 수 있게 해준다. 일부러 에러 내기 우선 에러 처리 방법을 알기 전에 어떤 상황에서 에러가 나는지 일부러 만들어 보자. 우선 없는 파일을 열려고 시도해보자. 위에서 보듯이 없는 파일을 열려고 시도하면 "IOError"가 발생한다. 위에서 "없는파일"이 한글이기 때문에 마지막 처럼 (\.. 더보기