210 likes | 448 Views
2014 년 1 학기 프로그래밍실습. 제 6 강. 공지사항 1 차 시험 : 4 월 10 일 ( 목 ). 제어문 if … else if … else 의 사용 아래 예는 if … else if 를 사용하여 학점 계산을 하는 프로그램이다 . #include<stdio.h> main() { int score; char grade; printf(" 점수를 입력하십시오 : "); scanf("%d",&score); if(score>=90) grade='A';
E N D
2014년 1학기프로그래밍실습 제 6 강
공지사항 1차 시험: 4월 10일(목)
제어문 if … else if … else 의 사용 아래 예는 if … else if 를 사용하여 학점 계산을 하는 프로그램이다. #include<stdio.h> main() { int score; char grade; printf("점수를 입력하십시오: "); scanf("%d",&score); if(score>=90) grade='A'; else if(score>=80) grade='B'; else if(score>=70) grade='C'; else grade='F'; printf("학점은 %c입니다.\n",grade); }
이차방정식의 실근을 구하는 예 아래 예는 방정식 ax2 + bx + c = 0의 실근을 구하는 프로그램이다. #include<stdio.h> #include<math.h> main() { double a, b, c, D, r1, r2; printf("a, b, c 입력: "); scanf("%lf %lf %lf",&a,&b,&c); D=b*b-4.*a*c; //판별식 if(D>0.){ r1=(-b+sqrt(D))/(2.*a); r2=(-b-sqrt(D))/(2.*a); printf("두 실근: %g, %g\n",r1, r2); } else if(D==0.){ // 실수끼리 등호(==)로 비교하는 것은 좋지 않음 r1=-b/(2.*a); printf("중근: %g\n",r1); } else printf("실근이 존재하지 않습니다.\n"); }
앞의 C코드를 다음과 같이 개선해 보자. #include<stdio.h> #include<math.h> main() { double a, b, c, D, r1, r2, epsilon=1.e-10, sqD; printf("a, b, c 입력: "); scanf("%lf %lf %lf",&a,&b,&c); D=b*b-4.*a*c; if(D>=epsilon){ sqD=sqrt(D); // 반복되는 복잡한 식은 한 번만 계산 r1=(-b+sqD)/(2.*a); r2=(-b-sqD)/(2.*a); printf("두 실근: %g, %g\n",r1, r2); } else if(fabs(D)<epsilon){ // 등호(==)로 비교하는 것을 피함 r1=-b/(2.*a); printf("중근: %g\n",r1); } else printf("실근이 존재하지 않습니다.\n"); }
10,000원짜리 지폐 하나로 가격이 500원부터 10,000원까지의 범위에 있는 물건을 하나 구입하는 경우, 거스름돈이 얼마인지 계산하고 거스름돈의 1,000원짜리 지폐의 수와 500원짜리 동전의 수가 각각 몇 개인지도 계산하는 프로그램을 작성하여 보자. (단, 물건 가격은 500의 배수이며, 거스름돈은 1,000원짜리지폐와 500원 짜리 동전만 사용한다. ) 입출력 예를 보면 다음과 같다. 물건값을 입력하십시오.(500~10000, 500의배수): 3500 거스름돈: 6500원 1000원짜리 지폐: 6장 500원짜리 동전: 1개
힌트: int price,change,n1000,n500; price: 물건 가격 change: 거스름돈 n1000: 거슬러 줄 1000원짜리 지폐의 수 n500: 거슬러 줄 500원 동전의 수 change=10000-price; n1000=change/1000; n500=change%1000/500;
완성된(?)C코드 #include<stdio.h> main() { int price,change,n1000,n500; printf("물건값을 입력하십시오.(500~10000, 500의배수): "); scanf("%d",&price); change=10000-price; printf("거스름돈: %d원\n",change); n1000=change/1000; n500=change%1000/500; printf(" 1000원짜리 지폐: %d장\n",n1000); printf(" 500원짜리 동전: %d개\n",n500); }
개선된 C코드 #include<stdio.h> main() { int price,change,n1000,n500; printf("물건값을 입력하십시오.(500~10000, 500의배수): "); scanf("%d",&price); if(price>10000 || price<0) printf("입력 오류.\n"); else if(price%500!=0) printf("입력 오류.\n"); else{ change=10000-price; printf("거스름돈: %d원\n",change); n1000=change/1000; n500=change%1000/500; printf(" 1000원짜리 지폐: %d장\n",n1000); printf(" 500원짜리 동전: %d개\n",n500); } }
앞의 예는 다음과 같이 바꿔도 된다. #include<stdio.h> main() { int price,change,n1000,n500; printf("물건값을 입력하십시오.(500~10000, 500의배수): "); scanf("%d",&price); if(price>=500 && price <=10000 && price%500==0){ change=10000-price; printf("거스름돈: %d원\n",change); n1000=change/1000; n500=change%1000/500; printf(" 1000원짜리 지폐: %d장\n",n1000); printf(" 500원짜리 동전: %d개\n",n500); } else printf("입력 오류.\n"); }
제어문 switch의 사용 #include<stdio.h> main() { int score; char grade; printf("점수를 입력하십시오: "); scanf("%d",&score); score/=10; switch(score){ case 10: grade='A'; break; case 9: grade='A'; break; case 8: grade='B'; break; case 7: grade='C'; break; default: // score가 9, 8, 7이 아닌 모든 경우 grade='F'; break; } printf("학점은 %c입니다.\n",grade); }
switch 문 사용시 주의 사항 • switch(정수식){ • ……… • } • 의 형태이며 switch 다음 괄호 ( ) 안에는 정수식만 가능하다. • 전체의 ……… 은 반드시 중괄호{ } 로 둘러싼다. • 각각의 case는 정수식의 값에 따라 수행하며 해당되는 값이 • 없을 때는 default의 내용을 수행한다. 또한 각 case는 • case 정수: • 와 같이 끝에 콜론 : 을 붙여준다. • 각각의 case는 반드시 break;를 이용하여 벗어나야 한다. • 각 case마다 수행해야 할 내용이 여러 줄이라도 중괄호{ }로 • 묶어줄 필요는 없다.
다음 프로그램의 내용이 무엇인지 이해해 보자. #include<stdio.h> main() { int a,r; printf("양의 정수를 입력하십시오: "); scanf("%d",&a); r=a%3; switch(r){ case 1: printf("a를 3으로 나눈 나머지는 1입니다..\n"); printf("a에 2를 더하면 3의 배수가 됩니다.\n"); break; case 2: printf("a를 3으로 나눈 나머지는 2입니다..\n"); printf("a에 1를 더하면 3의 배수가 됩니다.\n"); break; default: printf("a는 3의 배수 입니다..\n"); break; } }
break를 의도적으로 생략한 switch문 #include<stdio.h> main() { int point,a; printf("보너스 포인트를 입력하십시오.\n"); scanf("%d",&point); if(point>=10000) a=3; else if(point>=5000) a=2; else if(point>=1000) a=1; else a=0; printf("사은품 내역:\n"); switch(a){ case 3: printf("김치 냉장고\n"); case 2: printf("전자레인지\n"); case 1: printf("주방 세제 및 비누, 치약 세트\n"); break; default: printf("없음(포인트가 부족합니다.)\n"); } }
물음표연산자 x = (조건식) ? y: z의 형태 조건식이 참이면 y값을 x에 저장 조건식이 거짓이면 z값을 x에 저장 예: 두 수의 최댓값을 구하는 예 #include<stdio.h> main() { int a, b, max; scanf("%d%d",&a,&b); max=(a>b)?a:b; printf("a=%d b=%d max=%d\n",a,b,max); } C코드: 04_01.c ~ 04_09b.c
제 5 장: 순환문 for문을 사용하여 같은 것을 반복하여 출력하는 예: #include<stdio.h> main() { int i; for(i=1;i<4;i++) // 부등호 < 에 주의 printf("안녕하세요.\n"); } 출력: 안녕하세요. 안녕하세요. 안녕하세요.
변형된 예: #include<stdio.h> main() { int i; for(i=1;i<=4;i++) // 부등호 <= 에 주의 printf("i=%d: 안녕하세요.\n",i); } 출력: (i 값의 변화를 살펴 볼 것) i=1: 안녕하세요. i=2: 안녕하세요. i=3: 안녕하세요. i=4: 안녕하세요.
순환문 for의 사용 for( A ; B ; C){ ……… } A : for문이 시작될 때 A의 내용으로 한 번만 초기화 된다. B : B 의 조건이 만족되는 한 { ………}의 내용을 계속 반복한다. B 의 내용이 만족되지 않으면 for를 벗어난다. C : { ………}의 내용을 한번 반복 할 때 마다 C 의 내용을 수행하여 변화를 준다. 주의:(1) A,B,C 사이는 세미콜론 ; 으로 구분한다. (2)……… 의 내용이 한 줄일 때는 중괄호{}를 생략할 수 있다.
1 + 2 + 3 + ... + 100 의 값을 구해 보자. 정수형 변수 i, s 변수 i : 1, 2, 3, ..., 100의 변하는 자연수를 저장함 변수 s : 1부터 i까지의 합을 저장 i가 1일때: i값은 1, s값은 1 i가 2일때: i값은 2, s값은 1 + 2 i가 3일때: i값은 3, s값은 1 + 2 + 3 . . . . . . . . . . . i가 100일때: i값은 100, s값은 1 + 2 + 3 + ... + 100 (이 때의 s값을 출력하면 된다.)
1부터 100까지 자연수의 합을 구하는 C코드: #include<stdio.h> main() { int i,s=0; for(i=1;i<=100;i++) s+=i; // s=s+i;와 같다. printf("1부터 100까지의 합은 %d입니다.\n",s); } 출력: 1부터 100까지의 합은 5050입니다.