본문 바로가기
솔루션모음/쉽게 풀어 쓴 C언어 Express 실습문제

[쉽게 풀어 쓴 C언어 Express] 17장 프로그래밍 programming 솔루션 답지

by 이얏호이야호 2020. 4. 12.

쉽게 풀어 쓴 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

 

 

 

댓글