COM202 프로그래밍언어입문

Download Report

Transcript COM202 프로그래밍언어입문

COM202
프로그래밍 언어 입문
100 문제
•
•
•
•
•
•
•
•
•
•
•
1장
2장
3장
4장
5장
6장
7장
8장
9장
10장
11장
: 13
:5
: 13
: 13
:8
: 16
:X
:X
:3
:5
:X
문제를 잘보시면
문제에 또 문제가 있는 경우가
있습니다.
이런 세부적인 문제들까지 합하면
100문제가 된다고 하오니 참고
하시어 푸시기 바라오며 기타
자세한 사항은 4학년 선배님들께
문의바랍니다.
TOTAL : 76
2
숙제:
[ Chapter 1]
1. vi editor의 사용법을 숙지할 것
2. 앞의 예제 program을 vi editor를 사용하여 typing하고 저
장한 후 compile하여 실행시킬 것 (pages 6, 9, 10)
3
모든 입력은 user prompt에 의해 이루어지며 입력에 error가
있으면 error message를 출력하여야 함.
3. 문자를 입력하여 'a'이면 'yes'를 아니면 'no'를 출력
4. 정수를 입력하여 3의 배수이면 'yes'를 아니면 'no'를 출력
5. 두개의 정수를 입력하여 합과 평균값을 실수로 출력
6. 실수를 입력하여 %f, %e, %E format으로 출력
(각각 소수점 이하 3, 5, 10자리까지 출력)
7. 정수를 입력하여 실수로 출력
8. 실수를 입력하여 정수로 출력
9. 양의 정수 n을 입력하여 (i=1∑n i)를 구할것
10. 양의 정수 n을 입력하여 (i=1∏n i)를 구할것
4
11.정수를 입력하여 그 수가 expression의 return값이라 가정
하고 'true', 또는 'false'를 출력.
9-1 while문을 사용하여 사용자가 더 이상 원하지 않을 때
까지 계속할 것.
9-2 do-while문을 사용하여 사용자가 더 이상 원하지 않을
때까지 계속할 것.
12. 정수를 입력하여 그 수와 같거나 그 수보다 작은 4의 배수
값 중 최대값을 적당한 message와 함께 출력. (if-else문
사용)
13. 위의 12번 문제를 if-else문을 사용하지 않고 해결하라.
5
숙제 : 모든 문제에서 for문과 while문, do-while문을 사용할것
14. 정수 n을 입력하여 0-n 까지의 2의 거듭제곱표 만들기
출력형식
0
1
1
2
2
4
3
▪
▪
▪
8
▪
▪
▪
9
512
10
▪
▪
▪
1024
▪
▪
▪
6
15. 출력 형식을 제외하고 #1과 동일
출력형식
0
1
1
2
2
4
3
8
▪
▪
▪
▪
▪
▪
▪
▪
▪
▪
▪
▪
10
1024
11
2048
7
16. 정수 n을 입력하여 n개의 random numbers를 한 줄에 10
개씩 출력
17. 실행시킬 때 마다 다른 random number stream이 출력되는
program을 작성하되 한 줄에 7개씩 출력할 것.
18. 정수 r을 입력하여, 실행시킬 때 마다 다른 random number
stream에 대해 r이 몇 번째 random number 인가를 밝히고 그
수까지의 random number를 한 줄에 8개씩 출력할 것.
만일 백 만개의 random number stream 에도 r이 없으면 '없음'
을 출력할 것.
8
숙제
19. 'a' - 'z', 'A' - 'Z', '0' - '9'의 ASCII code표를 작성할 것.
(출력형식)
문자
a
d
:
y
A
:
Y
0
:
9
ASCII code
97
100
:
121
65
:
89
48
:
57
문자
b
e
:
z
B
:
Z
1
:
ASCII code
98
101
:
122
66
:
90
49
:
문자
c
f
:
ASCII code
99
102
:
C
:
67
:
2
:
50
:
9
20. 특수문자를 한자씩 printf문에서 실험하여 그 결과
(동작형태)를 서술하여 제출할 것.
21. end-user가 원하는 동안 계속하여 입력된 정수 값(0-255)
을 문자로 출력.
22. end-user가 원하는 동안 계속하여 입력된 문자를 정수 값
으로 출력.
10
숙제
23. short s = 32700;
s를 1씩 증가시키면서 100개의 수를 한 줄에 10개씩
출력할 것.
24. unsigned short s = 65500;
s를 1씩 증가시키면서 100개의 수를 한 줄에 10개씩
출력할 것.
11
숙제.
25. p126의 program을 실행시켜 test하고 EOF가 어떤 key의
입력인지 알아낼것.
(하나 이상일 수 있음.)
12
숙제
26. 학과 website의 '전공 관련 게시판'에서
'Gettysburg Address'를 찾아 자기의 directory에 옮기고
이를 input으로 하여 소문자는 대문자로 대문자는 소문자로
변환하는 program을 작성할 것.
13
숙제
27. end-user가 원하는 동안 계속하여, 입력된 x와 y에 대한 xy
를 구하는 program. ( pow( )를 사용 )
28. 문제25번을 pow( ) 함수를 사용하지 않고 작성. (int형으로
처리)
14
숙제
29. 두개의 정수를 입력하여(i1, i2) 합을 계산하고 계산식을
10진수, 8진수, 16진수로 표현하라.
(예) 입력 : 15 39
십진표현 : 15 + 39 = 54
8진표현 : 17 + 47 = 66
16진표현 : F + 27 = 36
30. 2진수(0 or 1)의 입력을 받아 10진수, 16진수, 8진수로
출력할 것.
(한번에 한 자리씩 입력할 것.)
31. (Bonus : + 5)
10진수를 입력하여 2진수로 출력할 것.
(hint : bitwise operator사용)
15
주의!
앞으로 제출하는 program의
identifier(변수명, 함수명, 상수명)는
의미가 쉽게 파악될 수 있게
작성되어야 함.
16
숙제
32. 3개의 정수 YYYY, MM, DD를 입력하여,
그것이 YYYY년 MM월 DD일이라 간주하고
그날의 요일을 알아내는 program을 작성하라.
단, ⅰ) data의 범위가 정당한지 check하여 만일 잘못 입력
되었으면 message 및 prompt를 출력한 후 재 입력
할 것. (예, 4004 9 47)
ⅱ) 서기 1년 1월 1일은 월요일이라 가정한다.
ⅲ) 윤년 / 평년 (leap / ordinary year)
if ( YYYY % 4 == 0 ) 윤년
if ( YYYY % 100 == 0) 평년
if ( YYYY % 400 == 0) 윤년
33. 3개의 정수를 입력하여 삼각형의 각 변의 길이라 간주하고,
17
어떤 삼각형인가를 알아내는 program을 작성하라.
숙제
34. -9999가 나올 때까지 계속 정수를 입력하여,
최대치(max), 최소치(min), 합(sum)과 평균(average)을
구하는 program을 작성하라.
단, -9999는 계산에서 제외할 것.
35. Gettysburg Address에 사용된 대문자, 소문자 및 그 외의
글자수를 count하는 program을 작성하라.
18
숙제
36. YYYY MM을 입력하여 그 달의 달력을 출력하는 program을
작성하라. (공휴일 표시 무시)
(예)
2003년 3월
일 월
화
수
목
금
토
1
8
2
3
4
5
6
7
......
23 24 25 26 27 28 29
30 31
19
숙제
37. 홀 • 짝 program.
컴퓨터와 end-user가 각기 100원씩 가지고 홀 • 짝 game을
하여 누군가가 돈을 다 잃으면 끝이남. 누군가가 이기거나
질때까지의 횟수와 승자를 표시하는 program을 작성하라.
단 1회 betting은 1∼ 20원으로 제한.
38. 가위 • 바위 • 보 program: 누군가가 이길때 까지 가위 • 바위
• 보 game을 수행하는 program을 작성하라.
ⅰ) 2명 (computer v.s. end-user)
ⅱ) 3명 (2 computers v.s. end-user)
20
숙제
39. nested for문을 이용하여 구구단표를 작성하라.
1
2
3
4
5
6
7
8
9
-----------------------------------------1
1
2
3
4
5
6
7
8
9
2
2
4
6
8
10
12
14
16
18
3
3
6
9
12
15
18
21
24
27
4
4
8
12
16
20
24
28
32
36
5
5
……….
21
숙제
40. 정수 n을 입력하여 대각선의 길이가 n인 마름모꼴을 *로 그
리는 program을 작성하라. 단, n이 짝수일 경우에는 적당한
message를 출력한 후 n+1을 이용하여 처리하라.
(예)
Input an integer:
4
Input is an even number. Assume the input was 5.
*
***
*****
***
*
22
숙제
41. 9번과 같은 문제를 속이 빈 마름모를 그리도록 작성하라.
(예)
Input an integer:
7
*
**
* *
*
*
* *
**
*
23
숙제
42. 정수 n을 입력하여 n번째 Fibonacci Number를 출력하는
program을 작성하라. 단 첫번째 Fibonacci Number는
0 으로 간주한다.
24
4.14 goto문
- 절대로 사용하지 말것
- 숙제에서 goto가 발견되면 무조건 'F'
25
숙제
43. 요일 찾기 program을 switch문을 사용하여 작성하라.
44. The Gettysbug Address 내의 alphabet 각각의 사용
빈도를 count 하는 program을 작성하라.
단, 대-소문자는 구분하지 않으며 alphabet 이외의 문자
(공백 문자, 구두점 등)는 'others'로 취급하라.
26
숙제
45. 두개의 정수와 하나의 문자를 입력하여 사칙연산을 수행
하는 program을 작성하라. 입력된 문자가 '+'이면 두 수의 합
을, '-'이면 차를, '*'이면 곱을, '/'이면 몫과 나머지를 구하여
출력한다. 단, 사칙연산을 수행하는 program segments는 함
수로 작성하여야 하며 함수의 이름은 각각 sum, difference,
product, divide로 하고 반드시 함수 원형(function prototype)
을 사용하라. 두개의 정수는 인자(argument)로 전달할 것.
(예)
입력: 25 13 /
출력: quotient: 1 remainder: 12
27
46. 하나의 정수와 한 문자를 입력하여 문자가 'F'이면 그 수의
factorial을, 'S'이면 1부터 그 수까지의 합을 구하는 program
을 작성하라. 두 함수의 이름은 각각 factorial, sum이라 하고
함수의 원형을 반드시 사용하라. 입력된 정수는 인자
(argument)로 전달할 것.
(예)
입력: 5 F
출력: 5! = 120
입력: 5 S
출력: Sum of 1 to 5 is 15.
28
47. 한 문자를 입력하여 'r'이면 사각형(rectangle)의 가로와
세로의 길이를, 'c'이면 원(circle)의 반지름을, 't'이면 삼각형
(triangle)의 밑변과 높이를 추가 입력하여 넓이(area)를 구하
여 출력하는 program을 작성하라. 각함수의 이름은 rectangle,
circle, triangle로 하며 반드시 함수의 원형을 사용하라. 가로,
세로, 반지름, 밑변, 높이 등은 각각의 함수에서 입력할 것.
(예)
입력: (알맞은 user prompt를 출력할 것.)
r
가로: 20
세로: 30
출력: The area of the rectangle is 600 square meters.
29
숙제.
48. main 함수를 재귀호출하여 i가(int i = 1;) 5가 될때까지
출력하는 program을 작성하라.
49. 숙제 4를 수정하여 5부터 1까지 역순으로 출력하는
program 을 작성하라.
50. 두개의 정수를 입력하여 그 두수의 최대공약수
(GCD : Greatest Common Divisor)를 구하는
program을 작성하라.
GCD의 정의 :
GCD(x, y) =
{
y, if x = ky, where k = 1, 2, ...
otherwise, GCD(y, x%y)
30
숙제
51. 정수 n을 입력하여 n번째 Fibonacci Number를 출력하는
program을 재귀호출을 이용하여 작성하라.
52. Towers of Hanoi program을 재귀호출을 이용하여 작성
하라.
31
숙제 : 앞으로 부과된 모든 숙제는 반드시 함수를 사용할 것.
53. Gettysburg Address에 쓰인 alphabet 각 문자의 개수를
count 하는 program을 작성하라.
단, 대소문자는 구분하되 기타 문자는 'others'로 취급한다.
(Hint : 각 문자의 ASCII 값을 이용할 것.
예 : 'A' = 65, 65 - 65 = 0, Frequency[c-'A'])
54. 야구 게임을 실행하고 trial횟수와 elapsed time을 출력하라.
야구게임 : 4개의 element를 가진 배열을 정의하고, 각 element에
0 ~ 9 중 한 수를 배정한다.(단, 0 ~ 9의 각 수는 한번만 사용한다.)
end-user는 네 수를 추측하여 맞추는데 자리와 숫자가 일치하면
'strike'이고, 자리는 일치하지 않으나 그 수가 배열 어디엔가 있으면
'ball'이 된다. end-user의 추측에 대해 computer는 i strike j ball을 선언
하며, 4 strike가 되면 게임은 종료된다.
32
55. 25개의 elements를 가진 float 배열에 실수를 입력한 후
(순서 무시), 그 수들의 합, 평균, 그리고 평균에서 가장 가까
운 값을 출력하는 program을 작성하라.
56. char배열에 10개의 문자를 입력한 후, 각 문자에 대해,
그 문자가 앞에서 nth 문자이면 뒤에서 nth 문자와 자리를 바꾸
는 program을 작성하라.
입력: ABCDEFGHIJ
출력: JIHGFEDCBA
57. int배열에 25개의 random number를 저장한 후, n을 입
력하여 A[n]을 출력하는 program을 작성하라.
58. 요일 알아내기 program을 array를 이용하여 작성하라.
33
숙제.
59. 3개의 정수를 입력하여 입력된 순서대로 i, j, k에 저장한
후 함수 SORT를 부르면 SORT는 세 정수를 비교하여
제일 작은 수를 i에, 중간 크기의 수를 j에, 제일 큰 수를 k에
저장하는 program을 작성하라. (caller의 영역을 사용할 것.)
단, 인수(argument)와 매개변수(parameter)는 모두 pointer
변수를 이용할 것.
34
숙제.
60. #define N 5
int a[N], i, *p; 를 이용하여 program 할 것.
array a[N]을 입력으로 채우고(a[i] 사용),
그 합을 구하며(p = a; 한 후 *p 사용),
각 element를 3배의 값으로 수정하여(*a 사용) 출력(p[i]를
사용)하라.
35
숙제.
61. int, short, float, double, long double 각각에 대하여
다음의 code와 같은 code를 작성하라.
double a[2], *p, *q;
p = a;
q = p + 1;
printf("%d", q - p);
printf("%d", (int)q - (int)p);
printf("%p%p", p, q);
36
숙제.
62. 3개의 정수를 입력하여 입력된 순서대로 int a[3];에 저장
한 후 함수 SORT를 부르면 SORT는 세 정수를 비교하여 오름
차순으로 array에 저장하는 program을 작성하라.
단, 인수(argument)와 매개변수(parameter)는 모두 array의
pointer를 이용할 것.
37
숙제
63. int a[30];에 random number를 저장한 후 bubble sort
algorithm을 이용하여 내림차순으로 정렬하여 출력하라. 모든
기능을 함수로 작성할 것.
38
숙제.
64. 10Ⅹ10의 2차원 int 배열에 random number를 입력한 후
다음의 처리를 하는 program을 작성하라.
(1) 총합을 구하여 출력하는 program.
(2) 각 column(열)의 합을 구하여 1차원 배열에 저장한 후,
출력하는 program.
(3) 각 row(행)의 합을 구하여 1차원 배열에 저장한 후,
출력하는 program.
(4) 왼쪽 상단에서 오른쪽 하단까지의 대각선 상에 있는
element의 합을 구하여 출력하는 program.
(5) 오른쪽 상단에서 왼쪽 하단까지의 대각선 상에 있는
element의 합을 구하여 출력하는 program.
39
숙제(계속).
(6) ith row의 각 element를 ith column의 각 element와
합하여 1차원 배열에 저장한 후
이를 출력하는 program(0 ≤ i < N)을 작성하라.
(7) ith column의 각 element를 ith row의 각 element와
합하여 1차원 배열에 저장한 후
이를 출력하는 program (0 ≤ i < N)을 작성하라.
(8) 위 배열의 row와 column을 바꾼 2차원 배열을 생성하는
program을 작성하라.
65. Tic-Tac-Toe game을 수행하는 program을 작성하라.
(computer와 end-user의 game. 처음에는 end-user가 시작하
나 그 다음부터는 이긴쪽이 먼저 시작한다. 3*3의 char array를
이용할 것.)
40
숙제 : argument의 수와 범위를 반드시 check 할 것.
error 발생시 exit(0); 할 것.
66. "power x y"의 형식으로 입력하면
xy를 구하여 출력하는 program을 작성하라.
67. "area_circle r"의 형식으로 입력하면,
반지름이 r인 원의 면적을 구하여
출력하는 program을 작성하라.
68. "volume_circle r"의 형식으로 입력하면,
반지름이 r인 구의 부피를 구하여
출력하는 program을 작성하라.
41
숙제
69. 아래와 같이 card game을 작성하라.
- card는 joker와 extra joker를 포함하여 54매를 사용한다.
- 인원은 2-4명으로 game 시작 전에 결정할 것.
- card는 random하게 분배하고 3인이 play할 경우 dealer
가, 4인이 play할 경우 dealer와 다음 player가 1장씩 더 가진
다.
-각자의 deck을 random하게 정렬한 후 순서대로 내어 높
은 수가 이긴다. 이긴 player는 따온 card를 자기 deck의 뒤에
넣는다. 같은 수일 경우에는 Club < Hearts < Diamonds
< Spades의 순이며 joker는 어떤 suit이건 2와 3에게는 진다.
Extra Joker는 joker에게 진다.
- 한 player가 card를 모두 가지면 game은 끝난다.
- Ace는 King보다 높은 점수로 할 것.
42
<숙제>
70. stack을 이용하여 '('와 ')'의 짝이 맞는지 check 하는
program을 작성하라.
단, 입력은 '('와 ')'만으로 이루어져 있음.
(Hint) '('가 입력되면 push하고 ')'가 입력될 때마다
pop한 후 입력 문자열이 끝났을 때('\n' 또는 '\0')
stack 은 empty가 된다.
71. 학생기록부(student record)file은 이름, 나이, 학번, 성별,
수강과목(10과목까지, 강좌명, 학점, 반, 성적)의 필드로
이루어져있고, 학생수는 최대 100명이며, 학생기록부의
data는 file로 만들어 input redirection으로 입력한다.
학생기록부에서 학번을 key로 하여 그 학생의 모든 정보를
출력하는 program을 작성하라.
43
숙제.
72. 문자열을 입력하여 각 문자를 element의 data로 하는
linked-list를 작성한 후 linked-list의 모든 문자를
출력하는 program을 작성하라.
73. 위의 data를 이용하여 문자열의 길이를
출력하는 program을 작성하라.
74. 한 문자를 입력 받아 그 문자가 위의 linked-list에 있으면
그 element를 list에서 제외한 후 남은 문자열을 출력하고,
그 문자가 없으면 message와 함께 문자열을 출력하는
program을 작성하라.
44
숙제.
75. 10, 20, 30, 40, 50으로 linked-list를 만들고
0~60 사이의 정수를 입력하여
list에 ascending order를 지켜 추가한 후
list의 모든 수를 출력하는 program을 작성하라.
단, 입력은 여러번 주어진다. (약 10회 정도)
76. 문자열을 입력하여 각 문자를 element로 하는
stack과 queue를 작성한 후
's'를 입력하면 순서대로 (queue를 이용),
'r'을 입력하면 역순으로(stack을 이용) 출력하는
program을 작성하라.(ADT를 사용할 것)
45