프로그래밍 공부/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);
}