분류 전체보기
-
3-1 학점 계산 프로그램Computer Science/Boostcourse CS50 2021. 12. 24. 02:31
저번 시간에 배열을 알아보았고, 이를 응용해 성적에 따라서 학점을 출력해 주는 프로그램을 작성해보았습니다. 프로그램을 작성하면서 느꼈던 것은 다시 봐도 main 함수의 코드를 줄이고 최대한 함수화를 시켜주는 것이 중요하다는 생각이 들었습니다. main 함수 내 코드가 길어지게 된다면 저 자신은 몰라도 다른 사람이 코드를 보았을 때, 가독성이 떨어지고 각각의 코드가 어떤 기능을 담당하는 코드인지 헷갈릴 수 있기 때문입니다. #include #include #define DATA_SIZE 9 const char* Student_grades[DATA_SIZE] = {"A+", "A", "B+", "B", "C+", "C", "D+", "D", "F"}; const int Student_scores[DATA_S..
-
3. 배열Computer Science/Boostcourse CS50 2021. 12. 24. 02:27
비슷한 종류의 데이터들을 여러 개의 변수로 하나 하나 선언하기에는 시간도 많이 걸릴뿐더러 효율적이지 못한 방법이라고 할 수 있습니다. 그렇기에 다수의 데이터를 관리하기 위해서는 하나의 변수에 데이터들을 담아 편리하게 사용할 수 있는 배열이 필요한 것입니다. 배열은 특정 자료형의 변수를 선언하고 사이즈를 지정해주게 되면 메모리상 어딘가에 특정 크기만큼 연속적인 자리를 차지하게 되며, 비슷한 값들을 모아서 저장하고 싶을 때 사용하는 것입니다. 이때, 데이터들을 하나의 변수로 관리할 수 있다는 점이 시간적 측면에서 봤을 때 배열을 사용하는 이유가 아닐까 싶습니다. 일반적으로 변수를 선언할 때는 (변수의 자료형) (변수명)의 형식으로 작성하고, 이와 비슷하게 배열의 변수는 (변수의 자료형)..
-
2-2 음식메뉴 소개 프로그램Computer Science/Boostcourse CS50 2021. 12. 24. 02:23
C언어를 이용한 두번째 프로그램으로 설명해 볼 프로그램은 요일을 입력했을 때 각 요일별로 어떤 음식이 나오는지 프로그램 사용자에게 알려주는 프로그램입니다. 이번 프로그램의 소스코드 길이는 짧으므로 두개의 문단으로 나누어 소개해보겠습니다. #include #include #define SIZE 10 void food_list(char* day, int* replay); // 음식 리스트 int main() { int replay; char day[SIZE], check; printf("===============THIS WEEK FOOD MENU===============\n"); while(1) { printf("요일을 입력하세요: "); scanf("%s",day); food_list(day, &rep..
-
2-1 재고량 관리 프로그램Computer Science/Boostcourse CS50 2021. 12. 24. 02:19
네이버 부스트코스 대외활동을 진행하면서 만들어 봤던 첫번째 C언어 프로그램은 바로 구조체, 함수, 배열, 반복문, 조건문를 이용한 재고량 관리 프로그램입니다. 부족한 부분이 있겠지만, 나름대로 기능을 나누고 함수화하여 최대한 사용자 관점에서 가독성을 생각하며 구현해보았습니다. #include #include #include #include #define SIZE 30 typedef struct { int inventory, order, remain_inventory, price; double sales, TAX; char name[SIZE]; }PRODUCT; int cnt = 0; // 물품 종류 수 void product_input(PRODUCT* p); // 재고 관리 void product_ini..
-
2. C언어Computer Science/Boostcourse CS50 2021. 12. 24. 02:08
이번에는 C언어가 어떤 분야에서 주로 사용이 되는지, 특징은 무엇인지 살펴보려 합니다. C언어는 실질적으로 모든 컴퓨터 시스템에서 사용할 수 있는 프로그래밍 언어로, 전반적으로 쉬운 편에 속합니다. 또한 메모리를 관리하기 수월해 공간적으로도 효율적이며 타 언어에 비해 빠른 속도를 갖고 있죠. 하지만 절차 지향 프로그래밍 언어로써 구체적인 구현을 요구합니다. 하드웨어 제어뿐만 아니라 소프트웨어를 작성할수도 있으며, 대표적으로는 특정 하드웨어를 최적화 시키기 위하여 임베디드 프로그래밍에 가장 많이 쓰이는 편입니다. 이외에도 전자, 가전제품 관련 프로그램 개발 및 사물인터넷 제어에도 C언어가 사용됩니다. C에서 파생된 언어인 C++, C#은 게임 프로그래밍에서도 자주 쓰이는 언어이고, J..
-
1. 컴퓨팅 사고Computer Science/Boostcourse CS50 2021. 12. 24. 02:02
"컴퓨팅 사고력"이란 말을 들어보신 분도 있으실테고, 낯선 분도 계실겁니다. 들어봤다 하더라도 정확히 어떤 의미인지는 모르는 경우가 많습니다. 사실 컴퓨팅 사고는 저희가 어떠한 문제를 해결할 때에도 적용될 수 있을 것 같습니다. 문제를 해결하기 위한 접근 방법 중의 하나로서, 문제를 분해하고 어떻게 해결할 것인지 파악하는 것이 바로 "컴퓨팅 사고"입니다. 컴퓨팅 사고의 과정을 알아보기 전 컴퓨티 과학에 대해서 소개하고자 합니다. 컴퓨터 과학은 문제 해결에 대한 학문을 뜻하고, 여기서 말하는 문제 해결이란 아래 그림과 같이 입력을 전달받아 출력을 만들어내는 과정인데 이 과정 속의 중간에 있는 과정이 바로 컴퓨터 과학이라고 말할 수 있습니다. 그렇다면 문제 해결을 위해 어떠한 과정으로 컴퓨..
-
[Webhacking.kr - 문제풀이 38번]Webhacking.kr 문제 풀이 2021. 4. 13. 01:45
이번 문제는 위 사진에 나와있듯이 Log injection 에 관한 문제이다. 페이지 소스를 확인해보니 admin.php 에 대한 a 태그가 주석처리 되어있는 걸 확인할 수 있다. admin.php로 들어가보니 다음과 같은 로그가 나와있고, admin으로 ip 주소와 같이 로그를 남기면 해결되지 않을까 싶어, admin을 입력해보았다. 그러나 "you are not admin" 문구가 뜨기때문에 로그를 남기기 위해서 CR-LF injection을 이용하여야 해결이 될 것 같다. 로그가 위에서 아래 방향으로 출력되니 줄바꿈하고, 라인을 종료할 때 CRLF가 사용되는 것이다. (CR-LF = Carriage-Return, \r / Line Feed, \n) 줄바꿈하여 입력하기 위해 input 태그를 text..
-
[Webhacking.kr - 문제풀이 26번]Webhacking.kr 문제 풀이 2021. 4. 12. 20:42
26번 문제의 소스코드를 확인해보면 다음과 같다. get 형식으로 받은 id값이 admin이면 풀리는 것을 확인할 수 있지만 php 코드의 첫줄에 id값이 preg_match() 함수를 통해 필터링 되고 다음 줄에 urldecode가 되기때문에 조건에 맞지 않을 것을 예측할 수 있다. 따라서, URL 인코딩표를 참고하여 admin을 바꾼다면 "%61%64%6D%69%6E"가 된다. 그러나, 이를 URL의 id값으로 입력하여도 "no!"라는 문자열이 출력되는데, 이는 웹서버와 브라우저 사이에서 데이터 교환 시 폼에서 입력받은 데이터를 자동으로 인코딩한 값으로 보낸 후 php는 자동으로 디코딩하기 때문이다. (urldecode()까지 디코딩 횟수 총 2번) 그러므로 한번 더 인코딩을 한 값을 입력해주어야 한..