카테고리 없음

02 기본 자료구조 -1. 배열 (2)

홍콩판다 2019. 5. 2. 16:00

난수 사용해 배열의 요솟값 설정하기

<난수 생성 단계>

1. <stdlib.h> rand, srand 함수  <time.h> time함수

2. seed값을 변경할 srand함수 srand(seed값) 

//seed값에 따라 rand함수는 일정한 순서로 난수를 발생시킨다 -> seed값을 계속해서 변경할 방법?

3. srand(time(NULL)) , rand()로 난수 발생  //time함수는 현재 시간을 반환

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

int maxof(const int a[], int n)
{
	int i;
	int max=a[0];
	
	for(i=1;i<n;i++)
	{
		if(a[i]>max)
			max=a[i];
	}
	return max;
}

int main(void)
{
	int i;
	int *height;
	int number;
	printf("사람 수 : ");
	scanf("%d",&number);
	height=calloc(number,sizeof(int));
	srand(time(NULL));
	for(i=0;i<number;i++)
	{
		height[i]=100+rand()%90;
		//rand()%90 값의 범위는  0~89
		printf("height[%d] = %d\n",i,height[i]);
	}
	
	printf("최댓값은 %d 입니다.\n",maxof(height,number));
	free(height);
	
	return 0;
}
/*
사람 수 : 8
height[0] = 139
height[1] = 146
height[2] = 109
height[3] = 107
height[4] = 149
height[5] = 153
height[6] = 103
height[7] = 186
최댓값은 186 입니다.

--------------------------------
Process exited after 1.212 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

역순 정렬

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

함수 형식 매크로

: 변수의 두 값을 교환하는 과정을 함수 형식 매크로로 구현

#define swap(type,x,y) do{type t=x; x=y; y=t;} while(0)
//do while()로 구현하고 끝에 ;를 안 붙인 이유==?

void sort(int a[], int n)
{
	int i,j;
	for(i=0;i<n/2;i++)
	{
		swap(int,a[i],a[n-i-1]);
        //이와 같이 함수처럼 잘 치환되도록 하기 위해(문장 끝에 ;를 붙여야 하므로)
	}
}

n진수 변환

과정 : 그 수를 n으로 나누고 나머지를 구하고, 몫은 다시 n으로 나누는 것을 반복함 

int card_convr(unsigned x, int n, char d[])
{
	char dchar[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	int digits=0;//
	if(x==0)
	{
		d[digits++]=dchar[0];	
	}
	else
	{
		while(x)
		{
			d[digits++]=dchar[x%n]; //n으로 나눈 나머지를 저장 
			x/=n; //n으로 나누기  
		} 
	} 
	return digits;//자릿수를 반환(배열에 저장된 길이)
}

//dchar[0]~dchar[digits-1]에 저장됨
//dchar[digits-1]~dchar[0]순으로 나열하면 n진수