오늘은 간단하게 별출력 사각형출력, 배열에 동적할당하는 것에 대해 공부하였다. 어제와 마찬가지로 굉장히 쉬웠음!!
다시 복습한다는 마인드로 정리하고 공부하는 중이다.
2일차 (23.07.28)
- 구구단표
- 별 출력
- 배열 생성 + 요소 입력 받기
- 요소 갯수 출력(sizeof)
- 동적할당 malloc, calloc
- 4 요소 갯수 출력을 동적할당 받아서해보기
- 사각형 출력
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'
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 |