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

흥달쌤 39. 함수에 주소전달 1

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

x=10

y=20

100번지  
x y
10 20 
15  

"%d ", f(&x, y)

"%d %d\n", x, y

 

f(int*i, int j)

*i=*i+5  //i의 값=10, 15를 i의 값인 x에 넣어준다.

return(2**i+ ++j)  //2*15+ 21=51

 

*i j
100번지 20
  21

 

정답:

51 15 20


40. 함수와 변수의 유효범위

 

a=1, b=2, c=3  //전역변수.

a b c
1 2 3
4    

int f(void)  //void 뜻은 없다는 말.

 

메인함수

"%3d\n", f()  // 자리 3개 만들어 놓고 뒤에서 부터 숫자 넣기. 12

"%3d%3d%3d\n", a, b, c  //  4  2  3

 

f(void) 함수

int b, c  //지역변수

a=b=c=4  //a, b, c에 4 넣기. 각각 어디에 들어가는 지 알아야함. 가까운 곳에 들어간다는 것 확인하기. a는 없으니까 전역변수 a 값이 변한다. 

return (a+b+c)  //4+4+4=12

b c
4 4

// 함수가 끝나면 지역변수는 사라진다!!!!

 

정답:

 12

   4  2  3


42. 함수에 주소전달 3

 

value=3

list[4]={1,3,5,7}

i

100번지 101 102 103
[0] [1] [2] [3]
1 3 5 7
3      
      5
      3
3 3 5 3

 

swap(value, &list[0])  //3, 100번지

swap(list[2], &list[3]) //5, 103번지

swap(value, &list[value])  //3, 103번지

 

void swap(int a , int*b)

int temp

temp=a

a=*b

*b=temp

temp a *b
3 1  
    3
5 7  
    5
3 5  
    3

<<틀리기 쉬운 문제>>

 

43. 함수가 주소를 리턴.

 

메인함수

int i

int x=10

int*p

i x p
  10 101번지

int a[100]

100번지 101번지        
[0] [1] [2] [3] ... [99]
0 10 20 30 ... 990
  x        
  20        

for문 i=0; i<100; i++

a[i]=i*10

p=func(x,a)  //10, 배열a의 주소(100번지)

 

int *func(int a, int*x)

a=a+10

x=x+1

*x=*x*2

return x  //함수가 주소를 리턴함. 101번지.

 

a x *x
20 101번지 10*2=20

 

프린트 "sum=%d", x+a[0]+a[1]+p[0]+p[1] //10+0+20+20+20=70

 

정답:

sum=70


44. 함수에 주소전달 4

 

메인 함수(void)

a=10

b=20

c=30

d=40

change(&a, &b, c, d)

프린트(" %d %d %d %d ", a, b, c, d)

100 101 102 103
a b c d
10 20 30 40
60 70    

 

 

chage(int*px, int*py, int pc, int pd ) //100번지, 101번지, 30, 40

px py pc pd
100 101 30 40
    100 130

*px=*py+pd  //20+40=60

*py=pc+pd  //30+40=70

pc=*px+pd  //60+40=100

pd=*px+*py  //60+70=130

 

정답:

60 70 30 40


45 함수에 주소전달 5

 

메인함수

doublef[]={1,2,3,4}

프린트("%3.1f\n", h(f,4,2))

return 0

100번지      
[0] [1] [2] [3]
1 2 3 4

 

double h(double*f, int d, double x)  //100번지, 4, 2

int i

double res=0.0

for문 i=d-1; i>=0; i--  //i=3

res=res*x+f[i]

i res
3 0.0*2+f[3]=4
2 4*2+f[2]=8+3=11
1 11*2+f[1]=22+2=24
0 24*2+f[0]=48+1=49

return res 

 

정답:

49.0


46. 함수에 주소 전달 6

 

메인함수

int a, b, c[1]

a=20

b=20

c[0]=20

10번지  
a b
20 20
20  

 

100번지
[0]
20
19

func(&a, b, c)  //10번지, 20, 100번지

프린트("%d%d%d", a,b,c[0])

return 0

 

func(int*a, int b, int *c)

int x

x=*a

*a=x++

x=b

b=++x

--(*c)

a b c x
10번지 20 100번지 20
  21   21
      20
      21

정답:

202019


47. 함수에 주소전달 7

define SIZE 3

void func(int*m, int*a, int b)

 

int main(void)

int num[SIZE]={1,3,6}

100번지 101  
[0] [1] [2]
1 3 6

int a =10, b=30

10번지  
a b
10 30
7  

func(num, &a, b)  //100번지, 10번지, 30

프린트("%d, %d", a, b)  

return 0

 

void func(int*m, int*x, int y)

m x y
100번지 10번지 30
    10

int i=0, n=0

i n
0 0
  6
  7

y=*x

n=*(m+1)+(*m+2)  //3+(1+2)=6

*x=++n  

 

정답:

7, 30


<<틀리기 쉬운 문제>>

48. 함수에 주소 전달 8

 

가, 나에 들어갈 내용?

3 2 1 4 입력했을 때 출력결과?

 

int n

int*num

n num
3 100번지

프린트("How many numbers?")

scanf("%d", &n)  //입력받은 것이 여기에 옴.

num=(int*)malloc(sizeof(int)*n)

100번지 101 102
[0] [1] [2]
2 1 4
1 2  

a(n, num)  //함수호출

b(n, num)  //함수호출

 

for문 i=0; i<0; i++

printf("%d", num[i])

 

void a(int n, int*num)

for문 int i=0; i<n; i++

scanf("%d", &(num[i])) //값을 대입하겠다.

i num[i]
0 num[0]
1 num[1]
2 num[2]

 

void b(int n, int*lt)

n lt
3 100번지

int a, b

a b lt+0 lt+1
0 1 100번지 101번지
1 2 lt[1] lt[2]
  3    
2      

for문 a=0; a<n-1; a++

for문 b=a+1; b<n; b++

if문 lt[a]>lt[b] 

참이면 c(lt+a, lt+b)

  

void c (int *a, int *b)  //100번지, 101번지

int t

t=*a

*a=*b

*b=t

t 100번지의 값 101번지의 값
100번지의 값. 2 1 2

 

정답:

124

반응형

댓글