본 포스팅은 대학교 과제였습니다.
문제 1번
크기가 5인 배열 하나를 만든다. scanf로 정수 입력 4개를 받아 배열에 순서대로 저장한다. 배열의 마지막 원소에는 입력된 4개 값의 합을 저장한다. 이후 배열값 5개를 순서대로 출력하시오.
입력: 2 5 4 7 2 5 4 7 18 |
void Problem1()
{
printf("-------문제1--------\n");
int arr[5];
printf("입력: ");
scanf("%d %d %d %d", &arr[0], &arr[1], &arr[2], &arr[3]);
arr[4] = arr[0] + arr[1] + arr[2] + arr[3];
for(int i = 0; i < 5; i++){
printf("%d ", arr[i]);
}
printf("\n");
}
문제 2번
배열 int data[]에 다음의 값을 초기화 문법으로 저장하시오.
3, 21, 35, 57, 24, 82, 8
이후 각 배열 원소의 값을 10을 증가 시키시오. 그리고, 각 배열 원소를 순서대로 출력하시오.
13 31 45 67 34 92 18 |
void Problem2()
{
printf("-------문제2--------\n");
int data [] = {3, 21, 35, 57, 24, 82, 8};
for(int i = 0; i < 7; i++){
data[i] += 10;
printf("%d ", data[i]);
}
printf("\n");
}
문제 3번
크기가 3인 int 배열 a와 크기가 5인 int 배열 b를 생성하라. scanf로 배열 a와 b에 값을 저장하라.
크기가 9인 int 배열 c를 생성하라. c에는 배열 a와 b의 값들이 순서대로 연결되어 저장되도록 하시오. 이후, c의 배열 원소를 순서대로 출력하시오.
입력a: 3 9 2 입력b: 4 10 6 2 1 출력: 3 9 2 4 10 6 2 1 |
void Problem3()
{
printf("-------문제3--------\n");
int a[3];
int b[5];
printf("입력a: ");
scanf("%d %d %d", &a[0], &a[1], &a[2]);
printf("입력b: ");
scanf("%d %d %d %d %d", &b[0], &b[1], &b[2], &b[3], &b[4]);
for(int i = 0; i < 8; i++){
if(i < 3){
printf("%d ",a[i]);
} else{
printf("%d ",b[i-3]);
}
}
printf("\n");
}
문제 4번
주사위를 100번 굴려서 가장 많이 나온 숫자와 그 빈도를 출력하는 프로그램을 작성하라. 난수 rand() 함수를 사용하여 주사위 굴리기를 흉내낸다.
주사위 4 19회 발생 |
void Problem4()
{
printf("-------문제4--------\n");
srand((unsigned int)time(NULL));
int diceCounts[6] = {0};
for (int i = 0; i < 100; ++i) {
int roll = rand() % 6 + 1;
diceCounts[roll - 1]++;
}
int maxCount = 0;
int maxNumber = 0;
for (int i = 0; i < 6; ++i) {
if (diceCounts[i] > maxCount) {
maxCount = diceCounts[i];
maxNumber = i + 1;
}
}
printf("주사위 %d\n%d회 발생\n", maxNumber, maxCount);
}
문제 5번
1~10 범위의 숫자 8개를 scanf로 입력받는다. 그 중 어떤 숫자가 존재하는지 중복 없이 출력하시오.
입력: 5 4 5 5 2 4 9 10 입력된 숫자 목록: 2 4 5 9 10 |
void Problem5()
{
printf("-------문제5--------\n");
int inputNumbers[8];
int uniqueNumbers[10] = {0}; // 1~10까지의 숫자를 표시하는 배열
printf("입력: ");
for (int i = 0; i < 8; ++i) {
scanf("%d", &inputNumbers[i]);
uniqueNumbers[inputNumbers[i] - 1]++;
}
printf("입력된 숫자 목록: ");
for (int i = 0; i < 10; ++i) {
if(uniqueNumbers[i] >= 1) {
printf("%d ", i + 1);
}
}
printf("\n");
}
문제 6번
20보다 작은 정수 하나를 scanf로 받아서 다음과 같은 삼각형 패턴을 출력하라.
크기: 4 ******* ***** *** * |
void Problem6()
{
printf("-------문제6--------\n");
int size;
printf("크기: ");
scanf("%d", &size);
for (int i = size; i >= 1; --i) {
for (int j = 0; j < size - i; ++j) {
printf(" ");
}
for (int k = 0; k < 2 * i - 1; ++k) {
printf("*");
}
printf("\n");
}
}
문제 7번
삼각함수의 값 cos x을 계산하는 기능을 직접 작성해본다.
공식은 다음과 같이 알려져 있다.
cos x = 1 – x2/2! + x4/4! – x6/6! + x8/8! .... 무한히 계속
double x = 3.1415926535; 로 하여 반복문을 사용하여 위 공식에 대입하여 근사값을 구한다. 무한히 계산할 수는 없으므로, 적당한 횟수(10만회)만 반복한다. 정답은 -1이지만, 근사값이 출력된다.
정답: -1.00000012 // 사람에 따라 오차 발생 가능 |
double factorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
void Problem7()
{
printf("-------문제7--------\n");
double x = 3.1415926535;
double result = 1.0;
// 반복 횟수
int iterations = 100;
for (int i = 2; i <= iterations * 2; i += 2) {
double term = pow(x, i) / factorial(i);
if (i % 4 == 0) {
result += term;
} else {
result -= term;
}
}
printf("정답: %.8f\n", result);
}
문제 8번
이인용 틱택토(tick-tac-toe) 게임 프로그램을 작성하라. 틱택토는 3x3 크기의 말판에서 수행하는 3목 게임이다.
조건: 승부가 나면, 누가 이겼는지 표시하고 종료하시오. 난이도를 쉽게 하기 위해서, 잘못된 좌표는 입력되지 않는다고 가정함. (판의 범위를 벗어나거나, 겹쳐서 놓으려는 시도를 하지 않음)
#define BOARD_SIZE 3
void initializeBoard(char board[BOARD_SIZE][BOARD_SIZE]) {
for (int i = 0; i < BOARD_SIZE; ++i) {
for (int j = 0; j < BOARD_SIZE; ++j) {
board[i][j] = ' ';
}
}
}
void printBoard(char board[BOARD_SIZE][BOARD_SIZE]) {
for (int i = 0; i < BOARD_SIZE; ++i) {
for (int j = 0; j < BOARD_SIZE; ++j) {
printf("%c\t", board[i][j]);
}
printf("\n");
}
}
int checkWin(char board[BOARD_SIZE][BOARD_SIZE], char player) {
for (int i = 0; i < BOARD_SIZE; ++i) {
if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
return 1;
}
if (board[0][i] == player && board[1][i] == player && board[2][i] == player) {
return 1;
}
}
if (board[0][0] == player && board[1][1] == player && board[2][2] == player) {
return 1;
}
if (board[0][2] == player && board[1][1] == player && board[2][0] == player) {
return 1;
}
return 0;
}
void playGame() {
char board[BOARD_SIZE][BOARD_SIZE];
char currentPlayer = 'O';
int row, col;
initializeBoard(board);
for (int move = 0; move < BOARD_SIZE * BOARD_SIZE; ++move) {
printf("%c의 입력 행, 열 좌표 (1~%d 범위): ", currentPlayer, BOARD_SIZE);
scanf("%d %d", &row, &col);
board[row - 1][col - 1] = currentPlayer;
if (checkWin(board, currentPlayer)) {
printBoard(board);
printf("%c가 이겼습니다!\n", currentPlayer);
return;
} else{
printBoard(board);
}
currentPlayer = (currentPlayer == 'X') ? 'O' : 'X';
}
printBoard(board);
}
void Problem8()
{
printf("-------문제8--------\n");
playGame();
}
'Programming Language > C & C++' 카테고리의 다른 글
[C] C언어의 수식과 연산자 (0) | 2023.11.21 |
---|---|
[C] C언어 변수와 자료형 그리고 오버플로우 (0) | 2023.10.27 |
[C] C언어 실습 - 1 (0) | 2023.10.26 |
[C] 프로그램 작성 과정 (0) | 2023.10.26 |
[C] C언어 프로그래밍 기초 요소 : 주석, 변수, 상수, 간단한 연산 (0) | 2023.09.09 |