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

C언어 연습문제 풀이 CH11 (1 ~ 4)

라이피 (Lypi) 2018. 6. 10. 01:29
반응형

1. isalpha()를 이용하여 알파벳 대/소문자를, isdigit()와 ispunct()함수를 이용하여 숫자와 특수 문자를 출력하는 프로그램을 작성하라.

//isalpha()를 이용하여 알파벳 대/소문자를, isdigit()와 ispunct()함수를 이용하여 숫자와 특수 문자를 출력하는 프로그램을 작성하라.

#include <stdio.h>
#include <ctype.h>

//C언어는 아스키코드로 문자를 표현하고 아스키코드는 총 256개(1byte)이다. 
int main()
{
	printf("isalpha : ");
	for (int i = 0; i < 256; i++) {
		if (isalpha(i)) {
			printf("%c ", i);
		}
	}
	printf("\n");

	printf("isdigit : ");
	for (int i = 0; i < 256; i++) {
		if (isdigit(i)) {
			printf("%c ", i);
		}
	}
	printf("\n");

	printf("ispunct : ");
	for (int i = 0; i < 256; i++) {
		if (ispunct(i)) {
			printf("%c ", i);
		}
	}
	printf("\n");
}


2. 당신의 이름과 암호를 입력할 때 만약 틀린 경우 "invaild password"메시지를, 성공하면 "success"메시지를 출력하는 프로그램을 작성하라.

// 이름과 암호를 입력할 때 만약 틀린 경우 "invaild password"메시지를, 성공하면 "success"메시지를 출력하는 프로그램을 작성하라.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{

	char buffer[128];

	printf("성을 입력하세요 : "); gets_s(buffer);
	char* FamilyName = NULL;
	FamilyName = (char*)malloc(sizeof(char) * strlen(buffer) + 1);
	//동적할당을 하기 전에는 포인터를 NULL로 초기화하고 하자.
	strcpy_s(FamilyName, _msize(FamilyName), buffer);
	//초기화 크기는 정확한 사이즈로 줍시다.
	printf("%d \n", _msize(FamilyName));

	printf("이름을 입력하세요 : "); gets_s(buffer);
	char* GivenName = NULL;
	GivenName = (char*)malloc(sizeof(char) * strlen(buffer)+1);
	strcpy_s(GivenName, _msize(GivenName), buffer);
	printf("%d \n", _msize(GivenName));

	printf("비밀번호를 입력하세요 : "); gets_s(buffer);
	char* password = NULL;
	password = (char*)malloc(sizeof(char) * strlen(buffer)+1);
	strcpy_s(password, _msize(password), buffer);
	printf("%d \n", _msize(password));

	char* FullName = (char*)malloc(sizeof(char) * (strlen(FamilyName)+strlen(GivenName)+1));
	printf("%d \n", _msize(FullName));

	strcpy_s(FullName, _msize(FullName), FamilyName);
	strcat_s(FullName, _msize(FullName), GivenName);
	//strcat_s()의 가운데 값은 들어갈 메모리의 사이즈 값으로 줘야한다.

	free(FamilyName);
	free(GivenName);

	if (!strcmp(FullName, "kimisaak") && !strcmp(password, "597400")) {
		printf("Login Sucess \n");
	}
	else {
		printf("invalid password");
	}
	
}

// 뭔가 메모리 관리면에서 에러가 많이 났는데 제대로 기록 안해두고 해결해버린 느낌...


3. 산술 함수를 이용하여 0, 15, 30, 45, 60, 75, 90에 대한 sin, cos, tan값을 구하고, 

키보드로 입력된 값에 대해 제곱근, 자승, log값을 구하는 프로그램을 작성하라. 

//sin,cos,tan 값을 구하고, 입력받은 값에 대한 제곱근, 자승, log값을 구하는 프로그램.

#include <stdio.h>
#include <math.h>

int main()
{
	for (double i = 0; i <= 90; i += 15) {
		printf("sin % 5.1f = % .6f , cos % 5.1f = % .6f, tan % 5.1f = % .6f \n", i, sin(i), i, cos(i), i, tan(i));
	}

	{
		double root;
		printf("제곱근을 구할 값을 입력하세요 : "); scanf_s("%lf", &root);
		printf("%g의 제곱근은 %g입니다. \n", root, sqrt(root));
	}

	{
		double a, b;
		printf("a^b의 값을 계산합니다. \n");
		printf("a값을 입력하세요 : "); scanf_s("%lf", &a);
		printf("b값을 입력하세요 : "); scanf_s("%lf", &b);
		printf("%g^%g = %g \n", a, b, pow(a, b));
	}

	{
		double x;
		printf("Log_10 x값을 계산합니다. \n");
		printf("x값을 입력하세요 : "); scanf_s("%lf", &x);
		printf("Log_10 %g = %g", x, log10(x));
	}
}


4. 2차 방정식 ax^2+bx+c = 0에서 a, b, c를 입력받아 그 근을 구하는 함수를 작성하라. 

이때 무한루프를 이용하고, 'q'를 입력하면 루프를 빠져나가도록 작성하라.

//2차 방정식의 근을 구하는 예제
//매크로 함수로 한거 가져옴...

#include <stdio.h>
#include <conio.h>

#define DISPLINANT(a,b,c) ((b)*(b)-(4*(a)*(c)))
#define QUADRATIC_PLUS_VALUE(format,a,b,c) printf("%"#format"\n",(-(b)+DISPLINANT(a,b,c))/2*(a))
#define QUADRATIC_MINUS_VALUE(format,a,b,c) printf("%"#format"\n",(-(b)-DISPLINANT(a,b,c))/2*(a))
#define QUADRATIC_PLUS_IMAGINE_VALUE(f,a,b,c) printf("%"#f"+%"#f"i \n",-((b)/2*(a)),(DISPLINANT(a,b,c)/2*(a)))
#define QUADRATIC_MINUS_IMAGINE_VALUE(f,a,b,c) printf("%"#f"+%"#f"i \n",-((b)/2*(a)),(DISPLINANT(a,b,c)/2*(a)))


int main()
{
	while (1) {
		double a, b, c;

		printf("a값을 입력하세요 : "); scanf_s("%lf", &a);
		while (getchar() != '\n');
		printf("b값을 입력하세요 : "); scanf_s("%lf", &b);
		while (getchar() != '\n');
		printf("c값을 입력하세요 : "); scanf_s("%lf", &c);
		while (getchar() != '\n');

		if (DISPLINANT(a, b, c) >= 0) {
			printf("%gx^2+%gx+%g = 0의 근은 다음과 같습니다. \n", a, b, c);
			QUADRATIC_PLUS_VALUE(g, a, b, c);
			QUADRATIC_MINUS_VALUE(g, a, b, c);
		}
		else {
			printf("%gx^2+%gx+%g = 0의 근은 다음과 같습니다. \n", a, b, c);
			QUADRATIC_PLUS_IMAGINE_VALUE(g, a, b, c);
			QUADRATIC_MINUS_IMAGINE_VALUE(g, a, b, c);
		}

		printf("종료하시려면 q를 누르세요. 그외 키는 반복합니다.");
		if ('q' == _getch() || 'Q' == _getch()) {
			return 0;
		}
	}
}


반응형