U E D R , A S I H C RSS

새싹교실/2015/반의반

설명

  • 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))

추천 순서

  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: ( _ 은 공백)
*_*
_*_
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:55
Processing time 0.0351 sec