반응형
//실습 2번

#include 
#include 
#include 

#define BUFSIZE 512

//실습4번
int main(int argc, char* argv[])
{
	WSADATA wsa;
	if(WSAStartup(MAKEWORD(2,2),&wsa) != 0)
		return -1;

	char *ipaddr ="147.46.114.70";
		printf("IP주소 = %s \n",ipaddr);

	printf("변환후 = 0x%x\n",inet_addr(ipaddr));

	IN_ADDR temp;
	temp.s_addr = inet_addr(ipaddr);
	printf("변환 = %s\n", inet_ntoa(temp));

	WSACleanup();
	return 0;

}

/*
void err_quit(char *msg) ; void err_display(char *msg);

int main(int argc, char* argv[])
{
	int retval;

	
	WSADATA wsa;
	if(WSAStartup(MAKEWORD(2,2), &wsa) != 0) return -1;

	
	SOCKET listen_sock = socket(AF_INET, SOCK_STREAM, 0);
	if(listen_sock == INVALID_SOCKET) err_quit("socket()");


	SOCKADDR_IN serveraddr;
	ZeroMemory(&serveraddr, sizeof(serveraddr));
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_port = htons(9000);
	serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
	retval = bind(listen_sock, (SOCKADDR *)&serveraddr, sizeof(serveraddr));
	if(retval == SOCKET_ERROR) err_quit("bind()");


	retval = listen(listen_sock, SOMAXCONN);
	if(retval == SOCKET_ERROR) err_quit("listen()");


	SOCKET client_sock;
	SOCKADDR_IN clientaddr;
	int addrlen;
	char buf[BUFSIZE+1];

	while(1) {

		addrlen = sizeof(clientaddr);
		client_sock = accept(listen_sock, (SOCKADDR *)&clientaddr, &addrlen);
		if(client_sock == INVALID_SOCKET) {
			err_display("accept()");
			continue;
		}
		printf("\n[TCP 서버] 클라이언트접속: IP 주소=%s, 포트、번호=%d\n",
			inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));


		while(1) {
			retval = recv(client_sock, buf, BUFSIZE, 0);
			if(retval == SOCKET_ERROR) {
				err_display("recv()");
				break;
			}
			else if(retval == 0) {
				break;
			}
			else {
				buf[retval] = '\0';
				printf("%s", buf);
			}
					//보내기
		retval = send(client_sock, strupr(buf), BUFSIZE, 0);
		if( retval== SOCKET_ERROR){
			err_display("send()");
			break;
		}
		printf("[TCP 클라이언트] %d 바이트를 보냈습니다.\n",retval);
		}
		closesocket(client_sock);
		printf("\n[TCP 서버클라이언트 종료: IP 주소=%s, 포트번호=%d\n",
		      inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));
	}

	closesocket(listen_sock);
	WSACleanup();
	return 0;
}

void err_quit(char *msg)
{
	LPVOID ipMsgBuf;
	FormatMessage(
		FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,
		WSAGetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
		(LPTSTR)&ipMsgBuf,0,NULL);
	MessageBox(NULL, (LPCTSTR)ipMsgBuf, msg, MB_ICONERROR);
	LocalFree(ipMsgBuf);
	exit(-1);
}

void err_display(char *msg)
{
	LPVOID ipMsgBuf;
	FormatMessage(
		FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,
		WSAGetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
		(LPTSTR)&ipMsgBuf,0,NULL);
	printf("[%s] %s", msg, (LPCTSTR)ipMsgBuf);
	LocalFree(ipMsgBuf);
}*/
//////////////////////////
/*

#include 
#include 
#include 

#define BUFSIZE 512

int recvn(SOCKET s, char *buf, int len, int flags);
void err_quit(char *msg);
void err_display(char *msg);

int main(int argc, char* argv[])
{
	int retval;

	WSADATA wsa;
	if(WSAStartup(MAKEWORD(2,2),& wsa) !=0)
		return -1;

	SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
	if(sock == INVALID_SOCKET) err_quit("socket()");

	SOCKADDR_IN serveraddr;
	ZeroMemory(&serveraddr, sizeof(serveraddr));
	serveraddr.sin_family = AF_INET;r
	serveraddr.sin_port = htons(9000);
	serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	retval - connect(sock, (SOCKADDR *)&serveraddr, sizeof(serveraddr));
	if(retval == SOCKET_ERROR) err_quit("connect()");

	char buf[BUFSIZE+1];
	int len;

	while(1)
	{
		ZeroMemory(buf, sizeof(buf));
		printf("\n[보낼 테이터]");
		if(fgets(buf, BUFSIZE+1, stdin) == NULL)
			break;

		// \n 문자제거
		len =strlen(buf);
		if(buf[len-1] == '\n')
			buf[len-1] = '\0';
		if(strlen(buf) == 0)
			break;

		retval = send(sock, buf, strlen(buf), 0);
		if( retval== SOCKET_ERROR){
			err_display("send()");
			break;
		}
		printf("[TCP 클라이언트] %d 바이트를 보냈습니다.",retval);

		retval = recvn(sock, buf, retval, 0);
		if(retval == SOCKET_ERROR)
		{
			err_display("recv()");
			break;
		}
		else if(retval == 0)
			break;
		buf[retval] = '\0';
		printf("[TCP 클라이언트] %d바이트를 받았습니다", retval);
		printf("[받은 데이터]%s\n", buf);

	}
	closesocket(sock);
	WSACleanup();
	return 0;

}
//리시브
int recvn(SOCKET s, char *buf, int len, int flags)
{
	int received;
	char *ptr = buf;
	int left = len;

	while(left >0){
		received =recv(s,ptr,left,flags);
		if(received == SOCKET_ERROR)
			return SOCKET_ERROR;
		else if(received == 0)
			break;
		left -= received;
		ptr += received;
	}
	return (len - left);
}


void err_quit(char *msg)
{
	LPVOID ipMsgBuf;
	FormatMessage(
		FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,
		WSAGetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
		(LPTSTR)&ipMsgBuf,0,NULL);
	MessageBox(NULL, (LPCTSTR)ipMsgBuf, msg, MB_ICONERROR);
	LocalFree(ipMsgBuf);
	exit(-1);
}

void err_display(char *msg)
{
	LPVOID ipMsgBuf;
	FormatMessage(
		FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,
		WSAGetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
		(LPTSTR)&ipMsgBuf,0,NULL);
	printf("[%s] %s", msg, (LPCTSTR)ipMsgBuf);
	LocalFree(ipMsgBuf);
}*/
반응형
#include 
#include 
#include 

#define BUFSIZE    512

// 소켓 정보 저장을 위한 구조체
struct SOCKETINFO
{
	SOCKET sock;
	char buf[BUFSIZE+1];
	int recvbytes;
	int sendbytes;
};
///////////////////////////////////////////////////////////////////////////////////////
struct THREADINFO
{
	DWORD ThreadId;
	int Total_Sockets;
	SOCKETINFO *SocketInfoArray[FD_SETSIZE];
	THREADINFO *next;
};

THREADINFO *ThreadInfoList;

BOOL Add_ThreadInfo(DWORD ThreadId)
{
	THREADINFO *ptr = new THREADINFO;
	if(ptr == NULL) return FALSE;

	ptr->ThreadId = ThreadId;
	ptr->Total_Sockets = 0;
	ptr->next = NULL;
	ThreadInfoList = ptr;

	return TRUE;
}

THREADINFO *GetThreadInfo(DWORD ThreadId)
{
	THREADINFO *ptr = ThreadInfoList;

	while(ptr){
		if(ptr->ThreadId == ThreadId)
			return ptr;
		ptr = ptr->next;
	}

	return NULL;
}

THREADINFO *WhichThreadAvailable()
{
	THREADINFO *ptr = ThreadInfoList;

	while(ptr){
		if(ptr->Total_Sockets < FD_SETSIZE)
			return ptr;
		ptr = ptr->next;
	}

	return NULL;
}

void RemoveThreadInfo(DWORD ThreadId)
{
	THREADINFO *curr = ThreadInfoList;
	THREADINFO *prev = NULL;

	while(curr){
		if(curr->ThreadId == ThreadId){
			if(prev)
				prev->next = curr->next;
			else
				ThreadInfoList = curr->next;
			delete curr;
			return;
		}
		prev = curr;
		curr = curr->next;
	}
}
///////////////////////////////////////////////////////////////////////////////////////

// 소켓 관리 함수
BOOL AddSocketInfo(SOCKET sock, THREADINFO *ThreadInfo);
void RemoveSocketInfo(int nIndex, THREADINFO *ThreadInfo);
// 오류 출력 함수
void err_quit(char *msg);
void err_display(char *msg);

DWORD WINAPI ProcessClient(LPVOID arg)
{
	THREADINFO *ThreadInfo = (THREADINFO *)arg;
	FD_SET rset;
	FD_SET wset;
	SOCKADDR_IN clientaddr;
	int addrlen;
	int retval;

	while(1){
		if(ThreadInfo->Total_Sockets == 0){
			RemoveThreadInfo(ThreadInfo->ThreadId);
			return 0;
		}

		// 소켓 셋 초기화
		FD_ZERO(&rset);
		FD_ZERO(&wset);
		for(int i=0; iTotal_Sockets; i++){
			if(ThreadInfo->SocketInfoArray[i]->recvbytes > 
				ThreadInfo->SocketInfoArray[i]->sendbytes)
				FD_SET(ThreadInfo->SocketInfoArray[i]->sock, &wset);
			else
				FD_SET(ThreadInfo->SocketInfoArray[i]->sock, &rset);
		}

		// select()
		TIMEVAL timeout;
		timeout.tv_sec = 0;
		timeout.tv_usec = 10000; // 0.01초마다 select()가 리턴함
		retval = select(0, &rset, &wset, NULL, &timeout);
		if(retval == SOCKET_ERROR) err_quit("select()");
		else if(retval == 0) continue;

		// 소켓 셋 검사: 데이터 통신
		for(int i=0; iTotal_Sockets; i++){
			SOCKETINFO *ptr = ThreadInfo->SocketInfoArray[i];
			if(FD_ISSET(ptr->sock, &rset)){
				// 데이터 받기
				retval = recv(ptr->sock, ptr->buf, BUFSIZE, 0);
				if(retval == SOCKET_ERROR){
					if(WSAGetLastError() != WSAEWOULDBLOCK){
						err_display("recv()");
						RemoveSocketInfo(i, ThreadInfo);
					}
					continue;
				}
				else if(retval == 0){
					RemoveSocketInfo(i, ThreadInfo);
					continue;
				}
				ptr->recvbytes = retval;
				// 받은 데이터 출력
				addrlen = sizeof(clientaddr);
				getpeername(ptr->sock, (SOCKADDR *)&clientaddr, &addrlen);
				ptr->buf[retval] = '\0';
				printf("[TCP/%s:%d] %s\n", inet_ntoa(clientaddr.sin_addr),
					ntohs(clientaddr.sin_port), ptr->buf);
			}
			if(FD_ISSET(ptr->sock, &wset)){
				// 데이터 보내기
				retval = send(ptr->sock, ptr->buf + ptr->sendbytes, 
					ptr->recvbytes - ptr->sendbytes, 0);
				if(retval == SOCKET_ERROR){
					if(WSAGetLastError() != WSAEWOULDBLOCK){
						err_display("send()");
						RemoveSocketInfo(i, ThreadInfo);
					}
					continue;
				}
				ptr->sendbytes += retval;
				if(ptr->recvbytes == ptr->sendbytes){
					ptr->recvbytes = ptr->sendbytes = 0;
				}
			}
		}
	}

	return 0;
}

int main(int argc, char* argv[])
{
	int retval;

	// 윈속 초기화
	WSADATA wsa;
	if(WSAStartup(MAKEWORD(2,2), &wsa) != 0)
		return -1;

	// socket()
	SOCKET listen_sock = socket(AF_INET, SOCK_STREAM, 0);
	if(listen_sock == INVALID_SOCKET) err_quit("socket()");

	// bind()
	SOCKADDR_IN serveraddr;
	ZeroMemory(&serveraddr, sizeof(serveraddr));
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_port = htons(9000);
	serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
	retval = bind(listen_sock, (SOCKADDR *)&serveraddr, sizeof(serveraddr));
	if(retval == SOCKET_ERROR) err_quit("bind()");
	
	// listen()
	retval = listen(listen_sock, SOMAXCONN);
	if(retval == SOCKET_ERROR) err_quit("listen()");

	// 데이터 통신에 사용할 변수
	SOCKET client_sock;
	SOCKADDR_IN clientaddr;
	int addrlen;

	while(1){
		addrlen = sizeof(clientaddr);
		client_sock = accept(listen_sock, (SOCKADDR *)&clientaddr, &addrlen);
		if(client_sock == INVALID_SOCKET){
			err_display("accept()");
			continue;
		}
		printf("[TCP 서버] 클라이언트 접속: IP 주소=%s, 포트 번호=%d\n", 
			inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));

		// 넌블로킹 소켓으로 전환
		u_long on = TRUE;
		retval = ioctlsocket(client_sock, FIONBIO, &on);
		if(retval == SOCKET_ERROR) err_display("ioctlsocket()");

		THREADINFO *ThreadInfo = WhichThreadAvailable();
		if(ThreadInfo == NULL){
			HANDLE hThread;
			DWORD ThreadId = -1;
			if(Add_ThreadInfo(ThreadId) == NULL) break;
			ThreadInfo = GetThreadInfo(ThreadId);
			hThread = CreateThread(NULL, 0, ProcessClient, 
				(LPVOID)ThreadInfo, CREATE_SUSPENDED, &ThreadId);
			if(hThread == NULL) break;
			ThreadInfo->ThreadId = ThreadId;

			if(AddSocketInfo(client_sock, ThreadInfo) == FALSE){
				printf("[TCP 서버] 클라이언트 접속을 해제합니다!\n");
				closesocket(client_sock);
			}
			
			ResumeThread(hThread);
			CloseHandle(hThread);
		}
		else{
			if(AddSocketInfo(client_sock, ThreadInfo) == FALSE){
				printf("[TCP 서버] 클라이언트 접속을 해제합니다!\n");
				closesocket(client_sock);
			}
		}
	}

	// 윈속 종료
	WSACleanup();
	return 0;
}

// 소켓 정보 추가
BOOL AddSocketInfo(SOCKET sock, THREADINFO *ThreadInfo)
{
	if(ThreadInfo->Total_Sockets >= FD_SETSIZE){
		printf("[오류] 소켓 정보를 추가할 수 없습니다!\n");
		return FALSE;
	}

	SOCKETINFO *ptr = new SOCKETINFO;
	if(ptr == NULL){
		printf("[오류] 메모리가 부족합니다!\n");
		return FALSE;
	}

	ptr->sock = sock;
	ptr->recvbytes = 0;
	ptr->sendbytes = 0;
	ThreadInfo->SocketInfoArray[ThreadInfo->Total_Sockets++] = ptr;

	return TRUE;
}

// 소켓 정보 삭제
void RemoveSocketInfo(int nIndex, THREADINFO *ThreadInfo)
{
	SOCKETINFO *ptr = ThreadInfo->SocketInfoArray[nIndex];

	// 클라이언트 정보 얻기
	SOCKADDR_IN clientaddr;
	int addrlen = sizeof(clientaddr);
	getpeername(ptr->sock, (SOCKADDR *)&clientaddr, &addrlen);
	printf("[TCP 서버] 클라이언트 종료: IP 주소=%s, 포트 번호=%d\n", 
		inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));

	closesocket(ptr->sock);
	delete ptr;

	for(int i=nIndex; iTotal_Sockets; i++){
		ThreadInfo->SocketInfoArray[i] = ThreadInfo->SocketInfoArray[i+1];
	}
	ThreadInfo->Total_Sockets--;
}

// 소켓 함수 오류 출력 후 종료
void err_quit(char *msg)
{
	LPVOID lpMsgBuf;
	FormatMessage( 
		FORMAT_MESSAGE_ALLOCATE_BUFFER|
		FORMAT_MESSAGE_FROM_SYSTEM,
		NULL, WSAGetLastError(),
		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
		(LPTSTR)&lpMsgBuf, 0, NULL);
	MessageBox(NULL, (LPCTSTR)lpMsgBuf, msg, MB_ICONERROR);
	LocalFree(lpMsgBuf);
	exit(-1);
}

// 소켓 함수 오류 출력
void err_display(char *msg)
{
	LPVOID lpMsgBuf;
	FormatMessage( 
		FORMAT_MESSAGE_ALLOCATE_BUFFER|
		FORMAT_MESSAGE_FROM_SYSTEM,
		NULL, WSAGetLastError(),
		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
		(LPTSTR)&lpMsgBuf, 0, NULL);
	printf("[%s] %s", msg, (LPCTSTR)lpMsgBuf);
	LocalFree(lpMsgBuf);
}
반응형
//순환 호출되는 것을 이해하기 위하여 fib 함수를 다음과 같이 바꾸어서 실행하여보라.
//fib(6)을 호출할 때 화면에 출력되는 내용을 써라.
#include 
int fib(int n)
{
	printf("fib(%d) is called \n",n);
		if(n==0) return 0;
		if(n==1) return 1;
		return (fib(n-1) + fib(n-2));

} 

void main()
{
	int n;
	printf("출력");
	scanf("%d", &n);
	printf("%d", fib(n));
}

'C, C++' 카테고리의 다른 글

[C] 소켓 공부  (0) 2014.11.18
[C] 소켓 공부하기!!  (0) 2014.11.18
[C] 자료구조 순환적인 프로그램  (0) 2014.11.18
[C] c언어 문제풀이3  (0) 2014.11.18
[C] c언어 문제풀이2  (0) 2014.11.18
반응형

1 + 1/2 + 1/3 + 1/4 + ....+ 1/n


#include 
double sum(double n)
{
	if(n == 1) return 1;
	else return 1/n + sum(n-1);

} 

void main()
{
	double n;
	printf("N의 값은");
	scanf("%lf", &n);
	
	printf("n의 합은 %lf입니다..\n", sum(n));
}

'C, C++' 카테고리의 다른 글

[C] 소켓 공부하기!!  (0) 2014.11.18
[C] [자료구조] fib 함수를 사용해서 순환호출를 이해하기  (0) 2014.11.18
[C] c언어 문제풀이3  (0) 2014.11.18
[C] c언어 문제풀이2  (0) 2014.11.18
[C] c언어 문제풀이1  (0) 2014.11.18
반응형
#include "main.h"

//1. 알파벳과 숫자만으로 4자부터 8자까지의 암호를 만들어서 배열에 저장하고,
//	사용자로부터 문자열을 입력받아 로그인이 이루어지는지 검사하라.(10점)
//출력 ]    암   호 : mystery
//          결   과 : 로그인 실패
//	    암   호 : hello
//          결   과 : 로그인 실패
//          암   호 : hello124
//          결   과 : 로그인 성공 
//

void bit_1()
{
	int i,c;
	char pw_1[10];
	char *pw="hello123";
	while(1)
	{
		printf("암 호 :");
		scanf("%s",pw_1);
		if (strcmp(pw,pw_1)==0)
		{
			printf("로그인 성공\n");
			break;
		}
		else
		{
			printf("로그인 실패\n");
		}

	}	
}

//2. 배열은 정보의 목록을 관리하는 프로그래밍에서 아주 유용하다.
//	한달동안 매일 정오의 기온을 입력받아서 한달 평균 기온과 가장 추운 날,
//	가장 더운 날을 출력한다.(단 기온은 난수를 이용해서 저장할 것) : srand()  (10점)
void bit_2()
{
	int gion[30],i;
	int sum,max,min;
	srand((unsigned)time(NULL));
	gion[0] = rand()%50+1;
	max= gion[0];
	min = gion[0];
	sum = gion[0];
	for(i=1;i<30;i++)
	{
		gion[i] = rand()%50+1;

		if(max < gion[i])
		{
			max = gion[i];
		}
		if(min > gion[i])
		{
			min = gion[i];
		}
		sum += gion[i];
	}
	printf("한달 평균: %d \n 가장 추운 날: %d \n 가장 더운 날: %d\n",sum/30,min,max);

}
//3. 사용자로부터 10개의 수를 입력받아서 그 들중에 같은 것이 있는지 검사하는 프로그램을 작성하여라(10점)
void bit_3()
{
	int a[10],i,j;

	for(i=0;i<10;i++)
	{
		printf("입력 : ");
		scanf("%d",&a[i]);
	}
	for(i=0;i<10;i++)
	{
		for(j=0;j<10;j++)
		{
			if(i !=j)
			{
				if(a[i] == a[j])
				{
					printf("%d 번째 %d 값은 같습니다\n",i,a[i]);
				}
			}
		
		}
	}

}
//4. 하나의 문자열을 입력받아 첫번째 공백을 찾는 프로그램을 작성하여라.
//	그리고 공백을 찾으면 문자열의 나머지 부분을 출력하게 하여라.(10점)
void bit_4()
{
	int i,no;
	char *string;
	string = (char*)malloc(sizeof(char)*30);

	printf(" 입력:");
	gets(string);
	for(i=0;i= 48 && string[i] <= 57)
		{
			count_2++;
		}
	}
	printf("공백 %d 숫자 %d 입니다.\n",count_1,count_2);
}
//6. 다음은 C언어 함수들이다. 다음의 함수들의 동작원리를 MSDN을 통해 조사하고 함수를 직접 구현하라. 
//
char *strchr(const char *s, int c)
{
    while (*s != (char)c)
        if (!*s++)
            return 0;
    return (char *)s;
}

char *strrchr(const char *s, int c)
{
    char* ret=0;
    do {
        if( *s == (char)c )
            ret=s;
    } while(*s++);
    return ret;
}

char *strstr(const char *s1, const char *s2)
{
    size_t n = strlen(s2);
    while(*s1)
        if(!memcmp(s1++,s2,n))
            return s1-1;
    return 0;
}

char *strpbrk(const char *s1, const char *s2)
{
    while(*s1)
        if(strchr(s2, *s1++))
            return (char*)--s1;
    return 0;
}

char *strtok(char * str, const char * delim)
{
    static char* p=0;
    if(str)
        p=str;
    else if(!p)
        return 0;
    str=p+strspn(p,delim);
    p=str+strcspn(str,delim);
    if(p==str)
        return p=0;
    p = *p ? *p=0,p+1 : 0;
    return str;
}

void *calloc( size_t num, size_t size );
void *realloc( void *memblock, size_t size );



void main()
{
	bit_4();
}

'C, C++' 카테고리의 다른 글

[C] [자료구조] fib 함수를 사용해서 순환호출를 이해하기  (0) 2014.11.18
[C] 자료구조 순환적인 프로그램  (0) 2014.11.18
[C] c언어 문제풀이2  (0) 2014.11.18
[C] c언어 문제풀이1  (0) 2014.11.18
[C] 자판기  (0) 2014.11.18
반응형
#include 
//1. 0 부터 99까지의 정수를 출력하세요. 단 한줄에 10개씩 수직으로 출력합니다.(10)

void bit_2_1()
{
	int i,j;
	for(i=0;i<10;i++)
	{
		for(j=0;j<100;j++)
		{
			if(j % 10 == i)
				printf("%d ",j);
		}
		printf("\n");
	}			
}

//2. 다음은 while문으로 작성한 코드들입니다. For문을 통해서 다시 코딩하세요(10)
void bit_2_2()
{
	int i,sum=0;
	for(i=0;i<=100;i++)
		sum += i;

	printf("%d \n",sum);
}
//3. 0이 들어올 때 까지의 합계를 계산하세요.(10)
void bit_2_3()
{
	int x,sum=0;
	while(1)
	{
		printf("입력 :");
		scanf("%d",&x);
		sum += x;

		if(x == 0)
		{
			printf("합계 : %d\n",sum);
		}		
	}
}
//4. 1부터 100 까지의 짝수와 홀수 각각의 합계를 구하세요(10)
void bit_2_4()
{
	int i,sum1=0,sum2=0;
	for(i=1;i<=100;i++)
	{
		if(i %2 ==0)
			sum1 += i;
		else
			sum2 += i;
	}
	printf("짝수 : %d 홀수 : %d ",sum1,sum2);
}
//5) 사용자로부터 숫자를 입력받아 출력 (10)
void bit_2_5()
{
	int i,j,x;
	printf("입력 :");
	scanf("%d",&x);
	for(i=0;i<=x;i++)
	{
		for(j=0;j<100;j++)
		{
			if(j % 10 == i)
				printf("%d ",j);
		}
		printf("\n");
	}			
}
// 6 문자 'A'가 입력될 때까지 계속해서 입력을 받아들이는 코드 (10)
void bit_2_6()
{
	char x;
	for(;;)
	{
		scanf("%c",&x);
		if(x == 'A')
			break;
	}
}
// 7)정수 N1, N2, N3 을 입력받아서 길이를 갖는 막대 그래프를 출력.(단 입력범위 0 ~ 10) (10)
void bit_2_7()
{
	int x, y, z;
	int max;
	int i,j;
	printf("정수 3개 입력: ");
	scanf("%d %d %d",&x,&y,&z);
	printf("-------------------\n");
	//최대값 구하기
	if(x >= y && x >= z)
	{
		max = x;
	}
	else if(y >= x && y >= z)
	{
		max = y;
	}
	else if(z >= x && z >= y)
	{
		max = z;
	}
	///////최대값 구함
	 
	for(i=0;i i)
		{
			printf("*	");
		}
		else if(max >i)
		{
			printf("	");
		}

		if(max ==y)
		{
			printf("*	");
		}
		else if(y > i)
		{
			printf("*	");
		}
		else if(max >i)
		{
			printf("	");
		}

		if(max ==z)
		{
			printf("*\n");
		}
		else if(z > i)
		{
			printf("*\n");
		}
		else if(max >i)
		{
			printf("\n");
		}
		
	}
	



}
//8
void bit_2_8()
{
	int i,j,x;
	printf("행 입력 :");
	scanf("%d",&x);

	for(i=0;ii;j--)
			printf("*");
		printf("\n");
	}
}
//9
void bit_2_9()
{
	int i,j,z,x;
	printf("행 입력 :");
	scanf("%d",&x);

	for(i=0;ix-i-1;j--)
			printf(" ");
		for(z=x;z>=i+1;z--)
			printf("*");
		printf("\n");

	}

}
//메인
void main()
{
	bit_2_7();
}

'C, C++' 카테고리의 다른 글

[C] 자료구조 순환적인 프로그램  (0) 2014.11.18
[C] c언어 문제풀이3  (0) 2014.11.18
[C] c언어 문제풀이1  (0) 2014.11.18
[C] 자판기  (0) 2014.11.18
[C] c언어 문자열입력 후 가장 큰 값 구하기  (0) 2014.11.18
반응형
#include 
#include 
#include 

//1.	 사용자에게 10진수를 입력 받아 이진수를 출력하라 
void bit_1_1()
{
	 int i, x, sum=0,temp;
     printf("10진수 입력: ");
     scanf("%ld", &x);
     for(i=1;i>0;)
     {
         temp =x%2;
         sum += temp*i;
         x =x/2;
		 i*=10;
     }
     printf("2진수 : %d\n", sum);
	 

}


//2.	1~100 사이의 모든 소수를 출력하라. 	
void bit_1_2()
{
	 int i,j;
	 int count;
	 for( i = 2; i < 100; i++ )
	 {
		 count =1;
		 for(j=2;j ",i);
		 }
	 } 
}


//3.	1~100사이에 3으로 끝나는 수를 모두 출력하라. 
void bit_1_3()
{
	int i;
	for(i=1;i<=100;i++)
	{
		if(i % 10 == 3)
			printf("문제 3번: %d\n",i);
	}
}
//4.	1~100사이에 30,60,90번대의 숫자를 모두 출력하라.
void bit_1_4()
{
	int i;
	for(i=1;i<=100;i++)
	{
		if(i / 10 == 3)
			printf("출력 : %d\n",i);
		else if(i / 10 == 6)
			printf("출력 : %d\n",i);
		else if(i / 10 == 9)
			printf("출력 : %d\n",i);
	}
}
//5.	3 6.9 게임을 구현하라.
//Ex)  1 2 * 4 5 * 7 8 * ….28 2* *0 *1 *2 ** *4,…
void bit_1_5()
{
	int i;
	printf("구구단 게임을 시작합니다. \n");
	for(i=1;i<60;i++)
	{
		if((i/10 ==3|| i/10 == 6|| i/10 ==9) && (i%10 ==3|| i%10 == 6|| i%10 ==9))
		{
			printf("** ->");
		}
		else if((i/10 ==3|| i/10 == 6|| i/10 ==9) || (i%10 ==3|| i%10 == 6|| i%10 ==9))
		{
			
			if(i>10)
			{
				printf("%d* ->",i/10);
			}
			else
				printf("* ->");
		}
		else
		{
			printf("%d ->",i);
		}
	}
}

//6.	팩토리얼을 구현라하라. 
//Ex) 입력 : 3   출력 : 6 
void bit_1_6()
{
	int x,i, result=1,j;
	printf("정수 입력: ");
	scanf("%d",&x);
	for(i=x;i>1;i--)
	{
		result *= i;
	}
	printf("%d",result);
}

//7.	1~10 사이에 수중에 랜덤하게 하나의 수를 생성하고.. 사용자에게 입력을 받아 생성된 수를 맞추면 프로그램 종료
void bit_1_7()
{
	int rand_x,x;
	srand((unsigned)time(NULL));
	rand_x = rand()%10;
	for(;;)
	{
		
		printf("입력 :");
		scanf("%d",&x);
		if(rand_x == x)
		{
			printf("정답\n");		
		}
		else
		{
			printf("%d\n",rand_x);
		}
	
	}


}
//8.	Up  & Down 게임 !!  1~30 
void bit_1_8()
{
	int rand_x,x;
	srand((unsigned)time(NULL));
	rand_x = rand()%10;
	printf("업다운 게임\n");
	while(1)
	{
		printf("입력 :");
		scanf("%d",&x);

		if(rand_x > x)
		{
			printf("UP\n");
			//printf("%d\n",rand_x);
		}
		else if(rand_x < x)
		{
			printf("Down\n");
		}
		else if(rand_x ==x)
		{
			char j;
			printf("정답\n");
			printf("게속 하시겠습니까?(Y/N) :");
			scanf("%c",j);
			if(j =='N')
				break;
			
		}
	}
}
//9.	숫자 야구게임
//문제 :  1 2 3  입력 : 1 3 5  결과 : 1S 1B  //안함
void bit_1_9()
{
	int x,y,z;
	int a_1=1,a_2=2,a_3=3;
	int count_S=1,count_B=1;
	srand((unsigned)time(NULL));
	a_1 = rand()%9+1;
	a_2 = rand()%9+1;
	a_3 = rand()%9+1;

	printf("야구게임\n");

	while(1)
	{
		printf("1입력 :");
		scanf("%d",&x);
		printf("2입력 :");
		scanf("%d",&y);
		printf("3입력 :");
		scanf("%d",&z);
		//x값
		if(x == a_1)
		{
			printf("%dS\n",count_S);
			count_S++;
		}
		else if(x == a_2 || x == a_3)
		{
					
			if(y == a_1 || y == a_3)
			{
			}
			else 
				count_B++;
			printf("%dB\n",count_B);
		}
		//y값
		if(y == a_2)
		{
			printf("%dS\n",count_S);
			count_S++;
		}
		else if(y == a_1 || y == a_3)
		{
			if(y == a_2 || y == a_3)
			{
			}
			else 
				count_B++;
			printf("%dB\n",count_B);
		}
		//z값
		if(z == a_3)
		{
			printf("%dS\n",count_S);
			count_S++;
		}
		else if(z == a_1 || z == a_2)
		{
			if(y == a_2 || y == a_1)
			{
			}
			else 
				count_B++;
			printf("%dB\n",count_B);
		}
		printf("%d %d %d\n",a_1,a_2,a_3);

	}

}
//10.	본인의 이름을 화면에 10번 출력 !! 
void bit_1_10()
{
	int i;
	for(i=0;i<10;i++)
		printf("이상준\n");
}

void main()
{
	bit_1_1();

}

'C, C++' 카테고리의 다른 글

[C] c언어 문제풀이3  (0) 2014.11.18
[C] c언어 문제풀이2  (0) 2014.11.18
[C] 자판기  (0) 2014.11.18
[C] c언어 문자열입력 후 가장 큰 값 구하기  (0) 2014.11.18
[C] c for문으로 문자열 길이 구하기!  (0) 2014.11.18
반응형

자판기를 만들어보자!!

구조로는 


app.c


#include "main.h"
#include "japan.h"

void MemuDisplay()
{
	puts("1. 음료 삽입");
	puts("2. 음료 삭제");
	puts("3. 현황 검색");
	puts("4. 저장");
	puts("5. 로딩");
	puts("0. 종료");
}
int inputNo()
{
	int No;
	printf("INPUT :");
	scanf("%d",&No);
	return No;
}
void selectMenu(int key,JAPANGI* (*japan)[10])
{
	switch(key)
	{
	case 1:
		japan_add(japan); break;
	case 2:
		//function2(); break;
	case 3:
		japan_display(japan); break;
	case 0:
		exit(0);
	default:
		//puts("잘못된 값");
		break;
	}
}

void Run(JAPANGI* (*japan)[10])
{
	japan_array(japan);
	printf("테스트완료\n--------------\n");
	int key =0;

	japan[0][9]->beverage = "콜라";
	japan[1][9]->beverage="커피";
	japan[2][9]->beverage="사이다";
	japan[3][9]->beverage="박카스";
	japan[4][9]->beverage="생수";
	japan[1][8]->beverage="커피";

	japan_display(japan);



	while(1)
	{
		
		MemuDisplay();
		
		key = inputNo();

		system("cls");
		selectMenu(key,japan);
		puts("계속하시려면 아무키나 누르세요!!");
		getch();
	}
}


japan.c


#include "main.h"
#include "app.h"
//초기화

void japan_array(JAPANGI* (*japan)[10])
{
	for(int i=0;i<5;i++)
	{

		for(int j=0;j<10;j++)
		{
			japan[i][j] = (JAPANGI*)malloc(sizeof(JAPANGI));
			japan[i][j]->beverage = (char*)malloc(sizeof(char)*10);
			//strcpy(japan[i][j]->beverage,"");
			japan[i][j]->beverage = "";
			japan[i][j]->Price = 0;
		}
	}
}

//화면 출력!
void japan_display(JAPANGI* (*japan)[10])
{

	for(int i=0;i<10;i++)
	{
		for(int j=0;j<5;j++)
		{
			if(japan[j][i]->beverage != "")
				printf("| %s |",japan[j][i]->beverage);
			else
				printf("|      |");
		}
		printf("\n");
	}
}

void japan_add_1(JAPANGI* (*japan)[10],int index,int b)
{

	char* temp;
	char* temp_1;
	temp = (char*)calloc(10,sizeof(char));
	temp_1 = (char*)calloc(10,sizeof(char));
	if(index == 0)
	{
		temp = "콜라";
	}
	else if(index == 1)
	{
		temp ="커피";
	}
	else if(index == 2)
	{
		temp ="사이다";
	}
	else if(index == 3)
	{
		temp ="박카스";
	}
	else if(index == 4)
	{
		temp ="생수";
	}
	printf("테스트%s\n",temp);


	for(int c=0;cbeverage != temp)
			{
				printf("테스트\n");
				japan[index][i]->beverage = temp;
				break;
			}
		}
	}
}
//음료수 추가
void japan_add(JAPANGI* (*japan)[10])
{
	int a,b,index;
	printf("음료를 추가해주세요\n");
	printf(" 1:콜라  2:커피  3:사이다  4:박카스  5:생수\n 입력: ");
	scanf("%d",&a);
	printf("갯수를 입력해주세요\n 입력: ");
	scanf("%d",&b);
	switch(a)
	{
	case 1:
		index = 0;
		japan_add_1(japan,index,b);
		break;
	case 2:
		index = 1;
		japan_add_1(japan,index,b);
		break;
	case 3:
		index = 2;
		japan_add_1(japan,index,b);
		break;
	case 4:
		index = 3;
		japan_add_1(japan,index,b);
		break;
	case 5:
		index = 4;
		japan_add_1(japan,index,b);
		break;
	default:
		printf("잘못된 값 입력");
		break;
	}

}


main.c


#include "main.h"
#include "app.h"


void main()
{
	JAPANGI* japan[5][10];
	Run(japan);
}




app.h


void Run(JAPANGI* (*japan)[10]);
void selectMenu(int key);
int inputNo();
void MemuDisplay();


japan.h


void japan_array(JAPANGI* (*japan)[10]);
void japan_display(JAPANGI* (*japan)[10]);
void japan_add(JAPANGI* (*japan)[10]);
void japan_add_1(JAPANGI* (*japan)[10],int index,int b);


main.h


#include 
#include 
#include 
#include 
#include 

typedef struct japangi
{
	char* beverage;
	int Price;
}JAPANGI;


반응형
#include "main.h"

void study_5()
{
	int i,max=0;
	char ch[100];
	printf("문자입력 :");
	scanf("%s",ch);
	for(i=0;i<100;i++)
	{
		if(ch[i] > max)
		{
			max = ch[i];
		}
	}
	printf("%c",max);
}

'C, C++' 카테고리의 다른 글

[C] c언어 문제풀이1  (0) 2014.11.18
[C] 자판기  (0) 2014.11.18
[C] c for문으로 문자열 길이 구하기!  (0) 2014.11.18
[C] 최대값, 최소값, 합계 구하기  (0) 2014.11.18
[C] 도서관리(포인터 배열)  (0) 2014.11.18
반응형
#include "main.h"

void study_3()
{
	int i;
	char ch[100];
	printf("문자 입력 :");
	scanf("%s",ch);
	for(i=0;i<100;i++)
	{
		if(ch[i] ==NULL)
			printf("길이 : %d\n",i);
	}
	printf("문자 : %s\n",ch);

}

'C, C++' 카테고리의 다른 글

[C] 자판기  (0) 2014.11.18
[C] c언어 문자열입력 후 가장 큰 값 구하기  (0) 2014.11.18
[C] 최대값, 최소값, 합계 구하기  (0) 2014.11.18
[C] 도서관리(포인터 배열)  (0) 2014.11.18
[C] 도서관리(동적)  (0) 2014.11.18

+ Recent posts