연재 완료/C Lang 예제코드 모음

c언어 연습문제 풀이 CH4 (4 ~ 11)

라이피 (Lypi) 2018. 5. 8. 15:03
반응형

문제 출처 : YES C (정보공학연구소/생능출판사)


4. 두 정수를 입력받아 곱셈을 하는 프로그램을 작성하라. 이때 정수 이외의 데이터가 들어오면 에러처리를 하라.

#include <stdio.h>

void main()

{
	int num1 = 0, num2 = 0;
	do {
		printf("첫번째 정수를 입력하세요 : "); scanf_s("%d", &num1); while (getchar() != '\n') {}
		printf("두번째 정수를 입력하세요 : "); scanf_s("%d", &num2); while (getchar() != '\n') {}
		if (!(num1 && num2)) {
			printf("잘못입력하셨습니다. 다시 입력해주세요. \n");
		}
	} while (!(num1 && num2));
	/*
		scnaf_s는 형식문자열이 %d이면 첫번째 입력값부터 숫자까지만 입력을 받는다.
		즉 첫번째 입력값이 문자면 초기화된 값이 유지된다. 
		그걸 이용해서 예외처리를 한 것인데 이렇게 하면 입력된 값이 0이면 오류로 처리된다는 문제점이 있다.
		
	*/
	printf("%d와 %d의 곱은 %d입니다.", num1, num2, num1*num2);
}


5. 정수를 입력받아 그 수가 소수인지를 판별하는 프로그램을 반복문을 이용해서 작성하라.

#include <stdio.h>

int main() {
	
	int input = 0;

	printf("소수인지 판별할 값을 입력하세요."); scanf_s("%d", &input);

	for (int i = 2; i <= input; i++)	{
		if (input % i == 0) {
			if (input == i) {
				printf("%d는 소수입니다.", input);
				return 0;
			}
			else {
				break;
			}
		} 
	}

	printf("%d는 소수가 아닙니다. \n",input);

}


6. 공란(blank), 탭(tab), 개행문자(new line)으로 단어를 구분하는 경우, 아래와 같은 영문 문자열을 인수로 받아 알파벳 모음으로 시작하는 단어의 개수를 카운트하는 프로그램을 작성하라. 

#include <stdio.h>

int main() {
	
	char str[210] = "The URL contains the name of the protocol required to access the resource, a domain name that identifies a specific computer on the Internet, and a hierarchical descriptipon of a file location on the computer.";

	int count = 0;

	for (int i = 0; str[i] != '\0'; i++) {
		if (str[i] == ' ') {
			if (str[i + 1] == 'a' || str[i + 1] == 'e' || str[i + 1] == 'i' || str[i + 1] == 'o' || str[i + 1] == 'u' || str[i + 1] == 'A' || str[i + 1] == 'E' || str[i + 1] == 'I' || str[i + 1] == 'O' || str[i + 1] == 'U') {
				count++;
			}
		}
	}

	printf("count = %d \n", count);
}


7. 입력받은 수가 10이면 1~10, 20이면 11~20, 30이면 21~30까지의 합을 출력하는 프로그램을 switch-case문을 이용해서 작성하라.

(실습문제랑 동일한 문제, 동일한 풀이임)

#include <stdio.h>

int main()
{
	int input, sum = 0;

	do {
		printf("10,20,30 중 하나를 입력하세요. : "); scanf_s("%d", &input);
		if (input % 10 != 0) { printf("잘못 입력하셨습니다. 다시 입력해주세요. \n"); }
		while (getchar() != '\n');
	} while (input % 10 != 0);

	switch (input) {
		case 10:
			for (int i = 1; i <= input; i++) { sum += i; } 
			printf("1부터 10까지의 합은 %d 입니다.", sum);
			break;
		case 20:
			for (int i = 11; i <= input; i++) { sum += i; } 
			printf("11부터 20까지의 합은 %d 입니다.", sum);
			break;
		case 30:
			for (int i = 21; i <= input; i++) { sum += i; } 
			printf("21부터 30까지의 합은 %d 입니다.", sum);
			break;
	}

	return 0;

}


8. 100부터 1까지의 수를 출력하는 프로그램을 작성하라. 이 때, 수들 사이는 탭으로 띄우고, 한 줄에 10개씩만 표시하라.

int main() {

	int line = 0;

	for (int i = 100; i > 0; i--) {
		printf("%3d\t", i);
		line++;
		if (line == 10) {
			line = 0;
			printf("\n");
		}
	}
}


9. 100부터 1까지의 수 중에서 짝수만을 출력하는 프로그램을 작성하라.

#include <stdio.h>

int main() {

	int line = 0;

	for (int i = 100; i > 0; i--) {
		if (i % 2 == 0) {
			printf("%3d\t", i);
			line++;
		}
		
		if (line == 5) {
			line = 0;
			printf("\n");
		}
	}
}


10. 1^2 + 2^2 + ... + i^2이 2000을 초과하는 가장 작은 i와 그때의 합을 구하는 프로그램을 while문을 이용하여 작성하라.

#include <stdio.h>

int main() {

	int sum = 0, i = 1, line = 0;

	while (sum < 2000) {
		sum += i * i;

		printf("%d", i*i);

		if (sum > 2000) {
			printf(" = %d \n\n", sum);
			break;
		}

		printf(" + ");

		if (line == 5) {
			line = 0;
			printf("\n");
		}

		line++;
		i++;
	}

	printf("i^2들의 합이 2000을 초과하는 가장 작은 i값은 %d이고, 합은 %d입니다. \n", i, sum);
	
}

11. 다음과 같은 실행결과를 출력하는 프로그램을 작성하라.


#include <stdio.h>

int main() {

	for (int a = 1, i = 26; i >= 14; a++, i--) {
		for (int j = a; j <= i; j++) {
			printf("%c ", j + 64);
		}
		printf("\n");
	}

	for (int a = 13, i = 14; i <= 26; a--,  i++) {
		for (int j = a; j <= i; j++) {
			printf("%c ", j + 64);
		}
		printf("\n");
	}

}


반응형