설명 ¶
- 2015년도 새싹교실 반입니다.
- 장르는 C 프로그래밍 기초
- 진도를 나가기 보다는 수업을 보조해 주는 방식으로 진행합니다.
- 매주 목요일 오후 7시
- 왜 팀 이름이 이러냐면...
- 나중에 알랴드림
- 나중에 알랴드림
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값이라고 한다.실습 내용 ¶
[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 부분도 함수로 만들면 보기 편하지 않을까?
문제 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: ( _ 은 공백) *_* _*_