280 likes | 486 Views
처음으로 배우는 C 프로그래밍. 제1부 기초 제3장 치환, 주소, 대화식 입력. 치환. 치환 연산자 : variable = operand 오른쪽에 있는 피연산자의 값을 왼쪽에 있는 변수에 저장 오른쪽 피연산자는 상수나 변수, 도는 유효한 수식이 될 수 있음 모든 연산자 중에 우선순위가 가장 낮음 왼쪽에는 반드시 하나의 변수가 있어야 함. 25. sum = 25 sum 에 저장된 정수 25. sum. 25. Old value is overwritten. New value is stored.
E N D
처음으로 배우는 C 프로그래밍 제1부 기초 제3장 치환, 주소, 대화식 입력
치환 • 치환 연산자 : variable = operand • 오른쪽에 있는 피연산자의 값을 왼쪽에 있는 변수에 저장 • 오른쪽 피연산자는 상수나 변수, 도는 유효한 수식이 될 수 있음 • 모든 연산자 중에 우선순위가 가장 낮음 • 왼쪽에는 반드시 하나의 변수가 있어야 함 25 sum = 25 sum에 저장된 정수 25 sum 25 Old value is overwritten New value is stored 35 sum = sum + 10; 치환 연산자를 이용하여 sum에 새로운 값을 저장 처음으로 배우는 C 프로그래밍 제1부
치환 • 프로그램 3-1 # include <stdio.h> void main(void) { float length, width, area ; length = 27.2 ; width = 13.6 ; area = length * width ; printf (“The length of the rectangle is %f ”, length) ; printf (“\n The width of the rectangle is %f “, width) ; printf (“\n The area of the rectangle is %f ”, area) ; } 처음으로 배우는 C 프로그래밍 제1부
치환 • 프로그램 3-2 #include <stdio.h> void main(void) { int sum ; sum = 25 ; printf (“\nThe number stored in sum is %d.. “, sum) ; sum = sum + 10 ; printf (“\nThe number now stored in sum is %d. ”, sum) ; } 처음으로 배우는 C 프로그래밍 제1부
Statement Value in sum sum = 0 ; 0 sum = sum + 96 ; 96 sum = sum + 70 ; 166 sum = sum + 85 ; 251 sum = sum + 60 ; 311 치환 • 치환 연산자의 양쪽에 같은 변수를 사용하는 치환문은 다음의 치환 연산자를 사용하여 재작성할 수 있음 • += -= *= /= %= • 누적 처음으로 배우는 C 프로그래밍 제1부
치환 • 프로그램 3-3 #include <stdio.h> void main(void) { int sum ; sum = 0 ; printf (“\nThe valuse of sum is initially set to %d. ”, sum) ; sum = sum + 96 ; printf (“ \n sum is now %d. ”, sum) ; sum = sum + 70 ; printf (“ \n sum is now %d. ”, sum) ; sum = sum + 85 ; printf (“ \n sum is now %d. ”, sum) ; sum = sum + 60 ; printf (“ \n The final sum is %d. “,sum) ; } 처음으로 배우는 C 프로그래밍 제1부
Expression Alternative Expression Alternative i = i + 1 ++i i = i - 1 --i n = n + 1 ++n n = n - 1 --n count = count + 1 ++count count = count - 1 --count 치환 • 전위 증가 연산자 • k = ++n; n = n + 1; k = n • 후위 증가 연산자 • k = n++; k = n; n = n + 1; 처음으로 배우는 C 프로그래밍 제1부
치환 • 프로그램 3-4 #include <stdio.h> void main(void) { int count ; count = 0 ; printf (“\n The initial value of count is %d. ” , count) ; ++count ; printf (\n count is now %d. ” , count) ; ++count ; printf (\n count is now %d. ” , count) ; ++count ; printf (\n count is now %d. ” , count) ; ++count ; printf (\n count is now %d. ” , count) ; } 처음으로 배우는 C 프로그래밍 제1부
One or More Bytes in Memory (depends on data type) Variable Contents Variable Address 주소 • 변수에 저장된 값은 변수의 내용이라고 하며, 변수를 위해 사용된 메모리의 첫 번째 주소를 그 변수의 주소라고 함 • 전형적인 변수 처음으로 배우는 C 프로그래밍 제1부
주소 • 프로그램 3-5 #include <stdio.h> main() { int num ; num = 22 ; printf (“The value stored in num is %d. ” , num) ; printf (“ \nThe computer uses %d bytes to stored this value”, sizeof(int)) ; } 처음으로 배우는 C 프로그래밍 제1부
2 Bytes of Memory xxxx 22 Address of First Byte Used by num Contents of num 주소 • 메모리의 한 부분 • 프로그램 3-6 #include <stdio.h> void main(void) { int num; num = 22; printf (“num = %d The address of num is %p. ”, num, &num); } 처음으로 배우는 C 프로그래밍 제1부
2 Bytes of Memory FFE0 22 address of rirst byte used by num Contents of num 주소 • 변수 num의 완전한 표현 처음으로 배우는 C 프로그래밍 제1부
Variable Contents Num_addr Address of num Variable Contents Address of m d Address of list tab_point Address of ch chr_point 주소 • 선언된 변수의 주소를 저장하는 방법 num_addr = # • num의 주소를 num_addr에 저장 • 주소 저장 처음으로 배우는 C 프로그래밍 제1부
FFAA The Contents of y is an Address A Pointer Variable y : The Contents of Address FFAA is qqqq qqqq FFAA 주소 • 저장된 주소의 사용방법 • 포인터 앞에 * 기호가 사용되면, 주소가 그 포인터에 저장되어 있는 변수를 의미 *num_addr 처음으로 배우는 C 프로그래밍 제1부
A Pointer to a Character One Byte is Retrieved An Address A Pointer to an Integer Two Bytes are Retrieved An Address A Pointer to a Floating Point Number Four Bytes are Retrieved An Address 주소 • 포인터의 선언 • int *num_addr; • 포인터를 사용한 서로 다른 데이터 형의 주소 지정 처음으로 배우는 C 프로그래밍 제1부
주소 • 프로그램 3-7 #include <stdio.h> void main(void) { int *num_addr; /* declare a pointer to an int */ int miles, dist; /* declare two integer variables */ dist = 158; /* store the number 158 into dist */ miles = 22; /* store the number 22 into miles */ num_addr = &miles; /* store the ‘address of miles’ in num_addr */ printf (“The address stored in num_addr is %p\n”, num_addr); printf (“The value pointed to by num_addr is %d\n\n”, *num_addr); num_addr = &dist; /* now store the address of dist in num_addr */ printf (“The address now stored in num_addr is %p\n”, num_addr); printf (“The value now pointed to by num_addr is %d\n”, *num_addr); } 처음으로 배우는 C 프로그래밍 제1부
scanf() 함수 • 프로그램 3-8 #include <stdio.h> void main(void) { float num1, num2, product ; num1 = 300.0 ; num2 = .05 ; product = num1 * num2 ; printf (“%f times %f is %f ”, num1, num2, product) ; } • 프로그램 3-9 #include <stdio.h> void main(void) { printf (“%f times %f is %f ”, 300.0, .05, 300.0 * .05) ; } 처음으로 배우는 C 프로그래밍 제1부
#include <stdio.h> void main(void) { scanf ( ) printf ( ) } Keyboard Screen scanf() 함수 • scanf()와 printf()함수 처음으로 배우는 C 프로그래밍 제1부
scanf() 함수 • 프로그램 3-10 #include <stdio.h> void main(void) { float num1, numm2, product ; printf (“Please type in a number: ”) ; scanf (“%f”, &num1) ; printf (“Please type in another number: ”) ; scanf (“%f”, &num2) ; product = num1 * num2 ; printf (“ %f times %f is %f ”, num1, num2, product); } 처음으로 배우는 C 프로그래밍 제1부
버퍼 입력을 갖는 scanf() • 프로그램 3-11 #include <stdio.h> void main(void) { char fkey ; printf (“type in a character: ”) ; scanf (“ %c”, &fkey) ; printf (“the keystrocke just accepted is %d ”, fkey) ; } 처음으로 배우는 C 프로그래밍 제1부
버퍼 입력을 갖는 scanf() • 프로그램 3-12 #include <stdio.h> void main(void) { char fkey, skey ; printf (“Type in a character : ”) ; scanf (“%c”, &fkey) ; printf (The keystroke just accepted is %d ”, fkey) ; printf (“\nType in another character: ”) ; scanf (“%c”, &skey) ; printf (The keystroke just accepted is %d ”, skey) ; } 처음으로 배우는 C 프로그래밍 제1부
Each Character is Sent to a Buffer As It is Typed H e l l o \n Keyboard 버퍼 입력을 갖는 scanf() • 입력된 키보드 문자는 우선 버퍼에 저장됨 처음으로 배우는 C 프로그래밍 제1부
버퍼 입력을 갖는 scanf() • 프로그램 3-13 #include <stdio.h> void main(void) { char fkey, skey ; printf (“Type in a character: ”) ; scanf (“ %c %c”, &fkey, &skey) ; /* the enter code goes to skey */ printf (“the keystrocke just accepted is %d ”, fkey) ; printf (“\nType in another character: ”) ; scanf (“%c”, &skey) ; /* accept another code */ printf (The keystroke just accepted is %d ”, skey) ; } 처음으로 배우는 C 프로그래밍 제1부
기호 상수 • 리터럴 : 프로그램 내에서 그 값이 명확히 구별되는 데이터 2 3.14 • #define • 숫자를 기호명으로 정의 • #define SAESTEX 0.05 • #define PI 3.141592 처음으로 배우는 C 프로그래밍 제1부
기호 상수 • 프로그램 3-14 #define SALESTAX 0.05 #include <stdio.h> void main(void) { float amount, taxes, total; printf (“\nEnter the amount purchased: ”) ; scanf (“ %f”, &amount) ; taxes = SALESTAX * amount ; total = amount + taxes ; printf (“The sales tax is $%4.2f ”, taxes) ; printf (\nThe total bill is $%5.2f ”, total) ; } 처음으로 배우는 C 프로그래밍 제1부
기호 상수 • 프로그램 3-15 #define SALESTAX 0.05 #define BEGIN { #define END } #include <stdio.h> void main(void) BEGIN float amount, taxes, total; printf (“\nEnter the amount purchased: ”) ; scanf (“ %f”, &amount) ; taxes = SALESTAX * amount ; total = amount + taxes ; printf (“The sales tax is $%4.2f ”, taxes) ; printf (\nThe total bill is $%5.2f ”, total) ; END 처음으로 배우는 C 프로그래밍 제1부
일반적인 프로그래밍 오류 • 모든 변수는 식에서 사용되기 전에 초기화 값을 대입해야 함 • 증가 또는 감소 연산자를 식에서 사용할 경우 주의해야 함 • 포인터로 선언되지 않은 변수에 주소를 저장해서는 안됨 • scanf()함수에는 주소를 넘져주어야 함 • scanf()함수의 제어 문자열에는 메시지가 포함되지 않음 • scanf()함수 호출시 입력될 데이터 값에 따라 정확한 제어문자를 포함해야 함 • scanf()함수에 넘겨지는 제어 문자열을 이중따옴표로 닫아야 하며, 모든 인자는 쉼표로 구분해야 함 • #define문은 세미콜론으로 끝나지 않음 • 동일한 문장에서 한 번 이상 나타나는 변수에 증가, 감소 연산자를 사용하면 안됨 처음으로 배우는 C 프로그래밍 제1부
요약 • 치환연산자 • 주소의 저장과 주소를 저장할 수 있는 변수의 선언 • 포인터의 활용 • scanf()함수 • 기호상수(리터럴) 처음으로 배우는 C 프로그래밍 제1부