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
'정보처리기사 필답 실기. 코딩 문제.' 카테고리의 다른 글
53. 재귀함수 1 (0) | 2025.05.29 |
---|---|
흥달쌤 49. 스테틱 변수 1 (0) | 2025.05.28 |
흥달쌤 27. 배열과 포인터 3 (0) | 2025.05.26 |
흥달쌤 24. scanf와 포인터 변수 (0) | 2025.05.24 |
흥달쌤 7. 관계, 논리연산자 (0) | 2025.05.24 |
댓글