본문 바로가기
정보처리기사 필답 실기. 코딩 문제.

c언어 코드문제

by 귀엽소 2025. 5. 18.
반응형

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


 

반응형

댓글