2019 C프로그래밍
IVIS wiki
Top
목차
- 1 강의 개요
- 2 강의 진행
- 3 1주차 강의(9월 2일 월요일)
- 4 2주차 강의(9월 9일)
- 5 3주차 강의(9월 16일)
- 6 4주차 강의(9월 23일)
- 7 5주차 강의(9월 30일)
- 8 6주차 강의(10월 7일)
- 9 7주차 강의(10월 14일)
- 10 8주차 강의(10월 21일) - 중간시험
- 11 9주차 강의(10월 28일)
- 12 10주차 강의(11월 4일) : 10장 배열
- 13 11주차 강의(11월 11일)
- 14 12주차 강의(11월 18일)
- 15 13주차 강의(11월 25일)
- 16 14주차 강의(12월 2일)
- 17 15주차 강의(12월 9일)
- 18 16주차(12월 16일) : 기말시험
강의 개요
- 수강생 여러분은 이 교과목을 통해서 다음과 같은 내용을 익히게 됩니다
- 오랜 역사와 수많은 사용자를 가진 C 프로그래밍 언어를 배우게 됩니다.
- C 프로그래밍을 통해 문제해결을 할 수 있는 능력을 익힌다
- 기초적인 자료형의 이해와 프로그래밍의 원리를 익히도록 한다.
강의 진행
- 강사의 강의와 토론 그리고 프로그래밍 실습을 통하여 프로그래밍 기법을 익힌다
- 주당 3시간의 강의이며 이론 강의와 프로그래밍 실습을 병행한다.
- 강의실 : 51호관 310호실
- 강의시간 : 매주 월요일 오후 12:00-14:45
강사
- 정보통신공학과 교수 박동규
- 이메일 : dongupak at gmail.com
- 수시상담 환영
강의조교(TA)
- 여러분의 강의를 도와줄 조교입니다
- 박연진, 윤소정 조교님
- 강의와 실습중 궁금한 점을 해결해 주실겁니다.
- 실습중 문제가 있으면 손을 들어서 알려주십시오.
강의 교재
- 쉽게 풀어쓴 C 언어 Express
- 저자: 천인국(생능출판)
- 정가 30,000원
- 배우게 될 내용
- 수강생 여러분은 이 교과목을 통해서 다음과 같은 내용을 익히게 됩니다.
- C 프로그래밍 프로그래밍을 통하여 다양한 문제를 접하면서 자연스럽게 프로그래밍 기법을 익힌다.
- C 언어를 통한 기초적인 자료형의 이해와 프로그래밍의 원리를 익히도록 한다.
- C 프로그래밍 언어를 이용하여 다양한 문제해결 능력을 익힌다.
- 수강생 여러분은 이 교과목을 통해서 다음과 같은 내용을 익히게 됩니다.
과제관련
- 과제 제출 기간은 제출일로부터 일주일
- 각 문제 마다 아래 채점 기준을 만족 못할 시 한 문제당 1점씩 감점
- 과제 표지
- 매 표지 마다 과제 번호를 기입한다. ex) #1, #2, ...
- 스탠플러는 왼쪽 상단에 찍는다.
- 이론 문제
- 문제와 답을 적는다.
- 문제를 적지 않을 시 감점
- 타이핑 가능
- 스캔 불허
- 문제와 답을 적는다.
- 실습 문제
- 문제와 소스코드을 적는다.
- 문제를 적지 않을 시 감점
- 타이핑 가능
- 스캔 불허
- 실행 결과를 캡쳐하여 삽입한다.
- 배경은 흰색으로 한다.
- 코드에는 주석을 달도록한다.
- 주석 달지 않을 시 감점
- 각 실습문제마다 느낀점이나 어려웠던 점을 2문장 이상 적어서 제출한다.
- 느낀점을 적지 않을시 감점
- 풀지 못한 문제나 어려운 문제도 반드시 느낀점을 적도록 한다.
- 문제와 소스코드을 적는다.
- 과제 샘플
맥 활용
- Mac OS X.pdf
- Mac OS X 기초사용법 파일
- macOS 기초강좌 : https://www.youtube.com/watch?v=Hhf_i8k28V4
1주차 강의(9월 2일 월요일)
- 개학 인사
- 한학기 강의에서 다루게될 내용, 교재등에 대한 소개
- 프로그래밍을 알아야 하는 이유
- 컴퓨터 프로그래밍의 간단한 역사등
- 강의에 대한 소개
- Xcode 다루기
- Xcode 를 이용하여 다음 프로그램을 직접 짜보도록 합니다.
- 짜볼 프로그램
- 널널한 교수의 기초 C 언어 03_1, 04_1, 04_2, 04_3, 05_1, 05_2, 06_1에 있는 LAB 코드를 입력하고 실행하시오.
- 모든 입력 코드는 03_1_1, 03_1_2 와 같은 프로젝트 명으로 만든 프로젝트에서 만들고 조교에게 검사를 받도록 하시오.
- 짜볼 프로그램
강의자료
- 강의자료 : C프로그래밍강의소개(2019).pdf
- 강의자료 : 1장_프로그래밍언어개요.pdf
- 강의자료 : LAB1.pdf
널널한 교수의 기초 C 프로그래밍 강좌안내
- 수강생 여러분은 다음 동영상 강의를 참고하시기 바랍니다
과제 #1
- 제목 : 널널한 교수의 C언어 기초 강의 01_1에서 04_1장 수강평 남기기
- youtube 널널한 교수의 기초 C강의 01_1에서 04_2장까지 6개 시청 후 감상문 제출
- 제출일 : 9월 9일 월요일 강의시작 전에 제출
- youtube 동영상 각각에 대하여 동영상을 시청한다
- 시청 후 수강평을 남기고 5개의 동영상에 대한 수강평을 캡쳐하여 1페이지에 모아서 제출할 것
- 수강평에는 다음과 같은 내용이 남도록 수강평을 적어주세요(본인의 이름이 반드시 들어갈 것)
수강 : 홍길동 수강평 : 0000000 에 대해 자세히 알게되었으며, 000에 대해서 0000라고 생각합니다.
- 제출시에는 6개의 동영상의 핵심 내용을 2개 이상의 문장으로 정리하여 제출하시오.
2주차 강의(9월 9일)
- 내용
- 프로그래밍과 도구, 도구로서의 컴퓨터
- 소프트웨어란?
- 개발환경 소개, C 프로그래밍 이해와 디버깅 과정
- Visual studio Community 2019 설치
- youtube 강의중 질문에 대한 답변시간
- xcode를 이용한 2장 연습문제 프로그래밍
강의자료 2장
과제 #2
- 제목 : 교재 2장 Exercise, Programming
- P 87 - 89 쪽의 문제 풀이와 프로그래밍
- 소스코드와 실행결과 해결과정의 느낀점을 제출하세요.
- 각자 개인 PC에서 Xcode나 Visual Studio등의 개발도구를 사용하세요.
3주차 강의(9월 16일)
- 프로그래밍 기초
- 자료형과 변수선언
- 기본 자료형과 상수 표현방법
- C프로그래밍 언어의 구성
- 함수와 함수 호출
참고
- Visual Studio에서 scanf_s() 에러 해결하는 방법
강의자료 3장
- 강의자료 : 3장_C프로그램구성요소.pdf
과제 #3
- 제목 : 교재 3장 연습문제 풀이
- 문제 : 교재 3장 Programming 문제 1-6번 풀이
- 제출일자 : 2019년 9월 23일(월)
- 화면의 바탕색상은 흰색, 글씨는 검정색으로 하여라
- 과제를 하면서 느낀점과 어려웠던 점을 2문장 이상 적어서 제출할 것
- 모든 문제에 대하여 주석문을 2개 이상 달아야 합니다.
4주차 강의(9월 23일)
- C 전처리와 입력 출력
- 예제 circle_area.c과 같은 경우 "code04_circle_area" 이름의 프로젝트로 만드세요
- 실습문제 4-1과 같은 경우 "lab4-1"
- 퀴즈 4-5와 같은 경우 "quiz4-5"
- 과제 "연습문제"의 경우 "exam4-1"와 같이 일관성있게 작명하도록 한다
맥 에디터 단축 키
강의자료 4장
- 강의자료 : 4장_변수와자료형.pdf
과제 #4
- 제목 : 동영상 감상 후 내용 요약하여 제출
- 04_2 오버플로, 상수, 매크로
- 04_3 보수와 부동소수점형, 오버플로우와 언더플로우, 문자형
- 05_1 수식과 연산자
- 15_2 printf() 함수
- 제출일자 : 2019년 9월 29일(월)
- youtube 동영상 각각에 대하여 동영상을 시청한다
- 시청후 수강평을 남기고 4개의 동영상에 대한 수강평을 캡쳐하여 1페이지에 모아서 제출할 것
- 수강평에는 다음과 같은 내용이 남도록 수강평을 적어주세요(본인의 이름이 반드시 들어갈 것)
수강 : 홍길동 수강평 : 0000000 에 대해 자세히 알게되었으며, 000에 대해서 0000라고 생각합니다. 궁금한점 : 0000000에 관한 부분이 잘 이해가 안됩니다. 0000000는 0000이 아닌가요? “등 형식으로 질문을 해 주시면 됩니다.
5주차 강의(9월 30일)
- 수식과 연산자의 개념을 이해한다
- 대입, 산술, 증감, 관계, 논리 연산자를 사용할 수 있다
- 연산자의 우선순위와 결합관계를 이해한다.
강의자료(5장)
- 강의자료 : 5장_수식과연산자.pdf
퀴즈
- 강의중에는 프로그래밍 퀴즈가 있습니다.(3시간소요)
6주차 강의(10월 7일)
- 5장 연산자
- C의 연산자에 대해 알아봅니다
- 연산자, 피연산자, 연산식
- 다항연산자, 이항연산자, 삼항연산자등
- 6장 조건문
- if문, if-else 를 사용한 제어문
- 다양한 문제 풀이
강의자료(5장)
- 강의자료 : 6장_조건문.pdf
과제 #5
- 제목 : 교재 6장 조건문 연습문제 풀이
- 내용 : 6장 프로그래밍 1-5번, 8번 문제풀이
- 연습문제 6장의 1번 코드의 경우 ex6-1, 2번 코드의 경우 ex6-2, .. 와 같이 프로젝트명을 정합니다
- 프로그램 작성후 소스코드와 그 결과를 캡쳐하여 제출합니다.
- 모든 연습문제에 대하여 느낀점과 어려웠던 점을 2문장 이상 적어서 제출할 것
- 제출일 : 10월 14일 월요일
7주차 강의(10월 14일)
- 7장 반복문
강의자료 (7장)
- 강의자료 : 7장_반복문.pdf
과제 #6
- 제목 : 교재 7장 연습문제 풀이
- 내용 : 7장 프로그래밍 연습문제 1에서부터 12번까지 프로그램 문제풀이
- 프로그램 작성 후 소스코드와 그 결과를 캡쳐하여 제출합니다.
- 모든 연습문제 각각에 대하여 느낀점과 어려웠던 점을 2문장 이상 적어서 제출할 것
- 제출일 : 10월 21일 월요일
8주차 강의(10월 21일) - 중간시험
- 시험 범위
- 교재의 1장 - 7장까지 입니다
- 주관식 문제와 객관식 문제의 혼용
- C언어 문법과 코딩 문제입니다
- 교재의 Exercise와 Programming을 참고하시기 바랍니다. 이와 유사한 유형의 문제를 내겠습니다.
- 시험시간 : 10월 21일 12:30 - 14:30(2시간)
9주차 강의(10월 28일)
- 8장 함수, 9장 함수와 변수
- 함수 활용
- 함수를 활용하여 다양한 문제를 해결해 본다
- 함수와 매개변수
- 재귀함수
- 문자함수, 다양한 수학함수들
강의자료 (8장, 9장)
- 강의자료 : 8장_함수.pdf
- 강의자료 : 9장_함수와변수.pdf
참고: 소수구하는 코드
// // main.c // hello // // Created by dongupak on 20/04/2019. // Copyright © 2019 it. All rights reserved. // #include <stdio.h> // 매우 매우 단순한 소수 구하기 알고리즘 int is_prime1(unsigned int number) { // number를 2부터 number-1까지의 수로 나누어 본다 for (int i=2; i <number; i++) { if (number % i == 0) return 0; } return 1; } // 조금 복잡하지만 좀 빠른 소수 구하기 알고리즘 int is_prime2(unsigned int number) { // 2와 3은 소수이므로 바로 1을 반환함 if (number <= 3 && number > 1) return 1; else if (number%2==0 || number%3==0) return 0; // 2나 3으로 나누어지는가를 먼저 본다 else { // number를 5부터 2씩 증가시키며 number-1까지의 수로 나누어 본다 for (int i=5; i <number; i+= 2) { if (number % i == 0) return 0; } } return 1; } // 매우 빠른 소수 검사 프로그램으로 number가 소수이면 1을 // 그렇지 않으면 1을 반환하는 함수임 int is_prime3(unsigned int number) { // 2와 3은 소수이므로 바로 1을 반환함 if (number <= 3 && number > 1) return 1; else if (number%2==0 || number%3==0) return 0; // 2나 3으로 나누어지는가를 먼저 본다 else { unsigned int i; // 이제 i를 5부터 6씩 증가시키며 number로 나누어 본다 // 이때 i*i <= number일 때 까지만 검사하면 충분하다. // 모든 정수는 (6k + i) 로 표현 가능하다 // 모든 k에 대해 i = −1, 0, 1, 2, 3, 4; // 2 divides (6k + 0), (6k + 2), (6k + 4); and 3 divides (6k + 3). for (i=5; i*i<=number; i+=6) { if (number % i == 0 || number%(i + 2) == 0) return 0; } return 1; } } #define MAX_NUM 300 // 최대 소수의 크기 int main(int argc, const char * argv[]) { printf("알고리즘 1번 :\n"); for(unsigned int n=2; n <MAX_NUM; n++) if( is_prime1(n) == 1) printf("%d ", n); printf("\n"); printf("알고리즘 2번 :\n"); for(unsigned int n=2; n <MAX_NUM; n++) if( is_prime2(n) == 1) printf("%d ", n); printf("\n"); printf("알고리즘 3번 :\n"); for(unsigned int n=2; n <MAX_NUM; n++) if( is_prime3(n) == 1) printf("%d ", n); printf("\n"); return 0; }
과제 #7
- 제목 : 8장, 9장 연습문제 풀이
- 8장 프로그래밍 연습문제 1-12번 풀이
- 9장 프로그래밍 연습문제 1-6번 풀이
- 문제와 자신이 생각한 답을 적도록 한다
- 프로그래밍 문제는 프로그램과 코드를 제출하고 느낀점과 어려웠던 점을 손으로 적도록 한다
10주차 강의(11월 4일) : 10장 배열
- 이번 강의에서는 10장 배열에 대해 살펴보겠습니다.
- 여러분이 이미 배운 파이썬의 리스트와 어떤 차이가 있는가도 알아봅시다.
강의자료 (10장)
- 강의자료 : 10장_배열.pdf
과제 #8
- 10장 연습문제 풀이
- 10장 프로그래밍 연습 1-6번 풀이
과제 #9
- 제목 : 널널한 교수의 C언어 기초 강의 10_1, 10_2, 10_3, 11_1, 11_2장 동영상 강의 듣고 수강평 남기기
- https://www.youtube.com/watch?v=5uFjnD88KBA&list=PL2P1Vm9k53HO5DnvKcm9N4zvFOB6dQ2rM
- youtube 동영상 각각에 대하여 동영상을 시청한다
- 시청후 수강평을 남기고 5개의 동영상에 대한 수강평을 캡쳐하여 1페이지에 모아서 제출할 것
- 수강평에는 다음과 같은 내용이 남도록 수강평을 적어주세요(본인의 이름이 반드시 들어갈 것)
수강 : 홍길동 수강평 : 0000000 에 대해 자세히 알게되었으며, 000에 대해서 0000라고 생각합니다. 궁금한점 : 0000000에 관한 부분이 잘 이해가 안됩니다. 0000000는 0000이 아닌가요? “등 형식으로 질문을 해 주시면 됩니다.
- 11장은 예습차원에서 동영상을 시청해 주십시오.
11주차 강의(11월 11일)
- 11장 포인터
- 이번 강의에서는 C의 가장 큰 특징이자 중요한 개념인 포인터에 대해 다루어 봅니다.
- 참고 동영상( 널널한 교수의 기초 C : 11_1 포인터)
- 참고 동영상( 널널한 교수의 기초 C : 11_2 포인터 연산)
강의자료 (11장)
- 강의자료 : 11장_포인터.pdf
과제 #10
- 제목 : 교재 11장 1-6 연습문제 풀이
- 프로그램 코드와 실행결과, 느낀점 어려웠던 점을 적어서 제출하세요
12주차 강의(11월 18일)
- 12장 문자와 문자열
강의자료 (12장)
- 강의자료 : 12장_문자열.pdf
참고자료(시저 암호- 경고 수정한 코드)
#include <stdio.h> void encrypt(char cipher[], int shift); int main (void) { char cipher[50]; int shift=3; printf("문자열을 입력하시오: "); //gets(cipher); // 한줄 전체 입력 fgets(cipher, (sizeof cipher / sizeof cipher[0]), stdin); // 수정된 부분 encrypt (cipher, shift); return 0; } void encrypt (char cipher[], int shift) { int i = 0; while (cipher[i] != '\0') { if( cipher[i] >= 'A' && cipher[i] <= 'z'){ cipher[i] += shift; if( cipher[i] > 'z' ) cipher[i] -= 26; } i++; } printf("암호화된 문자열: %s", cipher); }
13주차 강의(11월 25일)
- 13장 구조체
강의자료 (13장)
- 강의자료 : 13장_구조체.pdf
참고 동영상
- 널널한 교수의 기초 C(구조체)
14주차 강의(12월 2일)
- 14장 포인터 활용
- 15장 스트림과 파일
- 17장 포인터 활용과 동적 메모리 관리
강의자료 (15장)
- 강의자료 : 15장_스트림과파일.pdf
- 강의자료 : 17장_동적메모리와연결리스트.pdf
발표자료 : 마지막 강의
15주차 강의(12월 9일)
- 보충강의
- 수업에서 다 다루지 못한 부분을 다루어 봅시다
16주차(12월 16일) : 기말시험
- 12월 16일 월요일 13:00 - 15:00, 328강의실
- 시험범위 : 교재 7장 - 15장까지
- 주관식과 객관식 혼용
- 중긴시험 문제의 패턴과 유사하게 출제될 예정입니다