U E D R , A S I H C RSS

새싹교실/2017/꽃밭/0324 (rev. 1.24)

새싹교실/2017/꽃밭/0324

1. 수업 내용

1.1. 프로그래밍 언어란?

  • 프로그래밍 언어는 사람과 컴퓨터의 중간 언어입니다.
sample.png
[PNG image (88.09 KB)]

  • 사람이 이해하기 쉬울수록 high level, 컴퓨터가 이해하기 쉬울수록 low level이라고 하죠.
  • high level language에는 Python, Java 등이 있고 low level language에는 assembly, 기계어(0과1)가 있습니다.
  • C는 high level language이지만 다른 high 언어에 비해서는 상대적으로 low 쪽에 가까운 언어이죠.
    그래서 프로그램 실행 속도가 빠릅니다.
  • 컴파일러는 프로그래밍 언어를 기계어로 변환해주는 프로그램이에요.

1.2. C코드는 어떻게 .exe가 되나

  • Visual Studio에서 F5를 틱 누르면 프로그램이 휘리릭 실행되는데요,
    사실 그 간단한 동작에는 이렇게 복잡한 과정이 들어가 있습니다.
C_to_exe.png
[PNG image (18.34 KB)]

  • 컴파일은 여러분이 작성한 .c파일을 기계어로 변환하는 과정입니다. 여기서 .obj 라는 기계어 파일이 생깁니다.
  • 그러나 그 기계어 파일에는 빈 곳이 있지요. 링크는 그 빈곳을 매워주는 과정입니다.
    #include<stdio.h>의 stdio.h 파일이 이 과정에서 include가 되지요.
    링크가 끝나면 비로소 .exe 파일이 생성됩니다.
  • 그런데 막상 exe파일을 실행해보니 내가 코드를 잘못 작성했는지 결과가 제대로 나오질 않습니다.
    그럴 땐 코드를 다시 살펴보면서 버그를 잡아야겠죠. 이 과정을 디버깅이라고 부릅니다.
  • 컴파일과 링크 과정을 합쳐서 빌드(build)라고 부릅니다. 단축키는 F7.

1.3. Visual Studio는 컴파일러인가?

  • 컴파일러이기도 하고, 아니기도 하죠.
  • 왜냐하면 IDE이기 때문입니다.
VS_is_IDE.png
[PNG image (30.92 KB)]

  • C 언어로 프로그램을 만들기 위해서는 무려 네 가지나 되는 프로그램이 필요합니다
  • 과거에는 그 프로그램들을 일일이 불러와서 C 프로그램을 만들었지만, IDE가 생기면서부터는 훨씬 편하게 개발을 할 수 있게 되었습니다.

1.4. Hello World! 코드 뜯어보기

여기서 생애 첫 프로그램, hello world 프로그램을 보고 가도록 하겠습니다.

#include <stdio.h>

int main(){
 printf("hello world!\n");
 return 0;
}
여기서 가장 중요한 것은 함수인데요,
함수기능의 단위입니다.

수학의 함수처럼, 입력에 대해 출력이 있죠.
func_prototype.png
[PNG image (8.06 KB)]


C 프로그램은 이런 함수들이 모여서 만들어집니다.
그러나 아무리 함수를 잘 작성해도 main함수가 없으면 소용이 없어요.
main함수는 건물의 기반 같은 함수입니다. C 프로그램 하나당 꼭 하나의 main함수가 필요해요

scanf함수

위의 코드에 입력 받는 부분을 추가해 보겠습니다.
#include <stdio.h>

int main(){
 int number;
 printf("hello world!\n");
 scanf("%d", &number);
 return 0;
}
그런데 입력을 받으면 그 값을 어딘가에 저장을 해야겠죠. 그 때 필요한 것이 변수입니다.

1.5. 변수와 자료형

컴퓨터는 메모리에 정보를 저장합니다. 메모리는 대략 이렇게 생겼습니다.
memory.png
[PNG image (4.65 KB)]


메모리에는 여러 칸이 있고, 이 칸에 정보가 들어가게 됩니다.
그러나 무턱대고 아무 칸에나 정보를 넣을 수 있는 것이 아니에요.
그 전에 먼저 '내가 이 칸을 쓸거다'라고 말을 해주어야 하는데, 그 때 사용하는 것이 변수입니다.
variable.png
[PNG image (11.03 KB)]

변수정보를 담는 그릇입니다. 절대 숫자가 아니에요
그런데 변수에 넣게 되는 값들은 크기와 모양이 다 다릅니다.
작은 값이 있으면 큰 값도 있고, 실수, 정수, 심지어 문자도 있죠.
이런 다양한 값들을 같은 그릇에 담을 수는 없겠죠?
그래서 변수에도 여러 종류가 있게 되는데요, 이러한 변수의 형태를 자료형이라고 부릅니다.
data_type.png
[PNG image (235.27 KB)]

2. 참고 코드

결과를 보고 코드의 각 줄이 무엇을 의미하는지 맞춰보는 시간을 가졌습니다.

  • 코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(){
	printf("Characters: %c %c \n", 'a', 65);
	printf("Decimal: %d\n", 1977);
	printf("floats: %f %E \n",3.1416, 3.1416);
	printf("%s \n", "A string");
	printf("Preceding with blanks: %10d \n", 1977);
	printf("Preceding with zeros: %010d \n", 1977);
	printf("Some different radices: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);
	printf("Width trick: %*d \n", num, 10);

return 0;
}

  • 결과

Characters: a A
Decimal: 1977
floats: 3.141600 3.141600E+000
A string
Preceding with blanks:       1977
Preceding with zeros: 0000001977
Some different radices: 100 64 144 0x64 0144
Width trick:    10
출처 : CPlusPlus.com

printf, scanf에는 생각 이상으로 기능이 많습니다. 물론 모든 기능을 다 알 필요는 없지만, 유용한 기능이 몇 가지 있어 한 번 보여줘봤어요. ㅎㅎ 그리고 남들이 모르는 독특한 거 알고 있으면 좀 있어보이잖아여 ㅎㅎㅋㅋ ><
혹시 코드 중에 모르겠는거 있으면 제 새싹들에게 물어보세여 친절하게 알려줄겁니당 후후

3. 과제

  • 과제 1 : 다양한 자료형의 입력과 출력

다음의 결과가 나오는 프로그램을 작성하세요.
문자 입력하세요 : d
정수 입력하세요 : 123
문자열 입력하세요 : hello
실수 입력하세요 : -12.323
d 100(d의 아스키코드)
123
hello
-12.323000

참고로 여러분이 아직 문자열을 안 배웠기 때문에, 문자열 입력 출력 방법을 제공해드립니닷
//문자열 변수 선언
char string[100];
//문자열 입력받기
scanf("%s", string); //&를 붙이지 않는 것에 주의!
//문자열 출력
printf("%s\n", string);

  • 과제 2 : 문자 3개 입력받아 아스키코드(ASCII code) 출력하기

다음의 결과가 나오는 프로그램을 작성하세요.
첫 번째 문자 입력하세요 : b
두 번째 문자 입력하세요 : c
세 번째 문자 입력하세요 : a
98 99 97


  • 선택과제 : 정수 4개 입력받아 오른쪽 정렬해서 출력하기

다음의 결과가 나오는 프로그램을 작성하세요.
정수 네 개를 입력하세요 : 1 -233 4 19
         1
      -233
         4
        19
출력되는 칸의 길이는 총 10칸으로 합니다.

3.1. 유진

(여기에 과제 코드를 올려주세용!!)

3.2. 현지

(여기에 과제 코드를 올려주세용!!)

3.3. 혜민

(여기에 과제 코드를 올려주세용!!)

4. 후기

이번 시간에 프로그래밍 언어의 가장 기본적인 변환 방식과 자료형에 대해 배웠다.
새싹교실을 통해 c언어의 기초를 잘 다질 수 있으면 좋겠다^^

c언어의 특징과 정보가 exe의 형태로 변환되는 과정 등에 대해 배웠다.
c언어를 처음 배우는 나에게 많은 도움이 될 것 같다.

프로그래밍 언어의 역할을 배웠고 여러가지 자료형의 종류와 쓰임을 예문을 통해 배웠다.
교수님보다 차근차근 처음부터 잘 알려주셔서 수업을 통해 프로그래밍에 대해 자신감을 향상시킬 수 있을 것 같다.
배우는 수업 내용을 프린트물로 받아서 집에서도 다시 복습할 수 있었으면 좋겠다.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:30:05
Processing time 0.0629 sec