Difference between r1.1 and the current
@@ -1,4 +1,261 @@
[새싹교실/2017/꽃밭/0328|다음수업▶]
[[TableOfContents]]= 프로그래밍 언어란? =
= 수업 내용 =
== 프로그래밍 언어란? ==
* 프로그래밍 언어는 사람과 컴퓨터의 중간 언어입니다. attachment:sample2.jpg?width=640&height=400
attachment:sample.png?width=560&height=250
* 사람이 이해하기 쉬울수록 high level, 컴퓨터가 이해하기 쉬울수록 low level이라고 하죠.
* high level language에는 Python, Java 등이 있고 low level language에는 assembly, 기계어(0과1)가 있습니다.
* C는 high level language이지만 다른 high 언어에 비해서는 상대적으로 low 쪽에 가까운 언어이죠.
그래서 프로그램 실행 속도가 빠릅니다.
* '''컴파일러'''는 프로그래밍 언어를 기계어로 변환해주는 프로그램이에요.
== C코드는 어떻게 .exe가 되나 ==
* Visual Studio에서 F5를 틱 누르면 프로그램이 휘리릭 실행되는데요,
사실 그 간단한 동작에는 이렇게 복잡한 과정이 들어가 있습니다.
attachment:C_to_exe.png?width=435&height=210
* '''컴파일'''은 여러분이 작성한 .c파일을 기계어로 변환하는 과정입니다. 여기서 .obj 라는 기계어 파일이 생깁니다.
* 그러나 그 기계어 파일에는 빈 곳이 있지요. '''링크'''는 그 빈곳을 매워주는 과정입니다.
#include<stdio.h>의 stdio.h 파일이 이 과정에서 include가 되지요.
링크가 끝나면 비로소 .exe 파일이 생성됩니다.
* 그런데 막상 exe파일을 실행해보니 내가 코드를 잘못 작성했는지 결과가 제대로 나오질 않습니다.
그럴 땐 코드를 다시 살펴보면서 버그를 잡아야겠죠. 이 과정을 '''디버깅'''이라고 부릅니다.
* 컴파일과 링크 과정을 합쳐서 빌드(build)라고 부릅니다. 단축키는 F7.
== Visual Studio는 컴파일러인가? ==
* 컴파일러이기도 하고, 아니기도 하죠.
* 왜냐하면 IDE이기 때문입니다.
attachment:VS_is_IDE.png?width=430&height=250
* C 언어로 프로그램을 만들기 위해서는 무려 네 가지나 되는 프로그램이 필요합니다.
* IDE는 Integrated Development Environment의 약자로, 위 네 가지의 프로그램을 하나로 합친 프로그램을 말해요.
* 과거에는 네 프로그램들을 일일이 불러와서 C 프로그램을 만들었지만, IDE가 생기면서부터는 훨씬 편하게 개발을 할 수 있게 되었습니다.
== Hello World! 코드 뜯어보기 ==
여기서 생애 첫 프로그램, hello world 프로그램을 보고 가도록 하겠습니다.
{{{
#include <stdio.h>
int main(){
printf("hello world!\n");
return 0;
}
}}}
여기서 가장 중요한 것은 {{{{color:red}'''함수'''}}}인데요,
'''함수'''란 '''기능의 단위'''입니다.
수학의 함수처럼, 입력에 대해 출력이 있죠.
attachment:func_prototype.png?width=300&height=120
C 프로그램은 이런 함수들이 모여서 만들어집니다.
그러나 아무리 함수를 잘 작성해도 '''main'''함수가 없으면 소용이 없어요.
main함수는 건물의 기반 같은 함수입니다. C 프로그램 하나당 꼭 '''하나의''' main함수가 필요해요
{{{{font-size:20px}'''scanf함수''' }}}
위의 코드에 입력 받는 부분을 추가해 보겠습니다.
{{{
#include <stdio.h>
int main(){
int number;
printf("hello world!\n");
scanf("%d", &number);
return 0;
}
}}}
그런데 입력을 받으면 그 값을 어딘가에 저장을 해야겠죠. 그 때 필요한 것이 '''변수'''입니다.
== 변수와 자료형 ==
컴퓨터는 메모리에 정보를 저장합니다. 메모리는 대략 이렇게 생겼습니다.
attachment:memory.png?width=460&height=200
메모리에는 여러 칸이 있고, 이 칸에 정보가 들어가게 됩니다.
그러나 무턱대고 아무 칸에나 정보를 넣을 수 있는 것이 아니에요.
그 전에 먼저 '내가 이 칸을 쓸거다'라고 말을 해주어야 하는데, 그 때 사용하는 것이 변수입니다.
attachment:variable.png?width=460&height=200
'''변수'''는 {{{{color:red}정보를 담는 '''그릇'''}}}입니다. 절대 '''숫자가 아니에요'''
그런데 변수에 넣게 되는 값들은 크기와 모양이 다 다릅니다.
작은 값이 있으면 큰 값도 있고, 실수, 정수, 심지어 문자도 있죠.
이런 다양한 값들을 같은 그릇에 담을 수는 없겠죠?
그래서 변수에도 여러 종류가 있게 되는데요, 이러한 변수의 형태를 '''자료형'''이라고 부릅니다.
attachment:data_type.png?width=400&height=260
= 참고 코드 =
결과를 보고 코드의 각 줄이 무엇을 의미하는지 맞춰보는 시간을 가졌습니다.
* 코드
{{{
#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
}}}
출처 : [http://www.cplusplus.com/reference/cstdio/printf/ CPlusPlus.com]
printf, scanf에는 생각 이상으로 기능이 많습니다. 물론 모든 기능을 다 알 필요는 없지만, 유용한 기능이 몇 가지 있어 한 번 보여줘봤어요. ㅎㅎ 그리고 남들이 모르는 독특한 거 알고 있으면 좀 있어보이잖아여 ㅎㅎㅋㅋ ><
혹시 코드 중에 모르겠는거 있으면 제 새싹들에게 물어보세여 친절하게 알려줄겁니당 후후
= 과제 =
* '''과제 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칸으로 합니다.
== 유진 ==
{{{
#include <stdio.h>
int main(void)
{
char 문자;
int 정수 = 0;
char 문자열[80];
float 실수 = 0;
printf("문자 입력하세요: ");
scanf_s("%c", &문자, sizeof(문자));
printf("정수 입력하세요: ");
scanf_s("%d", &정수);
printf("문자열 입력하세요: ");
scanf_s("%s", 문자열, sizeof(문자열));
printf("실수 입력하세요: ");
scanf_s("%f", &실수);
printf("%c %d(%c의 아스키코드)\n", 문자, 문자, 문자);
printf("%d\n", 정수);
printf("%s\n", 문자열);
printf("%f\n", 실수);
return 0;
}
}}}
{{{
#include <stdio.h>
int main()
{
char a1 = NULL;
char a2 = NULL;
char a3 = NULL;
printf("첫 번째 문자 입력하세요 : ");
scanf_s("%c", &a1);
getchar();
printf("두 번째 문자 입력하세요 : ");
scanf_s("%c", &a2);
getchar();
printf("세 번째 문자 입력하세요 : ");
scanf_s("%c", &a3);
getchar();
printf("%d %d %d\n", a1, a2, a3);
return 0;
}
}}}
{{{
#include <stdio.h>
int main() {
int a = 0;
int b = 0;
int c = 0;
int d = 0;
printf("정수 네 개를 입력하세요 : ");
scanf_s("%d%d%d%d", &a, &b, &c, &d);
printf("%10d\n%10d\n%10d\n%10d\n", a, b, c, d);
return 0;
}
}}}
== 현지 ==
{{{
(여기에 코드 적어주세요!)
}}}
== 혜민 ==
{{{
(여기에 코드 적어주세요!)
}}}
= 후기 =
* [유진]
이번 시간에 프로그래밍 언어의 가장 기본적인 변환 방식과 자료형에 대해 배웠다.
새싹교실을 통해 c언어의 기초를 잘 다질 수 있으면 좋겠다^^
* [이현지]
c언어의 특징과 정보가 exe의 형태로 변환되는 과정 등에 대해 배웠다.
c언어를 처음 배우는 나에게 많은 도움이 될 것 같다.
* [김혜민]
프로그래밍 언어의 역할을 배웠고 여러가지 자료형의 종류와 쓰임을 예문을 통해 배웠다.
교수님보다 차근차근 처음부터 잘 알려주셔서 수업을 통해 프로그래밍에 대해 자신감을 향상시킬 수 있을 것 같다.
배우는 수업 내용을 프린트물로 받아서 집에서도 다시 복습할 수 있었으면 좋겠다.
----------
[새싹교실/2017/꽃밭/0328|다음수업▶]
[새싹교실/2017] [새싹교실/2017/꽃밭]
1.1. 프로그래밍 언어란? ¶
- 프로그래밍 언어는 사람과 컴퓨터의 중간 언어입니다.
[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를 틱 누르면 프로그램이 휘리릭 실행되는데요,
사실 그 간단한 동작에는 이렇게 복잡한 과정이 들어가 있습니다.
[PNG image (18.34 KB)]
- 컴파일은 여러분이 작성한 .c파일을 기계어로 변환하는 과정입니다. 여기서 .obj 라는 기계어 파일이 생깁니다.
- 그러나 그 기계어 파일에는 빈 곳이 있지요. 링크는 그 빈곳을 매워주는 과정입니다.
#include<stdio.h>의 stdio.h 파일이 이 과정에서 include가 되지요.
링크가 끝나면 비로소 .exe 파일이 생성됩니다.
- 그런데 막상 exe파일을 실행해보니 내가 코드를 잘못 작성했는지 결과가 제대로 나오질 않습니다.
그럴 땐 코드를 다시 살펴보면서 버그를 잡아야겠죠. 이 과정을 디버깅이라고 부릅니다.
- 컴파일과 링크 과정을 합쳐서 빌드(build)라고 부릅니다. 단축키는 F7.
1.3. Visual Studio는 컴파일러인가? ¶
- 컴파일러이기도 하고, 아니기도 하죠.
- 왜냐하면 IDE이기 때문입니다.
[PNG image (30.92 KB)]
- C 언어로 프로그램을 만들기 위해서는 무려 네 가지나 되는 프로그램이 필요합니다.
- IDE는 Integrated Development Environment의 약자로, 위 네 가지의 프로그램을 하나로 합친 프로그램을 말해요.
- 과거에는 네 프로그램들을 일일이 불러와서 C 프로그램을 만들었지만, IDE가 생기면서부터는 훨씬 편하게 개발을 할 수 있게 되었습니다.
1.4. Hello World! 코드 뜯어보기 ¶
여기서 생애 첫 프로그램, hello world 프로그램을 보고 가도록 하겠습니다.
함수란 기능의 단위입니다.
#include <stdio.h> int main(){ printf("hello world!\n"); return 0; }여기서 가장 중요한 것은 함수인데요,
함수란 기능의 단위입니다.
수학의 함수처럼, 입력에 대해 출력이 있죠.
[PNG image (8.06 KB)]
C 프로그램은 이런 함수들이 모여서 만들어집니다.
그러나 아무리 함수를 잘 작성해도 main함수가 없으면 소용이 없어요.
main함수는 건물의 기반 같은 함수입니다. C 프로그램 하나당 꼭 하나의 main함수가 필요해요
그러나 아무리 함수를 잘 작성해도 main함수가 없으면 소용이 없어요.
main함수는 건물의 기반 같은 함수입니다. C 프로그램 하나당 꼭 하나의 main함수가 필요해요
scanf함수
위의 코드에 입력 받는 부분을 추가해 보겠습니다.
#include <stdio.h> int main(){ int number; printf("hello world!\n"); scanf("%d", &number); return 0; }그런데 입력을 받으면 그 값을 어딘가에 저장을 해야겠죠. 그 때 필요한 것이 변수입니다.
1.5. 변수와 자료형 ¶
컴퓨터는 메모리에 정보를 저장합니다. 메모리는 대략 이렇게 생겼습니다.
[PNG image (4.65 KB)]
메모리에는 여러 칸이 있고, 이 칸에 정보가 들어가게 됩니다.
그러나 무턱대고 아무 칸에나 정보를 넣을 수 있는 것이 아니에요.
그 전에 먼저 '내가 이 칸을 쓸거다'라고 말을 해주어야 하는데, 그 때 사용하는 것이 변수입니다.
변수는 정보를 담는 그릇입니다. 절대 숫자가 아니에요
그런데 변수에 넣게 되는 값들은 크기와 모양이 다 다릅니다.
작은 값이 있으면 큰 값도 있고, 실수, 정수, 심지어 문자도 있죠.
이런 다양한 값들을 같은 그릇에 담을 수는 없겠죠?
그래서 변수에도 여러 종류가 있게 되는데요, 이러한 변수의 형태를 자료형이라고 부릅니다.
그러나 무턱대고 아무 칸에나 정보를 넣을 수 있는 것이 아니에요.
그 전에 먼저 '내가 이 칸을 쓸거다'라고 말을 해주어야 하는데, 그 때 사용하는 것이 변수입니다.
[PNG image (11.03 KB)]
변수는 정보를 담는 그릇입니다. 절대 숫자가 아니에요
그런데 변수에 넣게 되는 값들은 크기와 모양이 다 다릅니다.
작은 값이 있으면 큰 값도 있고, 실수, 정수, 심지어 문자도 있죠.
이런 다양한 값들을 같은 그릇에 담을 수는 없겠죠?
그래서 변수에도 여러 종류가 있게 되는데요, 이러한 변수의 형태를 자료형이라고 부릅니다.
[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. 유진 ¶
#include <stdio.h> int main(void) { char 문자; int 정수 = 0; char 문자열[80]; float 실수 = 0; printf("문자 입력하세요: "); scanf_s("%c", &문자, sizeof(문자)); printf("정수 입력하세요: "); scanf_s("%d", &정수); printf("문자열 입력하세요: "); scanf_s("%s", 문자열, sizeof(문자열)); printf("실수 입력하세요: "); scanf_s("%f", &실수); printf("%c %d(%c의 아스키코드)\n", 문자, 문자, 문자); printf("%d\n", 정수); printf("%s\n", 문자열); printf("%f\n", 실수); return 0; }
#include <stdio.h> int main() { char a1 = NULL; char a2 = NULL; char a3 = NULL; printf("첫 번째 문자 입력하세요 : "); scanf_s("%c", &a1); getchar(); printf("두 번째 문자 입력하세요 : "); scanf_s("%c", &a2); getchar(); printf("세 번째 문자 입력하세요 : "); scanf_s("%c", &a3); getchar(); printf("%d %d %d\n", a1, a2, a3); return 0; }
#include <stdio.h> int main() { int a = 0; int b = 0; int c = 0; int d = 0; printf("정수 네 개를 입력하세요 : "); scanf_s("%d%d%d%d", &a, &b, &c, &d); printf("%10d\n%10d\n%10d\n%10d\n", a, b, c, d); return 0; }