티스토리 뷰
[11-4]
sizeof(emps)는 112
sizeof(struct EMP) 는 28
이므로 답은 4
[11-5]
//1번
struct A {
int age;
char name[20] //세미콜론 없음
}st;
age=20; //st.age로 접근해야 함
//2번
struct A {
int age;
char name[20] //세미콜론 없음
}st,*ptr;
ptr=st; //구조체 변수는 포인터가 아니므로 주소 연산자 & 를 붙여야 함
//3번
struct A {
int age;
char name[20] //세미콜론 없음
}st, *ptr;
ptr=&st;
ptr.age=25; //포인터 변수에는 (*ptr).age 혹은 ptr->age 사용해야함
11-6
학번 문자 크기가 6이라서 이상하게 나오는 것일텐데 왜 의료공학이 붙는지 모르겠
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning(disable:4996)
struct student {
char st_no[6], subject[20], name[10], entry, telno[15];
};
void main()
{
struct student st1;
printf("학번 ? ");
scanf("%s", st1.st_no);
printf("학과 ? ");
scanf("%s", st1.subject);
printf("성명 ? ");
scanf("%s%*c", st1.name);
printf("등록여부<1:등록, 0:미등록> ? ");
scanf("%c", &st1.entry);
printf("전화번호 ? ");
scanf("%s", st1.telno);
printf("\n\n\n%s, %s, %s, %c, %s", st1.st_no, st1.subject, st1.name, st1.entry, st1.telno);
}
결과
학번 ? 2007123
학과 ? 의료공학
성명 ? 안병욱
등록여부<1:등록, 0:미등록> ? 1
전화번호 ? 010-001-0123
200712의료공학, 의료공학, 안병욱, 1, 010-001-0123
해결방법
주어진 코드에서 출력 결과가 원하는 대로 나오지 않는 이유는 scanf 함수를 사용할 때 %s 포맷 지정자를 사용하여 문자열을 입력받을 때 공백 문자가 문자열에 포함되지 않도록 처리해야 합니다. 현재 코드에서는 공백 문자가 입력된 후에 다음 입력으로 넘어가므로 문제가 발생합니다.
해결 방법은 scanf("%s", st1.subject);와 같은 코드를 scanf(" %[^\n]", st1.subject);로 수정하여 공백을 포함한 문자열을 입력받을 수 있도록 하여야 합니다. %[^\n]는 개행 문자 \n이 나올 때까지 모든 문자를 입력받는 형식 지정자입니다.
아래는 수정된 코드입니다:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning(disable:4996)
struct student {
char st_no[6], subject[20], name[10], entry, telno[15];
};
void main()
{
struct student st1;
printf("학번? ");
scanf("%s", st1.st_no);
printf("학과? ");
scanf(" %[^\n]", st1.subject);
printf("성명? ");
scanf(" %[^\n]", st1.name);
printf("등록여부<1:등록, 0:미등록>? ");
scanf(" %c", &st1.entry);
printf("전화번호? ");
scanf("%s", st1.telno);
printf("\n\n\n%s, %s, %s, %c, %s", st1.st_no, st1.subject, st1.name, st1.entry, st1.telno);
}
11-7
width에 넓이를 저장
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct point {
int x;
int y;
}POINT;
struct rectangle {
int width;
POINT p[2];
};
int main()
{
struct rectangle rect;
POINT rightTop = { 7,10 }; //변수에 7, 10 저장
POINT leftDown = { 3,5 }; //변수에 3, 5 저장
rect.p[0] = rightTop;
rect.p[1] = leftDown;
rect.width = (rect.p[0].x - rect.p[1].x) * (rect.p[0].y - rect.p[1].y);
printf("가로:%d, 세로:%d, 사각형의 넓이 : %d 이다.",
rect.p[0].x - rect.p[1].x, rect.p[0].y - rect.p[1].y, rect.width);
return 0;
}
결과
가로:4, 세로:5, 사각형의 넓이 : 20 이다.
11-8
#include <stdio.h>
#include <string.h>
#pragma warning(disable:4996)
struct A {
char dept[20];
char name[20];
enum B {
manager1 = 1, manager2, manager3, employee1,
employee2
} position;
int salary;
int sudang;
} emps[10];
int main()
{
int i, count;
char tmp[20];
for (i = 0; i < 10; i++)
{
printf("%d, 부서 ?(종료:end) ", i + 1);
gets(emps[i].dept); //dept에 부서 저장
if (!strcmp(emps[i].dept, "end"))
break;
printf(" 성명 ? ");
gets(emps[i].name); //name에 성명 저장
printf(" 직급 =>");
do {
printf(" 1:사장,2:부장,3:과장,4:대리,5:사원 ? ");
scanf("%d", &emps[i].position); //position에 직급 저장
} while (emps[i].position < 1 || emps[i].position>5);
printf(" 월급 ? ");
scanf("%d%*c", &emps[i].salary); //salary에 월급 저장
if (emps[i].position >= manager2) //수당 계산
emps[i].sudang = 70000;
else
emps[i].sudang = 50000;
}
count = i;
printf("----------------------------------\n");
printf(" 부서 성명 직급 실수령액 \n");
printf("----------------------------------\n");
//삼항 연산자 이용
for (i = 0; i < count; i++)
{
printf("%6s, %6s, %5s,%10d \n",emps[i].dept,emps[i].name,
emps[i].position == 1 ? "사장" :
emps[i].position == 2 ? "부장" :
emps[i].position == 3 ? "과장" :
emps[i].position == 4 ? "대리" : "사원",emps[i].salary+emps[i].sudang);
}
return 0;
}
결과
1, 부서 ?(종료:end) 영업부
성명 ? 홍길동
직급 => 1:사장,2:부장,3:과장,4:대리,5:사원 ? 2
월급 ? 3700000
2, 부서 ?(종료:end) 인사부
성명 ? 까꿍이
직급 => 1:사장,2:부장,3:과장,4:대리,5:사원 ? 5
월급 ? 2700000
3, 부서 ?(종료:end) end
----------------------------------
부서 성명 직급 실수령액
----------------------------------
영업부, 홍길동, 부장, 3770000
인사부, 까꿍이, 사원, 2770000
11-9
구조체 포인터 변수를 이용해 출력하라
답지에서는 while 사용하였고 여기서는 for 사용
#include <stdio.h>
#include <string.h>
#pragma warning(disable:4996)
struct EMP {
char name[20];
int age;
int salary;
};
int main()
{
int i;
struct EMP emps[4] = {
{"진달래", 20, 500000},
{"개나리", 23, 600000},
{"까꿍이", 27, 700000},{NULL} };
struct EMP* ptr;
ptr = emps;
for (i = 0; i < 4; i++)
{
if (emps[i].name[0] == '\0')
break;
printf("%s, %d, %d\n", (ptr + i)->name, (ptr + i)->age, (ptr + i)->salary);
}
return 0;
결과
진달래, 20, 500000
개나리, 23, 600000
까꿍이, 27, 700000
11-10
ptr을 증가시키지 않았다면 1번과 같은 답이 나왔겠지만
ptr의 주소가 증가했기 때문에 개나리, 23, 950000이 나올 것이다.
정답: 2
'흔한 생활 > 잡다한 공부' 카테고리의 다른 글
[C언어] 든든한 C 프로그래밍 3판 12장 워크북 답 풀이 (0) | 2023.07.12 |
---|---|
[C언어] 든든한 C 프로그래밍 3판 12장 연습문제 답 풀이 (0) | 2023.07.11 |
[C언어] 든든한 C 프로그래밍 3판 10장 워크북 답 풀이 (0) | 2023.07.09 |
[C언어] 든든한 C 프로그래밍 3판 9장 워크북 답 풀이 (0) | 2023.07.08 |
[C언어] 든든한 C 프로그래밍 3판 10장 연습문제 답 풀이 (0) | 2023.07.07 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 맛집
- 계산방법
- f-91w
- 할인
- 배송기간
- a모바일
- 알뜰 요금제
- 타란튤라
- 시계 줄
- Liiv M
- 10만포인트
- mealy
- 방향장
- 오블완
- f-94w
- 알리익스프레스
- 알뜰폰요금제
- 교체
- 방어동작
- 리브엠
- 티스토리챌린지
- 메쉬 밴드
- 북문
- 카시오
- 경북대
- 카카오페이
- 네이버페이
- 파스타
- 문서 스캔
- 리브모바일
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함