< 2024.04.24 9장 포인터

프로그래밍 공부/C

2024.04.24 9장 포인터

Rocketbabydolls 2024. 4. 24. 21:42

 모든 예시들은 실전C프로그래밍(21세기사, 나중채_김도년_김영갑_박천수_박태순_양효식_임필옥_장문정_장 윤_한동일 공저)에 수록되어 있는 것들입니다.

 

책을 물려주어 문제를 찾을 수가 없게 되어 정답 코드만 올립니다. 중간중간 소실된 것이 있습니다.

 

후배님들 화이팅 !!

 

 

1.

#include<stdio.h>
int main(void) {
	int x,y,z;

	int *px=&x,*py=&y,*pz=&z,*tmp;

	scanf("%d %d %d", px,py,pz);
	tmp = py;
	py = px;
	px = pz;
	pz = tmp;
	
	

	printf("%d %d %d", *px, *py, *pz);



}

 

2.

 

#include<stdio.h>

int main(){
	char ch[20], *pch;
	int i,cnt;
	
	for(i=0;i<20;i++){
		scanf("%c",ch+i);
		
		if (*(ch+i)=='#'){
		cnt=i;
		break;
		}
		
	}
	
	while(cnt!=-1){
		
		printf("%c",*(ch+cnt-1));

		cnt--;
	}
	
	
	
	
	return 0;
}

 

 

3.

#include<stdio.h>
int main(void) 
{
	int x[50], *p,N;
	int cnt = 0;

	scanf("%d", &N);
	for (p=x;  p < x+N; p++) {
		scanf("%d", p);
	}
	for (p=x;*p;p++) {
		cnt++;
	}


	printf("%d", cnt);



}

 

4.

#include<stdio.h>
int main(void) 
{
	int x[3], *p,*p2;
	int tmp,max,min;

	for (p=x;p<x+3;p++) {
		scanf("%d", p);
	}
	
	for (p=x;p<x+3;p++) {
		for (p2=x;p2<x+2;p2++) {
			if (*p2>*(p2+1)) {
				tmp = *p2;
				*p2 = *(p2 + 1);
				*(p2 + 1) = tmp;
			}//9 10 8 //-1 -2 -3
		}
	}

	printf("%d", *(x + 1));

}

 

5.

 

#include<stdio.h>
int main(){
	int arr[5], rank[5]={5,5,5,5,5},*p,*p2,*prank;
	for(int i=0;i<5;i++)scanf("%d",arr+i);
	
	prank=rank;
	
	for(p=arr;p<arr+5;p++){
		for(p2=arr;p2<arr+5;p2++){
			if(*p>=*p2&&p!=p2){
				*(prank)-=1;	
			}
			
		}
		prank++;
	}
	
	
	
	for(int i=0;i<5;i++) printf("%d=r%d ",*(arr+i),*(rank+i));
	
	
	
	return 0;
}

 

6.

 

#include<stdio.h>
int main(){
	char ch[10], *pch,*pch2,*ptmp;
	
	for(pch=ch;pch<ch+10;pch++) scanf("%c",pch);
	int i=0,max=0;
	for(pch=ch;pch<ch+10;pch++){
		for(pch2=ch;pch2<ch+10;pch2++){
			if(*pch==*pch2){
				i+=1;
				if(max<i) {
				ptmp=pch;
				max=i;
				}
			}
			
		}
		i=0;
	}
	printf("%c %d",*ptmp,max);
	
	return 0;
}

 

7.

 

#include<stdio.h>
void input(int *x,int *y,int *z){
	scanf("%d %d %d",x,y,z);
}
void output(int *x,int *y, int *z){
	printf("%d %d %d",*x,*y,*z);
	

}
int main(){
	int x,y,z;
	
	input(&x,&y,&z);
	output(&x,&y,&z);	
	
	
	
	return 0;
}

 

 

8.

 

#include<stdio.h>
void swap(int *x,int *y){
	int p;
	p=*x;
	*x=*y;
	*y=p;
}
int main(){
	int N,*p,x[50];
	
	scanf("%d",&N);
	
	for(p=x;p<x+N;p++){
		scanf("%d",p);
	}
	
	int a,b;
	scanf("%d %d",&a,&b);
	swap(x+a,x+b);
	
	for(p=x;p<x+N;p++){
		printf(" %d",*p);
	}

	
	return 0;
}

 

9.

 

#include<stdio.h>
int *mid(int x[]){
	int *p,tmp=0;

	p=x;
	
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			if (*(p+i)>*(p+j)&&p+i!=p+j){
				tmp+=1;
			}
			else if (*(p+i)==*(p+j)&&p+i!=p+j){
				return p+i;
			}
			
		}
		if(tmp==1) return p+i;
		else tmp=0;	
	}
}
int main(){
	int x[3];
	for(int i=0;i<3;i++)scanf("%d",x+i);
	printf("%d",*mid(x));

	return 0;
}

 

10.

 

#include <stdio.h>
void gcdlcm(int x,int y,int *px,int *py){ 
int max,min; 

if (x>y){ 
for(int i=1;i<=y;i++){ 
if(y%i==0&&x%i==0) max=i;  
} 
for(int j=y;;j++){ 
if(j%y==0&&j%x==0) { 
min=j; 
break; 
} 
} 
} 
else { 
for(int i=1;i<=x;i++){ 
if(y%i==0&&x%i==0) max=i;  
} 
for(int j=x;;j++){ 
if(j%y==0&&j%x==0) { 
min=j; 
break; 
} 
} 

} 

*px=max; 
*py=min; 

} 
  
int main(){ 
int x,y; 

scanf("%d %d",&x,&y); 
gcdlcm(x,y,&x,&y); 
printf("%d %d",x,y); 

return 0; 
}

 

 

11. 12. 소실

 

 

13. 

 

#include<stdio.h>
int arrsum(int *ps,int *pe){
	int sum=0;
	int *p;
	for(p=ps;p<=pe;p++){
		sum+=*p;

	}
	
	return sum;
	
}
int main(){
	int N,S,E;
	int *p;
	int n[100];
	scanf("%d %d %d",&N,&S,&E);
	
	for(p=n;p<n+N;p++) scanf("%d",p);
	

	printf("%d",arrsum(n+S,n+E));
	
	
}

 

14.

 

#include<stdio.h>
int add_to_k(int *x,int *y){
	int sum=0,*p;
	
	for(p=x;p<=y;p++) sum+=*p;
	
	return sum;
	
}
int main(){
	int N,result=0;
	int d[100], *p;
	
	scanf("%d",&N);	
	
	for(p=d;p<d+N;p++) scanf("%d", p);
	
	for(int i=0;i<N;i++) result+=add_to_k(d,d+i);
	
	printf("%d",result);
}

 

15.

#include<stdio.h>
		void ABC(int *x,int k){
			int *p,tmp,max,*max_i;
			
			
				max_i=x;
				
					for(p=x;p<x+k;p++){
						if(*p>*max_i){
							max_i=p;
						}
					}
					
				if (max_i!=x){
				
				tmp=*x;
				*x=*max_i;
				*max_i=tmp;
				}
				
		
		}
		
		
		int main(){
			int n[10],*p;
			int i=10;
			for(p=n;p<n+10;p++) scanf("%d",p);
		
			for(p=n;p<n+9;p++,i--) ABC(p,i);	
		
			for(p=n;p<n+10;p++) printf(" %d",*p);
			
		}