본문 바로가기
C 프로그래밍 C programming/과제

220702 과제

by 윤시여 2022. 6. 28.

이번이 마지막 과제일지 다음이 마지막 과제일지는 모르겠지만, 곧 마지막이고 시간도 (한가롭지 않지만 한가한고로) 미리미리 과제를 해보고자 한다. 

 

6월 28일

2번

크기가 10인 1차원 배열에 난수를 저장한 후에, 최대값과 최소값을 출력하는 프로그램을 작성하라. 난수는  rand()함수를 호출하여 생성하라. 

 

1트

개인적으로 어려워하는 오류인데...
무한히 반복되게 되어서 생기는 에러이다. 
막막해서 책을 찾다 보니까 본의 아니게 답을 찾아버렸다. 

 

2트

사실상 2트를 가능하게 해준 건 책 434쪽의 예제이다. 
이건 정말 획기적인 발상이다! 

먼저 최대값 및 최소값을 배열의 첫번째 요소로 가정해준다. 
그리고 나서 반복문을 사용해 배열의 각 요소와 비교를 하고, 만약 그 요소가 설정된 최대값보다 크다면 최대값을 그 요소로 교체해주고, 그 요소가 설정된 최소값보다 작다면 최소값을 그 요소로 교체해주는 방식이다.

웅성웅성 진짜 천잰가봐
나 말고 책이

그리고 기호 상수를 이용해서 코드하니까 정말 훨씬 편하다. 
더보기

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

#define SIZE 10

int main(void)
{
int random[SIZE];
int max, min;
srand((int)time(NULL));

for (int i = 0; i < SIZE; i++)
random[i] = rand();

max = random[0];
min = random[0];

for (int i = 0; i < SIZE; i++)
{
if (random[i] > max)
max = random[i];
}

for (int i = 0; i< SIZE; i++)
{
if (random[i] < min)
min = random[i];
}

for (int i = 0; i < SIZE; i++)
printf("random[%d]=%d\n", i, random[i]);

printf("최대값: %d\n", max);
printf("최소값: %d", min);

return 0;
}

 

5번

0부터 9까지의 난수를 100번 생성하여 가장 많이 생성된 수를 출력하는 프로그램을 작성하라. 난수는 rnad()함수를 사용하여 생성하라. 





세 번 돌려서 확인했으니 됐다. 
사실 0부터 9까지의 빈도를 세는 것을 하나하나 해볼까 생각을 했지만 배열을 배웠으므로, 배열에다가 값을 넣었다. 

코드를 가만히 보면 수많은 if 문들때문에 이게 정령 배열의 장점을 이용한 것인지 의구스럽긴 하다... 

차차 생각해봐야겠다.

오늘 몫 끝!
더보기


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

#define SIZE 100

int main(void)
{
int max;
int random[SIZE];
int times[10] = { 0 };
srand((int)time(NULL));

for (int i = 0; i < SIZE; i++)
random[i] = rand() % 10;

for (int i = 0; i < SIZE; i++)
{
if (random[i] == 0)
times[0]++;

else if (random[i] == 1)
times[1]++;

else if (random[i] == 2)
times[2]++;

else if (random[i] == 3)
times[3]++;

else if (random[i] == 4)
times[4]++;

else if (random[i] == 5)
times[5]++;

else if (random[i] == 6)
times[6]++;

else if (random[i] == 7)
times[7]++;

else if (random[i] == 8)
times[8]++;

else
times[9]++;
}

max = times[0];

for (int i = 0; i < 10; i++)
{
if (times[i] >= max)
max = times[i];
}

for (int i = 0; i < 10; i++)
{
if (max == times[i])
printf("가장 많이 나온 수: %d\n", i);
}

for (int i = 0; i < 10; i++)
printf("times[%d]= %d\n", i, times[i]);

for (int i = 0; i < SIZE; i++)
printf("%d  ", random[i]);

return 0;
}

 

6월 30일

6번

다음과 같은 2차원 배열을 배열로 생성하고 각 행의 합계, 각 열의 합계를 구하여 출력하느 프로그램을 작성하라.

12 56 32 16 98
99 56 34 41 3
65 3 87 78 21

 



나는 행과 열이 많이 헷갈리는 사람일 뿐이다.
조금 모자르긴 하지만 직관적인 게 짱 아닌가? 
더보기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

#define SERO 3
#define GARO 5

int main(void)
{
int s[SERO][GARO] = {
{12,56,32,16,98},
{99,56,34,41,3},
{65,3,87,78,21}
};

int sum_sero[5] = { 0 };
int sum_garo[3] = { 0 };

for (int i = 0; i < SERO; i++)
{
for (int j = 0; j < GARO; j++)
sum_garo[i] += s[i][j];
}

for (int i = 0; i < GARO; i++)
{
for (int j = 0; j < SERO; j++)
sum_sero[i] += s[j][i];
}

for (int i = 0; i < SERO ; i++)
printf("%d행의 합계: %d\n", i, sum_garo[i]);

for (int i = 0; i < GARO; i++)
printf("%d열의 합계: %d\n", i, sum_sero[i]);

return 0;
}

 

12번 (b)

transpose(int a[][3], int b[][3])

 

1트


 자꾸 에러가 뜨고 있다. 뭐가 문제인지 잘 모르겠지만 왠지 transpose 함수 안의 프린트 문을 바깥으로 끄집어내면 될 거라는 촉이 온다. 제발.

.
.
.


Shit

2트

다시 생각해보기로 한다. 

우선 transpose에 있어서 대각선은 변하지 않는다. 이 라인의 숫자들은 행과 열의 번호가 같다. 그러므로 a[i][j] = b[j][i]라고 써주면 간단하게 바꿀 수 있다. 그래 아이디어는 참 심플하단 말이다! 뭐가 문젠데 뭐가 문젠데



간단하게, 우선 transpose 함수를 위로 빼주면서 일단락 됐다.
문제는 b가 그대로 0이 나온다는 점이다. 

 

3트



문제는 허무할정도로 간단하게 해결됐다.
수업 초반에 컴퓨터는 차례대로 읽는다고 알려준 게 기억이 났고, 그래서 a[i][j]=b[j][i]를 고쳐서 b[j][i] = a[i][j]라고 적어주었다. 이렇게 적으니 b 배열이 잘 변경 되어서 원하는 결과를 얻을 수 있었다.
더보기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

#define SIZE 3

void transpose(int a[SIZE][SIZE], int b[SIZE][SIZE])
{
for (int i = 0; i < SIZE; i++)
{
for (int j = 0; j < SIZE; j++)
 b[j][i]= a[i][j];
}
}

int main(void)
{
int a[][SIZE] =
{
{1,2,3},
{4,5,6},
{7,8,9}
};

int b[][SIZE] =
{
{0},
{0},
{0}
};

transpose(a, b);

for (int i = 0; i < SIZE; i++)
printf("%d  ", b[0][i]);
printf("\n");
for (int i = 0; i < SIZE; i++)
printf("%d  ", b[1][i]);
printf("\n");
for (int i = 0; i < SIZE; i++)
printf("%d  ", b[2][i]);

return 0;
}

 

7월 2일 종강날

ppt 연습문제 3

극장의 좌석이 총 50개이다. 번호는 1번부터 50번으로 정해져있다. 사용자가 입력한 숫자가 1~50 사이라면, 핻ㅇ 번호의 좌석이 예약 가능 여부를 출력하는 프로그램을 작성하시오. 



사용자가 선택한 숫자로 배열을 변경해주면, 한 번 선택된 좌석을 분류할 수 있다. 
더보기

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

#define SIZE 50


int main(void)
{
int s, r;
int seat[SIZE] = { 0 };

char a;

do
{
printf("예약하고 싶은 극장의 좌석 번호를 입력해주세요(1~50): ");
scanf("%d", &s);

r = s - 1;

if (seat[r] == 0)
{
seat[r] = s;
printf("예약되었습니다.\n");
}

else
printf("이미 선택된 좌석입니다!\n");

printf("계속 예약하시겠습니까?(y/n): ");
scanf(" %c", &a);

} while (a == 'y');



return 0;
}

'C 프로그래밍 C programming > 과제' 카테고리의 다른 글

0625 과제  (0) 2022.06.25
0604 과제는 어렵다  (0) 2022.06.04
5월 28일 함수 과제  (0) 2022.05.28
220521 코로나 함수 과제  (0) 2022.05.21
220430 과제도 코로나 무찌르기 게임  (0) 2022.04.29