juuuding

CH 15 도전! 프로그래밍 2 본문

C언어/윤성우의 열혈 C

CH 15 도전! 프로그래밍 2

jiuuu 2023. 3. 16. 11:04

 도전 1

 

Q) 길이가 10인 배열을 선언하고 정수를 입력 받아서, 홀수 짝수를 구분 지어 출려가는 프로그램을 작성해보자. 일단 홀수부터 출력하고 나서 짝수를 출력하도록 하자. 10개의 정수는 main함수 내에서 입력 받고, 홀수 짝수 함수를 출력하는 함수를 각각 정의해서 두 함수를 호출하는 방식으로 프로그램을 완성하자.

 

[실행의 예]

10개 숫자 입력: 1,2,3,4,5,6,7,8,9,10

홀수 출력: 1,3,5,7,9

짝수 출력: 2,4,6,8,10

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

/*길이가 10인 배열에 정수 입력 받고 짝수, 홀수 따로 출력하는 함수 만들어 호출*/

void Even(int param[]) {
	int i = 0;
	printf("짝수 출력: ");
	for (i = 0; i < 10; i++) {
		if (param[i] % 2 == 0) {
			
			printf("%d ",param[i]);
		}
	}
}

void Odd(int param[]) {
	int i = 0;
	printf("홀수 출력: ");
	for (i = 0; i < 10; i++) {
		if (param[i] % 2 != 0) {

			printf("%d ", param[i]);
		}
	}
}

int main(void) {

	int arr[10];
	int i;
	int even=0, odd=0;

	for (i = 0; i < 10; i++) {

		printf(" % d번째 정수 입력 : ", i+1);
		scanf("%d", &arr[i]);
	}

	Even(&arr);
	printf('\n');
	Odd(&arr);
	

}

 

 

 도전 2

 

Q) 10진수 정수를 입력 받아 2진수로 변환해서 출력하는 프로그램을 작성하자.

 

[실행의 예]

10진수 정수 입력: 12

1100

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

/*10진수 정수 입력 받고 2진수로 변환해서 출력*/

int main(void) {

	int n, i, j;
	int arr[50];

	printf("10진수 정수 입력: ");
	scanf("%d", &n);

	i = 0;

	//2진수로 변환
	while (1) {
		arr[i] = (n % 2);
		if (n == 1) break;
		n /= 2;
		i++;
	}

	//출력
	for (j = i; j >= 0; j--) {
		printf("%d", arr[j]);
	}


}

 

 

 도전 3

 

Q) 길이가 10인 배열을 선언하고 총 10개의 정수를 입력 받는다. 입력 받은 숫자가 홀수이면 배열의 앞에서부터 채워나가고 짝수이면 뒤에서부터 채워나간다. [1,2,3,4,5,6,7,8,9,10]을 입력했다면 [1,3,5,7,9,10,8,6,4,2] 순으로 저장돼야 한다.

 

[실행의 예]

입력: 1 1 4 4 4 4 3 3 2 2 

배열 요소의 출력: 1 1 3 3 2 2 4 4 4 4

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

/*정수 입력 받고 홀수는 앞에서부터 짝수는 뒤에서부터 배열 채워나가기*/

int main(void) {
	
	int n;
	int i,k,j;
	int arr[10];
	int result[10];

	printf("총 10개 숫자 입력\n");
	for (i = 0; i < 10; i++) {

		printf("입력: ");
		scanf("%d", &arr[i]);

	}

	i = 0;
	
	for (k = 0; k < 10; k++) {
		if (arr[k] % 2 != 0) {
			result[i] = arr[k];
			i++;
		}
	}

	j = 9;
	
	for (k = 0; k < 10;k++) {
		if (arr[k] % 2 == 0) {
			result[j] = arr[k];
			j--;
		}
	}

	for (i = 0; i < 10; i++) {
		printf("%d ", result[i]);
	}
	

}

 

 

 도전 4

 

Q) 회문은 앞으로 뒤로 읽으나 차이가 없는 단어이다. 예를 들어 level, bob는 회문에 속한다. 영단어가 회문인지 아닌지 판단하고 결과를 출력하는 함수를 정의해보자. 대소문자까지 일치해야 회문으로 인정하기로 하겠다.

 

[실행의 예]

문자열 입력: noon

회문입니다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>


/*회문은 앞뒤로 읽어도 차이가 없는 단어이다. 회문인지 아닌지 판단하는 함수를 만들어 출력*/

void Palindrome(char param[], int length) {
	
	int i;
	int j = 0;

	//문자의 앞뒤로 아스키코드 값을 비교
	for (i = 0; i < length / 2; i++) {
		if (param[i] == param[length - i - 1]) j++;
	}

	//앞뒤가 대칭으로 같아야 j=i일 것이므로
	if (j == i) printf("회문입니다.");
	else printf("회문이 아닙니다.");
}

int main(void) {

	char str[50];
	int len;

	printf("단어 입력: ");
	scanf("%s", str);

	//strlen 함수는 문자열의 길이를 반환하되, 널 문자의 길이는 포함하지 않는다.
	len = strlen(str);

	Palindrome(str, len);

}

 

 

 도전 5

 

Q) 버블 정렬을 사용하여 배열에 저장되어 있는 요소들을 내림차순으로 정렬하는 함수를 정의하자(함수의 이름은 DesSort로 정의). 그리고 이 함수를 호출하는 예제를 작성해보자. 프로그램의 흐름은 다음과 같이 구성하자. int형 배열을 선언하여 7개의 정수를 입력받고, 이를 내림차순으로 정렬하기 위해서 배열을 인자로 전달하면서 DesSort 함수를 호출하자. 이후 확인을 위해 배열의 요소들을 순서대로 출력해보자. 

 

[실행의 예]

입력: 1 2 3 4 5 6 7

7 6 5 4 3 2 1

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

/*버블정렬을 이용하여 내림차순으로 배열 정리*/

void DesSort(int array[],int length);

int main(void) {

	int arr[7];
	int i, len;

	for (i = 0; i < 7; i++) {
		printf("입력: ");
		scanf("%d", &arr[i]);
	}

	len = sizeof(arr) / sizeof(int);

	DesSort(arr, len);

	printf("내림차순 정렬: ");
	for (i = 0; i < 7; i++) {
		printf("%d ", arr[i]);
	}

	return 0;
}

void DesSort(int array[], int length) {

	int i,j;
	int temp;

	for (i = 0; i < length-1; i++) {
		for (j = 0; j < length - i-1; j++) {
			if (array[j]<array[j+1]) {
				temp = array[j];
				array[j] = array[j + 1];
				array[j + 1] = temp;
			}
		}
	}

}

'C언어 > 윤성우의 열혈 C' 카테고리의 다른 글

CH 17 포인터의 포인터  (0) 2023.03.17
CH 16 다차원 배열  (0) 2023.03.16
CH 14 포인터와 함수에 대한 이해  (0) 2023.03.15
CH 13 포인터와 배열 함께 이해하기  (0) 2023.03.15
CH 12 포인터의 이해  (0) 2023.03.15