이 글은 언어를 처음 접하는 사람들에게 문법적인 부담을 가장 적게 주면서 차근차근 프로그래밍에 빠질수가 없나 하는 고민으로 쓴 글입니다.가장 최악의 글이 처음 대하는 사람은 읽어도 모르고 아는 사람은 지겨운 글인데 이 글도 그런 글이 되지 않을 까 걱정이 됩니다.
이 글 읽어본 후 이해가 안 가는 부분 있으면 질답에 글 남겨 주세요. 보충 하겠습니다.
첫 계단 오르기 위한 준비운동
내용: -printf +변수 -정수형 변수 -실수형 변수 -사칙 연산 , 몫 , 나머지 연산자 -scanf -형 변환 연산자 -수 분리하기
printf 는 화면에 출력하는 기능을 하는 것이다.(1) printf("........");
#include <stdio.h> int main() { printf("i love my life!!!"); return 0; }printf 의 약속은 쌍 따움표(") 안에 들어있는 내용을 그대로 화면상에 출력 하는 명령이다.
결과는:
i love my life!!!다음 프로그램을 실행하면 전 프로그램과의 차이를 볼수 있는가?
#include <stdio.h> int main() { printf("i love my life!!!\n"); return 0; }(2) printf("....\n.....\n....");
\n 문자는 다음 줄로 넘기는 기능을 하는 제어문자이다.printf("이것은\n\n이렇게 된다.\n");
출력 결과는
이것은 이렇게 된다.(프로그래밍 실습문제)
- 아래와 같이 출력되게 프로그래밍 해 보세요.
Hello !!! How are you? Fine thank you.- 아래와 같이 출력되게 프로그래밍 해 보세요.
* *** ***** *******
- 정수형 변수 - 실수형 변수
(1) 정수 형 변수
#include <stdio.h> int main() { int a; a = 10; printf("a = %d\n",a); return 0; }1)int a;
a 는 정수형 변수이다. 변수는 뭔가를 담을수 있는 그릇이다. 즉 a 는 정수를 담을수 있는 그릇이다.
정수란? 소수점을 포함하지 않는 수이다.
- 2.5 , 3.0 ... 실수
- 12 , -5 , 0 , 1000 ... 정수
2)a = 10;
변수 a 에 10 을 넣어라. = 는 같다는 의미가 아닌 대입을 의미하는 연산자
3)printf("a = %d\n",a);
printf("쌍 따옴표안에 있는 내용를 그대로 표시하라");(보충) %d 가 여러개 사용된 경우단 , %d 가 오면 이 자리에 뒤에 오는 변수의 값을 가져와서 출력하라는 의미이다.
(보기1) 두 수를 입력 받아 합을 구하는 프로그램 이다.
#include <stdio.h> int main() { int a,b; // 슬래쉬 두개를 사용하면 주석 a = 10; b = 20; printf("%d\n",a+b); // 합 출력 }(2)실수형 변수
실수 형 변수란 소수점을 포함한 수이다. 12.5 , -0.5 , 12.0 , ....
#include <stdio.h> int main() { float a; a = 10.56; printf("%.1f\n",a); return 0; }
실수형 변수는
- 소수점을 포함하는 수를 기억하는 변수로 선언할 때 float ...예. float a,b;
- 입력할 때는 %f 로 예... scanf("%f",&a);
- 출력할 때는 %f 로 예... printf("%f",a);
- 출력시 소수이하 자리수를 명시해 줄수 있다...printf("%.1f",a);
%.1f 는 소수 이하 1 자리까지 출력,즉 소수 이하 2 자리에서 반올림 해서 1 자리까지 출력한다.
위 예에서는 10.56 의 소수 두 번째 자리 수가 6 이므로 반올림 해서 10.6 이 출력된다.
(프로그래밍 실습)
아래와 같이 출력되도록
printf 를 이용하여 괄호를 채우시요.
#include <stdio.h> int main() { int b, h; b = 10; h = 15; //여러줄이 와도 상관없습니다. ( ) }밑변의 길이가 20 이 되도록 변수 b 를 수정하여 수정해서 실행결과가 정상적으로 나오는지 확인 해 보세요.
꼭 알고 넘어가야 할 사항은 10 , 15 , 75 를 출력하는 자리에는 %d 를 사용해야 합니다. 변수 값에 따라 변화하는 부분입니다.
(Q) 아래 프로그램을 실행 시키면 결과는 어떻게 나올까요???
#include <stdio.h> int main() { int a; a = 10; a = 20; printf("%d\n", a); }(A) 프로그램은 위에서 아래로 실행을 합니다. a 변수에 10 을 넣은 후 다음 20 을 넣으면 기존에 있는 내용을 덮어 버립니다. 그래서 출력결과는 20
- 더하기 연산자 +
- 빼기 연산자 -
- 곱하기 연산자 *
- 나누기 연산자 /
- 나머지 연산자 %
1) 나머지 연산자 %
- 7 % 4 는 3
- 4 % 2 는 0
- 5 % 2 는 1
- 5 % 7 은 5
2)나누기 연산자 /
나누기 연산자는 두가지 역할을 합니다.그러면 언제 나누기를 언제 몫 연산을 할까요?
- 나누기
- 몫 연산
나누기를 하려면 나눔을 당하는 피 젯수 , 나눔을 하는 젯수 두 수가 필요합니다.
몇가지 예를 들면 ,
- 두 수가 소수점을 포함하지 않는 수 이면 몫 연산을 행하고 ,
- 두 수 중 하나라도 소수점을 포함하는 수 이면 우리가 알고 있는 나누기 연산을 수행합니다.
- 15.0 / 2 는 7.5
- 15 / 2 는 7
- 1 / 2 는 0
- 1.0 / 2 는 0.5
- 1 / 2.0 은 0.5
프로그램 실행시에 변수 값을 키보드로 주는 역할을 하는 것이 scanf 이다.#include <stdio.h> int main() { int a; scanf("%d", &a); printf("a = %d\n", a); }7번재 줄의 scanf가 a 가 차지한 공간에 키보드로 입력 받은 데이터를 넣어주는 역할을 하는 입력 전용의 도구이다.
- int a; 변수 a 에 대한 공간이 만들어 진다.
- scanf("%d",&a); 키보드로 데이터를 입력받아 엔터를 치면 입력 받은 값을 a 공간에 저장 (scanf 를 사용할 시 변수 앞에 & 를 사용한다.)
키보드로 10 을 입력하고 엔터를 쳤다면
- scanf 함수는 이삿짐 센터 역할을 하는 함수이다. 우리가 이사할 때 주소를 가르켜 주면 그 주소로 이삿짐을 옮겨준다. c 언어에서 변수의 주소를 나타내는 연산자가 & 이다.
- 출력
a = 10
이 연산자에 대해서 알아보기에 앞서 나누기 / 연산자에 대해 알아보자.두 가지 모두 0.5 를 의미할 것 같지만 결과는 c 언어에서는 처음 것은 0 이고 두 번째 것은 0.5 이다.
- 1 / 2
- 1.0 / 2
/ 연산자는 두 가지 얼굴을 가진 연산자이다.(두 가지 얼굴을 가졌다는 것을 overloading 이라고 한다.)
(예제) 다음의 결과는 ?
- 젯수와 피젯수가 모두 정수이면 결과는 정수이다. 즉 이 때는 / 는 몫을 가지고 오는 기능을 한다.
- 젯수와 피젯수가 하나라도 실수이면 결과는 실수이다. 즉 이 때는 우리가 알고 있는 나누기 기능을 한다.
화면에 출력할 때는 첫 번째 것의 결과는 정수이므로 %d 로 , 두 번째 세번 째 것은 결과가 실수이니 %f 로 출력해야 한다.
- 7 / 5 1
- 7 / 5.0 1.4
- 7.0 / 5.0 1.4
아래 프로그램은 점수와 인원수를 이용하여 평균을 구하려고 짠 프로그램이다. 예상 결과는 21.50#include <stdio.h> int main() { int total, cnt; float avg; total = 215; cnt = 10; avg = total / cnt; printf("%.2f\n", avg); return 0; }실행결과21.00그런데 예상 한 결과는 21.5 인데 기대한 결과가 나오지 않는다.
/ 는 젯수 , 피 젯수 중 적어도 하나가 실수인 경우 나누기 연산을 수행하는데 cnt , total 변수가 정수형 변수이다.
그러면 어떻게 할까? 두 가지 해결 방법이 있다.
방법 1
두 수 중 하나를 실수로 바꾸어야 하는데 숫자이면 숫자.0 형태로 실수화 할수 있으나 변수명.0 형태로 해서 실수로 바꿀수가 없다.
한 가지 방법으로 total , cnt 변수 중 하나를 실수 변수로 사용할 수 있다.
#include <stdio.h> int main() { int cnt; float avg, total; // total을 float으로 total = 215.0; cnt = 10; avg = total / cnt; printf("%.2f\n", avg); return 0; }실행결과21.50이렇게 하면 원하는 결과를 낼수 있으나 변수의 특성상 이 변수를 실수로 바꾸는것은 바람직 하지 않다.
방법 2
순간 변신 연산자(cast 연산자)를 이용한다.avg = (float)total / cnt;(float)total 은 total 변수가 이 순간 실수로 바뀌어 실수 / 정수 형태가 되어 몫이 아닌 나누기한 결과가 avg 가 된다.
#include <stdio.h> int main() { int cnt, total; float avg; total = 215; cnt = 10; // total을 float형으로 변신 avg = (float)total / cnt; printf("%.2f\n", avg); return 0; }실행결과21.50
수를 다룰 경우 주어진 수를 떼어낼 경우가 종종 발생한다예를 들어 , 수 123 을 일의 자리 3 과 일의 자리수를 떼어낸 숫자 12 를 어떻게 알수 있을까?
123 = 1*100 + 2*10 + 3
- 10 의 자리 이상에서는 10 의 배수를 포함하고 있으므로 ( 2*100 의 100 , 2*10 의 10 ), 이 자리수를 10 으로 나눈 나머지는 모두 0 이므로 나머지는 일의 자리수가 된다.
즉 어떤 수의 일의 자리수만을 구하고자 할 때는 10 으로 나눈 나머지를 구하면 된다.
- 123 에서 10 으로 나눈 몫은 일의 자리를 떼어낸 수 12 가 된다.
출처: dovelet + makecode
*수정할 사항이 있거나 변경할 부분이 있으면 가차없이 질답에 글을 남겨 주세요.