" async="async"> ', { cookie_domain: 'auto', cookie_flags: 'max-age=0;domain=.tistory.com', cookie_expires: 7 * 24 * 60 * 60 // 7 days, in seconds }); 책 알려주는 남자 :: '#c언어 #c' 태그의 글 목록

'#c언어 #c'에 해당되는 글 2건

11장 Summary


메모리는 이터를 기준으로 주소가 매겨진다

포인터는 메모리의 주소를 저장할 수 있는 변수이다

변수 x의 주소를 추출하려면 printf("x의 주소: %p", &x);라고 하면 된다.

int *p의 의미는 정수를 가르키는 포인터이다

int 형 포인터 p가 가리키는 위치에 100을 저장하는 문장은 *p=100;이다

포인터가 아무것도 가리키고 있지 않는 경우에는 NULL값을 넣어두는 편이 좋다

배열 a에서 a는 첫번째 원소(=a[0])의 주소이다.         
                    ★열의 이름은 첫번째 원소를 가르키는 포인터(포인터상수)와 같다

P가 포인터라면 p[2]는 수식 *(p+2)와 같다
                    ★a+i는 &a[i]와 같고, *(a+i)는 a[i]와 동일하다

*p++의 의미는 p가 가르키는 값을 가져온 후에 p를 증가한다.

   ★(*p)++ : p가 가르키는 값을 가져온 후에 가르키는 값을 증가한다.
       *++p : p를 증가시킨 수에 p가 가르키는 값을 가져온다
       ++*p : p가 가르키는 값을 증가시킨 후에 가져온다

사칙 연산 중에서 포인터에 대하여 적용할 수 있는 연산에는 덧셈과 뺄셈 이 있다.

int형 포인터 p가 80번지를 가리키고 있었다면 (p+1)은 84번지를 가리킨다

함수 호출시 인수 전달 방법 중에서 기본적인 방법은 "에 의한 호출"이다.

값에 의한 호출(call-by-value)은 복사본이 전달되고
   이 방법만 C에서 지원한다.
 
★참조에 의한 호출(call-by-reference)은 원본이 전달되고
   포인터를 이용해 간접구현이 가능하다.

블로그 이미지

얼음꿀차

책을 한 번 읽긴 읽어야겠는데 막상 읽자니 뭘 읽을지 고민되는 당신을 위해 읽을만한 책들을 알려드립니다!

,

10장 Exercise


1. 배열이 10개의 원소를 가진다면 첫 번째 원소의 배열 번호는?     ②0


2. 배열 char[5][6]은 총 몊개의 원소를 가지는가?        ③30


3. 다음 중 잘못 선언된 배열을 모두 선택하라.    ③, ④ (변수, 실수는 배열의 크기가 될 수 없다.)


4. int a[100]={10}; 으로 선언된 배열에서 a[99]의 초기값은 무엇인가?    ①0


5. int a[2][2] = {1, 2, 3, 4}에서 a[1][1]의 초기값은?        ①1


6. 프로그램의 오류를 전부 수정하라.

#define MAX_SIZE 3

int main(void)
{

int a[MAX_SIZE]={0, 1, 2, 3};
int b[3.0];

for(i=0; i<=MAX_SIZE; i++)
        b[i]=a[i];

return 0;

}

 #define MAX_SIZE 3

int main(void)
{

int a[MAX_SIZE]={0, 1, 2};
int b[3];

for(i=0; i<=MAX_SIZE; i++)
        b[i]=a[i];

return 0;

}


7. 

  (a) 배열로 수정

float grade[3];

 (b) 입력 대신 배열 초기값 설정

float grade[3]={10.0, 20.0, 30.0}

 (c) 평균함수 이용


#include <stdio.h>


float get_average(float a[], int n);


int main()

{

float grade[3] = {10.0, 20.0, 30.0};

printf("학생들의 평균: %f", get_average(grade, 3));

return 0;

}

float get_average(float a[], int n)

{

int i;

float sum=0;

for(i=0; i<n; i++) 

        sum += a[i];

return sum/n;

}

 (d) 분포표 출력

#include <stdio.h>

int main()

{

int i, people[10] = {0};

float grade[3] = {10.0, 20.0, 30.0};


for(i=0; i<3; i++) {

if (grade[i]>=91 && grade[i]<=100) people[9]++;

else if(grade[i]>=81) people[8]++;

else if(grade[i]>=71) people[7]++;

else if(grade[i]>=61) people[6]++;

else if(grade[i]>=51) people[5]++;

else if(grade[i]>=41) people[4]++;

else if(grade[i]>=31) people[3]++;

else if(grade[i]>=21) people[2]++;

else if(grade[i]>=11) people[1]++;

else if(grade[i]>=0) people[0]++; }

printf("점수대 인원수\n");

for(i=0; i<10; i++)

   printf("%d-%d   %d\n", i*10+1, i*10+10, people[i]); 

return 0;

}



8. 잘못된 부분 수정

(a)

int main(void)

{

int grade[10][60];

compute_avg(grade);

}

int compute_avg(int array[][]){...}

 

 int main(void)

{

int grade[10][60];

compute_avg(grade);

}

int compute_avg(int array[][60]){...}


cf. 다차원 배열의 경우 1차원 배열과 비슷하나 다만 첫 번째 인덱스를 제외한 나머지 인덱스의 범위를 적어주어야한다

 (b)

float test[10];

scanf("%f", test[0]);

 float test[10];

scanf("%f", &test[0]);

 (c)

int main(void)

{

int x, y;

int test[10][5];

for(x=0; x<5; x++)

for(y=0; y<10; y++)

test[x][y]=0;

return 0;

}

 int main(void)

{

int x, y;

int test[5][10];

for(x=0; x<5; x++)

for(y=0; y<10; y++)

test[x][y]=0;

return 0;

}



블로그 이미지

얼음꿀차

책을 한 번 읽긴 읽어야겠는데 막상 읽자니 뭘 읽을지 고민되는 당신을 위해 읽을만한 책들을 알려드립니다!

,