Difference between r1.5 and the current
@@ -39,9 +39,211 @@
* 쉬프트 암호화
* 4개의 좌표를 입력받아 넓이 출력
* 그 외에 짬짬한 내용들
* 정수끼리 나눌 경우 값이 정수임을 유의.
* (float) (double)과 같은 캐스팅을 하거나, 3.0 같은 꼼수(?)를 쓰자
* 4개의 좌표를 입력받아 넓이 출력
* 그 외에 짬짬한 내용들
* {{ stdio.h }} 외에도 {{ math.h }}와 같은 헤더 파일들이 있으며, 각각의 헤더 파일은 특정 작업과 관련된 함수들을 가지고 있음.
* {{{ stdio.h }}} 외에도 {{{ math.h }}}와 같은 헤더 파일들이 있으며, 각각의 헤더 파일은 특정 작업과 관련된 함수들을 가지고 있음.
* 연산 후, 비교하고, 대입한다. * {{ 1 <= x <= 9 }} 이런 코드는 노노.
* {{{ 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 array[ARRAY_SIZE];
* 실행 중에 크기를 지정하는 방법
scanf을 통해 입력
단, 지금으로써는 여전히 최대 크기는 미리 지정해야 할 것.
===== 함수에서 배열을 입력받을 경우 배열의 크기는 어떻게? =====
* 자기만의 '끝'을 표시 (ex. 숫자를 0 이상만 받는다고 할 경우 음수값이 나올 때 까지 반복)
* 함수 호출 시 배열 뿐만이 아니라 배열의 크기도 입력받음 (ex. void printArray(int arr[], int size))
==== 추천 순서 ====
1. 배열 선언하기
2. 데이터 입력하기
1. scanf
2. rand
3. for문을 이용
3. 배열 출력하기
4. 배열 순서 바꾸기
5. 배열 출력하기
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: ( _ 은 공백)
*_*
_*_
}}}
설명 ¶
- 2015년도 새싹교실 반입니다.
- 장르는 C 프로그래밍 기초
- 진도를 나가기 보다는 수업을 보조해 주는 방식으로 진행합니다.
- 매주 목요일 오후 7시
- 왜 팀 이름이 이러냐면...
- 나중에 알랴드림
- 나중에 알랴드림
진행 ¶
3월 17일 ¶
- 오리엔테이션
- 팀명/시간 조정
3월 26일 ¶
- Hello, World 살펴보기
#
이 무엇을 하나요?
int main() {}
이 뭐죠?
puts
와printf
는 무슨 차이가 있어요?
- 기타 등등...
4월 2일 ¶
- 자료형들
- short, int, long
- float, double
- short, int, long
- 컴퓨터에서는 숫자를 어떻게 저장할까?
- 왜 다양한 자료형들이 있을까?
- 산술/논리 연산자들
- (중첩) if/else
- 점수에 따른 성적 출력하는 실습
- 숫자 입력에 따른 출력 실습 (양수? 음수? 양수면 짝수? 홀수?)
- 점수에 따른 성적 출력하는 실습
4월 9일 ¶
- 실습 시간
- 쉬프트 암호화
- 4개의 좌표를 입력받아 넓이 출력
- 쉬프트 암호화
- 그 외에 짬짬한 내용들
stdio.h
외에도math.h
와 같은 헤더 파일들이 있으며, 각각의 헤더 파일은 특정 작업과 관련된 함수들을 가지고 있음.
- 연산 후, 비교하고, 대입한다.
1 <= x <= 9
이런 코드는 노노.
- http://www.asciitable.com/ 아스키 값은 여기서 확인.
- 정수끼리 나눌 경우 값이 정수임을 유의.
- (float) (double)과 같은 캐스팅을 하거나, 3.0 같은 꼼수(?)를 쓰자
- (float) (double)과 같은 캐스팅을 하거나, 3.0 같은 꼼수(?)를 쓰자
5월 7일 ¶
긴 공백기를 깨고...
- 함수
- 왜 함수를 쓰는가, 함수의 구성, 프로토타입
- 왜 함수를 쓰는가, 함수의 구성, 프로토타입
- 포인터
- 왜 포인터를 쓰는가, 포인터 관련 문법, 포인터 동작 원리, swap example
- 왜 포인터를 쓰는가, 포인터 관련 문법, 포인터 동작 원리, 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)질의응답 ¶
크기 지정은 어떻게? ¶
- 실행하기 전에 크기를 지정하는 방법
int arrayARRAY_SIZE;
- 실행 중에 크기를 지정하는 방법
단, 지금으로써는 여전히 최대 크기는 미리 지정해야 할 것.
함수에서 배열을 입력받을 경우 배열의 크기는 어떻게? ¶
- 자기만의 '끝'을 표시 (ex. 숫자를 0 이상만 받는다고 할 경우 음수값이 나올 때 까지 반복)
- 함수 호출 시 배열 뿐만이 아니라 배열의 크기도 입력받음 (ex. void printArray(int arr[], int size))
추천 순서 ¶
- 배열 선언하기
- 데이터 입력하기
- scanf
- rand
- for문을 이용
- scanf
- 배열 출력하기
- 배열 순서 바꾸기
- 배열 출력하기
이 외에도, 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: ( _ 은 공백) *_* _*_