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

C언어 연습문제 풀이 CH9 (6~14)

라이피 (Lypi) 2018. 5. 31. 01:12
반응형

6. 백화점 신용카드 고객 중 "Johnson"의 정보를 출력하는 프로그램을 작성하라.

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

struct Customer {
	int ID;
	char name[10];
	char address[30];
	char phone[15];
	int price;
};

int main()
{
	Customer list[10];

	list[0] = { 1234, "Johnson", "Taejon,Korea", "042-654-0987", 200000 };
	
	printf("고 객   번 호 : %d \n", list[0].ID);
	printf("   이   름    : %s \n", list[0].name);
	printf("   주   소    : %s \n", list[0].address);
	printf("전 화   번 호 : %s \n", list[0].phone);
	printf("월평균 구매액 : %d원 \n", list[0].price);
}

7. 학생의 이름과 주소를 구조체의 배열에 저장하고 출력하는 프로그램을 작성하라. (단, 학생수는 5명)
struct student {
	char name[10];
	char address[30];
};

int main()
{
	const int N = 5;

	student list[N];

	for (int i = 0; i < N; i++) {
		printf("%d번째 학생의 이름을 입력하세요. : ", i+1); scanf_s("%[^\n]s", list[i].name, 10);
		while (getchar() != '\n') {}
		printf("%d번째 학생의 주소를 입력하세요. : ", i+1); scanf_s("%[^\n]s", list[i].address, 30);
		while (getchar() != '\n') {}
	}

	for (int i = 0; i < N; i++) {
		printf("이름 : %s, 주소 : %s \n", list[i].name, list[i].address);
	}

}

8. 삼각형의 세 변의 길이를 멤버로 갖는 구조체를 정의하고, 
각 세변의 길이를 입력받아 각 필드에 저장한 후 정삼각형과 이등변 삼각형을 구분하는 프로그램을 작성하라.
#include <stdio.h>

struct triangle {
	int a;
	int b;
	int c;
};

int classification(triangle tri);

int main()
{
	triangle here;

	while (1) {

		printf("삼각형의 세변의 길이를 입력받습니다. 0이 입력되면 종료합니다. \n\n");

		printf("삼각형의 첫번째 변의 길이를 입력하세요 : "); scanf_s("%d", &here.a);
		while (getchar() != '\n') {}
		if (here.a == 0) {
			return 0;
		}

		printf("삼각형의 두번째 변의 길이를 입력하세요 : "); scanf_s("%d", &here.b);
		while (getchar() != '\n') {}
		if (here.b == 0) {
			return 0;
		}

		printf("삼각형의 세번째 변의 길이를 입력하세요 : "); scanf_s("%d", &here.c);
		while (getchar() != '\n') {}
		if (here.c == 0) {
			return 0;
		}
		
		switch (classification(here)) {
		case 3: 
			printf("입력하신 삼각형은 정삼각형입니다. \n\n");
			break;
		case 2:
			printf("입력하신 삼각형은 이등변 삼각형입니다. \n\n");
			break;
		case 1:
			printf("입력하신 삼각형은 그냥 삼각형입니다. \n\n");
			break;
		case 0:
			printf("입력하신 변들로는 삼각형을 만들 수 없습니다. \n\n");
			break;
		}
	}

}

int classification(triangle tri) {
	
	if (tri.a < tri.b) {
		tri.a ^= tri.b;
		tri.b ^= tri.a;
		tri.a ^= tri.b;
	} 

	if (tri.a < tri.c) {
		tri.a ^= tri.c;
		tri.c ^= tri.a;
		tri.a ^= tri.c;
	}


	if (tri.a >= tri.b + tri.c) {
		return 0;
	}

	if (tri.a == tri.b && tri.b == tri.c) {
		return 3;
	}
	else if (tri.a == tri.b || tri.b == tri.c || tri.c == tri.a) {
		return 2;
	}
	else {
		return 1;
	}
}


9. 다음의 프로그램을 컴파일한 후 실행결과를 확인하고 프로그램을 분석하라.

#include <stdio.h>

struct stag {
	int i;
	float f;
	char c;
	double d;
	long l;
};

int main()
{
	stag component;

	printf("total bytes of struct stag -> %dbyte \n\n", sizeof(stag));

	component.c = 'a';
	printf("char ->  %c, %dbyte \n\n", component.c, sizeof(char));
	
	component.i = 1;
	printf("int ->  %d, %dbyte \n\n", component.i, sizeof(int));

	component.l = 123456789;
	printf("long ->  %ld, %dbyte \n\n", component.l, sizeof(long));

	component.f = 0.123456;
	printf("float ->  %g, %dbyte \n\n", component.f, sizeof(float));

	component.d = -1e-15;
	printf("double ->  %e, %dbyte \n\n", component.d, sizeof(double));
}


10. 자동차의 이름과 색상, 생산 연도를 가지는 구조체를 만든 후, 이러한 구조체를 매개변수로 가지는 출력 함수를 작성하라.

#include <stdio.h>

struct car {
	char name[10];
	char color[10];
	int production_year;
};

void print_car(car c);

int main()
{
	car ev1 = { "전기차", "반짝거림", 2050 };

	print_car(ev1);
	
}

void print_car(car c)
{
	printf("차의 이름은 %s 입니다. \n", c.name);
	printf("차의 색상은 %s 입니다. \n", c.color);
	printf("차의 생산연도는 %d년 입니다. \n", c.production_year);
}


11. 10번 문제를 구조체 포인터를 매개변수로 사용하는 출력 함수로 작성하라.

#include <stdio.h>

struct car {
	char name[10];
	char color[10];
	int production_year;
};

void print_car(car* c);

int main()
{
	car ev1 = { "전기차", "반짝거림", 2050 };

	print_car(&ev1);
	
}

void print_car(car* c)
{
	printf("차의 이름은 %s 입니다. \n", c->name);
	printf("차의 색상은 %s 입니다. \n", c->color);
	printf("차의 생산연도는 %d년 입니다. \n", c->production_year);
}



12. 1에서 10까지의 수의 제곱과 세제곱을 각각 합산하여 저장하기 위해 구조체 배열을 사용하는 프로그램을 작성하라. 배열의 내용도 출력하라.

#include <stdio.h>

struct sum_save {
	int square;
	int cube;
	int sum;
};

int main()
{
	const int N = 10;

	sum_save list[10];

	for (int i = 1; i <= N; i++) {
		list[i - 1].square = i * i;
		list[i - 1].cube = i * i * i;
		list[i - 1].sum = list[i - 1].cube + list[i - 1].square;
	}
	
	for (int i = 0; i < N; i++) {
		printf("%4d^2 + %4d^3 = %4d \n", list[i].square, list[i].cube, list[i].sum);
	}
	
}


13. int의 상위 2바이트와 하위 2바이트의 값을 short int로 각각 출력하는 프로그램을 작성하라. 

이때, 하나의 int와 short int배열의 두 원소로 구성된 공용체를 사용하라.

#include <stdio.h>

union Fint_T2short {
	int From;
	short To[2];
};

int main()
{
	Fint_T2short tester;

	printf("정수값을 입력하세요 : "); scanf_s("%d", &tester.From);

	printf("입력하신 값의 상위 2바이트는 %d이고, 하위 2바이트는 %d입니다. \n", tester.To[0], tester.To[1]);
}

14. 변수 a, b, c가 아래에 형 정의(typedef)한 바와 같은 matrix형이라 할 때, 두 행렬의 뺼셈을 구하는 함수 subtract(a,b,c)를 작성하고, 이를 main()함수로 테스트하는 프로그램을 작성하라. 
#include <stdio.h>

#define N 3

typedef double matrix[N][N];

void subtract(matrix a, matrix b, matrix c);

int main()
{
	matrix ma, mb, mc;

	for (int i = 0; i < N; i++) {
		for (int k = 0; k < N; k++) {
			printf("matrix ma[%d][%d]의 값을 입력하세요 : ", i, k);
			scanf_s("%lf", &ma[i][k]);
		}
	}

	printf("\n");

	for (int i = 0; i < N; i++) {
		for (int k = 0; k < N; k++) {
			printf("matrix mb[%d][%d]의 값을 입력하세요 : ", i, k);
			scanf_s("%lf", &mb[i][k]);
		}
	}

	printf("\n");

	subtract(ma, mb, mc);

	printf("matrix ma - mb의 값은 \n");

	for (int i = 0; i < N; i++) {
		for (int k = 0; k < N; k++) {
			printf("%g ", mc[i][k]);
		}
		printf("\n");
	}
}

void subtract(matrix a, matrix b, matrix c)
{
	for (int i = 0; i < N; i++) {
		for (int k = 0; k < N; k++) {
			c[i][k] = a[i][k] - b[i][k];
		}
	}
}


반응형