스택 계산기

 

#include<stdio.h>
#include <stdlib.h>

#define MAX_ARR_LENGTH 100
typedef char element;
typedef struct StackNode
{
	element item;
	struct StackNode* link;
}StackNode;

typedef struct
{
	StackNode* top;
}LinkedStackType;

void Error(char* s)
{
	printf("---<%s>---\n", s);
}

LinkedStackType* CreateStack(void)
{
	LinkedStackType* p = (LinkedStackType*)malloc(sizeof(LinkedStackType));
	return p;
}
void InitStack(LinkedStackType* s)
{
	s->top = NULL;
}
int IsEmptyStack(LinkedStackType* s)
{
	return (s->top == NULL);
}

void Push(LinkedStackType* s, element item)
{
	StackNode* temp = (StackNode*)malloc(sizeof(StackNode));
	if (temp == NULL)
	{
		Error("Memory allocation error!");
		return;
	}
	temp->item = item;
	temp->link = s->top;
	s->top = temp;
}

element Pop(LinkedStackType* s)
{
	if (IsEmptyStack(s))
	{
		Error("Stack Underflow");
		return -1;
	}
	StackNode* temp = s->top;
	element item = temp->item;
	s->top = s->top->link;
	free(temp);
	return item;
}
element PeekStack(LinkedStackType* s)
{
	if (IsEmptyStack(s))
	{
		Error("Stack is empty!");
		return -1;
	}
	return s->top->item;
}
void PrintStack(LinkedStackType* s)
{
	StackNode* temp = s->top;
	if (IsEmptyStack(s))
	{
		Error("Stack is empty!");
		return;
	}
	while (temp != NULL)
	{
		printf("%c\n", temp->item);
		temp = temp->link;
	}

}
void RemoveAllStack(LinkedStackType* s)
{
	StackNode* temp = s->top;
	StackNode* next;
	while (temp != NULL)
	{
		next = temp->link;
		free(temp);
		temp = next;
	}
	s->top = NULL;
}
int ComparePriority(char a, char b) {
	if (a == '*' || a == '/')
	{
		if (b == '*' || b == '/')
		{
			return 0;
		}
		else
		{
			return 1;
		}
	}
	else
	{
		if (b == '*' || b == '/')
		{
			return -1;
		}
		else
		{
			return 0;
		}
	}

}

char* GetPostfix(char* infix, int arrLen)
{
	LinkedStackType* pStack = CreateStack();
	InitStack(pStack);

	int pos = 0;
	char* postfix = (char*)malloc(sizeof(char) * MAX_ARR_LENGTH);

	//..................................
	for (int i = 0; i < arrLen - 1; i++)
	{
		if (infix[i] == '(')
		{
			Push(pStack, infix[i]);
		}
		else if(infix[i] >= '0' && infix[i] <= '9')
		{
			postfix[pos++] = infix[i];
		}
		else if (infix[i] == ')')
		{
			while (PeekStack(pStack) != '(')
			{
				postfix[pos++] = Pop(pStack);
			}
			Pop(pStack);
		}
		else
		{
			if (IsEmptyStack(pStack) || PeekStack(pStack) == '(')
			{
				Push(pStack, infix[i]);
			}
			else if (ComparePriority(infix[i],PeekStack(pStack)) > 0)
			{
				Push(pStack, infix[i]);
			}
			else
			{
				while (!(PeekStack(pStack) == '(' || IsEmptyStack(pStack)))
				{
					postfix[pos++] = Pop(pStack);
				}
				Push(pStack, infix[i]);
			}
		}
	}
	while (!IsEmptyStack(pStack))
	{
		postfix[pos++] = Pop(pStack);
	}
	postfix[pos] = '\0';


	RemoveAllStack(pStack);
	free(pStack);
	return postfix;
}

int CalculatePostfix(char* postfix)
{
	LinkedStackType* pStack = CreateStack();
	InitStack(pStack);
	int result = 0;

	while (*postfix != '\0')
	{
		
		switch (*postfix)
		{
			int temp1, temp2;
		case '+':
			temp1 = Pop(pStack);
			temp2 = Pop(pStack);
			Push(pStack, temp2 + temp1);
			break;
		case '-':
			temp1 = Pop(pStack);
			temp2 = Pop(pStack);
			Push(pStack, temp2 - temp1);
			break;
		case '*':
			temp1 = Pop(pStack);
			temp2 = Pop(pStack);
			Push(pStack, temp2 * temp1);
			break;
		case '/':
			temp1 = Pop(pStack);
			temp2 = Pop(pStack);
			Push(pStack, temp2 / temp1);
			break;
		default:
			Push(pStack, *postfix - 48);
			break;
		}
		result = PeekStack(pStack);
		postfix++;
	}


	RemoveAllStack(pStack);
	free(pStack);
	return result;
}




int main(void)
{
	/*char infix[] = { "2*3*(2+4)+9" };*/
	/*char infix[] = { "4*3*(8-4+2)" };*/
	char infix[] = { "(1+2)*(3/4)+(5+(6-7))" };
	char* postfix = GetPostfix(infix, sizeof(infix) / sizeof(char));
	printf("%s\n", postfix);
	printf("result : %d\n", CalculatePostfix(postfix));

	free(postfix);
	return 0;
}

'학원수업 > C언어' 카테고리의 다른 글

C언어 15일차  (0) 2020.10.28
C언어 14일차  (0) 2020.10.27
C언어 13일차  (0) 2020.10.26
C언어 12일차  (0) 2020.10.23
C언어 11일차  (0) 2020.10.22

여는 괄호나오면 무조건 집어넣기
스택이 비었거나, 탑이 여는 괄호면 들어간다. Peek 사용
닫는 괄호나오면 여는 괄호나올때까지 pop


연산자 우선순위에따라
1.높은경우 스택에 Push
2.낮거나 같은경우 스택이 다 비워질때까지 pop

연산자
(, ), +, -, *, /
우선순위 
1. *,/
2. +,-

기존스택 
같음 0
다름 1

기존스택+
다름 -1
같음 0

 

 

 

#include<stdio.h>
#include <stdlib.h>

#define MAX_ARR_LENGTH 100
typedef char element;
typedef struct StackNode
{
	element item;
	struct StackNode* link;
}StackNode;

typedef struct
{
	StackNode* top;
}LinkedStackType;

void Error(char* s)
{
	printf("---<%s>---\n", s);
}

LinkedStackType* CreateStack(void)
{
	LinkedStackType* p = (LinkedStackType*)malloc(sizeof(LinkedStackType));
	return p;
}
void InitStack(LinkedStackType* s)
{
	s->top = NULL;
}
int IsEmptyStack(LinkedStackType* s)
{
	return (s->top == NULL);
}

void Push(LinkedStackType* s, element item)
{
	StackNode* temp = (StackNode*)malloc(sizeof(StackNode));
	if (temp == NULL)
	{
		Error("Memory allocation error!");
		return;
	}
	temp->item = item;
	temp->link = s->top;
	s->top = temp;
}

element Pop(LinkedStackType* s)
{
	if (IsEmptyStack(s))
	{
		Error("Stack Underflow");
		return -1;
	}
	StackNode* temp = s->top;
	element item = temp->item;
	s->top = s->top->link;
	free(temp);
	return item;
}
element PeekStack(LinkedStackType* s)
{
	if (IsEmptyStack(s))
	{
		Error("Stack is empty!");
		return -1;
	}
	return s->top->item;
}
void PrintStack(LinkedStackType* s)
{
	StackNode* temp = s->top;
	if (IsEmptyStack(s))
	{
		Error("Stack is empty!");
		return;
	}
	while (temp != NULL)
	{
		printf("%c\n", temp->item);
		temp = temp->link;
	}

}
void RemoveAllStack(LinkedStackType* s)
{
	StackNode* temp = s->top;
	StackNode* next;
	while (temp != NULL)
	{
		next = temp->link;
		free(temp);
		temp = next;
	}
	s->top = NULL;
}
int ComparePriority(char a, char b) {
	if (a == '*' || a == '/')
	{
		if (b == '*' || b == '/')
		{
			return 0;
		}
		else
		{
			return 1;
		}
	}
	else
	{
		if (b == '*' || b == '/')
		{
			return -1;
		}
		else
		{
			return 0;
		}
	}

}

char* GetPostfix(char* infix, int arrLen)
{
	LinkedStackType* pStack = CreateStack();
	InitStack(pStack);

	int pos = 0;
	char* postfix = (char*)malloc(sizeof(char) * MAX_ARR_LENGTH);

	//..................................
	for (int i = 0; i < arrLen - 1; i++)
	{
		if (infix[i] == '(')
		{
			Push(pStack, infix[i]);
		}
		else if(infix[i] >= '0' && infix[i] <= '9')
		{
			postfix[pos++] = infix[i];
		}
		else if (infix[i] == ')')
		{
			while (PeekStack(pStack) != '(')
			{
				postfix[pos++] = Pop(pStack);
			}
			Pop(pStack);
		}
		else
		{
			if (IsEmptyStack(pStack) || PeekStack(pStack) == '(')
			{
				Push(pStack, infix[i]);
			}
			else if (ComparePriority(infix[i],PeekStack(pStack)) > 0)
			{
				Push(pStack, infix[i]);
			}
			else
			{
				while (!(PeekStack(pStack) == '(' || IsEmptyStack(pStack)))
				{
					postfix[pos++] = Pop(pStack);
				}
				Push(pStack, infix[i]);
			}
		}
	}
	while (!IsEmptyStack(pStack))
	{
		postfix[pos++] = Pop(pStack);
	}
	postfix[pos] = '\0';


	RemoveAllStack(pStack);
	free(pStack);
	return postfix;
}



int main(void)
{
	char infix[] = { "2*3*(2+4)+9" };
	char* postfix = GetPostfix(infix, sizeof(infix) / sizeof(char));
	printf("%s\n", postfix);

	free(postfix);
	return 0;
}

'학원수업 > C언어' 카테고리의 다른 글

C언어 16일차  (0) 2020.10.29
C언어 14일차  (0) 2020.10.27
C언어 13일차  (0) 2020.10.26
C언어 12일차  (0) 2020.10.23
C언어 11일차  (0) 2020.10.22

DoubleLinkedList

#include<stdio.h>
#include <stdlib.h>

typedef int element;
typedef struct DlistNode
{
	element data;
	struct DlistNode* lLink;
	struct DlistNode* rLink;

}DlistNode;

void DInsertNode(DlistNode* before, DlistNode* newNode)
{
	newNode->lLink = before;
	newNode->rLink = before->rLink;
	if (before->rLink != NULL)
	{
		before->rLink->lLink = newNode;
	}
	before->rLink = newNode;

}
void DRemoveNode(DlistNode* removed)
{
	removed->lLink->rLink = removed->rLink;
	if (removed->rLink != NULL)
	{
		removed->rLink->lLink = removed->lLink;
	}

}
void DRemoveAll(DlistNode* pHead)
{
	DlistNode* pNode = pHead->rLink;
	pHead->rLink = NULL;
	while (1)
	{
		if (pNode == NULL)
		{
			break;
		}
		DlistNode* pNext = pNode->rLink;
		free(pNode);
		pNode = pNext;
	}
}

DlistNode* DSearch(DlistNode* pHead, element x)
{
	DlistNode* p = pHead;
	while (p != NULL)
	{
		if (p->data == x)
		{
			return p;
		}
		p = p->rLink;
	}
	return p;
}
void DDisplay(DlistNode* pHead)
{
	DlistNode* p = pHead;
	while (p != NULL)
	{
		printf("%d->", p->data);
		p = p->rLink;
	}
	printf("\n");
}

int main(void)
{
	DlistNode head = { 0,NULL,NULL };
	DlistNode* before = &head;
	DlistNode* pNode;
	for (int i = 1; i < 11; i++)
	{
		pNode = (DlistNode*)malloc(sizeof(DlistNode));
		pNode->data = i * 10;
		DInsertNode(before, pNode);
		before = pNode;
	}
	DDisplay(&head);

	pNode = (DlistNode*)malloc(sizeof(DlistNode));
	pNode->data = 35;
	DInsertNode(DSearch(&head, 30), pNode);
	DDisplay(&head);
	
	pNode = DSearch(&head, 50);
	DRemoveNode(pNode);
	DDisplay(&head);

	DRemoveAll(&head);
	DDisplay(&head);

	return 0;
}

 

 

Stack

#include<stdio.h>
#include <stdlib.h>

#define MAX_STACK_SIZE 100
typedef int element;
typedef struct StackNode
{
	element item;
	struct StackNode* link;
}StackNode;

typedef struct
{
	StackNode* top;
}LinkedStackType;

void Error(char* s)
{
	printf("---<%s>---\n", s);
}

LinkedStackType* CreateStack(void)
{
	LinkedStackType* p = (LinkedStackType*)malloc(sizeof(LinkedStackType));
	return p;
}
void InitStack(LinkedStackType* s)
{
	s->top = NULL;
}
int IsEmptyStack(LinkedStackType* s)
{
	return (s->top == NULL);
}

void Push(LinkedStackType* s, element item)
{
	StackNode* temp = (StackNode*)malloc(sizeof(StackNode));
	if(temp == NULL)
	{
		Error("Memory allocation error!");
		return;
	}
	temp->item = item;
	temp->link = s->top;
	s->top = temp;
}

element Pop(LinkedStackType* s)
{
	if (IsEmptyStack(s))
	{
		Error("Stack Underflow");
		return -1;
	}
	StackNode* temp = s->top;
	element item = temp->item;
	s->top = s->top->link;
	free(temp);
	return item;
}
element PeekStack(LinkedStackType* s)
{
	if (IsEmptyStack(s))
	{
		Error("Stack is empty!");
		return -1;
	}
	return s->top->item;
}
void PrintStack(LinkedStackType* s)
{
	StackNode* temp = s->top;
	if (IsEmptyStack(s))
	{
		Error("Stack is empty!");
		return;
	}
	while (temp != NULL)
	{
		printf("%d\n", temp->item);
		temp = temp->link;
	}

}
void RemoveAllStack(LinkedStackType* s)
{
	StackNode* temp = s->top;
	StackNode* next;
	while (temp != NULL)
	{
		next = temp->link;
		free(temp);
		temp = next;
	}
	s->top = NULL;
}




int main(void)
{
	LinkedStackType* pStack = CreateStack();
	InitStack(pStack);

	Push(pStack, 10);
	Push(pStack, 20);
	Push(pStack, 30);
	Push(pStack, 40);
	Push(pStack, 50);
	PrintStack(pStack);

	printf("Pop() : %d\n", Pop(pStack));
	PrintStack(pStack);

	printf("Pop() : %d\n", Pop(pStack));
	printf("Pop() : %d\n", Pop(pStack));
	printf("Pop() : %d\n", Pop(pStack));
	printf("Pop() : %d\n", Pop(pStack));
	printf("Pop() : %d\n", Pop(pStack));
	PrintStack(pStack);

	Push(pStack, 10);
	Push(pStack, 20);
	Push(pStack, 30);
	Push(pStack, 40);
	Push(pStack, 50);
	PrintStack(pStack);

	RemoveAllStack(pStack);
	PrintStack(pStack);

	free(pStack);



	return 0;
}

 

Stack 과제

#include<stdio.h>
#include <stdlib.h>

#define MAX_STACK_SIZE 100
typedef char element;
typedef struct StackNode
{
	element item;
	struct StackNode* link;
}StackNode;

typedef struct
{
	StackNode* top;
}LinkedStackType;

void Error(char* s)
{
	printf("---<%s>---\n", s);
}

LinkedStackType* CreateStack(void)
{
	LinkedStackType* p = (LinkedStackType*)malloc(sizeof(LinkedStackType));
	return p;
}
void InitStack(LinkedStackType* s)
{
	s->top = NULL;
}
int IsEmptyStack(LinkedStackType* s)
{
	return (s->top == NULL);
}

void Push(LinkedStackType* s, element item)
{
	StackNode* temp = (StackNode*)malloc(sizeof(StackNode));
	if(temp == NULL)
	{
		Error("Memory allocation error!");
		return;
	}
	temp->item = item;
	temp->link = s->top;
	s->top = temp;
}

element Pop(LinkedStackType* s)
{
	if (IsEmptyStack(s))
	{
		Error("Stack Underflow");
		return -1;
	}
	StackNode* temp = s->top;
	element item = temp->item;
	s->top = s->top->link;
	free(temp);
	return item;
}
element PeekStack(LinkedStackType* s)
{
	if (IsEmptyStack(s))
	{
		Error("Stack is empty!");
		return -1;
	}
	return s->top->item;
}
void PrintStack(LinkedStackType* s)
{
	StackNode* temp = s->top;
	if (IsEmptyStack(s))
	{
		Error("Stack is empty!");
		return;
	}
	while (temp != NULL)
	{
		printf("%d\n", temp->item);
		temp = temp->link;
	}

}
void RemoveAllStack(LinkedStackType* s)
{
	StackNode* temp = s->top;
	StackNode* next;
	while (temp != NULL)
	{
		next = temp->link;
		free(temp);
		temp = next;
	}
	s->top = NULL;
}
int CheckMatch(char* expression)
{
	LinkedStackType* pStack = CreateStack();
	InitStack(pStack);

	char* p = expression;
	int retVal = 1;
	// 여는 괄호 Push , 닫는 괄호일경우 pop , 문자열이 끝났을때 비워져있을 경우 참
	while (*p)
	{
		if (*p == '[' || *p == '{' || *p == '(')
		{
			Push(pStack, *p);
		}
		else
		{
			switch (*p)
			{
			case ']':
				if (IsEmptyStack(pStack) || Pop(pStack) != '[')
				{
					retVal = 0;
				}
				break;
			case '}':
				if (IsEmptyStack(pStack) || Pop(pStack) != '{')
				{
					retVal = 0;
				}
				break;
			case ')':
				if (IsEmptyStack(pStack) || Pop(pStack) != '(')
				{
					retVal = 0;
				}
				break;
			}
			
			if (!retVal)
			{
				RemoveAllStack(pStack);
				free(pStack);
				return retVal;

			}
		}
		p++;
	}
	if (!IsEmptyStack(pStack))
	{
		retVal = 0;
	}
	RemoveAllStack(pStack);
	free(pStack);
	return retVal;
}





int main(void)
{
	char exp1[] = { "[ a { b + c - ( a * 3 ) } + 4 ]" };
	char exp2[] = { "[ a { b + c - ( a * 3 ) + 4 ]" };

	printf("%d\n", CheckMatch(exp1));
	printf("%d\n", CheckMatch(exp2));


	return 0;
}

'학원수업 > C언어' 카테고리의 다른 글

C언어 16일차  (0) 2020.10.29
C언어 15일차  (0) 2020.10.28
C언어 13일차  (0) 2020.10.26
C언어 12일차  (0) 2020.10.23
C언어 11일차  (0) 2020.10.22

ArrayList

 

#include<stdio.h>
#define MAX_LIST_SIZE 500

typedef int element;
typedef struct {
	element list[MAX_LIST_SIZE];
	int length;
}ArrayListType;

void Error(char* s)
{
	printf("---<%s>---\n", s);
}

void Init(ArrayListType* pList)
{
	pList->length = 0;
}

int IsEmpty(ArrayListType* pList)
{
	return pList->length == 0;
}

int IsFull(ArrayListType* pList)
{
	return pList->length == MAX_LIST_SIZE;
}

void Add(ArrayListType* pList, int position, element item)
{
	if (!IsFull(pList) && (position >= 0) && (position <= pList->length))
	{
		for (int i = (pList->length - 1); i >= position; i--)
		{
			pList->list[i + 1] = pList->list[i];
		}
		pList->list[position] = item;
		pList->length++;
	}
}

element Delete(ArrayListType* pList, int position)
{
	element item;
	if (position < 0 || position >= pList->length)
	{
		Error("Index Error!!");
		return -1;
	}
	item = pList->list[position];
	for (int i = position ; i <= (pList->length - 1); i++)
	{
		pList->list[i] = pList->list[i+1];
	}
	pList->length--;
	return item;
}
void AddLast(ArrayListType* pList, element item)
{
	if (!IsFull(pList))
	{
		pList->list[pList->length] = item;
		pList->length++;
	}
	else
	{
		Error("List is full!!");
	}
}

void AddFirst(ArrayListType* pList, element item)
{
	if (!IsFull(pList))
	{
		Add(pList, 0, item);
	}
	else
	{
		Error("List is full!!");
	}
}
void DisplayList(ArrayListType* pList)
{
	for (int i = 0; i < pList->length; i++)
	{
		printf("%d ", pList->list[i]);
	}
	printf("\n");
}
void Clear(ArrayListType* pList)
{
	Init(pList);
}

void Replace(ArrayListType* pList, int position, element item)
{
	pList->list[position] = item;

}
int IsInList(ArrayListType* pList, element item)
{
	for (int i = 0; i < pList->length; i++)
	{
		if (pList->list[i] == item)
		{
			return i;
		}
	}
	return -1;
}

element GetEntry(ArrayListType* pList, int position)
{
	if (position >= pList->length || position < 0)
	{
		Error("Index Error!!");
		return -1;
	}
	return pList->list[position];
}
int GetLength(ArrayListType* pList)
{
	return pList->length;
}

int main(void)
{
	ArrayListType myList;
	Init(&myList);
	AddLast(&myList, 1);
	AddLast(&myList, 2);
	AddLast(&myList, 3);
	AddLast(&myList, 4);
	AddLast(&myList, 5);

	AddFirst(&myList, 99);
	Add(&myList, 2, 77);

	DisplayList(&myList);
	Delete(&myList, 6);
	DisplayList(&myList);

	Replace(&myList, 3, 55);
	DisplayList(&myList);

	printf("%d\n", IsInList(&myList, 88));
	printf("%d\n", GetEntry(&myList,3));
	printf("%d\n", GetLength(&myList));

	return 0;
}

 

LinkedList ( ListNode* GetLast(ListNode* pHead) 구현하기)

#include<stdio.h>
#include <stdlib.h>

typedef int element;
typedef struct ListNode
{
	element data;
	struct ListNode* link;
}ListNode;

ListNode* CreateNode(element data)
{
	ListNode* p = (ListNode*)malloc(sizeof(ListNode));
	p->data = data;
	p->link = NULL;
	return p;
}

void InsertNode(ListNode* *pHead, ListNode* pNode, ListNode* newNode) //pNode: front node, newNode: node to be inserted
{
	if (*pHead == NULL)
	{
		*pHead = newNode;
		newNode->link = NULL;
	}
	else if (pNode == NULL)
	{
		newNode->link = *pHead;
		*pHead = newNode;
	}
	else
	{
		newNode->link = pNode->link;
		pNode->link = newNode;
	}


}

void RemoveNode(ListNode** pHead, ListNode* pNode, ListNode* removed) //pNode: front node, removed: node to be removed
{
	if (pNode == NULL)
	{
		*pHead = (*pHead)->link;
		//*pHead = removed->link;
	}
	else
	{
		pNode->link = removed->link;
	}
	free(removed);
}
void Display(ListNode* pHead)
{
	ListNode* p = pHead;
	while (p != NULL)
	{
		printf("%d->", p->data);
		p = p->link;
	}
	printf("\n");
}

ListNode* Search(ListNode* pHead, element x)
{
	ListNode* p = pHead;
	while (p != NULL)
	{
		if (p->data == x)
		{
			return p;
		}
		p = p->link;
	}
	return p;
}

ListNode* GetLast(ListNode* pHead)
{
	ListNode* p = pHead;
	while (p->link != NULL)
	{
		p = p->link;
	}
	return p;
}


int main(void)
{
	ListNode* pHead = NULL;
	ListNode* newNode = CreateNode(1);
	InsertNode(&pHead, NULL, newNode);

	newNode = CreateNode(2);
	InsertNode(&pHead, GetLast(pHead), newNode);
	newNode = CreateNode(3);
	InsertNode(&pHead, GetLast(pHead), newNode);
	newNode = CreateNode(4);
	InsertNode(&pHead, GetLast(pHead), newNode);
	newNode = CreateNode(5);
	InsertNode(&pHead, GetLast(pHead), newNode);

	Display(pHead);

	RemoveNode(&pHead, NULL, Search(pHead, 1));
	Display(pHead);

	RemoveNode(&pHead, Search(pHead,3), Search(pHead, 4));
	Display(pHead);
	return 0;
}

'학원수업 > C언어' 카테고리의 다른 글

C언어 15일차  (0) 2020.10.28
C언어 14일차  (0) 2020.10.27
C언어 12일차  (0) 2020.10.23
C언어 11일차  (0) 2020.10.22
C언어 10일차  (0) 2020.10.21

카카오 신입 공채 1차 코딩 테스트 비밀지도 문제풀기

#include<stdio.h>


int main(void)
{
	
	int arr1[6] = {46, 33, 33 ,22, 31, 50};
	int arr2[6] = {27 ,56, 19, 14, 14, 10};
	int sum[6];
	
	
	for(int i=0; i<6;i++)
	{
		char view[6] ={' ',};
		
		sum[i] = arr1[i] | arr2[i];
		
		
		for (int j = 0; sum[i] > 0; j++)
		{
			if(sum[i]% 2 ==1)
			{
				view[j] ='#';
			}
			
			
			sum[i] /= 2;
			
			
		}
	
		for (int k = 5; k >= 0; k--)
		{
			printf("%c", view[k]);
		}
		printf("\n");
	}
	
	
	
	
	
	
	
	return 0;
}

 

 

 

정렬 코드

 

#include<stdio.h>
#pragma warning (disable:4996) 

void SwapInt(int* a, int* b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}

void PrintArray(int* arr, int len)
{
	printf("[ ");
	for (int i = 0; i < len; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("]\n");
}
void BubbleSort(int* arr, int len)
{

	for (int i = 0; i < len - 1; i++)
	{
		for (int k = 1; k < len - i; k++)
		{
			if (arr[k - 1] > arr[k])
			{
				SwapInt(&arr[k - 1], &arr[k]);
			}

		}
		printf("[ ");
		for (int i = 0; i < len; i++)
		{
			printf("%d ", arr[i]);
		}
		printf("]\n");

	}

}
void SelectionSort(int* arr, int len)
{
	int min;
	int minindex;
	for (int i = 0; i < len - 1; i++)
	{
		min = arr[i];
		minindex = i;
		for (int k = 1 + i; k < len; k++)
		{
			if (min > arr[k])
			{
				min = arr[k];
				minindex = k;
			}

		}
		SwapInt(&arr[i], &arr[minindex]);
		printf("[ ");
		for (int i = 0; i < len; i++)
		{
			printf("%d ", arr[i]);
		}
		printf("]\n");

	}

}
void InsertSort(int* arr, int len)
{
	for (int i = 1; i < len; i++)
	{
		int key = arr[i];
		int j = i - 1;
		while (j >= 0 && key < arr[j])
		{
			arr[j + 1] = arr[j--];
		}
		arr[j + 1] = key;
		printf("[ ");
		for (int i = 0; i < len; i++)
		{
			printf("%d ", arr[i]);
		}
		printf("]\n");

	}
}
void SequencialSort(int* arr, int len)
{
	for (int i = 0; i < len-1; i++)
	{
		for (int j = i+1; j < len; j++)
		{
			if (arr[i] > arr[j])
			{
				SwapInt(&arr[i], &arr[j]);
			}
		}

	}

}



int main()
{
	int a[] = { 20,50,10,80,40,90,30,100,70,60 };
	//BubbleSort(a, sizeof(a) / sizeof(int));
	/*SelectionSort(a, sizeof(a) / sizeof(int));*/
	//InsertSort(a, sizeof(a) / sizeof(int));
	SequencialSort(a, sizeof(a) / sizeof(int));
	PrintArray(a, sizeof(a) / sizeof(int));


	return 0;
}

 

이진수 출력

#include<stdio.h>
#pragma warning (disable:4996) 

int main()
{
	int input=0;
	int binary[100];
	int div = 0;
	printf("10진수 정수 입력:");
	scanf("%d", &input);

	
	for (int i = 0; input > 0; i++)
	{
		binary[i] = input % 2;
		input /= 2;
		div++;
		
	}

	for (int j = div-1; j >= 0; j--)
	{
		printf("%d ", binary[j]);
	}

}

 

'학원수업 > C언어' 카테고리의 다른 글

C언어 14일차  (0) 2020.10.27
C언어 13일차  (0) 2020.10.26
C언어 11일차  (0) 2020.10.22
C언어 10일차  (0) 2020.10.21
C언어 9일차  (0) 2020.10.20

정렬코드

#include<stdio.h>
#pragma warning (disable:4996) 

void SwapInt(int* a, int* b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}

void PrintArray(int* arr, int len)
{
	printf("[ ");
	for (int i = 0; i < len; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("]\n");
}
void BubbleSort(int* arr, int len)
{	
	
	for (int i = 0; i < len - 1; i++)
	{
		for (int k = 1; k < len - i; k++)
		{
			if (arr[k - 1] > arr[k])
			{
				SwapInt(&arr[k - 1], &arr[k]);
			}

		}
		printf("[ ");
		for (int i = 0; i < len; i++)
		{
			printf("%d ", arr[i]);
		}
		printf("]\n");

	}

}
void SelectionSort(int* arr, int len)
{
	int min;
	int minindex;
	for (int i = 0; i < len - 1; i++)
	{
		min = arr[i];
		minindex = i;
		for (int k = 1+i; k < len; k++)
		{
			if (min > arr[k])
			{
				min = arr[k];
				minindex = k;
			}

		}
		SwapInt(&arr[i],&arr[minindex]);
		printf("[ ");
		for (int i = 0; i < len; i++)
		{
			printf("%d ", arr[i]);
		}
		printf("]\n");
		
	}

}



int main()
{
	int a[] = { 20,50,10,80,40,90,30,100,70,60 };
	//BubbleSort(a, sizeof(a) / sizeof(int));
	SelectionSort(a, sizeof(a) / sizeof(int));
	PrintArray(a, sizeof(a)/sizeof(int));


	return 0;
}

 

 

 


8방향 체크후 지뢰숫자 출력, 지뢰 접근시 종료
int row, col, sum;

int mine[9][9] = {0,1,0,1,0,0,0,0,0},
{0,1,0,1,0,0,0,0,0},
{0,1,0,1,0,0,0,0,0},
{0,1,0,1,0,0,0,0,0},
{0,1,0,1,0,0,0,0,0},
{0,1,0,1,0,0,0,0,0},
{0,1,0,1,0,0,0,0,0},
{0,1,0,1,0,0,0,0,0},
{0,1,0,1,0,0,0,0,0};

 

#include<stdio.h>
#pragma warning (disable:4996) 


int main()
{
	int mine[9][9] = 
	{
	{0,1,1,1,1,0,1,0,0},
	{0,1,0,1,1,1,1,0,1},
	{0,1,1,1,0,1,0,1,0},
	{0,1,0,1,0,0,1,0,1},
	{0,1,0,1,0,0,0,0,0},
	{0,1,0,1,0,0,1,0,1},
	{0,1,0,1,0,0,0,0,0},
	{0,1,0,1,0,0,0,0,0},
	{0,1,0,1,0,0,0,0,0}
	};
	
	while(1)		
	{		
	int x;
	int y;
	int cnt=0;
	printf("좌표입력:");
	scanf("%d %d",&x,&y);
	
	if(x == -1 || y==-1)
	{
		printf("강제종료 \n");
		break;
	}
	
	if(mine[x][y]==1)
	{
		printf("펑\n");
		break;
	}
	for(int i=-1;i<2;i++)
	{
		for(int j=-1; j<2;j++)
		{
			if(x+i>=0 && y+j>=0 && x+i<=8 && y+j<=8)
			{
				cnt += mine[x+i][y+j];
			}
		}	
	}
	printf("주변 지뢰: %d 개\n",cnt);
	}

	return 0;
}





 

 

 

'학원수업 > C언어' 카테고리의 다른 글

C언어 13일차  (0) 2020.10.26
C언어 12일차  (0) 2020.10.23
C언어 10일차  (0) 2020.10.21
C언어 9일차  (0) 2020.10.20
C언어 8일차  (0) 2020.10.19

3자리 정수 3개 곱
100~999사이의 정수 3개 입력
3개의 정수 곱한 결과를 읽어서 0 ~9 각 숫자가 몇개 있는지 구함

266 266 266 입력시 출력예

정수(100 ~999) 3개 입력:

result: 18821096
0 = 1
1 = 2

#include<stdio.h>
#pragma warning (disable:4996) 


int main()
{
	int num1,num2,num3,result,remain;
	int numCount[10] = {0, };
	
	
	printf("정수(100~999) 3개 입력: ");
	scanf("%d %d %d", &num1, &num2, &num3);
	result = num1 * num2 *num3;
	printf("result: %d \n", result);
	
	while(result!=0)
	{
		remain = result % 10;
		numCount[remain]++;
		result /= 10; 
	}
	
	
	for(int i =0; i<10;i++)
	{
		printf("%d = %d \n",i,numCount[i]);
	}
	
	

	return 0;
}





 

 

'학원수업 > C언어' 카테고리의 다른 글

C언어 12일차  (0) 2020.10.23
C언어 11일차  (0) 2020.10.22
C언어 9일차  (0) 2020.10.20
C언어 8일차  (0) 2020.10.19
C언어 7일차  (0) 2020.10.16

C언어 달팽이 모양 2차원배열 문제 풀기 (5 * 5)

#include<stdio.h>
#pragma warning (disable:4996) 


int main()
{
	int ar[5][5];
	int num= 0,row = 0;
	int col = -1;
	int cnt = 5;
	int add = 1;
	
	while(1)
	{
		for(int i =0; i < cnt ; i++)	
		{
			num++;
			col += add;
			ar[row][col] = num;
		}
		cnt -= 1;
		if(cnt <=0)
		{
			break;
		}
		for(int j =0; j<cnt; j++)
		{
			num++;
			row += add;
			ar[row][col] = num;
		}
		add *= -1;
		
	}
	
	
	for (int i = 0; i < 5; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			
			printf("%d \t", ar[i][j]);
		}
		printf("\n");
	}

	

	return 0;
}





'학원수업 > C언어' 카테고리의 다른 글

C언어 11일차  (0) 2020.10.22
C언어 10일차  (0) 2020.10.21
C언어 8일차  (0) 2020.10.19
C언어 7일차  (0) 2020.10.16
c언어 6일차  (0) 2020.10.15
#include<stdio.h>
#pragma warning (disable:4996) 


//정수 나누기하여 몫만큼 위로
//. . . . . . . 0
//. . . . . . . 0
//. . . . . . . 0
//. . . . . 0 . 0
//. . . . . 0 . 0
//0 . . . . 0 . 0
//0 . . . . 0 . 0
//0 . . . . 0 . 0
//0 . . . . 0 . 0
//0 . . . . 0 . 0


void Graph(int(*intPtr),char(*chPtr)[8], int brRow, int brCol)
{
	int row = brRow - 1;
	int col = 0;


	
	for (int i = col; i < brCol; i++)
	{
		int num = intPtr[i] / 10;
		for(int j = row; j > row-num ;j--)
		{
			chPtr[j][i] ='0';
		}
	}

}


int main()
{
	int ar[] = { 50,64,39,66,93,78,0,100 };
	char br[10][8];
	int row = sizeof(br)/sizeof(br[0]);
	int col = sizeof(br[0]);
	
	
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			br[i][j] = '.';
		}
	}
	Graph(ar,br,row,col);
	
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			
			printf("%c ", br[i][j]);
		}
		printf("\n");
	}

	

	return 0;
}





'학원수업 > C언어' 카테고리의 다른 글

C언어 10일차  (0) 2020.10.21
C언어 9일차  (0) 2020.10.20
C언어 7일차  (0) 2020.10.16
c언어 6일차  (0) 2020.10.15
C언어 4일차  (0) 2020.10.13

1. 
a la russe
(1) 먼저 세 칸을 만들고 두 수를 1번 째, 2번째 칸에 적는다.

이 때, 1번째 수가 홀수이면 2번째 칸의 값을 3번째 칸에 옮겨 적는다.

 

(2)  1번 째 칸에 있는 값을 2로 나누고, 2번 째 칸에 있는 값에 2를 곱한다.

이 때, 1번째 수가 홀수이면 2번째 칸의 값을 3번째 칸에 옮겨적는다.

이 것을 1번 째 칸에 있는 값이 0이 될 때 까지 반복한다.

 

(3) 3번째 칸에 적혀진 모든 값을 더하여 출력한다.

 

#include<stdio.h>
#pragma warning (disable:4996) 



int main()
{
	int num1 = 21, num2 = 22, sum = 0 , result;
	result = num1 * num2;

	for (num1;num1>0;num1/=2)
	{
		if (num1 % 2 == 1)
		{
			sum += num2;
		
		}
		num2 *= 2;

	}
	printf("%d %d", sum, result);


	return 0;
}




2.  마방진 3 * 3
오른쪽하나 아래하나 홀수 정사각형이면 다 됨
492
357
816



#include<stdio.h>
#pragma warning (disable:4996) 
void Mabangjin(int(*ptr)[5], int arrSize)
{
	int row = arrSize - 1;
	int col = (arrSize - 1) / 2;
	const int maxRow = arrSize - 1;
	const int maxCol = arrSize - 1;

	ptr[row][col] = 1;
	for (int i = 2; i <= (arrSize * arrSize); i++)
	{
		if ((col + 1) > maxCol && (row + 1) > maxRow)
		{
			row--;
		}
		else if ((row + 1) > maxRow)
		{
			row = 0;
			col++;
		}
		else if ((col + 1) > maxCol)
		{
			row++;
			col = 0;
		}
		else
		{
			row++;
			col++;
		}
		if (ptr[row][col] != 0)
		{
			row -= 2;
			col--;
		}
		ptr[row][col] = i;
	}

}


int main(int argc, char* argv[])
{
	int a[5][5];
	int arrSize = sizeof(a[0]) / sizeof(int);
	for (int i = 0; i < arrSize; i++)
	{
		for (int j = 0; j < arrSize; j++)
		{
			a[i][j] = 0;
			printf("%2d ", a[i][j]);
		}
		printf("\n");
	}
	printf("\n");
	Mabangjin(a, arrSize);
	for (int i = 0; i < arrSize; i++)
	{
		for (int j = 0; j < arrSize; j++)
		{
			
			printf("%2d ", a[i][j]);
		}
		printf("\n");
	}

}

 

'학원수업 > C언어' 카테고리의 다른 글

C언어 9일차  (0) 2020.10.20
C언어 8일차  (0) 2020.10.19
c언어 6일차  (0) 2020.10.15
C언어 4일차  (0) 2020.10.13
C언어 3일차  (0) 2020.10.12

+ Recent posts