자료구조 000 | 기본 자료구조

Yunny.Log ·2021년 7월 22일
0
post-thumbnail

기본 자료구조

1. 배열

난수 만들기

  • rand, srand, time 함수의 선언이 든 헤더를 포함
  • 이때 srand(time(NULL))을 써서 SRAND에게 임의의 난수를 부여해

역순 출력

# include <stdio.h>
# include <stdlib.h>

#define swap(type, x, y) do{ type t=x; x=y ; y=t; } while(0)

void ary_reverse(int a[], int n)
{
	int i;
	for (i=0;i<n/2;i++){
		swap(int, a[i], a[n-i-1]);
	}
}

int main(void){
	int i;
	int *x;
	int nx;
	
	printf("요소 개수 : ");
	scanf("%d", &nx);
	x=calloc(nx,sizeof(int));
	printf("%d 개의 정수를 입력하세요\n", nx);
	for (i=0;i<nx;i++){
		printf("x[%d] : ", i);
		scanf("%d", &x[i]);
	}
	ary_reverse(x, nx);
	printf("배열의 요소를 역순으로 정렬\n");
	
	for (i=0;i<nx;i++){
		printf("x[%d] : %d", i, x[i]);
	}
	free(x);
	
	return 0;
}

기수 변환

  • 10진수 정수를 n진수로 변환하려면 정수를 n으로 나눈 나머지를 구하는 동시에 그 몫에 대해 나눗셈 반복해야 함
  • 몫이 0이 될 때까지 반복
  • 이런 과정으로 구한 나머지를 거꾸로 늘어놓은 숫자가 기수로 변환한 숫자
# include <stdio.h>
# include <stdlib.h>

int card_convr(unsigned x, int n, char d[]) //정수 값 x를 n 진수로 변환해 배열 d에 아랫자리부터 저장 
{
	char dchar[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	int digits=0;
	
	if (x==0){
		d[digits++]=dchar[0];
	} else {
		while(x){
			d[digits++]=dchar[x%n]; //이렇게 담아주면 처음 나머지부터 순차적으로 담김=>나중에 프린트 해줄때 거꾸로 
			x/=n; 
		}
	}
	return digits; //반환해주는 건 기수 바뀐 후의 자릿수 
}

int main(void){
	int i;       
	unsigned no; //변환하는 정수 
	int cd;      // 기수 
	int dno;     // 변환 후 자릿수 
	char cno[512];
	int retry;
	puts("10진수를 기수 변환합니다");
	do{
		printf("변환할 음이 아닌 정수 : ");
		scanf("%u", &no);
		do{
			printf("어떤 진수로 변환할까요?(2-36) : ");
			scanf("%d", &cd); 
		} while(cd<2||cd>36); //무조건 한번 물어보고 만약 입력받았는데 아니라면 한번 더 돌아라~ 
		dno=card_convr(no,cd,cno);
		printf("%d진수로는", cd);
		for (i=dno-1;i>=0;i--)
			printf("%c", cno[i]);
		printf("입니다\n");
		printf("한 번 더 할까요?(1--예/0--아니오) :");
		scanf("%d", &retry);
	}while(retry==1);
	
	return 0;
} 

소수의 나열

-100의 약수 10x10 전까지 2*50 등이 있는데 따라서 반반이 되는 아이 전까지만 체크해봐도 the same

바깥 ㅣ for (n=5;n<1000;n+=2)
안쪽 | for(i=1;prime[i]*prime[i]<=n;i++)
		if (n%prime[i]==0) 일케 체크

한 해의 지난 날 수를 계산하는 프로그램

# include <stdio.h>

int mdays[][12]={
	{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
	{31,29,31,30,31,30,31,31,30,31,30,31} //윤년의 경우  : 4의 배수가운데 100의 배수 제외하고
	//제외한 100의 배수 가운데 400의 배수를 다시 포함 
};

int isleap(int year) //윤년 판단 
{ return year%4==0&& year % 100 !=0 || year %400==0;
 } 
 
 int dayofyear(int y, int m, int d){ //그동안 지난 일수 구하기 
 	int i;
 	int days =d;
 	for(i=1;i<m;i++);
 		days+=mdays[isleap(y)][i-1]; //1월이 index 0이므로
	return days; 
 }
 
 int main(void){
 	int year, month, day;
 	int retry;
 	do{
 		printf("년 : "); scanf("%d", &year);
 		printf("월 : "); scanf("%d", &month);
 		printf("일 : "); scanf("%d", &day);
 		printf("%d년의 %d일째입니다n", year, dayofyear(year, month, day));
 		printf("다시 할까요?(1-예, 0- 아니오)");
 		scanf("%d", &retry);
	 } while(retry==1);
	 
	 return 0;
 }
 

0개의 댓글

관련 채용 정보