쉽게 풀어 쓴 C언어 express 솔루션입니다.
1.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
int count, i;
int value, sum;
int *darray;
printf("정수의 개수: ");
scanf("%d", &count);
darray = (int *)malloc(count*sizeof(int));
if( darray == NULL ) {
printf("동적 메모리 할당 오류");
exit(1);
}
for (i=0;i<count;i++) {
printf("양의 정수를 입력하시오: ");
scanf("%d", &darray[i]);
}
sum = 0;
for (i=0;i<count;i++) {
sum += darray[i];
}
printf("합은 %d입니다.\n", sum);
return 0;
}
2. 실행결
과 오타문자열의
개수: 10
10개의 문자열을 저장할 수 있는 공간이 할당되었습니다. HINT 오타!
HINT 문자열은 char*로 가리킬 수 있다. 문자열의 배열은 char**로 가리킬 수 있다. 다음
의 코드를 참조하라. char** A = NULL;
if ((A = malloc(n*sizeof(char*))) != NULL) {
// 먼저 n개의 포인터를 위한 공간을
할당한다.
for (i=0;i<n;i++)
A[i] = (char*)malloc(100);
// 100개의 문자를 저장할 수 있는 공간 할당
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
int n, i;
char **A;
printf("문자열의 개수: ");
scanf("%d", &n);
if ((A = (char **)malloc(n*sizeof(char*))) != NULL) {
for (i=0;i<n;i++)
A[i] = (char*)malloc(100);
}
for (i=0;i<n;i++)
sprintf(A[i] ,"%d", i);
for (i=0;i<n;i++)
printf("%s \n", A[i]);
for (i=0;i<n;i++)
free(A[i]);
free(A);
return 0;
}
3.
#include <stdio.h>
#include <stdlib.h>
typedef struct contacts {
// 구조체 타입 정의
char name[100];
char mobile_phone[100];
}
CONTACTS;
int main(void) {
CONTACTS *contacts;
// 동적 메모리 공간을 가리키는 포인터
int size, i;
printf("주소의 개수: ");
scanf("%d", &size);
contacts = (CONTACTS *)malloc(sizeof(CONTACTS)* size);
// 동적 메모리 할당
if( contacts == NULL ) {
printf("동적 메모리 할당 오류");
exit(1);
}
for (i=0; i<size ;i++) {
printf("이름을 입력하시오: ");
fflush(stdin);
// 입력 버퍼를 비운다. gets(contacts[i].name);
printf("휴대폰 번호를 입력하시오: ");
gets(contacts[i].mobile_phone);
}
printf("========================\n");
printf("이름 휴대폰 번호\n");
printf("========================\n");
for (i=0;i<size;i++)
printf("%s %s \n", contacts[i].name, contacts[i].mobile_phone);
printf("\n========================\n");
free(contacts);
// 동적 메모리 공간 해제
return 0;
}
4.
#include <stdio.h>
#include <stdlib.h>
char* get_word() {
char* s = (char *)malloc(50);
if (s == NULL) {
printf("메모리 할당 오류\n");
exit( 1 );
}
printf("단어를 입력하시오(최대 50글자):");
scanf("%s", s);
return s;
}
int main(void) {
char *p;
p = get_word();
free(p);
return 0;
}
5.
#include <stdio.h>
#include <malloc.h>
typedef int DATA;
typedef struct NODE {
DATA data;
struct NODE *link;
}
NODE;
void print_list(NODE *plist);
int get_integer();
int main(void) {
NODE *plist;
NODE *curr = NULL, *prev = NULL;
int i;
plist = NULL;
while(1) {
i = get_integer();
if(i < 0)
break;
curr = (NODE *)malloc(sizeof(NODE));
curr->data = i;
curr->link = NULL;
if(prev == NULL)
plist = curr; else prev->link = curr;
prev = curr;
}
print_list(plist);
return 0;
}
void print_list(NODE *plist) {
NODE *p;
p = plist;
while(p) {
printf("%d->",p->data);
p = p->link;
}
printf("NULL\n");
}
int get_integer() {
int num;
printf("양의 정수를 입력하세요(종료 -1): ");
scanf("%d",&num);
return num;
}
6.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
typedef struct {
char name[30];
char phone[20];
}
DATA;
typedef struct NODE {
DATA data;
struct NODE *link;
}
NODE;
NODE *search_pos(NODE *plist, char name[]);
NODE *search(NODE *plist, char name[]);
NODE *create_node(char *name, char* phone, NODE *link);
void insert_node(NODE **phead, NODE *node, NODE *prev);
void print_menu();
int main(void) {
char name_t[30]= {
'\0'
}
;
char phone_t[20]= {
'\0'
}
;
char cmenu=1;
int bEscape = FALSE;
NODE* List = NULL;
NODE* Temp = NULL;
while(TRUE) {
fflush(stdin);
print_menu();
printf("번호를 입력하세요 : ");
scanf("%c", &cmenu);
switch(cmenu) {
case '1':
break;
case '2':
printf("이름 : ");
scanf("%s", name_t);
printf("번호 : ");
scanf("%s", phone_t);
insert_node(&List, create_node(name_t, phone_t, NULL),
search_pos(List, name_t));
printf("추가되었습니다.\n");
break;
case '3':
printf("찾을 이름을 입력하세요 : ");
scanf("%s", name_t);
Temp = search(List, name_t);
if(Temp!=NULL) {
printf("전화 번호부를 찾았습니다.\n");
printf("이름 : %s\n번호 : %s\n", Temp->data.name,
Temp->data.phone);
} else
printf("데이터를 찾지 못했습니다.\n");
break;
case '4':
printf("찾을 이름을 입력하세요 : ");
scanf("%s", name_t);
Temp = search(List, name_t);
printf("변경할 이름을 입력하세요 : ");
scanf("%s", name_t);
printf("변경할 번호를 입력하세요 : ");
scanf("%s", phone_t);
strcpy(Temp->data.name, name_t);
strcpy(Temp->data.phone, phone_t);
printf("데이터가 변경되었습니다.\n");
break;
case '5':
bEscape = TRUE;
break;
default:
printf("잘못 입력 하셨습니다. 다시입력해주세요.\n");
break;
}
if(bEscape)
break;
}
return 0;
}
void print_menu() {
printf("------------------------------\n");
printf("1. 초기화\n");
printf("2. 전화 번호 추가\n");
printf("3. 전화 번호 탐색\n");
printf("4. 전화 번호 변경\n");
printf("5. 종료\n");
printf("------------------------------\n");
}
NODE *search_pos(NODE *plist, char name[]) {
NODE *curr, *prev;
prev = NULL;
curr = plist;
while(curr != NULL) {
if(strcmp(curr->data.name, name) > 0)
break;
prev = curr;
curr = curr->link;
}
return prev;
}
NODE *search(NODE *plist, char name[]) {
NODE *curr;
curr = plist;
while(curr != NULL) {
if(strcmp(curr->data.name, name) == 0)
break;
curr = curr->link;
}
return curr;
}
NODE *create_node(char *name, char* phone, NODE *link) {
NODE *new_node;
new_node = (NODE *)malloc(sizeof(NODE));
if( new_node == NULL ) {
fprintf(stderr, "메모리 할당 에러\n");
exit(1);
}
strcpy(new_node->data.name, name);
strcpy(new_node->data.phone, phone);
new_node->link = link;
return(new_node);
}
void insert_node(NODE **phead, NODE *node, NODE *prev) {
if( *phead == NULL ) {
*phead = node;
node->link = NULL;
} else if(prev == NULL) {
node->link = (*phead)->link;
(*phead) = node;
} else {
node->link = prev->link;
prev->link = node;
}
}
7.
#include <stdio.h>
#include <stdlib.h>
#define INSERT 1
#define PRINT 2
#define QUIT 3
#define S_SIZE 50
typedef struct data {
char title[S_SIZE];
int year;
}
DATA;
typedef struct NODE {
DATA data;
struct NODE *link;
}
NODE;
NODE *insert_node(NODE *plist,NODE *pprev,DATA item) {
NODE *pnew = NULL;
if(!(pnew = (NODE*)malloc(sizeof(NODE)))) {
printf("메모리 동적 할당 오류\n");
exit(1);
}
pnew->data = item;
if(pprev == NULL) {
pnew->link = plist;
plist = pnew;
} else {
pnew->link = pprev->link;
pprev->link = pnew;
}
return plist;
}
void display_menu() {
printf("-------------------------------------\n");
printf("1. 영화 정보 추가\n");
printf("2. 영화 정보 출력\n");
printf("3. 종료\n");
printf("-------------------------------------\n");
}
int get_selectde_menu() {
int selmenu = 0;
printf("번호를 선택하시오 : ");
scanf("%d", &selmenu);
return selmenu;
}
DATA get_input() {
DATA input;
printf("영화의 제목을 입력하시오 : ");
scanf("%s", input.title);
printf("영화의 개봉 연도를 입력하시오 : ");
scanf("%d", &input.year);
return input;
}
void print_list(NODE *plist) {
NODE *ptr;
for (ptr=plist;ptr;ptr=ptr->link) {
printf("-------------------------------------\n");
printf("제 목 : %s\n", ptr->data.title);
printf("개봉 연도 : %d\n", ptr->data.year);
}
printf("-------------------------------------\n");
}
void destroy_nodes(NODE *plist) {
NODE *temp;
while(plist) {
temp = plist;
plist = plist->link;
free(temp);
}
}
int main(void) {
NODE *plist = NULL;
int selected = 0;
DATA d;
while(selected != QUIT) {
display_menu();
selected = get_selectde_menu();
switch(selected) {
case INSERT:
d = get_input();
plist = insert_node(plist,NULL,d);
break;
case PRINT:
print_list(plist);
break;
case QUIT:
destroy_nodes(plist);
break;
}
}
return 0;
}
더 많은 쉽게 풀어 쓴 C언어EXPRESS 이론 솔루션
https://chuinggun.tistory.com/category/%EC%86%94%EB%A3%A8%EC%85%98%EB%AA%A8%EC%9D%8C/%EC%89%BD%EA%B2%8C%20%ED%92%80%EC%96%B4%20%EC%93%B4%20C%EC%96%B8%EC%96%B4%20Express%20%EC%9D%B4%EB%A1%A0
더 많은 쉽게 풀어 쓴 C언어EXPRESS 프로그래밍 솔루션 :
https://chuinggun.tistory.com/category/%EC%86%94%EB%A3%A8%EC%85%98%EB%AA%A8%EC%9D%8C/%EC%89%BD%EA%B2%8C%20%ED%92%80%EC%96%B4%20%EC%93%B4%20C%EC%96%B8%EC%96%B4%20Express%20%EC%8B%A4%EC%8A%B5%EB%AC%B8%EC%A0%9C
'솔루션모음 > 쉽게 풀어 쓴 C언어 Express 실습문제' 카테고리의 다른 글
[쉽게 풀어 쓴 C언어 Express] 16장 프로그래밍 programming 솔루션 답지 (0) | 2020.04.12 |
---|---|
[쉽게 풀어 쓴 C언어 Express] 15장 프로그래밍 programming 솔루션 답지 (0) | 2020.04.11 |
[쉽게 풀어 쓴 C언어 Express] 14장 프로그래밍 programming 솔루션 답지 (0) | 2020.04.11 |
[쉽게 풀어 쓴 C언어 Express] 13장 프로그래밍 programming 솔루션 답지 (0) | 2020.04.11 |
[쉽게 풀어 쓴 C언어 Express] 12장 프로그래밍 programming 솔루션 답지 (0) | 2020.04.11 |
댓글