< 2020.01.07 8장 함수

프로그래밍 공부/C

2020.01.07 8장 함수

Rocketbabydolls 2020. 11. 4. 00:23

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


 

 


 

 


[문제 1] 하나의 양의 정수 N을 입력 받아, 1부터 N까지의 합을 출력하는 프로그램을 작성하시오.

 

 

int add(int x, int y);

int main(){
    int N,sum=0,i,j;
    
    scanf("%d",&N);
    
    if(N%2==0)
    for(i=1,j=N;i<=N/2;i++,j--)sum+=add(i,j);
    else
    for(i=0,j=N;i<=N/2;i++,j--)sum+=add(i,j);
    printf("%d",sum);
    return 0;
}
    
int add(int x, int y){
    int sum=x+y;
    return sum;
}

 

[문제 2] 두 개의 양의 정수 A와 B를 입력 받아, A부터 B까지의 합을 계산하는 프로그램을 작성하시오.

 

 

int sum(int n);

int main(){
    int a,b;

    scanf("%d %d",&a,&b);
    printf("%d",sum(b)-sum(a-1));
    return 0;
}

int sum(int n){
    int sum;
    return sum=n*(n+1)/2;
}

 

[문제 3] 하나의 양의 정수 X를 입력 받아 다음 수식의 결롸를 출력하는 프로그램을 작성하시오

1 + (1+2) + (1+2+3)....+(1+2+...+X)

 

int sum(int n);
int main(){
    int X,sum=0;

    scanf("%d",&X);
    for(int i=1;i<=X;i++)sum=sum+sum(i);
    printf("%d",sum);
    return 0;
}

int sum(int n){
    int sum;
    return sum=n*(n+1)/2;
}

 

[문제 4] 2~9 사이의 정수 N을 입력 받아, 예시와 같이 숫자 N으로 사각형을 출력하는 프로그램을 작성하시오.

void print_row1(int x){
    for(int i=0;i<x;i++)printf("%d",x);

}
void print_row2(int x){
    for(int i=1;i<=x;i++){
    if(i==1||i==x) printf("%d",x);
    else printf(" ");
} 
}
int main(){

    int N;
    scanf("%d",&N);
    for(int i=1;i<=N;i++){
    if(i==1||i==N)print_row1(N);
    else print_row2(N);
    printf("\n");
	}
    
return 0;
}

[문제 5] 양의 정수를 반복해서 입력 받아(종료 조건 시까지), 예시와 같이 트리 모양을 출력하는 프로그램을 작성하시오.

 

void print_triangle(int x){
    for(int i=0;i<x;i++){
    printf("*");
    }
    printf("\n");
}

int main(){
    int N;

    do{
    scanf("%d",&N);
    print_triangle(N);
    }
    while(N!=0||N<0);
    return 0;
}

 

[문제 6] 하나의 정수 x를 입력 받아 다음 함수의 결과를 출력하는 프로그램을 작성하시오.

f(x) = 2x^2 -5x+1

 

int func1(int x){
    int ans;
    return ans=2*x*x-5*x+1;
}

int main(){
    int x;

    scanf("%d",&x);
    printf("%d",func1(x));
    return 0;
}

 

[문제 7] 하나의 정수 x와 2차 함수 f(x)의 계수를 나타내는 3개의 정수를 입력 받아, 예시와 같이 함수 값을 계산하는 프로그램을 작성하시오.

int func2(int x, int a, int b, int c){
    int ans;
    return ans=a*x*x+b*x+c;

}
int main(){
    int x,a,b,c;

    scanf("%d",&x);
    getchar();
    scanf("%d %d %d",&a,&b,&c);
    printf("%d",func2(x,a,b,c));
    return 0;
}

[문제 8] 하나의 정수 x와 2차 함수 f(x)와 g(x)의 계수를 나타내는 6개의 정수를 입력 받아, 합성함수 g(f(x))를 계산하는 프로그램을 작성하시오.

int func2(int x, int a, int b, int c){
    int ans;
    return ans=a*x*x+b*x+c;

}
int main(){
    int x,a,b,c,i,j,k;

    scanf("%d",&x);
    getchar();
    scanf("%d %d %d",&a,&b,&c);
    getchar();
    scanf("%d %d %d",&i,&j,&k);

    printf("%d",func2(func2(x,a,b,c),i,j,k));
    return 0;
}

 

[문제 9] 정수를 반복해서 입력 받아(종료 조건 시까지) 가장 큰 값과 두 번쨰로 큰 값을 출력하는 프로그램을 작성하시오.

int max1, max2;
void update_max(int x){
    if (x == max1) max2 = x;
        if (x > max1) max2 = max1, max1 = x;
    if (max1 > x&&x > max2) max2 = x;
}
int main(){
    int N;
    scanf("%d",&N);
    max1=N;
    scanf("%d",&N);
    max2=N;
    update_max(N);
    
    while(N!=0){
        scanf("%d",&N);
        update_max(N);

    }
    printf("%d %d",max1,max2);
    return 0;
}

 

[문제 10] 3~18 사이의 정수 N을 입력 받아 3개 주사위의 총 합이 N이 되는 모든 경우를 출력하는 프로그램을 작성하시오.

void die1(int x){

die2(N,x);


}
void die2(int x,int y){
    for(int i=1;i<=N;i++) {
    die3(x,y,i);
    }
}
void die3(int x,int y, int z){
    for(int i=1;i<=N;i++) {
        if(N==y+z+i){
            printf("%d %d %d\n",y,z,i);
        }
    }
}
int main(){
    scanf("%d",&N);
    for(int i=1;i<=N;i++) die1(i);

    return 0;
}

 

[문제 11] 야구 게임

int a,b,c;
int count_strike(int x,int y,int z){
int ans=0;
if(x==a)ans++;
if(y==b)ans++;
if(z==c)ans++;

return ans;        
}                      
int count_ball(int x,int y,int z){
int ans=0;          
if(x==b)ans++;         
if(x==c)ans++;
if(y==c)ans++;
if(z==a)ans++;
return ans;
}
int main(){
    int x,y,z;
    scanf("%d %d %d",&a,&b,&c);
    while(1){

        scanf("%d %d %d",&x,&y,&z);

        printf("%dS%dB\n",count_strike(x,y,z),count_ball(x,y,z));
        if(x==a&&y==b&&z==c) break;
    }


return 0;
}

 

[문제 12] 양의 정수 N을 입력 받아, 아래 예시와 같이 높이가 N인 삼각형을 출력하는 프로그램을 작성하시오.

 

void print_line(int x,int y,int z){
    for(int i=0;i<x;i++)printf(" ");
    for(int j=0;j<y;j++)printf("*");
    for(int k=0;k<z;k++)printf(" ");
    printf("\n");
}

int main(){
    int N;
    scanf("%d",&N);
    for(int i=1;i<= N;i++){
    print_line((2*(N+1-i)-1)/2,2*i-1,(2*(N+1-i)-1)/2);
    }
    return 0;
}

 

[문제 13] 하나의 양의 정수 N을 입력 받아, 1부터 N까지의 정수에서 숫자 3이 총 몇 번 나타나는지를 출력하는 프로그램을 작성하시오.

int count_3(int x){
    int i=0,j,ans=0;

    while(i<=x){ 
    for(j=i;j!=0;j=j/10) 
    if(j%10==3) ans++; 
    i++; 
    } 
    return ans;

}
int main(){
    int N;
    scanf("%d",&N);
    printf("%d",count_3(N));
    return 0;
}

[문제 14] 두 양의 정수 N와 M을 입력 받아, N보다 큰 소수를 작은 것부터 차례로 M개 출력하는 프로그램을 작성하시오.

 is_prime(int x){
    int num=0,tmp;
    tmp=x;

    for(int i=1;i<=x;i++){
    if(x%i==0) num++;
    }

    if(num==2) return 1;
    else return 0;

}
int next_prime(int x){
    int i,j=0;
    i=x+1;
    while(j<5){

    if(is_prime(i)==1) {
    j++;
    return i;
     }
     i++;
}


}
int main(){
    int N,M,tmp;
    scanf("%d %d",&N,&M);
    tmp=N;
    for(int i=0;i<M;i++){
    printf(" %d",next_prime(tmp));
    tmp=next_prime(tmp);
    }

return 0;
}