반응형

*C언어 함수(심화)

// 문제 : 입력받은 숫자가 10이라고 할때 1부터 10 사이에 존재하는 모든 소수를 출력하는 함수 구현
#include <stdio.h>
#pragma warning (disable: 4996)

// 소수 판별함수
int is_prime_number(int number) {
  if ( number <= 1 ) {
    return 0;
  }

  for ( int i = 2; i < number; i++ ) {
    if ( number % i == 0 ) {
      // 리턴을 하면 함수가 그 즉시 종료
      return 0;
    }
  }

  return 1;
}

// 입력된 숫자 범위 내 숫자 확인 및 소수 판별함수에 전달하여 값 호출
void print_1_to_n_prime_numbers(int num) {
  for ( int i = 1; i <= num; i++ ) {
    if ( is_prime_number(i) ) {
      printf("%d\n", i);
    }
  }
}

int main(void) {
  print_1_to_n_prime_numbers(100);
  return 0;
}



// 문제 : 1부터 n 사이의 수 중에서 소수의 개수 반환하는 함수 `get_1_to_n_prime_numbers_count` 구현.
#include <stdio.h>
#pragma warning (disable: 4996)

// 소수 판별 함수
int is_prime_number(int number) {
  if ( number <= 1 ) {
    return 0;
  }

  for ( int i = 2; i < number; i++ ) {
    if ( number % i == 0 ) {
      // 리턴을 하면 함수가 그 즉시 종료
      return 0;
    }
  }

  return 1;
}

// 1부터 n 사이의 수 중에서 소수의 개수 반환하는 함수
int get_1_to_n_prime_numbers_count(int n) {
  int count = 0;

  for(int i = 1; i <= n; i++) {
    if(is_prime_number(i)) {
      count++;
    }
  }

  return count;
}

int main() {
  int count;
  int number;

  number = 1000;
  count = get_1_to_n_prime_numbers_count(number);
  printf("1부터 %d사이에 존재하는 소수의 개수 : %d개\n", number, count);
  // 출력 => 1부터 1000사이에 존재하는 소수의 개수 : 168개

  number = 2000;
  count = get_1_to_n_prime_numbers_count(number);
  printf("1부터 %d사이에 존재하는 소수의 개수 : %d개\n", number, count);
  // 출력 => 1부터 2000사이에 존재하는 소수의 개수 : 303개

  return 0;
}



// 문제 : 1부터 n 사이의 수 중에서 소수의 합을 반환하는 함수 `get_1_to_n_prime_numbers_sum` 구현
#include <stdio.h>
#pragma warning (disable: 4996)

// 소수 판별함수
int is_prime_number(int number) {
  if ( number <= 1 ) {
    return 0;
  }

  for ( int i = 2; i < number; i++ ) {
    if ( number % i == 0 ) {
      // 리턴을 하면 함수가 그 즉시 종료
      return 0;
    }
  }

  return 1;
}

// 1부터 n 사이의 수 중에서 소수의 개수 반환하는 함수
int get_1_to_n_prime_numbers_sum(int n) {
  // 구현
  int sum = 0;

  for ( int i = 0; i <= n; i++ ) {
    if(is_prime_number(i)) {
      sum += i;
    }
  }

  return sum;
}

int main() {
  int sum;
  int number;

  number = 1000;
  sum = get_1_to_n_prime_numbers_sum(number);
  printf("1부터 %d사이에 존재하는 소수의 개수 : %d개\n", number, sum);
  // 출력 => 1부터 1000사이에 존재하는 소수의 합 : 76127

  number = 2000;
  sum = get_1_to_n_prime_numbers_sum(number);
  printf("1부터 %d사이에 존재하는 소수의 개수 : %d개\n", number, sum);
  // 출력 => 1부터 2000사이에 존재하는 소수의 합 : 277050

  return 0;
}



// 문제 : 3가지 다른 방법으로 a부터 z까지 출력하는 함수 구현
// 힌트 : 사실 C언어에서 'a'는 따로 존재하지 않는다. 'a'는 사실 97의 또 다른 이름이다.
// 힌트 : C언어에서 'a'는 97과 완전히 같은 뜻이다.
// 힌트 : C언어에서 'b'는 98과 완전히 같은 뜻이다.
#include <stdio.h>
#pragma warning (disable: 4996)

void print_a_to_z_v1() {

  printf("abcdefghijklmnopqrstuvwxyz\n");

}

void print_a_to_z_v2() {
  
  for ( int i = 97; i < 97 + 26; i++ ) {
    printf("%c", i);
  }
  printf("\n");

}

void print_a_to_z_v3() {
  
  for ( int i = 'a'; i <= 'z'; i++ ) {
    printf("%c", i);
  }
  printf("\n");

}

int main(void) {
  printf("== 정답 v1 ==\n");
  print_a_to_z_v1();
  printf("== 정답 v2 ==\n");
  print_a_to_z_v2();
  printf("== 정답 v3 ==\n");
  print_a_to_z_v3();

  return 0;
}



// 문제 : n부터 m 사이에 존재하는 정수의 합을 반환하는 함수를 만들어주세요.
#include <stdio.h>
#pragma warning (disable: 4996)

int print_n_to_m_number_sum(int a, int b) {

  int sum = 0;

  for ( int i = a; i <= b; i++ ) {
    sum += i;
  }

  return sum;
}

int main(void) {
  printf("1부터 10사이에 존재하는 정수의 합 : %d\n", print_n_to_m_number_sum(1,10));
  printf("1부터 50사이에 존재하는 정수의 합 : %d\n", print_n_to_m_number_sum(1,50));
  printf("1부터 100사이에 존재하는 정수의 합 : %d\n", print_n_to_m_number_sum(1,100));
  return 0;
}



// 문제 : n부터 m 사이에 존재하는 소수의 합을 반환하는 함수를 만들어주세요.
#include <stdio.h>
#pragma warning (disable: 4996)

int is_prime_number(int number) {

  if ( number <= 1 ) {
    return 0;
  }

  for ( int i = 2; i < number; i++ ) {
    if ( number % i == 0 ) {
      return 0;
    }
  }
  
  return 1;
}

int print_n_to_m_number_sum(int a, int b) {

  int sum = 0;

  for ( int i = a; i <= b; i++ ) {
    if(is_prime_number(i)) {
      sum += i;
    }
  }

  return sum;
}

int main(void) {
  printf("1부터 10사이에 존재하는 정수의 합 : %d\n", print_n_to_m_number_sum(1,10));
  printf("1부터 50사이에 존재하는 정수의 합 : %d\n", print_n_to_m_number_sum(1,50));
  printf("1부터 100사이에 존재하는 정수의 합 : %d\n", print_n_to_m_number_sum(1,100));
  return 0;
}



// 문제 : 별찍기(직사각형)
#include <stdio.h>
#pragma warning (disable: 4996)

void print_rect(int a, int b) {
  printf("== a = %d, b = %d ==\n", a, b);

  for ( int i = 1; i <= b; i++ ) {
    for ( int k = 1; k <= a; k++ ) {
      printf("*");
    }
    printf("\n");
  } 

}

int main(void) {
  print_rect(3, 5);
  // 출력
  /*
  ***
  ***
  ***
  ***
  ***
  */

  print_rect(5, 2);
  // 출력
  /*
  *****
  *****
  */

  print_rect(10, 3);
  // 출력
  /*
  **********
  **********
  **********
  */

  return 0;
}



// 문제 : 별찍기(삼각형)
#include <stdio.h>
#pragma warning (disable: 4996)

void print_tri(int num) {

  for( int i = 1; i <= num; i++ ) {
    for ( int k = 1; k <= i; k++ ) {
      printf("*");
    }
    printf("\n");
  }

}

int main(void) {
  print_tri(3);
  // 출력
  /*
  *
  **
  ***
  */

  print_tri(5);
  // 출력
  /*
  *
  **
  ***
  ****
  *****
  */

  print_tri(7);
  // 출력
  /*
  *
  **
  ***
  ****
  *****
  ******
  *******
  */

  return 0;
}



// 문제 : 별찍기(삼각형 - 심화)
#include <stdio.h>
#pragma warning (disable: 4996)

void print_tri(int num) {
  printf("num : %d 일때\n", num);
  for( int i = 1; i <= num; i++ ) {
    for( int k = num; k >= 1; k-- ) {
      if( k <= i ) {
        printf("*");
      } else {
        printf(" ");
      }
    }
    printf("\n");
  }
  

}

int main(void) {
  print_tri(3);
  // 출력
  /*
    *
   **
  ***
  */

  print_tri(5);
  // 출력
  /*
      *
     **
    ***
   ****
  *****
  */

  print_tri(7);
  // 출력
  /*
        *
       **
      ***
     ****
    *****
   ******
  *******
  */

  return 0;
}



// 문제 : 양의정수 제곱근을 반환하는 함수를 구현해주세요.
// 조건 : 양의 정수 제곱근이 없다면 -1을 리턴
#include <stdio.h>
#pragma warning (disable: 4996)

int get_sqrt(int num) {

  for ( int i = 1; i <= num; i++ ) {
    if( i * i == num ) {
      printf("%d", i);
      return i;
    }
  }

  return -1;
}

int main(void) {
  int rs;
  int num;

  num = 4;
  rs = get_sqrt(num);
  printf("%d의 제곱근은 %d 입니다.\n", num, rs);
  // 출력 => 4의 제곱곤은 2 입니다.

  num = 5;
  rs = get_sqrt(num);
  printf("%d의 제곱근은 %d 입니다.\n", num, rs);
  // 출력 => 5의 제곱곤은 -1 입니다.

  num = 6;
  rs = get_sqrt(num);
  printf("%d의 제곱근은 %d 입니다.\n", num, rs);
  // 출력 => 6의 제곱곤은 -1 입니다.

  num = 9;
  rs = get_sqrt(num);
  printf("%d의 제곱근은 %d 입니다.\n", num, rs);
  // 출력 => 9의 제곱곤은 3 입니다.

  return 0;
}
반응형

+ Recent posts