어서와 C언어는 처음이지 제23장.

Slides:



Advertisements
Similar presentations
C 언어 컴퓨터학과 C 언어 ( STS ) (Chap5. Selection-Making Decisions ) C 언어.
Advertisements

스택 스택 추상자료형 스택 스택의 구현 스택의 응용 한빛미디어(주).
제6장 조건문.
2007 1학기 12 배열.
데이터의 표현과 연산 (1) (Chapter 3)
슬라이드 1~21까지는 각자 복습! 슬라이드 22부터는 수업시간에 복습
배열, 포인터 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
배열(Array) 선린인터넷고등학교 정보통신과 유 순 옥.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 1-1 C 언어의 개론적 이야기 프로그래밍 언어란 무엇인가? 컴파일이란 무엇인가? 사람과 컴파일러가 이해할 수 있는 약속된 형태의 언어 C 언어도 프로그래밍 언어 중 하나이다. 컴파일이란 무엇인가? 프로그래밍.
2007 1학기 10 함수 활용.
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express Slide 1 (of 26)
쉽게 풀어쓴 C언어 Express 제18장 입출력과 라이브러리 함수 C Express.
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
제5장 제어명령
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
6장. printf와 scanf 함수에 대한 고찰
누구나 즐기는 C언어 콘서트 제4장 수식과 연산자.
7. while 문의 흐름 제어.
연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
C 9장. 구조체 #include <stdio.h> int main(void) { int num;
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
컴퓨터 프로그래밍 기초 - 2nd : scanf(), printf() 와 연산자 -
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
Chapter 06. 선택문.
변수와 자료형.
쉽게 풀어쓴 C언어 Express 제10장 배열 C Express.
6장 배열.
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
4장 제어문 선택문: if 문, if – else 문, switch 문
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제어문 & 반복문 C스터디 2주차.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
컴퓨터 프로그램 제2,3장 간단한 C 프로그램 김 문 기.
Chapter 11. 배열과 포인터.
조 병 규 Software Quality Lab. 한국교통대학교
Chapter 05. 입출력 함수.
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
#1 배열 활용 #include int main(void) { int i; int grade[5]; grade[0] = 10; grade[1] = 20; grade[2] = 30; grade[3] = 40; grade[4] = 50; for(i=0;i.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
누구나 즐기는 C언어 콘서트 제2장 기초 사항 IT응용시스템공학과 김형진 교수.
-Part1- 제7장 반복문이란 무엇인가.
C언어 (8) 정명희.
-Part1- 제8장 조건문이란 무엇인가 (교재 199페이지 ~ 224페이지)
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express Slide 1 (of 25)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
컴퓨터 프로그램은 여러 기능의 복합체이다. 라이브러리 함수와 사용자 정의 함수
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
-Part2- 제2장 다차원 배열이란 무엇인가.
A Book on C, 3rd Ed. Al Kelley and Ira Pohl
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
어서와 C언어는 처음이지 제16장.
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
개정판 누구나 즐기는 C언어 콘서트 제11장 구조체, 공용체, 열거형 출처: pixabay.
C.
printf("Global Korea\n");
Chapter 09. 배열.
어서와 C언어는 처음이지 제22장.
배열, 포인터, 함수 Review & 과제 1, 2.
Presentation transcript:

어서와 C언어는 처음이지 제23장

정렬 정렬(sorting)은 값들을 크기 순으로 나열하는 연산

버블 정렬 값을 정렬하는 데는 많은 방법들이 있지만 이번 장에서는 버블 정렬(bubble sort)이라고 하는 방법 버블 정렬은 다른 정렬 방법에 비해서 특별히 빠르지는 않지만 이해하기는 쉽다. 데이터를 정렬하는 매 단계마다 가장 작은 값이 물속의 공기방울처럼 리스트의 맨 위로 올라오게 된다.

// 완전 초보자 가이드 3판 22장 예제 #2 // 파일 Chapter22ex2.c /* 이 프로그램은 10개의 난수를 생성하여 정렬한다. */ #include <stdio.h> #include <stdlib.h> #include <time.h> main() { int ctr, inner, outer, didSwap, temp; int nums[10]; time_t t; // 이 문장을 포함시키지 않으면 항상 동일한 난수가 생성된다. srand(time(&t)); // 첫 번째 단계는 배열을 1부터 100 사이의 난수로 채우는 것이다. for (ctr = 0; ctr < 10; ctr++) nums[ctr] = (rand() % 99) + 1; }

// 정렬하기 전의 배열을 출력한다. puts("\n정렬 전의 리스트:"); for (ctr = 0; ctr < 10; ctr++) { printf("%d\n", nums[ctr]); } // 배열을 정렬한다. for (outer = 0; outer < 9; outer++) didSwap = 0; //리스트가 아직 정렬되지 않았으면 1(true) for (inner = outer; inner < 10; inner++) if (nums[inner] < nums[outer]) temp = nums[inner]; nums[inner] = nums[outer]; nums[outer] = temp; didSwap = 1; if (didSwap == 0) break;

// 정렬 후의 리스트를 출력한다. puts("\n정렬 후의 리스트:"); for (ctr = 0; ctr < 10; ctr++) { printf("%d\n", nums[ctr]); } return(0);

실행 결과 정렬 전의 리스트: 72 1 48 97 54 75 67 93 61 11 정렬 후의 리스트:

변수의 값을 교환 올바른 코드 temp = nums[inner]; nums[inner] = nums[outer]; nums[outer] = temp; 잘못된 코드 nums[inner] = nums[outer]; /* 2개의 값이 교환되지 않는다. */ nums[outer] = nums[inner];

빨라진 탐색 정렬은 데이터 탐색 속도도 빠르게 한다. 178 313 422 532 562 902 아이디 413을 탐색한다고 하면

예제: 신용 카드 프로그램 고객 아이디 값들은 먼저 정렬되고, 사용자는 탐색할 고객 아이디를 입력한다. 그리고 프로그램은 고객의 카드 사용액이 $100보다 작은지를 검사하게 된다.

// 완전 초보자 가이드 3판 23장 예제 #2 // 파일 Chapter23ex2.c /* 이 프로그램은 카드 사용액를 확인하기 위하여 고객 아이디의 정렬된 리스트를 탐색한다. */ #include <stdio.h> main() { int ctr; // 루프 카운터 int idSearch; // 탐색할 고객(키) int found = 0; // 고객이 발견되면 1(true) /* 각 평행 배열에 10개의 요소를 정의한다. */ int custID[10] = { 313, 453, 502, 101, 892, 475, 792, 912, 343, 633 }; float custBal[10] = { 0.00, 45.43, 71.23, 301.56, 9.08, 192.41, 389.00, 229.67, 18.31, 59.54 }; int tempID, inner, outer, didSwap, i; // 정렬을 위하여 필요하다. float tempBal;

// 먼저 고객 아이디로 배열을 정렬한다. */ for (outer = 0; outer < 9; outer++) { didSwap = 0; // 리스트가 아직 정렬되지 않았으면 1(true) for (inner = outer; inner < 10; inner++) if (custID[inner] < custID[outer]) tempID = custID[inner]; // 배열 요소 교환 tempBal = custBal[inner]; custID[inner] = custID[outer]; custBal[inner] = custBal[outer]; custID[outer] = tempID; custBal[outer] = tempBal; didSwap = 1; // 교환이 발생하였음(true) } if (didSwap == 0) break;

/* 카드 사용액을 찾는 사용자와 상호작용한다. */ printf("\n\n*** 고객 사용잔액 탐색 ***\n"); printf("고객의 아이디는? "); scanf(" %d", &idSearch); // 배열에서 아이디를 찾는다. for (ctr = 0; ctr<10; ctr++) { if (idSearch == custID[ctr]) // 일치하는지 검사 found = 1; //일치하면 플래그를 TRUE로 한다. break; //일치하지 않으면 계속 탐색 } if (custID[ctr] > idSearch) // 계속 탐색할 필요 없음 break;

// 반복 루프가 종료되면 아이디가 발견되거나 // (found = 1) 아니면 발견되지 않은 것이다. if (found) { if (custBal[ctr] > 100) printf("\n** 고객의 카드 사용액은 $%.2f.\n", custBal[ctr]); printf("더 이상의 지출은 불가능합니다. \n"); } else // 사용잔액이 $100.00 이하 printf("\n**더 지출할 수 있습니다!\n"); else // 아이디가 발견되지 않았다. printf("** 잘못된 사용자 ID입니다. "); printf("\n ID %3d은 발견되지 않았습니다. \n", idSearch); return(0);

Lab: 단어 정렬 크기가 10인 1차원 배열에 0부터 99 사이의 난수를 저장한 후에, 최대값과 최소값을 출력하는 프로그램을 작성하시오. 난수는 rand() 함수를 호출하여 생성하라. 단어의 개수를 입력하시오(최대 100개): 3 단어 0: dog 단어 1: cat 단어 2: butterfly ---------------------------------------- 정렬된 단어는 다음과 같다. ------------------------------------------ butterfly cat dog

strcmp() strcmp(s1, s2)

#include <stdio.h> #include <string.h> int main(void) { char name[100][30], temp[8]; int i, j, n; printf("단어의 개수를 입력하시오(최대 100개): "); scanf("%d", &n); for (i = 0; i < n; i++) printf("단어 %d: ", i); scanf("%s", name[i]); }

for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) if (strcmp(name[i], name[j]) > 0) strcpy(temp, name[i]); strcpy(name[i], name[j]); strcpy(name[j], temp); } printf("\n----------------------------------------\n"); printf("정렬된 단어는 다음과 같다.\n"); printf("------------------------------------------\n"); for (i = 0; i < n; i++) printf("%s\n", name[i]); return 0;

학습 정리 배열을 낮은 값에서 높은 값으로 정렬하려면 오름차순 정렬을 사용한다. 배열을 높은 값에서 낮은 값으로 정렬하려면 내림차순 정렬을 사용한다. 버블 정렬을 수행하기 위한 문장 구조는 중첩 for 루프이다. 2개의 변수값을 서로 교환하려면 제3의 변수가 반드시 필요하다. 정렬 루틴은 어려울 필요가 없다. 이번 장에서 제시된 루틴으로 시작해서 여러분들이 필요한 대로 수정하라. 배열을 정렬 상태로 두는 것을 잊지 말자. 배열은 일단 정렬되면 빠르게 탐색할 수 있다.

Q & A