Taek

8. Exercises 본문

C언어/문제 정리

8. Exercises

Taeky 2018. 8. 14. 15:58

1. t를 type으로 바꿔주면 안좋은 기법은 맞다. 만약 a의 type을 int에서 double로 바꾼다면 다시 한 번 손이 가야하므로 유지보수하는데 어려움을 겪는다.


2. char형은 c 컴파일러에서 int형 정수로 취급받는다. 그리고 ASCII 코드 기준으로 0부터 9까지는 48부터 57까지이다. 따라서 char형 c를 '9'로 만들면 0에서 56까지 인덱스를 가지는 배열이 만들어진다. 

#include <stdio.h>

int main(void)
{
char c = '9';
int arr[c];

for(int i = 0; i < '9'; ++i){
arr[i] = 0;
}
arr[c-'4'] = 4;
printf("c - '4' : %d\n",arr[c-'4']);
printf("c - '1' : %d\n", arr[c-'1']);
return 0;
}

이 코드에서 index를 숫자로 일부 바꿔도 결과는 같다.


#include <stdio.h>

int main(void)
{
char c = '9';
int arr[c];

for(int i = 0; i < '9'; ++i){
arr[i] = 0;
}
arr[c - '4'] = 4;
printf("c - '4' : %d\n",arr[c-'4']);
printf("c - '1' : %d\n", arr[56]);
return 0;
}



3. bool weekend[7] = {true, 0, 0, 0, 0, 0, true};


4. bool weekend[7] = {[0] = true, [6] = true};


5. 

#include <stdio.h>

#define SIZE(fib) (sizeof(fib)/sizeof(fib[0]))

int main(void)
{
int fib_numbers[40] = {0, 1};
for(int i = 2; i < SIZE(fib_numbers); ++i){
fib_numbers[i] = fib_numbers[i-2] + fib_numbers[i-1];
}

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

return 0;
}


6. 7-세그먼트 표시.

#include <stdio.h>

int main(void)
{
const int segments[10][7] = { {1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 1, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 1, 1, 0, 0, 1}, // 3
{0, 1, 1, 0, 0, 1, 1}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 1, 0, 1, 1} //9
};

return 0;
}


7. 초기화를 이용해 줄일 수 있음.

#include <stdio.h>

int main(void)
{
const int segments[10][7] = { {1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 1}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 1, 1, 0, 0, 1}, // 3
{0, 1, 1, 0, 0, 1, 1}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 1}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 1, 0, 1, 1} //9
};

return 0;
}


8. 30일을 시간당 온도를 저장하기 위한 2차원 배열을 만들면 됨.

#include <stdio.h>

int main(void)
{
int temperature_readings[30][24];

return 0;
}


9. 1달간 평균 기온

#include <stdio.h>

int main(void)
{
int temperature_readings[30][24];
float average_temperature = 0.0f;
for(int day = 0; day < 30; ++day){
for(int hour = 0; hour < 24; ++hour){
average_temperature += temperature_readings[day][hour];
}
}

average_temperature /= (24 * 30);


printf("average temperature of a month : %7.2f", average_temperature);

return 0;
}


10. C99, C89가 다르게 쓰일 수 있다.

#include <stdio.h>
// C99
int main(void)
{
char chess_board[8][8] = { {'r', 'n', 'b', 'q', 'k', 'b', 'n', 'r'},
{'p', 'p', 'p', 'p', 'p', 'p', 'p', 'p'},
{[1] = '.', [3] = '.', [5] = '.',[7] = '.'},
{[0] = '.', [2] = '.', [4] = '.',[6] = '.'},
{[1] = '.', [3] = '.', [5] = '.',[7] = '.'},
{[0] = '.', [2] = '.', [4] = '.',[6] = '.'},
{'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P'},
{'R', 'N', 'B', 'Q', 'K', 'B', 'N', 'R'}
};
return 0;
}


#include <stdio.h>

/* C89 */

int main(void)
{
char chess_board[8][8] = { {'r', 'n', 'b', 'q', 'k', 'b', 'n', 'r'},
{'p', 'p', 'p', 'p', 'p', 'p', 'p', 'p'},
{' ', '.', ' ','.', ' ', '.',' ', '.'},
{'.', ' ', '.', ' ','.', ' ', '.'},
{' ', '.', ' ','.', ' ', '.',' ', '.'},
{'.', ' ', '.', ' ','.', ' ', '.'},
{'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P'},
{'R', 'N', 'B', 'Q', 'K', 'B', 'N', 'R'}
};
return 0;
}


11. B, R을 번갈아서 체스보드처럼 만들기.

#include <stdio.h>

int main(void)
{
char checker_board[8][8] = {0};

for(int i = 0; i < 8; ++i){
for(int j = 0; j < 8; ++j){
if(i % 2 == 0){
if(j % 2 == 0) checker_board[i][j] = 'B';
else checker_board[i][j] = 'R';
}
else{
if(j % 2 == 0) checker_board[i][j] = 'R';
else checker_board[i][j] = 'B';
}
}
}

for(int i = 0; i < 8; ++i){
for(int j = 0; j < 8; ++j)
printf("%c ", checker_board[i][j]);
printf("\n");
}
return 0;
}


'C언어 > 문제 정리' 카테고리의 다른 글

7. Programming Projects  (0) 2018.08.10
7. Exercises  (0) 2018.08.09
6. Programming Projects  (0) 2018.08.05
6. Exercises  (0) 2018.08.05
5. Programming Projects  (0) 2018.08.04