프로그래밍실습 제 7 강.

Slides:



Advertisements
Similar presentations
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Advertisements

제6장 조건문.
어서와 Java는 처음이지! 제3장선택과 반복.
제 3 장 변수와 자료형.
C++ Espresso 제2장 제어문과 함수.
배열(Array) 선린인터넷고등학교 정보통신과 유 순 옥.
제 4장 문 장 배정문 혼합문 제어문 표준 입출력.
제1장 코드와라이브러리 Page 1 ~ 30 ■■■■■ ■ ■.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
제5장 제어명령
C언어: 배열 (Arrays).
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
처음으로 배우는 C 프로그래밍 제2부 기초 제5장 반복문.
Autokey Cipher 자동키 암호 Department of Cyber Security / 박건주.
7. while 문의 흐름 제어.
연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
Chapter 06. 선택문.
C언어 프로그래밍의 이해 Ch05. 명령문 Phylogenetic: 계통, 발생(학)의.
내용 프로그래밍 언어(programming language) C 언어란?? C 언어 역사 C 언어 특징 C 프로그램의 구조
프로그래밍실습 제 16 강.
제 3 장 상수와 변수
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
4장 제어문 선택문: if 문, if – else 문, switch 문
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
제 11 장 전처리기.
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제어문 & 반복문 C스터디 2주차.
4장 - PHP의 표현식과 흐름 제어-.
CHAP 2:순환.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Java의 정석 제 4 장 조건문과 반복문 Java 정석 남궁성 강의
Chapter 11. 배열과 포인터.
Chapter 05. 입출력 함수.
제 5장 제어문 Hello!! C 언어 강성호 김학배 최우영.
김선균 컴퓨터 프로그래밍 기초 - 7th : 함수 - 김선균
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
제 3장 데이터형과 연산자 Hello!! C 언어 강성호 김학배 최우영.
Fflush 사용이유 및 방법 [이유] 키보드에서 입력된 내용은 입력버퍼에 저장되었다가 Enter 키가 들어오면 프로그램으로 전달됨 이 때 입력버퍼에 있는 Enter 키도 프로그램으로 전달됨 그러므로 아래와 같은 프로그램에서 문자 하나를 입력해도 Enter키도 입력된 것으로.
-Part2- 제1장 1차원 배열이란 무엇인가.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
C언어 프로그래밍의 이해 Ch05. 명령문.
-Part1- 제7장 반복문이란 무엇인가.
-Part1- 제8장 조건문이란 무엇인가 (교재 199페이지 ~ 224페이지)
프로그램 개발 방법론 부재 : 연습문제 (6장) 학번: 이름:김치우.
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
-Part2- 제2장 다차원 배열이란 무엇인가.
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
3주차: Control Flow and Others
어서와 C언어는 처음이지 제16장.
C.
printf("Global Korea\n");
C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력
Chapter 09. 배열.
어서와 C언어는 처음이지 제22장.
배열, 포인터, 함수 Review & 과제 1, 2.
Presentation transcript:

프로그래밍실습 제 7 강

강의 내용 while문을 사용하여 1/2 – 1/4 + 1/6 – 1/8 + … + 1/98 – 1/100 구하기 do while문을 사용하여 1/2 – 1/4 + 1/6 – 1/8 + … + 1/98 – 1/100 구하기 특별한 경우의 for, while 및 do while의 차이 점화식으로 주어지는 수열의 출력 break문과 continue문 break와 while을 사용한 1부터 100까지의 정수 합 continue의 사용(1부터 100까지의 숫자중 10의 배수를 제외한 수의 합) 초기화식, 조건식, 변화식 모두 생략된 for문 원 모양의 출력 소수(prime number) 판정 프로그램

while 문을 사용하여 다음 합을 구하라. 1/2 – 1/4 + 1/6 – 1/8 + … + 1/98 – 1/100 #include<stdio.h> main() { int i=2,sign=1; double s=0.; while(i<=100){ s+=(double)sign/(double)i; i+=2; sign*=-1; } printf("s=%f\n",s); 출력: s=0.341624

do while 문을 사용하여 다음 합을 구하라. 1/2 – 1/4 + 1/6 – 1/8 + … + 1/98 – 1/100 #include<stdio.h> main() { int i=2,sign=1; double s=0.; do{ s+=(double)sign/(double)i; i+=2; sign*=-1; } while(i<=100); printf("s=%f\n",s); } 출력: s=0.341624

참고: 특별한 경우의 for, while 및 do while의 차이 #include<stdio.h> main() { int i,s=0; for(i=2;i<=1;i++){ s+=i; } printf("s=%d\n",s); 출력: s=0 int i=2,s=0; while(i<=1){ i+=1; do{ } while(i<=1); 출력: s=2 주의: do while문의 경우 조건식의 참, 거짓 여부와 상관없이 반복될 부분을 일단 한 번 수행함.

1 for 문의 중첩을 사용하여 다음 출력이 나오는 프로그램을 작성하라. 12 123 1234 12345 123456 1234567 12345678 123456789 1234567890 12345678901 123456789012 1234567890123 12345678901234 123456789012345 1234567890123456 12345678901234567 123456789012345678 1234567890123456789 12345678901234567890

#include<stdio.h> main() { int i,j; for(i=1;i<=20;i++){ for(j=1;j<=20-i;j++) printf(" "); for(j=1;j<=i;j++) printf("%d",j%10); printf("\n"); }

점화식으로 주어지는 수열의 출력 다음 수열의 처음 20항을 모두 출력해 보자. a1 = 1, an+1 = (1/5) an + 1 (n = 1, 2, 3, ...) #include<stdio.h> main() { int i; double a=1.; for(i=1; i<=20; i++){ printf("a(%2d)=%.12f\n", i, a); a=0.2*a+1.; }

출력: a( 1)=1.000000000000 a( 2)=1.200000000000 a( 3)=1.240000000000 a( 4)=1.248000000000 a( 5)=1.249600000000 a( 6)=1.249920000000 a( 7)=1.249984000000 a( 8)=1.249996800000 a( 9)=1.249999360000 a(10)=1.249999872000 a(11)=1.249999974400 a(12)=1.249999994880 a(13)=1.249999998976 a(14)=1.249999999795 a(15)=1.249999999959 a(16)=1.249999999992 a(17)=1.249999999998 a(18)=1.250000000000 a(19)=1.250000000000 a(20)=1.250000000000

break문과 continue문 break문은 for, while, do while등의 순환문에서 강제로 벗어나게 할 때 사용한다. (switch문에서도 사용 한다.) continue문은 for, while, do while등의 순환문에서 블록의 끝으로 바로 이동한 뒤 반복을 계속하도록 한다.

break와 while을 사용한 1부터 100까지의 정수 합 #include<stdio.h> main() { int i=1,s=0; while(1){ s+=i; i++; if(i>100) break; } printf("s=%d\n",s); 출력: s=5050

continue의 사용 1부터 100까지의 숫자중 10의 배수를 제외한 수의 합 #include<stdio.h> 1부터 100까지의 숫자중 10의 배수를 제외한 수의 합 #include<stdio.h> main() { int k,sum=0; for(k=1;k<=100;k++){ if(k%10==0) continue; sum+=k; // k가 10의 배수일 때는 이 부분이 무시된다. } printf("합은 %d입니다.\n",sum); 출력: 합은 4500입니다.

참고(3): 다음 C 프로그램의 실행 결과는? #include<stdio.h> main() { int i=0,s=0; for( ; ; ){ // 초기화식, 조건식, 변화식 모두 생략됨 i++; s+=i; if(i==100) break; } printf("%d\n",s); 출력: 5050

참고(4): 다음 C 프로그램의 실행 결과는? #include<stdio.h> main() { int i,s; for(i=0,s=0; i<100; i++,s+=i) ; printf("%d\n",s); } 출력: 5050 (C코드: 05_01.c ~ 05_12.c 참조)

다음과 같은 원 모양을 출력해 보자. * ********************* ***************************** ************************************* ***************************************** ********************************************* ************************************************* *************************************************** ***************************************************** ******************************************************* ********************************************************* *********************************************************** *************************************************************

힌트: 줄 간격과 글자 간격이 다르므로 원의 방정식 대신 타원의 방정식을 생각한다. 타원 안에 들어오는 점은 '*', 그렇지 않은 점은 공백문자(' ')를 출력한다. C 코드의 주요부: char c; int x,y,i,j,a,b; ……… // (a와 b의 값을 정해 준다,) for(x=-a; x<=a; x++){ for(y=-b;y=b;y++){ if((double)(x*x)/(a*a)+(double)(y*y)/(b*b)<=1.) c='*'; else c=' '; printf("%c",c); } printf("\n");

C 코드: #include <stdio.h> main() { int x,y,xx; char c; int a,b,aa,bb; a=15; b=30; aa=a*a; bb=b*b; for(x=-a;x<=a;x++){ xx=x*x; for(y=-b;y<=b;y++){ if((double)xx/(double)aa+(double)y*y/(double)bb<=1.) // 타원 c='*'; else c=' '; printf("%c",c); } printf("\n");

소수(prime number) 판정 프로그램 1은 소수도 아니고 합성수도 아니다. 소수: 2이상의 정수 중 양의 약수가 1과 자기 자신 뿐인 수 (예: 2, 3, 5, 7, 13, 17, …) 합성수: 2이상의 정수 중 소수가 아닌 수 (예: 4, 6, 8, 9, 10, 12, 14, 15, …) 소수를 판정하는 가장 초보적인 방법: 판정하고자 하는 2이상의 정수 n에 대하여 k=2, 3, 4, 5, … ,n-1 을 이용하여 n을 k로 나누어 본다. 나누어 떨어지는 k가 하나라도 있다면 n은 합성수이고 그렇지 않다면 n은 소수이다.

C코드 #include<stdio.h> main() { unsigned number,k; char prime='Y'; printf("자연수 하나를 입력하십시오:\n"); scanf("%u",&number); if(number==1){ printf("==> 1은 소수도 아니고 합성수도 아닙니다.\n"); } else{ for(k=2;k<number;k++){ if(number%k==0){ prime='N'; break; if(prime=='Y') printf("==> %u은(는) 소수입니다.\n",number); else printf("==> %u은(는) 합성수입니다.\n",number);

실행: 입력 값으로 4,294,967,291(=-5)을 주는 경우 실행결과를 얻는데 매우 오랜 시간이 걸린다. 해결책: 예를 들어 64의 약수는 1, 2, 4, 8, 16, 32, 64 이므로 64의 양의 제곱근인 8까지만 나누어 보면 충분하다. 따라서 n < k*k 이면 더 이상 k로 나누어 볼 필요가 없다. 이 식에서 k가 크면 오버플로가 발생할 수 있으므로 이를 피하기 위하여 부등식을 변형하여 n/k < k 이면 for 루프를 벗어나게 한다.

개선된 C코드: n=-5일 때도 매우 빨리 계산 결과가 나온다. #include<stdio.h> main() { unsigned number,k; char prime='Y'; printf("자연수 하나를 입력하십시오:\n"); scanf("%u",&number); if(number==1){ printf("==> 1은 소수도 아니고 합성수도 아닙니다.\n"); } else{ for(k=2;k<number;k++){ if(number%k==0){ prime='N'; break; if(number/k<k) break; if(prime=='Y') printf("==> %u은(는) 소수입니다.\n",number); else printf("==> %u은(는) 합성수입니다.\n",number);

또 다른 개선된 C코드 #include<stdio.h> #include<math.h> main() { unsigned number,k,m; char prime='Y'; printf("자연수 하나를 입력하십시오:\n"); scanf("%u",&number); m=(int)(sqrt(number)+1.); if(number==1){ printf("==> 1은 소수도 아니고 합성수도 아닙니다.\n"); } else{ for(k=2;k<number;k++){ if(number%k==0){ prime='N'; break; if(k>m) break; if(prime=='Y') printf("==> %u은(는) 소수입니다.\n",number); else printf("==> %u은(는) 합성수입니다.\n",number);