반응형

-든든한 c programming work books 정리 

putchar()

1. 함수는 한 문자를 표준 출력 장치인 stdout(터미널)에 출력한다.

2. 인자에 있는 한 문자를 출력한다. 
3. 출력할 문자를 반환해주며, 에러가 발생하면 EOF를 반환한다. 

* EOF : End Of File의 약자로, 파일의 끝을 표현하기 위해서 정의해 놓은 상수로 -1을 갖는다.

puts()

1. 문자열을 화면에 출력하며, 자동으로 줄 바꿈("\n") 기능 을 포함한다.

2. 함수가 성공적이면 양수를 반환하고, 에러가 발생하면 EOF(-1)를 반환한다.

#include <stdio.h>
int main()
{
	char ch1  = 'N', ch2 = 73, ch3 = 'd', ch4 = 'm';
	int a;
	
	printf("문자 출력함수\n");
	putchar('k');
	putchar(73);
	
	putchar(ch1);
	putchar(71);
	putchar('-');
	putchar(ch3);
	putchar(111);
	putchar(ch4);
	putchar('/n');
	printf("\n문자열 출력함수\n");
	puts("Hello");
	puts("World");
	
	return 0;
}
/*
문자 출력함수
kING-domn
문자열 출력함수
Hello
World

--------------------------------
Process exited after 0.01759 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

getchar()

1. 함수는 한 문자를 표준 입력 장치인 stdin(키보드)로부터 입력한다.

#include <stdio.h>
int main()
{
	char ch1;
	
	printf("한문자 입력? ");
	ch1 = getchar();
	printf("ch1 : %c \n", ch1);
	
	return 0;
}
/*
한문자 입력? A
ch1 : A

--------------------------------
Process exited after 8.563 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

gets() 

1. 표준입력 (키보드) 으로 부터 문자열을 입력 받아 gets() 함수의 인자인 메모리주소(배열)에 저장

2. 문자배열의 구조를 알아야 사용할 수 있는 함수이다.

#include<stdio.h>
int main()
{
	char name[20];
	char comAddr[40];
	
	printf("성명 :");
	gets(name);
	printf("주소 :");
	gets(comAddr);
	
	printf("\n성명:%s, 주소:%s\n", name, comAddr);
	
	return 0; 
}
/*
성명 : 홍길동
주소 : 서울

성명: 홍길동, 주소: 서울

--------------------------------
Process exited after 4.961 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/
반응형

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

별삼각형 출력하기  (0) 2019.06.12
c언어 2진수로 변환하기  (0) 2019.05.24
윤년구하기 프로그램  (0) 2019.04.03
scanf() 함수로 문자 읽기2  (0) 2019.03.29
반응형

상향식 재귀 

#include<stdio.h>
int n;
void f(int k)
{
	if(k>n) return;
	printf("*");
	f(k+1);
}

int main()
{
	scanf("%d", &n);
	f(1);
}
/*
5
*****
--------------------------------
Process exited after 1.411 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

하향식 재귀 

#include<stdio.h>
int n;
void f(int k)
{
	if(k<=0) return;
	f(k-1);
	printf("*");
}

int main()
{
	scanf("%d", &n);
	f(n);
}
/*
5
*****
--------------------------------
Process exited after 1.411 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

하향식 재귀 

반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

재귀함수  (0) 2019.08.30
피보나치 수열 값 출력하기  (0) 2019.08.30
별찍기  (0) 2019.08.23
switch-case와 while문, 함수를 사용한 사칙연산 계산기  (0) 2019.08.21
두점의 중점  (0) 2019.08.21
반응형
#include <stdio.h>
int n;
void f(int k)
{
   for (int i=1;i<=n-k;i++)
      printf (" ");
   for (int j=1;j<=k;j++)
      printf ("*");
   printf ("\n"); 
}
int main()
{
   scanf ("%d",&n);
   for (int i=1;i<=n;i++)
      f(i);
}
반응형
반응형
#include<stdio.h>

int plus(int a, int b){
	return a+b;
}
int minus(int a, int b){
	return a-b;
}
int mu(int a, int b){
	return a*b;
}
int di(int a, int b){
	return a/b;
}

int main()
{
	
	while(1){
		int a = 0;
		int b = 0;
		char c;
		printf("종료를 원하신다면 0 + 0 를 입력해주세요\n");
		printf("숫자를 입력하세요 : ");
		scanf("%d %c %d", &a, &c, &b);
		printf("결과를 출력합니다 : ");
		
		switch(c){
			case '+': 
				printf("%d %c %d = %d\n\n",a, c, b, plus(a,b)); break;
			case '-': 
				printf("%d %c %d = %d\n\n",a, c, b, minus(a,b)); break;
			case '*': 
				printf("%d %c %d = %d\n\n",a, c, b, mu(a,b)); break;
			case '/': 
				printf("%d %c %d = %d\n\n",a, c, b, di(a,b)); break; 
			default :
				printf("다시 입력하세요 :"); break;
		}
		if(a==0 && c == '+' && b==0){
			printf("계산기를 종료합니다."); 
			break;
		}
	}
}

먼저 연산자들을 함수로 선언해놨습니다.

그런 후에 switch-case문으로 경우를 나눠놨고, while문을 이용하여 계속 계산을 진행할 수 있게 해 두었습니다!

그리고 if문을 사용해 프로그램을 종료시켰습니다. 

 

scanf("%d", n);

%d뒤에 띄어쓰기 있으면 무한루프에 빠져서 절대 못나옵니다ㅠ 

(저는 이거 발견하는데 몇시간 걸렸습니다ㅠㅠ 처음에는 다 그런 거겠죠ㅜㅜ?)

 

반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

상항식, 하향식 재귀  (0) 2019.08.23
별찍기  (0) 2019.08.23
두점의 중점  (0) 2019.08.21
별찍기 개수 만큼 출력  (0) 2019.08.19
택시 거리 계산하기  (0) 2019.06.19
반응형
#include<stdio.h>
struct point {float x; float y;};
point f(point p, point q)
{
	point t;
	t.x = (p.x + q.x)/2;
	t.y = (p.y + q.y)/2;
	
	return t;
}

int main(){
	point a,b,t;
	scanf("%f %f", &a.x, &a.y);
	scanf("%f %f", &b.x, &b.y);
	
	t = f(a,b);
	
	printf("%.3f %.3f\n", t.x, t.y);
}

/*
3.1 1.4
4.1 1.5
3.600 1.450

--------------------------------
Process exited after 10.97 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/
반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

별찍기  (0) 2019.08.23
switch-case와 while문, 함수를 사용한 사칙연산 계산기  (0) 2019.08.21
별찍기 개수 만큼 출력  (0) 2019.08.19
택시 거리 계산하기  (0) 2019.06.19
성적 입력하기  (0) 2019.06.19
반응형
/*
08/20 BFS(너비 우선 탐색)
큐의 순서대로 나타냄
*/
#include <stdio.h>

int n; // 정점의 최댓값 
int rear, front; // 앞쪽의 뒤쪽을 나타내는 변수 
int map[30][30]; // 인접 행렬 
int queue[30]; // 큐 
int visit[30]; // 방문 여부를 나타내는 배열 

void BFS(int v){
	int i;
	
	visit[v] = 1; // 정점 v를 방문했다고 표시  
	printf("%d에서 시작\n", v);
	queue[rear++] = v; // 큐에 v를 삽입하고 뒤쪽을 1 증가시킴 
	while (front < rear){ //뒤쪽이 앞쪽과 같거나 작으면 루프 탈출
	// 큐의 첫번째에 있는 데이터를 제외하고 제외된 값을 가져오며, 앞쪽 1증가  
		v = queue[front++];
		for (i = 1; i<=n; i++){
			// 정점 v와 정점 i가 만나고, 정점 i를 방분하지 않은 상태일 경우
			if (map[v][i] == 1 && !visit[i]){
				visit[i] = 1; // 정점 i를 방문했다고 표시 
				printf("%d 에서 %d로 이동 \n", v,i);
				queue[rear++] = i; //큐에 i를 삽입하고 후단을 1증가시킴  
			}  
		}
	}
}
int main(){
	int start;// 시작 정점
	int v1,v2;
	
	printf("정점의 총 개수와 시작 정점을 입력하세요. :");
	scanf("%d %d", &n, &start);
	
	while(1){
		printf("연결한 두 정점을 입력하세요. (예 3 4): ");
		scanf("%d %d", &v1, &v2);
		if(v1==-1 && v2==-1) break;
		map[v1][v2] = map[v2][v1] = 1;
	} 
	BFS(start); //DFS 시작! 
	
	return 0;
}
/*
정점의 총 개수와 시작 정점을 입력하세요. :7 0
연결한 두 정점을 입력하세요. (예 3 4): 0 1
연결한 두 정점을 입력하세요. (예 3 4): 0 2
연결한 두 정점을 입력하세요. (예 3 4): 1 3
연결한 두 정점을 입력하세요. (예 3 4): 1 4
연결한 두 정점을 입력하세요. (예 3 4): 2 5
연결한 두 정점을 입력하세요. (예 3 4): 2 6
연결한 두 정점을 입력하세요. (예 3 4): 3 7
연결한 두 정점을 입력하세요. (예 3 4): 4 7
연결한 두 정점을 입력하세요. (예 3 4): 5 7
연결한 두 정점을 입력하세요. (예 3 4): 6 7
연결한 두 정점을 입력하세요. (예 3 4): -1 -1
0에서 시작
0 에서 1로 이동
0 에서 2로 이동
1 에서 3로 이동
1 에서 4로 이동
2 에서 5로 이동
2 에서 6로 이동
3 에서 7로 이동

--------------------------------
Process exited after 70.57 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/
반응형

'2019~2020 > 자료구조' 카테고리의 다른 글

최댓값 찾기 알고리즘  (0) 2019.09.03
bfs-dfs  (0) 2019.08.26
연결 리스트 DFS (c)  (0) 2019.08.16
그래프의 탐색  (0) 2019.08.12
이진 탐색트리  (0) 2019.06.17
반응형
#include <stdio.h>

int n;

void f(int k)
{
    int i, j;       
    for (i = 0; i < n; i++)        
    {
        for (j = 0; j < n-i; j++)  
        {
            printf(" ");
        }
        for (k = 0; k <=i; k++){
        	 printf("*");
		}      
        printf("\n");     
    }                  
}

int main()
{
	scanf("%d", &n);
	int i;
	for (i = 0; i < n; i++)        
    {
    	f(i);
    	break;
	}
}
반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

switch-case와 while문, 함수를 사용한 사칙연산 계산기  (0) 2019.08.21
두점의 중점  (0) 2019.08.21
택시 거리 계산하기  (0) 2019.06.19
성적 입력하기  (0) 2019.06.19
2차원 누적합 만들기  (0) 2019.06.12
반응형
/*
08/16 DFS
*/
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 8 // 노드의 최고 개수  
#define FALSE 0 // 매크로 상수 선언  
#define TRUE 1
typedef struct node *node_point; // 임시그래프  
typedef struct node //노드 정의  
{
	int vertex;
	node_point link;
};
node_point graph[MAX_VERTICES]; 
short int visited[MAX_VERTICES]; // 무방향임  
node_point createnode (int data);
void dfs (int vertex); // 함수 선언  
int main( )
{
	/*
	정점?우선순위는 작은 숫자부터  
	*/
	graph[0] = createnode(1); //정점과 연결  
	/* [0] = 정점을 의미 */
	graph[0] -> link = createnode(2); // 정점 1번과 2번 연결  
	graph[1] = createnode(0);
	graph[1] -> link = createnode(3);
	graph[1] -> link->link = createnode(4);
	graph[2] = createnode(0);
	graph[2] -> link = createnode(5);
	graph[2] -> link->link = createnode(6);
	graph[3] = createnode(1);
	graph[3] -> link = createnode(7); graph[4]=createnode(1);
	graph[4] -> link = createnode(7);
	graph[5] = createnode(2);
	graph[5] -> link = createnode(7);
	graph[6] = createnode(2);
	graph[6] -> link = createnode(7);
	graph[7] = createnode(3);
	graph[7] -> link = createnode(4);
	graph[7] -> link -> link = createnode(5);
	graph[7] -> link->link->link = createnode(6);
	printf(" : "); // 정점의 운행 순서 
	dfs (0); //dfs함수 호출  
	printf(" \n"); // 끝  
}

/*  노드 생성을 위한 함수 */
node_point createnode(int data)
{
	node_point ptr; // ptr는 공간  
	ptr = (node_point)malloc(sizeof(struct node)); // 메모리 확보  
	ptr -> vertex = data; // 공간에 data입력  
	ptr -> link = NULL;  
	return ptr;
}

void dfs(int v)
{
	/* v = 그래프의 정점에서 시작하는 깊이 우선 탐색 */
	node_point w;
	visited[v] = TRUE;
	printf("V%d -> ", v);
	for(w = graph[v]; w; w = w -> link) // 링크를 따라가는 반복문  
	// false(NULL)가 될때까지 w는 w링크로 따라감  
		if(!visited[w->vertex])
	dfs(w->vertex); //방문하지 않았다면 dfs호출하여 vertex로 돌아감  
}

/*
 : V0 -> V1 -> V3 -> V7 -> V4 -> V5 -> V2 -> V6 ->

--------------------------------
Process exited after 0.01584 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/
반응형

'2019~2020 > 자료구조' 카테고리의 다른 글

bfs-dfs  (0) 2019.08.26
행렬을 이용한 BFS (c)  (0) 2019.08.20
그래프의 탐색  (0) 2019.08.12
이진 탐색트리  (0) 2019.06.17
별 출력 수  (0) 2019.06.14
반응형

(1) 깊이 우선 탐색 (DFS)

/*
08/12 그래프 탐색 
*/
#include<stdio.h>

int n; //정점의 총 개수 
int map[30][30]; // 인접행렬 
int visit[30]; //방문 여부를 나타내는 행렬 

void DFS(int v){  
	int i;
	
	visit[v] = 1; // 정점 v를 방문했다고 표시 
	for(i=1; i <= n; i++){
		// 정점 v와 정점 i가 연결 되었고, 정점 i를 방문하지 않는다면  
		if(map[v][i]==1 && !visit[i]){
			printf("%d에서 %d로 이동 \n",v,i);
			DFS(i); // 이동된 정점 i에서 다시 탐색 시작 
		}
	}
}

int main(){
	int start;// 시작 정점
	int v1,v2;
	
	printf("정점의 총 개수와 시작 정점을 입력하세요. :");
	scanf("%d %d", &n, &start);
	
	while(1){
		printf("연결한 두 정점을 입력하세요. (예 3 4): ");
		scanf("%d %d", &v1, &v2);
		if(v1==-1 && v2==-1) break;
		map[v1][v2] = map[v2][v1] = 1;
	} 
	DFS(start); //DFS 시작! 
	
	return 0;	
}
반응형

'2019~2020 > 자료구조' 카테고리의 다른 글

행렬을 이용한 BFS (c)  (0) 2019.08.20
연결 리스트 DFS (c)  (0) 2019.08.16
이진 탐색트리  (0) 2019.06.17
별 출력 수  (0) 2019.06.14
재귀 알고리즘을 사용한 이진 트리 순회  (0) 2019.06.11
반응형
#include<stdio.h>
struct point
{
	int x;
	int y;
};

int main()
{
	point p1, p2;
	int d=0;
	
	scanf("%d %d", &p1.x, &p1.y);
	scanf("%d %d", &p2.x, &p2.y);
	
	d+=(p1.x>p2.x)?(p1.x-p2.x):(p2.x-p1.x);
	d+=(p1.y>p2.y)?(p1.y-p2.y):(p2.y-p1.y);
	
	printf("%d\n", d);
}
/*
1 2
3 5
5

--------------------------------
Process exited after 21.98 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/
반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

두점의 중점  (0) 2019.08.21
별찍기 개수 만큼 출력  (0) 2019.08.19
성적 입력하기  (0) 2019.06.19
2차원 누적합 만들기  (0) 2019.06.12
문자shift  (2) 2019.05.31

+ Recent posts