char*m(char*str)
int a[] = {0,14,13,8,0}
for문 i=0; str[i] != \0; i++
str[i]= str[i]+a[i]
return str
str[0]= str[0]+a[0] | 97+0=97 | a |
str[1]= str[1]+a[1] | 98+14=112 | p |
str[2]= str[2]+a[2] | 99+13=112 | p |
str[3]= str[3]+a[3] | 100+8=108 | l |
str[4]= str[4]+a[4] | 101+0=101 | e |
e f g h i j k l m n o p
1 2 3 4 5 6 7 8 9 110 111 112
메인함수
char str[]= "abcde"
97 | 98 | 99 | 100 | 101 | |
a | b | c | d | e | \0 |
[0] | [1] | [2] | [3] | [4] | [5] |
char*result = m(str)
%s\n, result
정답:
apple
<<틀리기 쉬운 문제>>
c(int num)
switch(num) //스위치 케이스 파이널리 문.
case1
case2
case3
case4
case5
default //디폴트.
메인함수
a=5
b=3
c=4
d=5
e=1
c(a) //값 5는 5입니다
c(b) //값 3는 2또는 3입니다
c(c) //값 4는 4입니다
c(d) //값 5는 5입니다
c(e) //값 1는 0 또는 1입니다
정답:
값 5는 5입니다
값 3는 2또는 3입니다
값 4는 4입니다 //case 4에 브레이크 문이 없기 때문에 case 5도 실행해줘야함.!!!!!!!
값 4는 5입니다
값 5는 5입니다
값 1는 0 또는 1입니다
<<틀리기 쉬운 문제>> 소수 찾는 문제
p(int num)
if (num<=1) return 0
for문 i=2; i<num; i++{
if (num%i==0) return 0 //num이 4면 i=2, 3이 가능한데 i=2에서 num%i==0이 참이되어 0을 리턴하게 된다. i=3 안 해도 된다는 말.
}
return 1
num | i | |
1 | 0 반환 | |
2 | 1 | |
3 | 1 | |
4 | 2 | 0 |
5 | 2 | 1 |
6 | 2 | 0 |
7 | 2 | 1 |
8 | 2 | 0 |
9 | 3 | 0 |
10 | 2 | 0 |
메인함수
int sum=0
for문 i=1; i,<=50; i++
if(p(i)) printf("%d ", i)
정답: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
//소수 찾는 문제였음
소수는 1과 자기자신만 약수로 가진다.
p(int n)
or=n, rv=0, rd //while문 안에서 참인동안 반복하는 것이기 때문에 rv도 변한 값을 적용해야함.
while문 n != 0
rd=n%10
rv=rv*10+rd
n/=10 //n=n/10
return or == rv
n | or | rv | rd |
1 | 1 | 1 | 1 |
0 | |||
2 | 2 | 2 | 2 |
0 | |||
11 | 11 | 1 | 1 |
1 | 11 | 1 | |
0 |
메인함수
for문 i=1; i<=100; i++
if(p(i)) printf("%d ", i)
정답:
1 2 3 4 5 6 7 8 9 11 22 33 44 55 66 77 88 99
구조체 노동자
char name[12]
int salary
name[12] | salary |
float ㅎ(구조체 노동자*p, int size)
int 봉급=0
for문 i=0; i<size; i++
봉급 = 봉급 + p[i].salary
return (float)봉급/size //float는 소수임. 봉급을 소수로 형변환을 하라는 말!!! 165000 /3=55000
i=0 | 봉급+ p[0].salary =0+5000=50000 |
i=1 | 5000+ p[1].salary =50000+60000 =110000 |
i=2 | 11000+ p[2].salary =110000+55000 =165000 |
메인함수
구조체 노동자 p[3] ={
{"p1", 50000}
{"p2", 60000}
{"p3", 55000}
}
int size = 3
[0] | {"p1", 50000} |
[1] | {"p2", 60000} |
[2] | {"p3", 55000} |
float 평균봉급= ㅎ(p, size)
%.2f\n, 평균봉급 //플로트 float 소수 둘째자리까지 나타내라.
정답:
55000.00
<<틀리기 쉬운 문제>> (전치연산자, 후치연산자 익히기 파트)
메인함수
arr[5]={20, 30, 40, 50, 60}
int*ptr
ptr=arr
arr | ||||
ptr | ptr++ | ptr++ | ||
[0] | [1] | [2] | [3] | [4] |
20 | 30 | 40 | 50 | 60 |
21 | 31 |
%d\n, ++*ptr //ptr이 가리키는 값은 20. 20을 1 키워라. 21이 표에 반영이 되는 것이 중요함. (값만 변한다.)
%d\n, *(arr+1) //arr+1이 가리키는 값. 30
%d\n, *ptr++ //ptr이 가리키는 값 21. ++후위연산자로 인해 ptr은 arr[0]에서 arr[1]로 위치가 이동함. (++ 후위연산자는 위치가 변한다.)
%d\n, ++*ptr //30을 가리키고 있음. 31
%d\n, *arr+1 //21+1=22
%d\n, *ptr++ //31을 출력. 자리 또 옆으로 이동함. arr[2]를 가리키게됨.
%d\n, *ptr+1 //40+1=41
정답:
21
30
21
31
22
31
41
a=48 b=18
GCD=6
//최대공약수가 6
gcd(a,b)
gcd(48,18)
gcd(b, a%b) //재귀함수 형태.
gcd(18,12)
gcd(12, 6)
gcd(6, 0)
스왑(int*a, int*b)
//자리 바꾸기.
sr(int arr[], int n)
for문 i=0; i<4; i++
int min_idx=i
for문 j=i+1; j<5; j++
if( arr[j]<arr[min_idx])
min_idx=j
i | min_idx | j | arr[j]<arr[min_idx] |
0 | 0 | 1 | arr[1]<arr[0]=25<64 |
1 | |||
2 | 2 | arr[2]<arr[1]=12<25 | |
3 | arr[3]<arr[2]=22<12 | ||
4 | 4 | arr[4]<arr[2]=11<12 |
스왑(&arr[min_idx], &arr[i]) //arr[4] 하고 arr[0] 자리 바꾸기. //arr[2]하고 arr[1] 스왑. //arr[3]하고 arr[2]
i | min_idx | j | arr[j]<arr[min_idx] |
1 | 1 | 2 | arr[2]<arr[1]=12<25 |
2 | |||
3 | arr[3]<arr[2]=22<12 | ||
4 | arr[4]<arr[2]=64<12 |
i | min_idx | j | arr[j]<arr[min_idx] |
2 | 2 | 3 | arr[3]<arr[2]=22<25 |
3 | |||
4 | arr[4]<arr[3]=64<22 |
메인함수
int arr[]={64, 25, 12, 22, 11}
64 | 25 | 12 | 22 | 11 |
[0] | [1] | [2] | [3] | [4] |
11 | 12 | 25 | 22 | 64 |
11 | 12 | 22 | 25 | 64 |
int n= sizeof(arr)/sizeof(arr[0]) //20/4=5
sr(arr, n) //함수호출.
for문 i=0; i<n; i++
%d, arr[i]
증감연산자 문제.
메인함수
x=20
y=25
20 | 25 |
21 | 24 |
22 | 23 |
z=x++ + --y //20+24=44
w=++x + y-- //22+24=46
메인함수
char str[] = "Hello"
H | e | l | l | o | \0 |
[0] | [1] | [2] | [3] | [4] | [5] |
for문 i=0; str[i] != \0; i++
str[i] = str[i] + 1
str[0]+1=72+1=73=I str[1]+1=f str[2]+1=m str[4]+1=p |
A =65 BCDEFG H(72)IJK LMNOP QRS TUV WXYZ a=97 |
%s, str
정답:
Ifmmp
메인함수
char ori[]="aPPle"
a | P | P | l | e | \0 |
[0] | [1] | [2] | [3] | [4] | [5] |
char lower_str[5]
\0 | |||||
[0] | [1] | [2] | [3] | [4] | [5] |
char upper_str[5]
\0 | |||||
[0] | [1] | [2] | [3] | [4] | [5] |
for문 i=0; i<5; i++
lower_str[i] = tolower(ori[i]) //소문자로 바꿔준다!!! lower_str[5]= "apple"
upper_str[i]= toupper(ori[i]) //대문자로 바꿔준다!!! upper_str[5]="APPLE"
lower_str[5]=\0
upper_str[5]=\0
int count=0
for문 i=0; i<5; i++
count= count+(upper_str[i]-lower_str[i])
// 0+[A]-[a]=0+65-97=-32
//-32-32=-64
//-64-32=-96
//-96-32=-128
//-128-32=160
%d\n, count
정답:
-160
재귀함수 문제.
C(int num)
if (num <= 1)
참이면 return num
거짓이면 return C(num-1)+C(num-3)
C(7) C(6)+C(4)=1+1=2 |
C(6) C(5)+C(3)=1+0=1 |
C(5) C(4)+C(2)=1+0=1 |
C(4) C(3)+C(1)=1 |
C(3) C(2)+C(0)=0 |
C(2) C(1)+(-1)=0 |
메인함수
int var=7
int result= C(var)
%d\n, result
정답:
2
'정보처리기사 필답 실기. 코딩 문제.' 카테고리의 다른 글
파이썬 코드 문제 (0) | 2025.05.19 |
---|---|
자바 코드 문제 (1) | 2025.05.18 |
정처기 24년 3회 코드 기출문제 (0) | 2025.05.15 |
정처기 24년 2회 코드 기출문제 (0) | 2025.05.13 |
정처기 24년 1회 코드 기출문제 (0) | 2025.05.13 |
댓글