본문 바로가기

공부기록/자료구조알고리즘

자료구조+알고리즘 2일차

오늘은 간단하게 별출력 사각형출력, 배열에 동적할당하는 것에 대해 공부하였다. 어제와 마찬가지로 굉장히 쉬웠음!!

다시 복습한다는 마인드로 정리하고 공부하는 중이다.

 

2일차 (23.07.28)


  1. 구구단표
  2. 별 출력
  3. 배열 생성 + 요소 입력 받기
  4. 요소 갯수 출력(sizeof)
  5. 동적할당 malloc, calloc
  6. 4 요소 갯수 출력을 동적할당 받아서해보기
  7. 사각형 출력

1.구구단표

 

#include <stdio.h>

int main(void) {
  for (int i = 1; i <= 9; i++) { 
    for (int j = 1; j <= 9; j++) {
      printf("%3d",i*j);
    }
    printf("\n");
  }
}

 

 

printf("%3d",i*j) 이런식으로 하면 저렇게 %d의 출력 넓이를 3으로 지정하고 남는 공간을 공백으로 채울 수 있음.(형식지정자)

형식지정자에 대해 더 찾아보니 %3d , %03d, %+d, %.2f, %010.3f 등등 다양하게 적용할 수 있음. 이건 나중에 표현하고 싶을 때 찾아서 다시 해보자 ( 예를들면 %010.3f 이거 같은 경우는 출력 넓이 10, 소수 3째짜리까지 표시, 남는 공간을 0으로 채움) 이런식이다.

 

 

 

2. 별 출력

#include <stdio.h>
// 별 몇단 출력? 입력받아서
int main(void){
  int n;
  scanf("%d",&n);
  for (int i=1; i<=n; i++){
    for (int j =1; j<=i; j++){
      printf("*");}
    printf("\n");
  }
}

간단하니 패스

3. 배열 생성 + 요소 입력 받기

#include <stdio.h>

int main(void){
int a[5];


for(int i =0 ; i< 5; i++){ 
  printf("a[%d] : ",i);
  scanf("%d", &a[i]);
  }
for(int j =0 ; j< 5; j++){ 
  printf("a[%d] = %d ", j, a[j]);
  }


}

 

이것도 간단하니까 패스 ( 그냥 a[5] 배열 생성하고, 안에 있는 요소 값 입력받아서 출력함)

 

4. 요소 갯수 출력(sizeof)

#include <stdio.h>
// 사이즈 출력(sizeof())
int main(void){
int a[5]={1,2,3,4,5};
int na = sizeof(a) / sizeof(a[0]); //배열 a의 전체 사이즈 (메모리 크기) / 배열 하나의 메모리 크기
printf("요소의 갯수는 %d입니다. ",na);

}

sizeof() 함수를 이용해서 배열의 요소가 몇 개인지를 출력함

배열 a의 할당된 메모리 크기 / 첫번째 요소가 할당된 메모리 크기 로 나누어서 구하면 되는데

배열 a의 자료형은 int[5]
배열 a의 요소의 자료형은 int

 

옛날에 시스템프로그램 수업에서 배웠던 거 생각남

ex ) int *place[COUNT] 뜻이 대충 '이 place 는 array이고 int *를 갖음 즉 8byte' 

시프 수업에서  sizeof() 에 대해서 슬쩍 언급하고 넘어갔던 거 기억남    내가 절대 다시 복습은 안할 것 같지만 그래도 공부할 수도 있으니까(SP_07) 근데 글씨 진짜 날려썼다ㅋㅋㅋㅋㅋㅎㅋㅋㅎㅎㅋ

 

5. 동적할당 (malloc, calloc)

 

 

#include <stdio.h>
#include <stdlib.h>
int main(void){
  int *x = calloc(1, sizeof(int)); //int형 변수를 calloc 함수로 생성
  if (x==NULL){
    printf("메모리할당에 실패했습니다.");
  }else{
    *x = 57;
    printf("%d",*x);
    free(x); //메모리해제
  }


  return 0;
  
}

 

 


자료 구조 : 데이터 단위와 데이터 자체 사이의 물리적 또는 논리적인 관계

메모리 할당하는데 calloc, malloc 함수 등을 이용해 동적으로 메모리를 할당할 수 있음. 동적으로 할당하겠다는 말은 내가 실행하는 시간 동안만 메모리를 할당받아서 사용하겠다는 걸 말함 ( 반대되는 말은 정적할당 )

동적으로 메모리를 할당하는 게 조금 더 경제적이고, calloc, malloc 함수의 차이는 인수가 하나이냐 두개이냐의 차이(다른 차이들도 많겠지? 이쪽 부분에 대해서는 자세히 공부 아직 안해서 잘 모름)

동적 메모리 할당에 calloc, malloc 이 있는데

 

  • calloc

기본형식

void *calloc(size_t nmemb, size_t size);

size_t nmemb개 만큼 들어갈 메모리를 할당한다

메모리 할당에 성공하면 할당한영역 첫번째 포인터 반환

실패하면 NULL

  • malloc

기본형식

void *malloc(size_t size);

메모리 할당에 성공하면 할당한 영역 첫번째 포인터 반환

실패하면 NULL

 

 

사실 동적 할당 부분을 거의 4년전에 찔끔 배우고 넘어갔어서 기억이 아예 안나고 그냥 실행시키는 방법만 외웠던 것 같다. 이 부분은 이번주나 이번 방학 내에 c언어 다시 공부하면서 되집고 넘어가야겠다

 


6. 요소 갯수 출력을 동적할당 받아서해보기

 

#include <stdio.h>
#include <stdlib.h>
int main(void){
  int na; // 배열요소갯수
  printf("요소 갯수를 입력하세요 : ");
  scanf("%d", &na);
  
  int *x = calloc(1, sizeof(int)); //int형 변수를 calloc 함수로 생성
  if (x==NULL){
    printf("메모리할당에 실패했습니다.");
  }else{
    printf("%d개의 정수를 입력하세요 (요소 갯수)\n",na);
    for(int i=0; i<na; i++){
      printf("x[%d] : ", i);
      scanf("%d", &x[i]);
    }
    printf("------------------------\n");
    for(int i=0; i<na; i++){
      printf("x[%d] = %d\n", i,x[i]);
    }
    
    free(x); //메모리해제
  }


  return 0;
  
}

아까 4번째로 했던 거 똑같이 하는건데 동적할당 받아서 해보기

 

7. 사각형 출력

#include <stdio.h>
int main(void){
  int l,m;
  do{
  printf("가로와 세로 입력 : ");
  scanf("%d %d", &l, &m);

  }while(l<=0 && m <=0);
  
  
  for(int i = 1; i<=m; i++){
    for (int j = 1; j<=l;j++){
      printf("*");
    }
    printf("\n");
  }
  
}

간단하니까 패스

 

양수 음수 0판단하는 것도 했는데 이건 너무 쉬우니까 그냥 패스

 

 

-2일차 끝-

 

'공부기록 > 자료구조알고리즘' 카테고리의 다른 글

자료구조+알고리즘 4일차  (0) 2023.08.01
자료구조+알고리즘 1일차  (0) 2023.07.27