[22년 1회]
// 5를 입력 받았을 때 출력 결과
#include <stdio.h>
int func(int a) {
if(a <= 1) return 1;
return a*func(a-1);
}
int main(){
int a;
scanf("%d", &a);
printf("%d", func(a));
}
정답 : 120
* 재귀함수를 활용한 팩토리얼 계산
int func(int a)
→ 주어진 숫자부터 1까지 전부 곱하는 팩토리얼 함수
✔️ 재귀 호출: return a * func(a-1);
a가 1보다 크면, a에 func(a-1)을 곱해 결과를 반환
a가 줄어들면서 팩토리얼의 정의대로 곱셈
[풀이]
func(5) = 5 * func(4)
func(4) = 4 * func(3)
func(3) = 3 * func(2)
func(2) = 2 * func(1)
func(1) = 1
5 * 4 * 3 * 2 * 1 = 120
간단 설명 : a가 5이므로 5! = 120
// 아래 프로그램은 정수를 역순으로 출력하는데 (1)(2)(3)에 들어갈 연산자를 쓰시오
#include <stdio.h>
int main(){
int number = 1234;
int div = 10;
int result = 0;
while(number ( 1 ) 0){
result = result * div;
result = result + number ( 2 ) div;
number = number ( 3 ) div;
}
printf("%d", result);
return 0;
}
정답
(1) > (2) % (3) /
나는 그냥 막 대입해서 풀긴 했는데 chatGpt에게 풀이를 부탁함 ㅋ
(1), (2), (3)에 들어갈 부분
(1) 조건: while(number (1) 0)
- number가 0이 될 때까지 반복하려는 의도입니다. 즉, number가 0보다 클 때까지만 반복이 계속되어야 합니다.
- 답: >
(2) 자릿수 추출: result = result + number (2) div;
- number의 마지막 자릿수를 추출하려고 합니다. 숫자를 10으로 나눈 나머지를 계산하면 마지막 자릿수를 얻을 수 있습니다.
- 답: % (나머지 연산자)
(3) 자릿수 제거: number = number (3) div;
- 마지막 자릿수를 제거하기 위해서는 숫자를 10으로 나누어 한 자리를 줄입니다.
- 답: / (정수 나눗셈)
[22년 2회]
#include <stido.h>
struct A{
int n;
int g;
};
int main() {
struct A a[2];
for(int i=0; i<2; i++){
a[i].n=i, a[i].g=i+1;
}
printf("%d", a[0].n + a[1].g);
}
정답 : 2
a[0] → {n: 0, g: 1}
a[1] → {n: 1, g: 2}
→ 0 + 2 = 2
#include <stdio.h>
int len(char*p);
int main() {
char*p1 = "2022";
char*p2 = "202207";
int a = len(p1);
int b = len(p2);
printf("%d", a+b);
}
int len(char*p){
int r = 0;
while(*p != '\0'){
p++;
r++;
}
return r;
}
정답 : 10
len 함수: 문자열의 길이를 세는 함수
- 입력된 문자열이 끝날 때까지 (\0 문자)를 만날 때까지 한 글자씩 세면서 포인터 p를 옮김.
- r은 글자 수를 세는 카운터로, p가 끝까지 가면 r을 반환함
main 함수: 문자열 길이 계산
- p1은 문자열 "2022"이고, p2는 "202207"임.
- len(p1)으로 "2022"의 길이인 4를 계산하고, len(p2)로 "202207"의 길이인 6을 계산함.
- 두 길이의 합 4 + 6 = 10을 출력함.
#include <stido.h>
int main(int argc, char*argv[]){
int a[4] = {0,2,4,8};
int b[3] = {};
int i=1;
int sum = 0;
int *p1;
for(i; i<4; i++){
p1 = a+i;
b[i-1]= *p1-a[i-1];
sum = sum +b[i-1]+a[i];
}
printf("%d", sum);
return 0;
}
정답 : 22
포인터 : 변수의 메모리 주소를 저장하는 변수
p1 = a + i; → p1은 배열 a의 i번째 요소를 가리킴
[p1 = a + i; 동작 설명]
- a는 배열의 시작 주소를 의미 → a는 배열의 첫 번째 요소인 a[0]의 메모리 주소
- a + i는 배열의 i번째 요소의 주소를 의미
→ a는 배열의 시작 주소를 가리키고, 여기에 i를 더하면 배열의 i번째 요소의 주소를 가리키게 됨 - 포인터 p1에 저장:
- p1 = a + i;는 포인터 p1이 a 배열의 i번째 요소를 가리킴
- p1은 배열 a의 i번째 요소의 메모리 주소를 가리키고, *p1은 그 주소에 있는 값을 참조
[22년 3회]
// 아래는 C언어의 2차원 배열 형태이다.
// field의 경우 2차원 배열 형태는 예시처럼 출력되므로
// 이를 참고하여 mines의 2차원 배열 형태를 작성하시오.
#include <stido.h>
void main() {
int mines[4][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
int field[4][4] = {{0,1,0,1},{0,0,0,1},{1,1,1,0},{0,1,1,1}};
int w = 4; h = 4;
for(int y=0; y<h; y++){
for(int x=0; x<w; x++){
if(field[y][x] == 0) continue;
for(int j=y-1; j<=y+1; j++){
for(int i=x-1; i<=x+1; i++){
if(chkover(w,h,j,i) == 1)
mines[j][i] += 1;
}
}
}
}
}
int chkover(int w, int h, int j, int i){
if(i >= 0 && i < w && j >=0 && j < h) return 1;
return 0;
}
정답
1 1 3 2
3 4 5 3
3 5 6 4
3 5 5 3
풀이
지뢰찾기 게임이라고 생각하고 풀어야함 .. 계산 하려했는데 실패ㅋ
쉬운 방법
→ 나 + 내 바로 옆칸 (대각선 포함)에 + 1
#include <stdio.h>
main () {
int s, el = 0;
for(int i=6; i<=30; i++){
s=0;
for(int j=1; j<=i/2; j++){
if(i%j == 0){
s = s+j;
}
}
if(s == i){
el++;
}
}
printf("%d", el);
}
정답 : 2
완전수 찾는 함수
완전수 = 자기 자신을 제외한 약수들의 합이 자기 자신과 같은 수
6~30 숫자중 완전수 = 6, 28
→ 2 출력
'정보처리기사[실기]' 카테고리의 다른 글
[C언어] 24년 기출 문제 풀이 (1회, 2회) (1) | 2024.10.01 |
---|---|
[C언어] 23년 기출 문제 풀이 (1회 ~ 4회) (0) | 2024.10.01 |
[6과목_프로그래밍 언어 활용] 아스키코드 ASCII (0) | 2024.09.12 |
[C언어] 21년 기출 문제 풀이 (1회 ~ 4회) (0) | 2024.09.12 |
[C언어] 20년 기출 문제 풀이 (1회 ~ 4회) (2) | 2024.09.09 |