Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바의 정석 기초편 ch11
- 자바의 정석 기초편 ch3
- 자바의 정석 기초편 ch13
- 2024 정보처리기사 시나공 필기
- 스프링 입문(무료)
- 자바의 정석 기초편 ch12
- 스프링 고급 - 스프링 aop
- 자바의 정석 기초편 ch14
- 자바의 정석 기초편 ch9
- 스프링 mvc2 - 검증
- 2024 정보처리기사 수제비 실기
- 코드로 시작하는 자바 첫걸음
- 자바의 정석 기초편 ch7
- @Aspect
- 자바의 정석 기초편 ch6
- 자바의 정석 기초편 ch4
- 스프링 mvc1 - 서블릿
- 스프링 db1 - 스프링과 문제 해결
- 스프링 mvc1 - 스프링 mvc
- 자바의 정석 기초편 ch5
- 자바의 정석 기초편 ch2
- jpa - 객체지향 쿼리 언어
- 자바의 정석 기초편 ch1
- 스프링 mvc2 - 타임리프
- 자바의 정석 기초편 ch8
- 게시글 목록 api
- 스프링 mvc2 - 로그인 처리
- 스프링 db2 - 데이터 접근 기술
- 타임리프 - 기본기능
- jpa 활용2 - api 개발 고급
Archives
- Today
- Total
나구리의 개발공부기록
Chapter 02 - C언어(기출 문제_2) 본문
2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비)/실기 6강 - 프로그래밍 언어 활용
Chapter 02 - C언어(기출 문제_2)
소소한나구리 2024. 6. 13. 22:292024년도 수제비 실기책(6판) 내용 정리
8. C코드의 출력 결과 작성
#include <stdio.h>
int Soojebi(int base, int exp) {
int i, result = 1;
for (i = 0; i<exp; i++)
result *= base;
return result;
}
int main() {
printf("%d", Soojebi(2,10));
return 0;
}
풀이
#include <stdio.h>
int Soojebi(int base, int exp) { // 매개변수가 2개인 사용자 정의 함수
int i, result = 1;
for (i = 0; i<exp; i++) // 0부터 2번재 매개변수의 값미만 까지 1씩 증가시키며 반복
// 0 ~ 9까지(10번)
result *= base; // 첫번째 매개변수와 result의 값을 곱한 값을 10번 누적 연산
// 1 * 2 = 2
// 2 * 2 = 4
// 4 * 2 = 8 .... 이런식으로 10번
// 16, 32, 64, 128, 256, 512, 1024 (2의 10제곱)
return result; // 1024를 반환
}
int main() {
// 아규먼트 값을 2, 10으로 한 Soojebi 함수의 호출 연산 결과를 출력
printf("%d", Soojebi(2,10)); // 1024 출력
return 0;
}
9. C코드의 출력 결과 작성
#include <stdio.h>
int main() {
int *arr[3];
int a = 12, b = 24, c = 36;
arr[0] = &a;
arr[1] = &b;
arr[2] = &c;
printf("%d\n", *arr[1] + **arr + 1);
return 0;
}
풀이
#include <stdio.h>
int main() {
int *arr[3]; // 길이가 3인 인트형 포인트 배열 선언
int a = 12, b = 24, c = 36;
arr[0] = &a; // a의 주소값 저장
arr[1] = &b; // b의 주소값 저장
arr[2] = &c; // C의 주소값 저장
// *arr[1] == *(&b), *과 & 연산은 서로 반대로 상쇄되여 b가 됨, 24
// **arr == *arr[0], 즉 *(&a), 위와 마찬가지로 a가됨, 12
// 24 + 12 + 1, 37이 출력됨
printf("%d\n", *arr[1] + **arr + 1);
return 0;
}
10. C코드의 출력 결과 작성
#include <stdio.h>
struct Soojebi {
char name[20];
int os, db, hab1, hab2;
};
int main() {
struct Soojebi s[3] = {{"데이터1", 95, 88},
{"데이터2", 84, 91},
{"데이터3", 86, 75}};
struct Soojebi *p;
p = &s[0];
(p+1)->hab1 = (p+1)->os+(p+2)->db;
(p+1)->hab2 = (p+1)->hab1 + p->os + p->db;
printf("%d\n", (p+1)->hab1 + (p+1)->hab2);
return 0;
}
풀이
#include <stdio.h>
struct Soojebi { // 구조체 선언
char name[20];
int os, db, hab1, hab2;
};
int main() {
// 구조체 배열에 각 데이터를 저장
struct Soojebi s[3] = {{"데이터1", 95, 88},
{"데이터2", 84, 91},
{"데이터3", 86, 75}};
struct Soojebi *p; // 구조체 포인터 변수 선언
p = &s[0]; // p는 구조체 변수 s[0]의 주소를 저장
// p+1 == s[1], s[1]의 구조체의 hab1에 연산결과를 저장
// s[1]의os값과 s[2]의db값을 더한 값을 저장, 84 + 75 = 159
(p+1)->hab1 = (p+1)->os+(p+2)->db;
// s[1]의 hab2에 연산결과를 저장
// 위에서 연산한 s[1]의 hab1과 s[0]의 os와 db값을 덧셈 연산, 159 + 95 + 88
(p+1)->hab2 = (p+1)->hab1 + p->os + p->db;
printf("%d\n", (p+1)->hab1 + (p+1)->hab2); // 159 + 342 = 501 출력
return 0;
}
11. 다음 소스 코드에 입력값이 5가 들어왔을 때 출력값을 작성
#include <stdio.h>
int fn(int a) {
if (a <= 1) return 1;
return a * fn(a-1);
}
int main() {
int a;
scanf("%d", &a);
printf("%d", fn(a));
return 0;
}
풀이
#include <stdio.h>
int fn(int a) {
// a 가 1보다 작거나 같으면 1을 반환하고 아니면 a * fn(a-1);의 연산을함, 재귀함수
// 2. 5 * fn(4) 10. 5 * 24 = 120(반환값)
// 3. 4 * fn(3) 9. 4 * 6 = 24
// 4. 3 * fn(2) 8. 3 * 2 = 6
// 5. 2 * fn(1) 7. 2 * 1 = 2, 2는 fn(2)의 값
// 6. if문에 걸려서 1을 반환함 -> 이제 역순으로 올라감(스택구조)
if (a <= 1) return 1;
return a * fn(a-1); // 최종으로 120을 return함
}
int main() {
int a;
scanf("%d", &a); // 1. a = 5,
printf("%d", fn(a)); // 12. fn(5) = 120을 정수형으로 출력
return 0;
}
12. 빈칸에 연산자를 써서 정수를 역순으로 출력하는 프로그램을 완성
- ex) 1234의 역순 = 4321이며 1230처럼 0으로 끝나는 정수는 고려하지 않는다
#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 빈칸 div;
}
printf("%d", result);
return 0;
}
풀이
#include <stdio.h>
int main(){
// 정수를 역순으로 뒤집기
int number = 1234;
int div = 10;
int result = 0;
// number > 0, number가 0이 될때까지 while문 진행, 0이되면 반복문 종료
// number != 0 이것도 됨
while (number [빈칸1] 0) {
// 1. result = 0
// 4. 40 = 4 * 10, result = 40
// 7. 430 = 43 * 10, result = 430
// 10.4320 = 432 * 10, result = 4320
result = result * div;
// 2. 4 = 0 + 1234 % 10, result = 4
// 5. 43 = 40 + 123 % 10, result = 43
// 8. 432 = 430 + 12 % 10, result = 432
// 11. 4321 = 4320 + 1 % 10, result = 4321
result = result + number [빈칸2] div;
// 3. 123 = 1234 / 10, number = 123
// 6. 12 = 123 / 10, number = 12
// 9. 1 = 12 / 10, number = 1
// 12. 0 = 1 / 10, number = 0, while문 종료
number = number [빈칸3] div;
}
printf("%d", result); // 4321 출력
return 0;
}
// 빈칸1 : > or !=
// 빈칸2 : %
// 빈칸3 : /
13. C코드의 출력 결과 작성
#include <stdio.h>
int isPrime(int number) {
int i;
for (i=2; i<number; i++) {
if (number % i ==0) return 0;
}
return 1;
}
int main() {
int number = 13195, max_div=0, i;
for (i=2; i<number; i++)
if (isPrime(i) == 1 && number % i == 0)
max_div = i;
printf("%d", max_div);
return 0;
}
풀이
#include <stdio.h>
// 가장 큰 소수를 찾는 문제
int isPrime(int number) {
int i;
// 2부터 13194까지 들어옴,
for (i=2 i<number; i++) {
// 13195를 i로 나눈 값이 0일때는 0을 반환 (소수가 아니면)
if (number % i == 0) return 0;
}
// 그 외에는 1을 반환(소수이면)
return 1;
}
int main() {
int number = 13195, max_div=0, i;
// 2부터 13194까지 1씩 증가면서 반복, 13193번 반복
for (i=2; i<number; i++)
// isPrime(i) == 1의 뜻은 i는 소수라는 뜻,
// number % i == 0 의 뜻은, i는 number를 나눌 수 있는 인수라는뜻
// 둘의 조건이 &&조건으로 묶여있으므로 i는 소수이며 인수, 즉 i는 소인수,
if (isPrime(i) == 1 && number % i == 0)
max_div = i; // 13195를 소수로 나누었을 때 0이 되면 해당 값을 max_div에 저장
// 처음 소인수를 찾으면 구해진 몫을 소수로 나누면서 다음 소인수를 찾음
// 5, 7, 13, 29(29가 최대 소인수)
printf("%d", max_div); // 29를 출력
return 0;
}
14. C코드의 출력 결과 작성
#include <stdio.h>
struct student {
int n, g;
};
int main() {
struct student st[2];
int i = 0;
for (i; i < 2; i++){
st[i].n = i;
st[i].g = i + 1;
}
printf("%d", st[0].n + st[1].g);
return 0;
}
풀이
#include <stdio.h>
struct student {
int n, g;
};
int main() {
struct student st[2]; // 길이가 2인 구조체 배열
int i = 0;
// 0부터 2까지 반복문 진행
for (i; i < 2; i++){
// 1. st[0].n = 0, st[0].g = 1(0 + 1)
// 2. st[1].n = 1, st[1].g = 2(1 + 1)
st[i].n = i;
st[i].g = i + 1;
}
printf("%d", st[0].n + st[1].g); // 0 + 2 = 2, 2출력
return 0;
}
15. C코드의 출력 결과 작성
#include <stdio.h>
int len(char* p);
int main() {
char *p1 = "2022";
char *p2 = "202207";
printf("%d", len(p1) + len(p2));
return 0;
}
int len(char *p) {
int r = 0;
while (*p != '\0'){
p++;
r++;
}
return r;
}
풀이
#include <stdio.h>
// 구조체 포인터의 길이 구하기
int len(char* p);
int main() {
// 구조체 포인터 변수 p1은 "2022"의 주소를 저장함
char *p1 = "2022";
// 구조체 포인터 변수 p2은 "202207"의 주소를 저장함
char *p2 = "202207";
printf("%d", len(p1) + len(p2)); // 4 + 6 = 10, 10 출력
return 0;
}
int len(char *p) {
int r = 0;
while (*p != '\0'){ // *p의 값이 널이면 반복문 종료
p++; // 입력받은 포인터변수의 값을 1씩 증가
// 주소값의 자리를 1씩 늘림
r++; // r값을 1씩 증가 : 반복 횟수
}
return r; // r값을 반환
}
'2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비) > 실기 6강 - 프로그래밍 언어 활용' 카테고리의 다른 글
Chapter 02 - C언어(기출 문제_4) (1) | 2024.06.16 |
---|---|
Chapter 02 - C언어(기출 문제_3) (1) | 2024.06.15 |
Chapter 02 - C언어(기출 문제_1) (1) | 2024.06.03 |
Chapter 02 - C언어(포인터) (1) | 2024.05.27 |
Chapter 02 - C언어(함수) (0) | 2024.05.24 |