More actions
imported>leesnhyun No edit summary |
(Repair batch-0005 pages from live compare) |
||
| (15 intermediate revisions by one other user not shown) | |||
| Line 1: | Line 1: | ||
== 설명 == | |||
* 2015년도 새싹교실 반입니다. | |||
* 장르는 C 프로그래밍 기초 | |||
* 진도를 나가기 보다는 수업을 보조해 주는 방식으로 진행합니다. | |||
* 매주 목요일 오후 7시 | |||
* 왜 팀 이름이 이러냐면... | |||
** 나중에 알랴드림 | |||
== 멤버 == | |||
* 강사: [[조영준]] | |||
* 학생: 서영운, 유동제, 한성현 | |||
== 진행 == | |||
=== 3월 17일 === | |||
* 오리엔테이션 | |||
* 팀명/시간 조정 | |||
=== 3월 26일 === | |||
* Hello, World 살펴보기 | |||
** | |||
# | |||
이 무엇을 하나요? | |||
** | |||
int main() {} | |||
이 뭐죠? | |||
** | |||
puts | |||
와 printf는 무슨 차이가 있어요? | |||
** 기타 등등... | |||
=== 4월 2일 === | |||
* 자료형들 | |||
** short, int, long | |||
** float, double | |||
* 컴퓨터에서는 숫자를 어떻게 저장할까? | |||
* 왜 다양한 자료형들이 있을까? | |||
* 산술/논리 연산자들 | |||
* (중첩) if/else | |||
** 점수에 따른 성적 출력하는 실습 | |||
** 숫자 입력에 따른 출력 실습 (양수? 음수? 양수면 짝수? 홀수?) | |||
=== 4월 9일 === | |||
* 실습 시간 | |||
** 쉬프트 암호화 | |||
** 4개의 좌표를 입력받아 넓이 출력 | |||
* 그 외에 짬짬한 내용들 | |||
** | |||
stdio.h | |||
외에도 math.h와 같은 헤더 파일들이 있으며, 각각의 헤더 파일은 특정 작업과 관련된 함수들을 가지고 있음. | |||
** 연산 후, 비교하고, 대입한다. | |||
** | |||
1 <= x <= 9 | |||
이런 코드는 노노. | |||
** http://www.asciitable.com/ 아스키 값은 여기서 확인. | |||
** 정수끼리 나눌 경우 값이 정수임을 유의. | |||
** (float) (double)과 같은 캐스팅을 하거나, 3.0 같은 꼼수(?)를 쓰자 | |||
=== 5월 7일 === | |||
긴 공백기를 깨고... | |||
* 함수 | |||
** 왜 함수를 쓰는가, 함수의 구성, 프로토타입 | |||
* 포인터 | |||
** 왜 포인터를 쓰는가, 포인터 관련 문법, 포인터 동작 원리, swap example | |||
* 배열 | |||
** 왜 배열을 쓰는가, 배열과 포인터와의 관계 | |||
#include <stdio.h> | |||
#pragma warning(disable:4996) | |||
void getNumbers(int* ary, int len); | |||
int main() { | |||
int pause; | |||
int a[5]; | |||
int i; | |||
getNumbers(a, 5); | |||
for (i = 0; i < 5; i++) { | |||
printf("%d ", *(a + 4 - i)); | |||
} | |||
scanf("%c", &pause); | |||
scanf("%c", &pause); | |||
return 0; | |||
} | |||
void getNumbers(int[] ary, int len) { | |||
int i; | |||
for (i = 0; i < len; i++) { | |||
scanf("%d", ary + i); | |||
} | |||
} | |||
--- | |||
#include <stdio.h> | |||
#pragma warning(disable:4996) | |||
int main() { | |||
int pause; | |||
int a[5]; | |||
int i; | |||
for (i = 0; i < 5; i++) { | |||
scanf("%d", &a[i]); | |||
} | |||
for (i = 0; i < 5; i++) { | |||
printf("%d ", a[4 - i]); | |||
} | |||
scanf("%c", &pause); | |||
scanf("%c", &pause); | |||
return 0; | |||
} | |||
--- | |||
#include <stdio.h> | |||
#pragma warning(disable:4996) | |||
void printNumbers(int, int); | |||
void swap(int*, int*); | |||
int add1(int toAdd); | |||
int main() { | |||
int pause; | |||
int a = 1; | |||
int b = 2; | |||
b = toAdd(b); | |||
printf("%d %d\n", &a, &b); | |||
printNumbers(a, b); | |||
swap(&a, &b); | |||
printNumbers(a, b); | |||
scanf("%c", &pause); | |||
return 0; | |||
} | |||
void swap(int* swapA, int* swapB) { | |||
int temp = *swapA; | |||
*swapA = *swapB; // a=2; | |||
*swapB = temp; | |||
} | |||
int add1(int toAdd) { | |||
return toAdd + 1; | |||
} | |||
void printNumbers(int printA, int printB) { | |||
printf("a= %d, b= %d\n", printA, printB); | |||
} | |||
=== 5월 14일 === | |||
* 쉬어가는 시간 - rand/srand/time | |||
#include <stdlib.h> // rand, srand | |||
#include <time.h> // time | |||
time(NULL); // 1970년 1월 1일 0시 0분 0초부터 지난 시간 리턴 | |||
srand(unsigned int) // random의 시드값 설정 | |||
rand() // 난수 리턴 | |||
==== seed? ==== | |||
return (i + j + 123) ^ 100000 % 1000 | |||
이라는 가상의 rand 함수가 있다고 가정 하자. j는 0으로 시작해서 호출 시 마다 1씩 증가한다. 이러면 호출시마다 다른 값이 출력되지만, 프로그램을 실행시키면 항상 같은 순서로 같은 값이 나온다. 이를 위해 프로그램 실행시마다 i값을 다르게 설정하면 프로그램을 실행시킬 때 마다 다른 임의의 숫자가 나올 것이다. 이 때 i값을 seed값이라고 한다. | |||
=== 5월 28일 === | |||
==== 실습 내용 ==== | |||
[a1, a2, a3, ... , an, b1, b2, ..., bn] | |||
의 배열을 [a1, b1, a2, b2, ... an, bn] 과 같은 형태로 바꾸시오. (단, 최대 크기는 255) | |||
==== 질의응답 ==== | |||
===== 크기 지정은 어떻게? ===== | |||
* 실행하기 전에 크기를 지정하는 방법 | |||
#define ARRAY_SIZE 10 | |||
int arrayARRAY_SIZE; | |||
* 실행 중에 크기를 지정하는 방법 | |||
scanf을 통해 입력 | |||
단, 지금으로써는 여전히 최대 크기는 미리 지정해야 할 것. | |||
===== 함수에서 배열을 입력받을 경우 배열의 크기는 어떻게? ===== | |||
* 자기만의 '끝'을 표시 (ex. 숫자를 0 이상만 받는다고 할 경우 음수값이 나올 때 까지 반복) | |||
* 함수 호출 시 배열 뿐만이 아니라 배열의 크기도 입력받음 (ex. void printArray(int arr[], int size)) | |||
==== 추천 순서 ==== | |||
# 배열 선언하기 | |||
# 데이터 입력하기 | |||
## scanf | |||
## rand | |||
## for문을 이용 | |||
# 배열 출력하기 | |||
# 배열 순서 바꾸기 | |||
# 배열 출력하기 | |||
3과 5는 하는 일이 같으니 함수를 이용하는게 어떨까? | |||
이 외에도, 2와 3 부분도 함수로 만들면 보기 편하지 않을까? | |||
== 6월 4일 == | |||
'''실습 테스트''' (90분) | |||
=== 문제 1 (문제 모델링) === | |||
사용자에게 3자리의 현재 자물쇠 비밀번호와 현재 자물쇠의 상태를 입력 받아 몇 번을 돌려야 자물쇠를 풀 수 있는지 알아내는 프로그램을 C로 작성하시오. | |||
// example input: 325 478 | |||
// example output: | |||
9 | |||
// example input: 001 990 | |||
// example output: | |||
3 | |||
=== 문제 2 (주어진 로직에서의 구현) === | |||
입력 받은 높이만큼의 파스칼 삼각형을 출력하는 프로그램을 C로 작성하시오. | |||
(힌트: | |||
a[n][m] = a[n - 1][m - 1] + a[n - 1][m], a[n][0] = 1, a[n][n] = 1 | |||
) | |||
// example input: 6 (1 <= n <= 30) | |||
// example output: | |||
1 | |||
1 1 | |||
1 2 1 | |||
1 3 3 1 | |||
1 4 6 4 1 | |||
1 5 10 10 5 1 | |||
=== 문제 3 (문제 분석 및 로직 구성) === | |||
m(높이), n(너비), k(사각형 크기)을 입력 받아 다음과 같은 출력을 하는 프로그램을 C로 작성하시오. | |||
1 <= m <= 10, 1 <= n <= 10, 1 <= k <= 5 | |||
// example input: m = 3, n = 4, k = 2 | |||
// example output: ( _ 은 공백) | |||
**__**__ | |||
**__**__ | |||
__**__** | |||
__**__** | |||
**__**__ | |||
**__**__ | |||
// example input: m = 2, n = 3, k = 1 | |||
// example output: ( _ 은 공백) | |||
*_* | |||
_*_ | |||
Latest revision as of 00:45, 27 March 2026
설명
- 2015년도 새싹교실 반입니다.
- 장르는 C 프로그래밍 기초
- 진도를 나가기 보다는 수업을 보조해 주는 방식으로 진행합니다.
- 매주 목요일 오후 7시
- 왜 팀 이름이 이러냐면...
- 나중에 알랴드림
멤버
- 강사: 조영준
- 학생: 서영운, 유동제, 한성현
진행
3월 17일
- 오리엔테이션
- 팀명/시간 조정
3월 26일
- Hello, World 살펴보기
#
이 무엇을 하나요?
int main() {}
이 뭐죠?
puts
와 printf는 무슨 차이가 있어요?
- 기타 등등...
4월 2일
- 자료형들
- short, int, long
- float, double
- 컴퓨터에서는 숫자를 어떻게 저장할까?
- 왜 다양한 자료형들이 있을까?
- 산술/논리 연산자들
- (중첩) if/else
- 점수에 따른 성적 출력하는 실습
- 숫자 입력에 따른 출력 실습 (양수? 음수? 양수면 짝수? 홀수?)
4월 9일
- 실습 시간
- 쉬프트 암호화
- 4개의 좌표를 입력받아 넓이 출력
- 그 외에 짬짬한 내용들
stdio.h
외에도 math.h와 같은 헤더 파일들이 있으며, 각각의 헤더 파일은 특정 작업과 관련된 함수들을 가지고 있음.
- 연산 후, 비교하고, 대입한다.
1 <= x <= 9
이런 코드는 노노.
- http://www.asciitable.com/ 아스키 값은 여기서 확인.
- 정수끼리 나눌 경우 값이 정수임을 유의.
- (float) (double)과 같은 캐스팅을 하거나, 3.0 같은 꼼수(?)를 쓰자
5월 7일
긴 공백기를 깨고...
- 함수
- 왜 함수를 쓰는가, 함수의 구성, 프로토타입
- 포인터
- 왜 포인터를 쓰는가, 포인터 관련 문법, 포인터 동작 원리, swap example
- 배열
- 왜 배열을 쓰는가, 배열과 포인터와의 관계
#include <stdio.h>
#pragma warning(disable:4996)
void getNumbers(int* ary, int len);
int main() {
int pause;
int a[5];
int i;
getNumbers(a, 5);
for (i = 0; i < 5; i++) {
printf("%d ", *(a + 4 - i));
}
scanf("%c", &pause);
scanf("%c", &pause);
return 0;
}
void getNumbers(int[] ary, int len) {
int i;
for (i = 0; i < len; i++) {
scanf("%d", ary + i);
}
}
---
#include <stdio.h>
#pragma warning(disable:4996)
int main() {
int pause;
int a[5];
int i;
for (i = 0; i < 5; i++) {
scanf("%d", &a[i]);
}
for (i = 0; i < 5; i++) {
printf("%d ", a[4 - i]);
}
scanf("%c", &pause);
scanf("%c", &pause);
return 0;
}
---
#include <stdio.h>
#pragma warning(disable:4996)
void printNumbers(int, int);
void swap(int*, int*);
int add1(int toAdd);
int main() {
int pause;
int a = 1;
int b = 2;
b = toAdd(b);
printf("%d %d\n", &a, &b);
printNumbers(a, b);
swap(&a, &b);
printNumbers(a, b);
scanf("%c", &pause);
return 0;
}
void swap(int* swapA, int* swapB) {
int temp = *swapA;
*swapA = *swapB; // a=2;
*swapB = temp;
}
int add1(int toAdd) {
return toAdd + 1;
}
void printNumbers(int printA, int printB) {
printf("a= %d, b= %d\n", printA, printB);
}
5월 14일
- 쉬어가는 시간 - rand/srand/time
#include <stdlib.h> // rand, srand #include <time.h> // time time(NULL); // 1970년 1월 1일 0시 0분 0초부터 지난 시간 리턴 srand(unsigned int) // random의 시드값 설정 rand() // 난수 리턴
seed?
return (i + j + 123) ^ 100000 % 1000
이라는 가상의 rand 함수가 있다고 가정 하자. j는 0으로 시작해서 호출 시 마다 1씩 증가한다. 이러면 호출시마다 다른 값이 출력되지만, 프로그램을 실행시키면 항상 같은 순서로 같은 값이 나온다. 이를 위해 프로그램 실행시마다 i값을 다르게 설정하면 프로그램을 실행시킬 때 마다 다른 임의의 숫자가 나올 것이다. 이 때 i값을 seed값이라고 한다.
5월 28일
실습 내용
[a1, a2, a3, ... , an, b1, b2, ..., bn]
의 배열을 [a1, b1, a2, b2, ... an, bn] 과 같은 형태로 바꾸시오. (단, 최대 크기는 255)
질의응답
크기 지정은 어떻게?
- 실행하기 전에 크기를 지정하는 방법
- define ARRAY_SIZE 10
int arrayARRAY_SIZE;
- 실행 중에 크기를 지정하는 방법
scanf을 통해 입력 단, 지금으로써는 여전히 최대 크기는 미리 지정해야 할 것.
함수에서 배열을 입력받을 경우 배열의 크기는 어떻게?
- 자기만의 '끝'을 표시 (ex. 숫자를 0 이상만 받는다고 할 경우 음수값이 나올 때 까지 반복)
- 함수 호출 시 배열 뿐만이 아니라 배열의 크기도 입력받음 (ex. void printArray(int arr[], int size))
추천 순서
- 배열 선언하기
- 데이터 입력하기
- scanf
- rand
- for문을 이용
- 배열 출력하기
- 배열 순서 바꾸기
- 배열 출력하기
3과 5는 하는 일이 같으니 함수를 이용하는게 어떨까? 이 외에도, 2와 3 부분도 함수로 만들면 보기 편하지 않을까?
6월 4일
실습 테스트 (90분)
문제 1 (문제 모델링)
사용자에게 3자리의 현재 자물쇠 비밀번호와 현재 자물쇠의 상태를 입력 받아 몇 번을 돌려야 자물쇠를 풀 수 있는지 알아내는 프로그램을 C로 작성하시오.
// example input: 325 478 // example output: 9 // example input: 001 990 // example output: 3
문제 2 (주어진 로직에서의 구현)
입력 받은 높이만큼의 파스칼 삼각형을 출력하는 프로그램을 C로 작성하시오. (힌트:
a[n][m] = a[n - 1][m - 1] + a[n - 1][m], a[n][0] = 1, a[n][n] = 1
)
// example input: 6 (1 <= n <= 30) // example output: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
문제 3 (문제 분석 및 로직 구성)
m(높이), n(너비), k(사각형 크기)을 입력 받아 다음과 같은 출력을 하는 프로그램을 C로 작성하시오.
1 <= m <= 10, 1 <= n <= 10, 1 <= k <= 5 // example input: m = 3, n = 4, k = 2 // example output: ( _ 은 공백) **__**__ **__**__ __**__** __**__** **__**__ **__**__ // example input: m = 2, n = 3, k = 1 // example output: ( _ 은 공백) *_* _*_