








[변수
-포인터]
1. 변수(variable) :
자료륹
저장하기
위한
기억공간
, 예: 그릇, 가방, 상자….
식별자(identifier): 구분해주는이름-변수이름-함수이름
김철수김영희int x =7;
int sum=100;
-키보드에서눌려지는정보를사용하려면반드시변수에저장해서써야하고,
-변수를사용하려면먼저만들어줘야한다. .변수선언.
-밥그릇, 국그릇처럼변수에도용도별종류가있고, 크기의차이가있다.
-int i = 7;
-char c;
-float f;
변수값(데이터)
변수의이름int
변수의타입변수의이름은?
변수를사용하는이유는?
변수에값을저장하려면?
char ch = ‘A’; ch
문자형변수(1 byte)
‘
A
’
int i = 125; i
정수형변수(4 byte)
125
float f = 10.5;
f
실수형변수(4 byte)
10.5
i = i + 10;
i
135
i = 20.1;
i
20
a == b : a 와b 에저장된값이같은가?
a != b : a 와b 에저장된값이다른가?
a && b : 그리고.
.a 와b 모두0이아니어야참.
a || b : 또는
.a 와b 중하나에0이있어도참.
값의비교: 참(1) vs. 거짓(0)
1-1. 변수와 조건 ,비교의 이해 .
*아래의
코드가
나타내는
의미륹
그림이나
말로
설명하세요
.
int main(void)
{
1. int i, j, result;
2. float f = 10.2;
3. char s = ‘e’;
4. i=1;
5. j=0;
6. result = i+ 20;
7. result = i* j ;
8. result = (i && j);
9. result = (i || j);
10. result = ( i == 0);
}
2. i 가 3 또는 6 또는 9 일 때만 j=0 을, 아니면 j=100 을 저장 .
.
if( i==3 || || ) j=0;
else j = 100;
3. 문자변수 c의 값이 ‘a’면 j=1 을, 아니면 0 저장
.
.언제 잘 것인지 나타내는 알고리즘의 예 )
.조건 : 배가 부르면 그만 먹자 . 아니면 더 먹자
..if ( 배가 부르다 == 참 ) Don’t’ Eat( );
else Eat( );
.변수 i 의 값이 10 이면 j=1을, 아니면 0을 저장하려면
.if (i == 10) j = 1;
else j = 0;
result
.
.
.
사용자가 필요에 의해 만든
사용자정의함수{
int result;
result a + b;
return result;
}
int sum(int a, int b)
{
int result;
result a -b;
return result;
}
Int subtraction(int a, int
b)
result = a + b;
a b
result
.
.
.
사용자가 필요에 의해 만든
사용자정의함수{
int result;
result a + b;
return result;
}
int sum(int a, int b)
{
int result;
result a -b;
return result;
}
Int subtraction(int a, int
b)
result = a + b;
a b
2. 함수(module,procedure) :
-특정문제를 해결하기 위해 작성된 일의 단위 . 기능별로 모듈화한 단위
-필요할 때마 호출해 쓴다 .
-변수와 다른점은 단어 옆에 () 가 붙은 것은 모두 함수 .!!
main( )
메시지를 모니터에 출력할 수
있도록 만들어진 함수
printf( )
.main 함수 : 시스템이 가장먼저 읽어 들이는 ‘작업지시
서’급의 주함수 .
.일련의 작업들을 위한 명령어를 적는다 .
.main 함수안에 적힌 명령어들은 위에서부터 순서대로
실행된다.
.단, 가장 맨 윗부분에는 필요한 변수들을 선언한다 .
.
stdio.h 에 들어있는 printf( “n1과 n2의 차는: %d”, result);
라이브러리
함수
.
미리 만들어진 , result = subtraction(n1, n2);
.
. printf (“n1과 n2의 합은 : %d”, result);
.
result = sum(n1, n2);
printf(“Input number 2: \n”);
.
scanf(“%d”, &n2);
키보드로부터 어떠한 값을
입력받을 수 있도록 만들어
진 함수
printf(“Input number 1: \n”);
scanf(“%d”, &n1);
scanf( )
. .함수가 필요하면 이름만 불러준다 .
.------------------------------------------------------------------
.
int n1, n2, result;
.
2-1. 함수의 의미 , 역할의 이해
** 아래의 설명과 그림을
□
영어 단어 Return : 되돌아가다. .
□
함수에서
.
return ; 불려진 곳으로 되돌아 가라 .
.
return 1; 돌아갈 때 1을 들고 가라 .
.
return ‘a’; 돌아갈 때 ‘a’를 들고 가라 .
보고
적절한 함수를
1. 함수의 prototype 과 역할이 아래와 같습니다 . 적절하게 코
딩
하세요.
result = a * b;
-prototype : int mult(int a, int b);
int a int b
result
int mult(
)
만들어보세요.
{
반복문
.
주어진 조건에 대해 같은 작업을 위한 명령
.
만한 조건&변수를 찾아내어 적용해야 한다 .
.
for ( 조건) , while( 조건)
.
for ( ) 의예 :
.
0 : *****
for (
i= 0 ; I< 6 ; i++)
.
1 : *****
{
.
2 : ***** printf(“ %d : ***** \n”, i );
}
.
3 : *****
.
4 : *****
.
5 : *****
.
구구단의 n 단을 출력하는 함수를 만들어
요
.
n = 5 일때 , void gugu( int n )
{
.
5* 1= 5
.
5* 2 = 10
반복시킬
.
..
.
..
반복문으로
반복하기
보세
.
..
}
.
5* 9= 45
}
3. 배열 : 여러 변수들을 일렬 (여러 층 )로 연결해놓은 구조
-1 차배열 : 기차칸 . 1 칸, 2칸, 3 칸… , -2 차배열 : 아파트 건물 하나 : 301 호 = 3 층 1호,
-3 차배열 : 아파트 단지 , 그 안에 건물이 여러 개 . : 10 동 204호 = 10 동 2층 4호
□
int grade[10];
□
의미 : grade 라는 기차에 칸이 10개, 그 속에 int 가 저장된다 .
□
따라서, index 는 하나 =[ 열] : 0~9 까지
□
float s[3][5];
□
s 라는 건물은 3층 5칸. 그 속에 float 가 저장된다 .
□
따라서, index 는둘 =[ 행]: 0~2 까지, [ 열]: 0~4 까지
□
다음 문자배열의 구조와 초기화된 데이터의 상태를 그림으로 표시하고
설명하세요.
□
주의:! 문자열의 끝에는 ‘종료코드 =\ 0’가 들어감
□
char str[3][6] = {“abcd”,“ABCD”, “!!!!”};
□
의미 : .
□
따라서, .
6
3-1. 함수
+ 배엱
+
//필요한
변수는
선언하세요
int sum( int a[3][3], int b[3][3]){
반복문의
이해
확인
□
int sum( int a[3][3], int b[3][3]) ; 은
1) 2 차배엱
두개륹
입력으로
(인자로) 받아, 서로
같은
위치의
원소끼리
더해
새로운
배엱
result 에
저장한다
.
2) 그리고, result 의
모든
원소의
값읁
누적한
값
total 읁
return 한다.
1. 위
문제가
무엇읁
하라는
것인지
그림으로
나타내세요
.
2. a, b, result 의
배열읁
그려
계산
방법읁
표시하세요
.
result [ ][ ]= a[ ][ ] + b
[ ][ ];
total + = result[ ][ ]
int
a[3][3]
int
b[3][3]
total
}
4. 포인터 : 위치를 기억하는 변수
위치 : Memory( 저장공간 ) 의 주소
& 연산자 : 변수로부터 주소를 추출
주소내용(값)
0x100
0x101
…
0x105
…
…
0x120
…
0x124
…
0x128
……
A
125
10.5
char *p_ch;
int *p_int;
float *p_float;
p_ch = &ch;
p_int = &i;
p_float = &f;
char ch = ‘A’;
int i=125
float f=10.5
포인터 변수
선언
포인터 변수
초기화
ch
‘A’
0x100
0x100
0x101
0x105
i
125
0x101
f
10.5
0x105
p_ch
0x120
p_int
0x124
p_float
0x12
80x100 0x101 0x105
따라서,
.ch == *p_ch == ‘A’
.i == *p_int ==125
.f ==*p_float == 10.5
.문자열의 표현방법
char str[4]=“abc”;
char *pstr=“abc”;
주소내용변수…
0x1200 a str[0]
0x1201 b str[1]
0x1202 c str[2]
0x1203 \0 str[3]
………
0x1204 0xfe00 pstr
………
주소내용변수…
0xfe00 D pstr[0]
0xfe01 E pstr[1]
0xfe02 F pstr[2]
0xfe03 \0 pstr[3]
…
.사용방법은 같다 .
.printf(“%s”, str);
.printf(“%s”, pstr);
.그러나,!
.str 과 str[0] 의 위치는 같지만
.pstr 과 pstr[0] 의 위치는 다르다
8
변수이름
값의
type 변수값
1 &suit[1] 주소(address) 0x1244
2 &suit[2]
3 &suit[3]
4 suit[1]
5 suit[2]
6 suit[3]
7 *suit[1]
8 *suit[2]
9 *suit[3]
10 suit[0][1]
11 &suit[0][1]
12 suit[0][1]
13 &suit[2][3]
14 suit[2][3]
4-1. 포인터와
배열의
이해확인
char str[4] vs. char *str[4]
1차배열str 안에char( 문자)가들어있다1차배열str 안에char *( 문자(열)이있는주소)가들어있다. 즉,개념상2차배열
’M’’o’’n’’e’’y’’\0’
보고
+4
0xBCD1
+4
+4
풀어보세요
0xF451
0xF452 0xF453 0xF454 0xF455 0xF456 0xF457 0xF458
fixed size
□
포인터
배엱
char *suit[4] 의
초기값에
따라
도식화
하면
위
그림과
같습니다
.
잘
아래륹
이해한
후
, 옆의
1~ 14 번까지의
문제륹
.
□
&suit, 즉
suit 의
시작주소는
0x1240, &suit[0], 즉
suit[0] 의
시작주소도
0x1240
□
suit[0] 의
값은
주소
, 0x5A13
□
*suit[0], 즉
suit[0] 안에
들어있는
주소값읁
따라가면
문자열“hearts”가
저장됙
시작주소
.
□
문자열의
포인터륹
요소로
하는
배엱
: 배열안에
주소
(address, pointer) 가
저장되
아래
변수로
표기한
값의
type 과
값읁
쓰세요
.
어
있다
.
.
char *suit[ 4 ] = { "Hearts", "Diamonds", "money", "flowers" };
+1 +1+1 +1 +1 +1
0x5A13
0x5A14 0x5A15 0x5A16 0x5A17 0x5A18 0x5A19
’H’’e’’a’’r’’t’’s’’\0’
’D’’i’’a’’m’’o’’n’’d’’s’’\0’
’F’’l’’o’’w’’e’’r’’s’’\0’
주소변수이름변수값……
0x1240 suit[0] 0x5A13
0x1244 suit[1] 0xAA00
0x1248 suit[2] 0xBCD1
0x124b suit[3] 0xF451
……
0xAA00
9