문제1. 길이가 10인 배열을 선언하고 총 10개의 정수를 입력 받아서, 홀수와 짝수를 구분 지어 출력하는 프로그램을 작성해 보자. 일단 홀수부터 출력하고 나서 짝수를 출력하도록 하자. 단, 10개의 정수는 main함수 내에서 입력받도록 하고, 배열 내에 존재하는 홀수만 출력하는 함수와 배열 내에 존재하는 짝수만 출력하는 함수를 각각 정의해서 이 두 함수를 호출하는 방식으로 프로그램을 작성하자.
예제입력1)
1 2 3 4 5 6 7 8 9 0
예제출력1)
홀수 : 1, 3, 5, 7, 9
짝수 : 2, 4, 6, 8, 0
해설
함수로 배열을 전달한 후에 함수내에서 만약에 홀수를 출력하는 함수이면 전달된 배열의 각 인덱스 요소를 2로 나누었을시 나머지가 0이 아니면 출력, 짝수일 경우 나머지가 0일 경우 출력해주면 되는 간단한 문제이다.
소스코드 ▼
#include<stdio.h>
#define SIZE 10
void oddNum(int param[], int len) {
printf("홀수출력 :");
for (int a = 0; a < SIZE; a++) {
if (param[a] % 2 != 0) {
printf("%d ", param[a]);
}
}
printf("\n");
}
void evenNum(int param[], int len) {
printf("짝수출력 :");
for (int a = 0; a < SIZE; a++) {
if (param[a] % 2 == 0) {
printf("%d ", param[a]);
}
}
}
int main(void) {
int arr[SIZE];
printf("총 10개의 숫자 입력\n");
for (int k = 0; k < SIZE; k++) {
printf("입력 : ");
scanf("%d", &arr[k]);
}
oddNum(arr, sizeof(arr) / sizeof(int));
evenNum(arr, sizeof(arr) / sizeof(int));
return 0;
}
문제2 : 프로그램 사용자로부터 10진수 형태의 정수를 하나 입력 받은 다음, 이를 2진수로 변환해서 출력하는 프로그램을 작성해 보자.
예제입력1)
10진수 정수 입력 : 12
예제출력1)
1100
예제입력2)
10진수 정수 입력 : 11
예제출력2)
1011
해설
10진법을 2진법으로 변환하는 방법은 다음과 같다.
아래 그림과 같이 10진법 숫자를 2로 계속해서 더이상 나눌게 없을때까지 나눈 다음 나머지를 차례로 연결하면 그것이 10진법 숫자를 2진법으로 변환하는 방법이다.
1. 10진수를 수를 2로 나눈 나머지를 차례차례 미리 선언해둔 배열에 저장한다.
2. 2로 나눈 나머지를 구한 후 원래 10진수수를 2로 나누어서 초기화 한다.
3. 10진수 숫자가 0보다 클때까지만 계속 반복한다.
4. 배열에 저장된 나머지 숫자들을 끝에서부터 차례로 출력한다.
소스코드 ▼
#include<stdio.h>
int main(void) {
int dec_num, start = 0, end; //10진수형태의 정수, 인덱스 시작지점, 인덱스 끝지점
int arr[1000];
printf("10진수 정수 입력 : ");
scanf("%d", &dec_num);
while (dec_num > 0) {
arr[start] = dec_num % 2;
dec_num /= 2;
start++;
}
end = start;
for (int a = end - 1; a >= 0; a--) {
printf("%d ", arr[a]);
}
return 0;
}
문제4 : 회문(Palindrome)은 앞으로 읽으나 뒤로 읽으나 차이가 없는 단어들을 뜻한다. 예를 들어서 level, bob 과 같은 단어들은 회문에 속한다. 이에 우리는 인자로 전달되는 영단어가 회문인지 아닌지를 판단해서 그 결과를 출력하는 기능의 함수를 정의하고 이에 적절한 main 함수를 정의해보고자 한다.
(단어의 길이는 100자를 넘지 않는다.)
예제입력1) level
예제출력1) 회문입니다
예제입력2) sofrware
예제출력2) 회문이 아닙니다
해설
(※문자열 길이를 계산해주는 함수 strlen을 사용한다.)
1. 문자열의 대칭이 같은 문자인지 체크하면서 반복문을 돌린다.
2. 문자열의 길이가 홀수이든 짝수이든 2로 나누어서 반복문을 돌리면 된다.
3. 만약 대칭에 있는 문자가 서로 다른 문자이면 반복문을 탈출하고 그 자리에서 프로그램을 종료시킨다.
4. 만약에 대칭에 있는 문자가 서로 같은 문자이면 인덱스 값을 증가, 감소시키면서 다시 반복문을 돌아간다.
소스코드 ▼
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void) {
char str[100];
int start, end, length;
scanf("%s", str);
length = strlen(str);
start = 0, end = length - 1;
for (int k = 0; k < length / 2; k++) {
if (str[start] != str[end]) {
printf("회문이 아닙니다");
exit(0);
}
else {
start++;
end--;
}
}
printf("회문입니다");
return 0;
}
문제3, 5번은 또 따로 올리겠다.
'C언어 문제풀이' 카테고리의 다른 글
C언어 - 포인터 관련 연습문제 (0) | 2023.07.13 |
---|