카테고리 없음
02 기본 자료구조 -1. 배열 (3)
홍콩판다
2019. 5. 6. 14:01
연습문제 Q1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int minof(const int a[], int n)
{
int i;
int min = a[0];
for (i = 1; i < n; i++)
{
if (a[i] < min)
{
min = a[i];
}
}
return min;
}
int main()
{
int *height;
int n, i;
printf("n 입력 : ");
scanf("%d", &n);
height = calloc(n, sizeof(int));
srand((int)time(NULL));
for (i = 0; i < n; i++)
{
height[i] = 140 + (rand() % 50);
printf("%d ", height[i]);
if ((i+1) % 5 == 0)
printf("\n");
}
printf("\n 이 중 최솟값은 %d 입니다.", minof(height, n));
return 0;
}
/*
n 입력 : 10
145 171 148 156 155
183 180 164 171 154
이 중 최솟값은 145 입니다.
C:\Users\c\Study\Debug\ch02.exe(8164 프로세스)이(가) 0 코드로 인해 종료되었습니
다.
이 창을 닫으려면 아무 키나 누르세요.
*/
Q2 합계 구하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int sumof(const int a[], int n)
{
int i, sum = 0;
for (i = 0; i < n; i++)
{
sum += a[i];
}
return sum;
}
int main()
{
int *height;
int n, i;
printf("n 입력 : ");
scanf("%d", &n);
height = calloc(n, sizeof(int));
srand((int)time(NULL));
for (i = 0; i < n; i++)
{
height[i] = 140 + (rand() % 50);
printf("%d ", height[i]);
if ((i+1) % 5 == 0)
printf("\n");
}
printf("\n합계는 %d 입니다.", sumof(height, n));
return 0;
}
/*
n 입력 : 10
154 155 162 156 179
164 141 186 151 145
합계는 1593 입니다.
C:\Users\c\Study\Debug\ch02.exe(7364 프로세스)이(가) 0 코드로 인해 종료되었습니
다.
이 창을 닫으려면 아무 키나 누르세요.
*/
Q3 평균 구하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
double aveof(const int a[], int n)
{
int i, sum = 0;
for (i = 0; i < n; i++)
{
sum += a[i];
}
return (double)sum / n;
}
int main()
{
int *height;
int n, i;
printf("n 입력 : ");
scanf("%d", &n);
height = calloc(n, sizeof(int));
srand((int)time(NULL));
for (i = 0; i < n; i++)
{
height[i] = 140 + (rand() % 50);
printf("%d ", height[i]);
if ((i+1) % 5 == 0)
printf("\n");
}
printf("\n평균은 %lf 입니다.", aveof(height, n));
return 0;
}
/*
n 입력 : 10
143 177 182 175 148
154 159 173 189 173
평균은 167.300000 입니다.
C:\Users\c\Study\Debug\ch02.exe(2400 프로세스)이(가) 0 코드로 인해 종료되었습니
다.
이 창을 닫으려면 아무 키나 누르세요.
*/
Q4 사람 수도 난수(5~20)로 생성하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
double aveof(const int a[], int n)
{
int i, sum = 0;
for (i = 0; i < n; i++)
{
sum += a[i];
}
return (double)sum / n;
}
int main()
{
int *height;
int n, i;
//printf("n 입력 : ");
//scanf("%d", &n);
srand((int)time(NULL));
n = rand() % 15 + 5;
printf("%d개의 키를 출력합니다.\n", n);
height = calloc(n, sizeof(int));
for (i = 0; i < n; i++)
{
height[i] = 140 + (rand() % 50);
printf("%d ", height[i]);
if ((i+1) % 5 == 0)
printf("\n");
}
printf("\n평균은 %lf 입니다.", aveof(height, n));
return 0;
}
/*
16개의 키를 출력합니다.
188 154 142 179 168
157 174 189 176 172
189 177 174 166 142
176
평균은 170.187500 입니다.
C:\Users\c\Study\Debug\ch02.exe(3436 프로세스)이(가) 0 코드로 인해 종료되었습니
다.
이 창을 닫으려면 아무 키나 누르세요.
*/
Q5 배열을 역순으로 정렬하기
#define _CRT_SECURE_NO_WARNINGS
#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 ary_reverse(int a[], int n)
{
int i,j;
for (i = 0; i < n/2; i++)
{
printf("a[%d]=%d과 a[%d]=%d를 교환합니다.\n", i,a[i], n - i-1,a[n-i-1]);
for (j = 0; j < n; j++)
{
printf("%d ", a[j]);
}
printf("\n");
//swap(int, a[i], a[n - i]);
//i=0일때 a[n]은 존재하지 않아서 쓰레기값이 들어갔다
swap(int, a[i], a[n - i-1]);
}
}
int main()
{
int *height;
int n, i;
//printf("n 입력 : ");
//scanf("%d", &n);
srand((int)time(NULL));
n = rand() % 15 + 5;
printf("%d개의 키를 출력합니다.\n", n);
height = calloc(n, sizeof(int));
for (i = 0; i < n; i++)
{
height[i] = 140 + (rand() % 50);
printf("%d ", height[i]);
if ((i+1) % 5 == 0)
printf("\n");
}
printf("\n");
ary_reverse(height, n);
return 0;
}
/*
10개의 키를 출력합니다.
180 163 185 151 145
187 184 166 147 168
a[0]=180과 a[9]=168를 교환합니다.
180 163 185 151 145 187 184 166 147 168
a[1]=163과 a[8]=147를 교환합니다.
168 163 185 151 145 187 184 166 147 180
a[2]=185과 a[7]=166를 교환합니다.
168 147 185 151 145 187 184 166 163 180
a[3]=151과 a[6]=184를 교환합니다.
168 147 166 151 145 187 184 185 163 180
a[4]=145과 a[5]=187를 교환합니다.
168 147 166 184 145 187 151 185 163 180
C:\Users\c\Study\Debug\ch02.exe(7332 프로세스)이(가) 0 코드로 인해 종료되었습니
다.
이 창을 닫으려면 아무 키나 누르세요.
7개의 키를 출력합니다.
189 169 140 155 140
157 179
a[0]=189과 a[6]=179를 교환합니다.
189 169 140 155 140 157 179
a[1]=169과 a[5]=157를 교환합니다.
179 169 140 155 140 157 189
a[2]=140과 a[4]=140를 교환합니다.
179 157 140 155 140 169 189
C:\Users\c\Study\Debug\ch02.exe(5488 프로세스)이(가) 0 코드로 인해 종료되었습니
다.
이 창을 닫으려면 아무 키나 누르세요.
*/
Q6 card_conv함수를 수정해서 배열을 윗자리부터 저장하는 함수
: 기존 방식으로 배열을 만든 뒤에 역순으로 재배열하는 방법..?
#include <stdio.h>
#define swap(type,a,b) do{type t=a;a=b;b=t;}while(0)
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으로 나누기
}
}
int i;
for (i = 0; i < digits / 2; i++)
{
swap(int, d[i], d[digits - i - 1]);
}
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 = 0; i < dno; i++)
{
printf("%c", cno[i]);
}
printf("입니다.\n");
printf("한 번 더 할까요?(1---예/0---아니오) : ");
scanf_s("%d", &retry);
} while (retry == 1);
return 0;
}