카테고리 없음

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

홍콩판다 2019. 5. 9. 13:55

Q7 기수 변환 과정을 자세히 출력하기

58로 나눈 나머지가 이상하게 출력됐다.

2진수도 거꾸로 출력됨

 

===> %10d를 10%d로 잘못 적었다.

===> 이전에 역순 배열 출력 코드를 수정하지 않아서..

 

 

 

 

 

 

 

 

 

 

제대로 출력되었다.

 

while (x) 
{ 
d[digits++] = dchar[x%n]; //n으로 나눈 나머지를 저장  
printf("%d|%10d ···%d\n", n, x, x%n); 
x /= n; //n으로 나누기   
printf(" + ---------\n"); 
} 
printf("  %10d\n", 0);

 

 

 

#include <stdio.h>

/*
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으로 나눈 나머지를 저장 
			printf("%d|%10d ···%d\n", n, x, x%n);
			x /= n; //n으로 나누기  
			printf(" + ---------\n");
			
		}
		printf("  %10d\n", 0);
	}

	return digits;//자릿수를 반환(배열에 저장된 길이)
}

int main()
{
	int i;
	unsigned no;
	int cd;
	int dno;
	char cno[512];
	int retry;
	puts("10진수를 기수 변환합니다.");
	do {
		printf("변환할 음이 아닌 정수 : ");
		scanf_s("%u", &no);
		do {
			printf("어떤 진수로 변환할까요?(2-36)");
			scanf_s("%d", &cd);
		} while (cd < 2 || cd>36);
		dno = card_convr(no, cd, cno);//자릿수


		printf("%d진수로 변환하면 ", cd);

		//0부터 나열하도록 변경
		for (i = dno-1; i >=0; i--)
		{
			printf("%c", cno[i]);
		}
		printf("입니다.\n");
		printf("한 번 더 할까요?(1---예/0---아니오) : ");
		scanf_s("%d", &retry);
	} while (retry == 1);

	return 0;
}

 

Q8 배열 b의 모든 요소를 배열a로 복사하는 함수 (배열 길이 n)

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

void ary_copy(int a[], const int b[], int n);
//n을 받아서 a와 b를 동적으로 할당
int main() 
{
	int n,i;
	int *a, *b;
	printf("배열의 길이 입력 : ");
	scanf_s("%d", &n);
	a = calloc(n, sizeof(int));
	b = calloc(n, sizeof(int));

	printf("배열 b 입력 : ");
	for (i = 0; i < n; i++)
	{
		scanf_s("%d", &b[i]);
	}

	ary_copy(a, b, n);

	printf("배열 a 출력\n");
	for (i = 0; i < n; i++)
	{
		printf("%d\t", a[i]);
	}
    
    free(a);
    free(b);
}

void ary_copy(int a[], const int b[], int n)
{
	int i;
	for (i = 0; i < n; i++)
	{
		a[i] = b[i];
	}
}

 

 

 

 

 

 

Q9 배열b의 모든 요소를 배열 a에 역순으로 복사하는 함수

ary_copy함수에서 b의 n-i-1번째 요소를 대입받도록 수정했다.

 

void ary_rcopy(int a[], const int b[], int n)
{
	int i;
	for (i = 0; i < n; i++)
	{
		a[i] = b[n-i-1];
	}
}

 

 

 

 

 

 

Q10 배열 a의 모든 요소의 순서를 뒤섞는 함수

i번째 요소에 대하여 난수r을 발생시켜 r번째 요소와 교환한다.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define swap(type, x, y) do {type t = x; x = y; y = t;} while (0)

void shuffle(int a[], int n);

int main() 
{
	int n,i;
	int *a;
	printf("배열의 길이 입력 : ");
	scanf_s("%d", &n);
	a = calloc(n, sizeof(int));

	printf("배열 a 입력 : ");
	for (i = 0; i < n; i++)
	{
		scanf_s("%d", &a[i]);
	}
	printf("배열 a 출력\n");
	for (i = 0; i < n; i++)
	{
		printf("%d\t", a[i]);
	}
	
	shuffle(a, n);
	puts("셔플 완료");

	printf("배열 a 출력\n");
	for (i = 0; i < n; i++)
	{
		printf("%d\t", a[i]);
	}
	printf("\n");
}



void shuffle(int a[], int n)
{
	int i,r;
	srand(time(NULL));

	for (i = 0; i < n;i++)
	{
		r = rand() % n;//0~n-1난수 생성
		swap(int, a[i], a[r]);
	}
}