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

C언어 함수 실습문제 풀이 CH7 (8~11)

라이피 (Lypi) 2018. 5. 20. 18:58
반응형

8. main()함수의 매개변수로 입력된 수 만큼의 "*"를 출력하는 프로그램.

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

void print_char(char c, int n);

int main(int argc, char *argv[])
{
	if(argc != 2){
		printf("매개변수로 10진수 하나를 입력하세요 \n");
		return 0;
	}

	for (int i = 0; argv[1][i] != '\0'; i++) {
		if (argv[1][i] < '0' || argv[1][i] > '9') {
			printf("매개변수로 10진수 하나를 입력하세요 \n");
			return 0;
		}
	} // 매개변수 유효성 검사.

	int n = atoi(argv[1]);

	for (int i = 0; i < n; i++) {
		print_char(' ', n - i);
		print_char('*', 2 * i - 1);
		printf("\n");
	} //윗부분

	for (int i = 0; i < n - 1; i++) {
		print_char(' ', i);
		print_char('*', 2 * n - 2 * i - 1);
		printf("\n");
	} // 아래부분
}

void print_char(char c, int n)
{
	for (int i = 0; i < n; i++) {
		printf(" %c", c);
	}
} 


9. main()함수의 매개변수로 sin, cos, all 중 하나를 입력받아서 그에 따른 삼각함수 그래프를 출력하는 프로그램

#include <stdio.h>
#include <math.h> // sin(), cos() 사용
#include <string.h> //strcpy_s() 사용


const double PI = 3.141593;
const double radian = PI / 180.0;

int main(int argc, char* argv[])
{
	char p[50];
	int ts = -1, tc = -1;

	int sin_ok = 0, cos_ok = 0;


	if (argc != 2) {
		printf("매개변수 한개를 입력해주세요. \n");
		return 0;
	}

	if (argv[1][0] == 's' && argv[1][1] == 'i' && argv[1][2] == 'n') {
		sin_ok = 1;
	}else 
	if (argv[1][0] == 'c' && argv[1][1] == 'o' && argv[1][2] == 's') {
		cos_ok = 1;
	}else
	if (argv[1][0] == 'a' && argv[1][1] == 'l' && argv[1][2] == 'l') {
		sin_ok = 1;
		cos_ok = 1;
	}

	printf("\t-1                   0                        1\n");
	printf("\t                     |                         \n");

  char si[] = "                    |                       ";


	for (int n = 0; n <= 360; n += 15) {
		strcpy_s(p,si);
		if(sin_ok == 1) {
			ts = (int)(20 + 20 * sin(n * radian));
			p[ts] = '*';
		}
		
		if (cos_ok == 1) {
			tc = (int)(20 + 20 * cos(n * radian));
			p[tc] = 'o';
		}

		if(ts == tc) {
			p[ts] = '+';
		}

		printf("%5d\t %s\n", n, p);
	}
}
//vs에서 main함수의 매개변수로 전달하는 문자열의 뒤에는 null문자가 빠져있는게 분명하다. 


10. main()함수의 매개변수로 10진수 3개를 입력받은 뒤, 헤론의 공식을 이용하여 삼각형의 넓이를 계산하는 프로그램

#include <stdio.h> #include <math.h> // sin(), cos(), pow() 사용 #include <string.h> //strcpy_s() 사용 #include <stdlib.h> //atoi() 사용 double tri_area_heron(double a, double b, double c); const double PI = 3.141593; const double radian = PI / 180.0; int main(int argc, char* argv[]) { double a, b, c; double area; if (argc != 4) { printf("삼각형의 3변을 10진수 3개로 입력해주세요. \n"); return 0; } a = atof(argv[1]); b = atof(argv[2]); c = atof(argv[3]); area = tri_area_heron(a, b, c); if (area != 0) { printf("변의 길이가 %.2f, %.2f, %.2f인 삼각형의 넓이는 %.2f입니다. \n", a, b, c, area); } return 0; } double tri_area_heron(double a, double b, double c) { //제일 긴 변을 확인 double max = (a>b) ? (a > c ? a : c) : (b > c ? b : c); //헤론의 공식에서 기본적으로 쓰이는 s를 구함. double s = (a + b + c) / 2; // a>b>c일때 a < b+c 일때만 삼각형이 성립됨 if (max == a && a >= b + c || max == b && b >= a + c || max == c && c >= a + b) { printf("삼각형이 성립되지 않습니다. \n"); return 0; } //pow는 제곱을 구하는 함수인데 1/2 제곱은 루트와 같음. return pow(s*(s - a)*(s - b)*(s - c), 1 / 2.0); }

//매개변수가 1개 이상일 때는 문자열을 널문자까지 확인해서 제대로 들어왔는지 확인하는게 안됨. 언젠가 이유를 알아오리라.


11. main의 매개변수로 정수를 받아들여 소수인지를 판단하는 프로그램을 작성하라.

#include <stdio.h>
#include <stdlib.h> //atoi() 사용

int main(int argc, char* argv[])
{
	int x;

	if (argc != 2) {
		printf("매개변수로 10진수를 입력하세요 \n");
		return 0;
	}

	for (int i = 0; argv[1][i] != '\0'; i++) {
		if (argv[1][i] < '0' || argv[1][i] > '9') {
			printf("매개변수로 10진수를 입력하세요 \n");
			return 0;
		}
	}
	//여기까지 매개변수 유효성 검사.

	x = atoi(argv[1]);
	//문자변수를 정수형으로 변환

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

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

// 이런건 짜집기만으로 끝!

반응형