카테고리 없음
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]);
}
}