728x90
<Lab 09 문제 유형 요약>
- Program 1 : 구조체, 분수의 덧셈과 곱셈
- Program 2 : 구조체, 사람 정보 출력
- Program 3 : 구조체, 내용 수정하기
- Program 4 : 구조체, 내용 검색하기
- Program 5 : 구조체, 내용 수정하기, 월급/연봉/인센티브
- Program 6 : 구조체, 열거형, 카드 섞기, 카드 분배
Program 1
분수(fraction) 은 분자와 분모로 이루어져 있다. 분수를 표현하기 위한 구조체 fraction을 정의하고, 두 분수의 덧셈과 곱셈을 계산하는 프로그램을 쓰시오.
- 구조체 fraction 멤버 구성: 정수형의 분자(numerator)와 분모(denominator)
- 분자와 분모를 차례로 입력 받아 처리한다.
- 두 분자의 뎃셈과 곱셈 결과를 아래 예시와 같이 출력한다.
#include <stdio.h>
struct fraction {
int numerator;
int denorminator;
};
int main(void)
{
struct fraction f1; struct fraction f2; struct fraction result;
printf("첫번째 분수의 분모와 분자를 차례로 입력하시오 >> ");
scanf("%d %d", &f1.denorminator, &f1.numerator);
printf("두번째 분수의 분모와 분자를 차례로 입력하시오 >> ");
scanf("%d %d", &f2.denorminator, &f2.numerator);
result.numerator = f1.numerator * f2.denorminator + f2.numerator * f1.denorminator;
result.denorminator = f1.denorminator * f2.denorminator;
printf("%d/%d + %d/%d = %d/%d\n", f1.numerator, f1.denorminator, f2.numerator, f2.denorminator, result.numerator, result.denorminator);
result.numerator = f1.numerator * f2.numerator;
result.denorminator = f1.denorminator * f2.denorminator;
printf("%d/%d * %d/%d = %d/%d\n", f1.numerator, f1.denorminator, f2.numerator, f2.denorminator, result.numerator, result.denorminator);
return 0;
}
Program 2
다음 내용을 참고로 구조체 person을 정의하고, 사람 3명의 정보에 대해 임의의 값으로 초기화하고, 내용을 출력하는 프로그램을 작성하시오.
- 구조체 person 멤버 구성: 이름, 전화번호, 주소
#include <stdio.h>
#include <string.h>
struct person {
char name[10];
char digets[20];
char address[30];
};
int main(void)
{
struct person p1, p2, p3;
strcpy(p1.name, "홍길동"); strcpy(p2.name, "이순신"); strcpy(p3.name, "박문수");
strcpy(p1.digets, "011-1111-1111"); strcpy(p2.digets, "017-3245-3278"); strcpy(p3.digets, "011-2222-2456");
strcpy(p1.address, "서울시 구로구 고척동"); strcpy(p2.address, "서울시 강남구 도곡동"); strcpy(p3.address, "경기도 안양시 비산동");
printf("------------------------------------------------\n");
printf(" 이름 전화번호 주소\n");
printf("------------------------------------------------\n");
printf(" %s %s %s\n", p1.name, p1.digets, p1.address);
printf(" %s %s %s\n", p2.name, p2.digets, p2.address);
printf(" %s %s %s\n", p3.name, p3.digets, p3.address);
printf("------------------------------------------------\n");
return 0;
}
Program 3
다음 내용을 참고로 구조체 struct movie를 정의하고, 영화 3개를 아래 실행 예시와 유사하게 초기 값을 설정하여 출력하고, 영화 감독 수정을 하여 다시 출력하는 프로그램을 작성하시오.
- 구조체 struct movie 멤버 구성: 영화제목, 관객수, 감독, 상영일
- 상영일은 다른 구조체 struct date를 정의
- 구조체 struct date 멤버 구성: 년, 월, 일
#include <stdio.h>
#include <string.h>
struct Date {
int year;
int month;
int day;
};
struct movie {
char title[10];
int pop;
char director[10];
struct Date start;
};
int main(void)
{
struct movie movies[3];
strcpy(movies[0].title, "명량 "); strcpy(movies[1].title, "도둑들"); strcpy(movies[2].title, "국제시");
strcpy(movies[0].director, "김한민"); strcpy(movies[1].director, "최동훈"); strcpy(movies[2].director, "윤제균");
movies[0].pop = 17613000; movies[1].pop = 12983000; movies[2].pop = 14257000;
movies[0].start.year = 2020; movies[1].start.year = 2020; movies[2].start.year = 2020;
movies[0].start.month = 7; movies[1].start.month = 12; movies[2].start.month = 12;
movies[0].start.day = 30; movies[1].start.day = 17; movies[2].start.day = 27;
printf("---------------------------------------------\n");
printf(" 제목 감독 관객수 개봉일\n");
printf("---------------------------------------------\n");
for (int i = 0; i < 3; i++)
{
printf("%d. [%6s] %s %d %d.%d.%d\n", i, movies[i].title, movies[i].director, movies[i].pop, movies[i].start.year, movies[i].start.month, movies[i].start.day);
}
printf("---------------------------------------------\n");
int number = 0;
char* director_m;
printf("영화 감독을 수정합니다. <영화번호 감독이름> >> ");
scanf(" %d %s", &number, director_m);
strcpy(movies[number].director, director_m);
printf("---------------------------------------------\n");
printf(" 제목 감독 관객수 개봉일\n");
printf("---------------------------------------------\n");
for (int i = 0; i < 3; i++)
{
printf("%d. [%6s] %s %d %d.%d.%d\n", i, movies[i].title, movies[i].director, movies[i].pop, movies[i].start.year, movies[i].start.month, movies[i].start.day);
}
printf("---------------------------------------------\n");
return 0;
}
Program 4
다음 내용을 참고로 구조체 student를 정의하고, 학생 5명을 선언하여 적당한 값을 입력하고 출력하는 프로그램을 작성하시오.
- 구조체 student멤버 구성: 이름, 학번, 평균평점, 학과, 진로
#include <stdio.h>
#include <string.h>
struct student {
char name[10];
int num;
double score;
char major[10];
char career[10];
};
int main(void)
{
struct student s[10];
printf(" 이름 학번 학점 학과 진로\n");
printf(" -------------------------------------------------- \n");
strcpy(s[0].name, "김영국");
strcpy(s[1].name, "강미연");
strcpy(s[2].name, "송은혜");
strcpy(s[3].name, "박보현");
strcpy(s[4].name, "박보현");
strcpy(s[5].name, "김형근");
strcpy(s[6].name, "김형근");
strcpy(s[7].name, "김보름");
strcpy(s[8].name, "서정순");
strcpy(s[9].name, "최종욱");
s[0].num = 23462456;
s[1].num = 78423534;
s[2].num = 45622344;
s[3].num = 24575356;
s[4].num = 24564575;
s[5].num = 62625645;
s[6].num = 23464557;
s[7].num = 45684684;
s[8].num = 34257656;
s[9].num = 45674575;
s[0].score = 3.4;
s[1].score = 3.5;
s[2].score = 3.2;
s[3].score = 3.5;
s[4].score = 3.1;
s[5].score = 4.5;
s[6].score = 4.1;
s[7].score = 4.3;
s[8].score = 4.4;
s[9].score = 4.2;
strcpy(s[0].major, "전자과");
strcpy(s[1].major, "컴퓨터");
strcpy(s[2].major, "소프트");
strcpy(s[3].major, "전자과");
strcpy(s[4].major, "전자과");
strcpy(s[5].major, "소프트");
strcpy(s[6].major, "소프트");
strcpy(s[7].major, "컴퓨터");
strcpy(s[8].major, "소프트");
strcpy(s[9].major, "컴퓨터");
strcpy(s[0].career, "공무원");
strcpy(s[1].career, "회사원");
strcpy(s[2].career, "회사원");
strcpy(s[3].career, "프로게이머");
strcpy(s[4].career, "웹마스터");
strcpy(s[5].career, "웹디자이너");
strcpy(s[6].career, "군인");
strcpy(s[7].career, "군인");
strcpy(s[8].career, "DB관리자");
strcpy(s[9].career, "교수");
for(int i=0; i<10; i++)
{
printf("%s %d %.1lf %7s %5s\n", s[i].name, s[i].num, s[i].score, s[i].major, s[i].career);
}
while(1)
{
char str[60] = "";
printf("\n검색하려는 학과를 입력하시오 : ");
scanf(" %s", str);
for(int i=0; i<10; i++)
{
if(!strcmp(s[i].major, str))
{
printf("%s %d %.1lf %7s %5s\n", s[i].name, s[i].num, s[i].score, s[i].major, s[i].career);
}
}
}
return 0;
}
Program 5
다음 내용을 참고로 구조체 employee를 정의하고, 직원 4명를 선언하여 임의의 값을 입력하고 출력하시오. 그리고 사번 또는 이름과 새로운 인센티브를 입력하여 변경된 연봉을 출력하도록 하는 프로그램을 작성하시오.
- 구조체 person 멤버의 구성 : 사번, 이름, 전화번호
- 구조체 employee : 멤버의 구성 : person, 월급, 인센티브
- 연봉은 구조체의 멤버가 아니며 계산하여 출력
- 연봉 = 월급 * (12 + 인센티브/100)로 계산
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
struct Person {
int number;
char name[10];
char digits[50];
};
struct Employee {
struct Person person;
int pay;
int in;
};
int main(void)
{
struct Employee employee[4];
employee[0].person.number = 20123423;
employee[1].person.number = 20122436;
employee[2].person.number = 20124564;
employee[3].person.number = 20123464;
strcpy(employee[0].person.name, "김지혜");
strcpy(employee[1].person.name, "김자경");
strcpy(employee[2].person.name, "강동구");
strcpy(employee[3].person.name, "안태용");
strcpy(employee[0].person.digits, "010-1111-1111");
strcpy(employee[1].person.digits, "010-2222-2222");
strcpy(employee[2].person.digits, "010-3333-3333");
strcpy(employee[3].person.digits, "010-4444-4444");
employee[0].pay = 1200000;
employee[1].pay = 1500000;
employee[2].pay = 1800000;
employee[3].pay = 2200000;
employee[0].in = 120;
employee[1].in = 150;
employee[2].in = 180;
employee[3].in = 250;
printf(" 사번 이름 전화번호 월급 인센 연봉\n");
printf("----------------------------------------------------------\n");
for(int i=0; i<4; i++)
{
printf("%d %s %s %d %d%% %d\n", employee[i].person.number, employee[i].person.name, employee[i].person.digits, employee[i].pay, employee[i].in, employee[i].pay*(12+employee[i].in/100));
}
while(1)
{
printf("\n인센티브를 변경합니다...\n");
printf("사번 또는 이름과 새로운 인센티브를 입력하시오 >> ");
int number_m, in_m;
char str[150] ="";
scanf(" %s %d", str, &number_m);
if(isdigit(str[0]))
{
in_m = atoi(str);
for(int i=0; i<4; i++)
{
if(employee[i].person.number == in_m)
{
employee[i].in = number_m;
}
}
printf("\n 사번 이름 전화번호 월급 인센 연봉\n");
printf("----------------------------------------------------------\n");
for(int i=0; i<4; i++)
{
printf("%d %s %s %d %d%% %d\n", employee[i].person.number, employee[i].person.name, employee[i].person.digits, employee[i].pay, employee[i].in, employee[i].pay*(12+employee[i].in/100));
}
continue;
}
else
{
for(int i=0; i<4; i++)
{
if(!strcmp(employee[i].person.name, str))
{
employee[i].in = number_m;
}
}
for(int i=0; i<4; i++)
{
printf("%d %s %s %d %d%% %d\n", employee[i].person.number, employee[i].person.name, employee[i].person.digits, employee[i].pay, employee[i].in, employee[i].pay*(12+employee[i].in/100));
}
}
}
return 0;
}
Program 6
다음 내용을 참고로 구조체와 열거형을 이용하여 카드 게임을 할 수 있는 기본적인 자료형을 만들어보고, 카드를 나눠주는 프로그램을 작성하시오.
- 카드는 총 52장
- 모양 4가지 : "♥(Hearts)", "◆(Diamonds)", "♣(Clubs)", "♠(Spades)"
- 숫자 13가지 : ace(1)부터 10까지 그리고 jack(11), queen(12), king(13)
- 3명의 Player에게 7장의 카드를 나누어주는 과정을 다음과 같이 출력하도록 한다
- filldeck()- 무늬와 숫자의 52장 카드덱 구성, shuffle() – 카드 섞기, deal() – 카드 분배
#include <stdio.h>
#include <time.h>
// 열거형
enum num { ace = 1, jack = 11, queen = 12, king = 13 };
// 카드 구조체
struct Card {
int number;
int shape;
};
// 52장의 카드
struct Card card_all[52];
// 선수마다 갖게 되는 카드 7장
struct Player {
struct Card card_player[7];
};
void shuffle()
{
// 52장의 카드를 랜덤한 인덱스번째 카드와 하나씩 뒤바꾸어 줌
srand(time(NULL));
for (int i = 0; i < 52; i++)
{
int index = rand() % 52;
struct Card temp = card_all[index];
card_all[index] = card_all[i];
card_all[i] = temp;
}
}
void filldeck()
{
int i = 0;
// 4개의 모양과 13개의 숫자를 짝지어서 카드 만듦
for (int j = 0; j < 4; j++)
{
for (int k = 0; k < 13; k++)
{
card_all[i].number = k;
card_all[i].shape = j;
i++;
}
}
}
void deal(struct Player player[])
{
// 섞어진 카드를 앞에서부터 나누어줌
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 7; j++)
{
player[i].card_player[j] = card_all[i * 7 + j];
}
}
}
int main(void)
{
struct Player player[3];
printf("카드게임에 3명의 선수가 참여합니다...\n");
filldeck(); shuffle(); printf("52장의 카드를 섞어 줍니다.\n");
deal(player); printf("카드를 7장씩 나누어 줍니다.\n");
printf("player 1 player 2 player 3\n");
// 7개의 카드를 출력
for (int i = 0; i < 7; i++) {
// 사람마다 번갈아가며 1장씩
for (int j = 0; j < 3; j++)
{
switch (player[j].card_player[i].number) {
// 특별한 숫자일 경우
case ace:
printf(" A");
break;
case jack:
printf(" J");
break;
case queen:
printf(" Q");
break;
case king:
printf(" K");
break;
default:
printf("%2d", player[j].card_player[i].number);
break;
}
printf(" of ");
switch (player[j].card_player[i].shape) {
case 0:
printf("♥ ");
break;
case 1:
printf("◆ ");
break;
case 2:
printf("♣ ");
break;
case 3:
printf("♠ ");
break;
}
printf(" ");
}
printf("\n");
}
return 0;
}
728x90
'College Computer Science > C Language' 카테고리의 다른 글
[C 프로그래밍 실습] 함수와 포인터 활용 1 (Lab 10) (0) | 2021.01.06 |
---|---|
[C 프로그래밍 실습] Report 03 (0) | 2021.01.04 |
[C 프로그래밍 실습] 변수 유효범위 (Lab 08) (0) | 2021.01.03 |
[C 프로그래밍 실습] 중간고사 문제 (0) | 2021.01.03 |
[C 프로그래밍 실습] 문자와 문자열 (Lab 07) (0) | 2021.01.03 |
댓글