Taek
8. Exercises 본문
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>
// C99int 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 |