본문 바로가기
개발 공부/C언어

#17 [열혈 C 프로그래밍] 도전! 프로그래밍2 - 1번, 2번, 3번, 4번

by 반달bear 2022. 8. 4.
반응형

 

p328의 도전 1 

 

내가 짠 코드

#include<stdio.h>

void OddNumber(int * arr,int len){ //홀수 함수
    for(int i=0;i<len;i++){
        if(arr[i]%2 == 1)
            printf("%d  ",arr[i]);
    }
}

void EvenNumber (int * arr,int len){  //짝수함수
    for(int i=0;i<len;i++){
        if(arr[i]%2 == 0)
            printf("%d ",arr[i]);
    }
}
int main(){
    
    int arr[10];
    int len =sizeof(arr)/sizeof(int);

    for(int i=0; i<len;i++){
        printf("숫자를 입력하셈");
        scanf("%d",&arr[i]);
    }

    printf("홀수 :");
    OddNumber(arr, len);
    printf("\n짝수 :");
    EvenNumber(arr, len);
    return 0;
}
 

 

 


 

p328 도전 2번

#include<stdio.h>
#include<math.h>
void Binary(int * num); //포인터를 사용한 이진수 함수

int main(){
    int num, result;
    printf("숫자를 입력하세요 : ");
    scanf("%d",&num);
    Binary(&num);
    printf("이진수 : %d",num);
    return 0;
}
void Binary(int * num){
    int a[20], i=0;
    int same = (*num); // 코드를 깔끔하게 하기 위해 main 함수의 num값을 same에 할당
    while (same>0)
    {
        a[i]=same%2;
        same/=2;
        i++;
    }
    
    while (i>0)
    {
        same += (a[i-1]*(pow(10,i-1)));
        i--;
    }

    *num=same; //same을 다시 num에 할당

    
}
 

 

 


3번 - 포인터 안쓴 버전

하다가 출력이 자꾸 안돼서 계속 고민했는데

알고보니 내가 배열 끝을 자꾸 +1로 생각해서 그런거였음....

배열 자꾸 실수하는데 생각 잘 좀 합시당...

 

#include<stdio.h>

int main(){
   int arr[10];
   int len =10;
   int oddnum=0, evennum=0; //배열에서 홀수 번째 짝수번째가 다르게 걸림으로 따로 선언해줌

    for(int i=0;i<len;i++){
     int num;
    
     printf("숫자를 입력하시오");
     scanf("%d",&num);


     if((num%2) == 1){ //홀수라면
         arr[oddnum]=num;
         oddnum++;
        }  
     else{  //짝수라면
         arr[9-evennum]=num;
         evennum++;
        }
    
   
    }
   

    for(int i=0;i<len;i++){ //  배열 출력
     printf("%d ",arr[i]);
    }
   
    return 0;
}
 

 

포인터 쓴 버전

#include<stdio.h>
void Array(int * arr,int len); //포인터 사용한 배열해주는 함수 선언
int main(){
   int arr[10];
   int len =10;
   
    
   Array(arr,len); //배열 주소랑 길이를 매개변수로 전송

    for(int i=0;i<len;i++){ //  배열 출력
     printf("%d ",arr[i]);
    }
   
    return 0;
}

void Array(int * arr, int len){  
     int oddnum=0, evennum=0; //배열에서 홀수 번째 짝수번째가 다르게 걸림으로 따로 선언해줌

     for(int i=0;i<len;i++){
     int num;
    
     printf("숫자를 입력하시오");
     scanf("%d",&num);


     if((num%2) == 1){ //홀수라면
         arr[oddnum]=num;
         oddnum++;
        }  
     else{  //짝수라면
         arr[9-evennum]=num;
         evennum++;
        }
    }
}
 

 


 

4번

 

  • 제발 배열 개수랑 배열에 값 채울때 쓰는 숫자랑 다르다는거 잊지말자!!! 계속 실수함 이거
  • i++하고 나서 이건 배열 개수니까 배열값 측정할때는 i-1해야되는데 왜 계속 생각을 못하니
#include<stdio.h>
void Palindrome (char * lang); //회문 함수
int main(){
    
    char arr[20];
    printf("문자열 입력");
    scanf("%s",arr);
    Palindrome(arr);


    return 0;
}

void Palindrome(char * lang){
    int i=0,j=0;
    while (lang[i]!= '\0')
    {
        i++;
    }
    
    while (j<=(i/2))
    {
        if(lang[i-1]!=lang[j]){ //회문이 아니라면 
            printf("회문이 아닙니다")  ;
            return;
        }
        i--;
        j++;
    }

    printf("회문입니다");
    
}
 

 

 

반응형

댓글