1 / 19

7. 관계 . 논리연산자 활용 프로그램

TRUE. 조 건. 문장 1. FALSE. TRUE. 조 건. 문장 2. 문장 1. FALSE. 7. 관계 . 논리연산자 활용 프로그램. 문제내용 정수형 변수들을 초기화하여 각각 비교하는 프로그램 작성 학습내용 관계 및 논리연산자를 이용하여 주어진 두 값을 서로 비교하여 그 결과가 참 [ 또는 거짓 ] 인지 이해 조건비교를 위해 If 문을 사용 If 문의 형식 관계연산자 사용. 형 식 : if ( 조건 ) 문장 1; [else 문장 2 ; ]

reese
Télécharger la présentation

7. 관계 . 논리연산자 활용 프로그램

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TRUE 조 건 문장1 FALSE TRUE 조 건 문장2 문장1 FALSE 7. 관계.논리연산자활용 프로그램 • 문제내용 • 정수형 변수들을 초기화하여 각각 비교하는 프로그램 작성 • 학습내용 • 관계 및 논리연산자를 이용하여 주어진 두 값을 서로 비교하여 그 결과가 참[또는 거짓]인지 이해 • 조건비교를 위해 If 문을 사용 • If 문의 형식 • 관계연산자 사용 형 식 : if (조건)문장1;[else문장2;] 예 1 : if (a>=0) printf(“a는 양수”); //TRUE 예 2 : if (a>=0) printf(“a는 양수”); //TRUE else printf(“a는 음수”); //FALSE • 관계 연산자 사용 예

  2. 7. 관계.논리연산자활용 프로그램 • 논리연산자의 사용(입력: 0이 아닌값:참, 0:거짓)(출력: 1:참,0:거짓) • 수학에서 논리연산 • C언어에서 논리연산( 1: 참, 0:거짓) • 논리연산자의 사용 예 • 참조 프로그램(25, 26)

  3. 실습 • 7.1 아래 변수에 주어진 초기값을 적용하여 각 표현식(산술.관계연산)의 결과값을 출력하시오 char c = ‘w’; inti=1, j=2, k=-7, x=7e+33, y=0.001;

  4. 실습 #include <stdio.h> void main() { char c = 'w'; int i=1, j=2, k=-7, x=7e+33, y=0.001; printf("('a' + 1) < c = %d\n", 'a' + 1 < c ); printf("( ( -i ) - ( 5 * j ) ) >= ( k + 1 ) = %d\n", -i - 5 * j >= k + 1 ); printf("( 3 < j ) < 5 = %d\n", 3 < j < 5); printf("( x - 3.333 ) <= ( x + y ) = %d\n", x - 3.333 <= x + y); printf("x < (x + y) = %d\n", x < x + y); printf(" \'v\'== (c -1) = %d\n", 'v' == c -1); printf("( ( i + j ) + k ) == ( ( -2 ) * j ) = %d\n", i + j + k == -2 * j ); printf("(k == j- 9) == i = %d\n", k == j-9 == i); printf("(x + x) != (x * y) = %d\n", x + x != x * y); printf("x != (x + y) = %d\n\n", x != x + y); }

  5. 실습 • 7.2 아래 변수에 주어진 초기값을 적용하여 각 표현식(산술.관계,논리연산)의 결과값을 출력하시오 char c = ‘w’; /* 논리연산에서 c는 참 */ inti=3, j=3, k=3; /* i, j, k는 참 */ double x = 0.0, y = 2.3; /* x는 거짓, y는 참 */

  6. 실습 #include <stdio.h> void main() { char c = 'w'; // c는 참 inti=3, j=3, k=3; // i, j, k는 참 double x = 0.0, y = 2.3; // x는 거짓, y는 참 printf("( i && j ) && k = %d\n", i && j && k ); printf("( x || ( i && ( j - 3 ) ) = %d\n", x || i && j - 3); printf("( i < j ) && ( x < y ) = %d\n", i < j && x < y); printf("( i < j ) || ( x < y ) = %d\n", i < j || x < y ); printf("( i == j ) && ( x <= y ) = %d\n", i == j && x <= y); printf("( x + y ) && (( j + 1 ) == ( ( !k ) + 4 )) = %d\n", x + y && j + 1 == !k + 4); printf("( 'A' <= c ) && ( c <= 'Z' ) = %d\n", 'A' <= c && c <= 'Z' ); printf("( ( c – 1 ) == 'v' ) || ( ( c + 1 ) == 'v' ) = %d\n", c - 1 == 'v' || c + 1 == 'v'); printf("(( i ==2 ) || ( j == 4 )) || ( k == 6 ) = %d\n", i ==2 || j == 4 || k == 6); printf("(( i ==2 ) || ( j == 4 )) || ( k = 6 ) = %d\n\n",i ==2 || j == 4 || (k = 6)); }

  7. 실습 • 방정식(자연수와, +,- 연산자로만 이루어진 식) 검사 프로그램 의 이해 • 산술연산(+,-)과 자연수(0~9)만 사용한 산술 방정식 • 방정식을 입력하면 유효한 방정식인지 검사 후 결과 출력 • 자연수와 연산자를 토큰(token)으로 분리 • 자연수와 연산자 감지 여부를 나타내는 Flag 사용 • Flag(자연수,연산자)를 활용하여 에러 감지 (잘못된 문자나 연산자가 연속으로 두 번 나오면 잘못된 방정식을 알림)

  8. 실습 • 방정식 검사 프로그램 플로우 차트 현재값 이전값 이전값 숫자 (0~9) 숫자 숫자 연산자 연산자 이전 값 = 숫자 이전 값 = 숫자 시작으로 연산자 (+, -) 이전 값 = 연산자 시작 현재 값 읽기 에러 종료 다른 값 (문자…) 에러 종료 NULL (\0) 종료

  9. 실습 방정식 시작 Y str[i]이 문자. NULL(‘\0’) ? str[i] == 숫자? str[i]가 연산자 ‘+’이거나 ’-’ ? N Y Y N i++ token = 1 에러출력 token = 0 N Y token == 1? operFlag == 1? Y 에러출력 N N numberFlag == 1? operFlag = 1 numberFlag = 0 Y N operFlag = 0 numberFlag = 1

  10. 실습 방정식 3 + 3 1 - + 2 \0 str 시작 i Y str[i]이 문자. NULL(‘\0’) ? str[i] == 숫자? str[i]가 연산자 ‘+’이거나 ’-’ ? N token numberFlag operFlag - 0 0 Y Y N 1 0 1 0 1 0 1 0 0 i++ token = 1 에러출력 token = 0 1 N 0 Y token == 1? operFlag == 1? Y 에러출력 0 N N 1 numberFlag == 1? operFlag = 1 numberFlag = 0 Y 1 N operFlag = 0 numberFlag = 1

  11. 방정식입력(equation): - 3 – 4 + - 6 equation[50] - 3 – + - 6 *str - 3 – + - 6 validity Check함수 호출 후 자연수[token =0] 0 연산자[token =1] 1 1 1 operFlag(0 ) 10 1 1 if(operFlag== 1) { printf( “연속연산자로 에러.”); return 0;} numberFlag(0) 0 1 0 0 실습

  12. 실습-역량실습 • 7.3 제공된 프로그램을 참조하여 아래 3가지 형태의 잘못된 방정식들을 유효한 방정식이 될 수 있도록 프로그램 소스를 수정하시오. • 제공된 프로그램의 수행결과 아래 방정식들의 유효성을 검사해보면 • 2x+1, 1+3x, 3+5, 4+3-2x : 유효한 방정식으로, • -2x+3y-4, 2+-2x, 2x+x5, 3xx - 2xy + 2yy : 잘못된방정식으로 나타냄 • 문제: -2x+3y-4, 3xx - 2xy + 2yy 방정식들을 입력하면 정상적인 방정식으로, 2+-2x , 2x+x5 방정식은 잘못된 방정식으로 출력되도록 제공된 프로그램의 소스를 수정하시오. • 자연수(0~9) token=0, 연산자(+,-)token=1, 미지수(x, y) token=2 • numberFlag=0, operFlag=0, unknownQuantityFlag=0;

  13. 실습-역량실습 • 제공 프로그램 #include <stdio.h> #include <string.h> intValidityCheck(char *str); main(){ char equation[50]; while(1){ printf("방정식 입력(exit 입력 시 종료) : "); gets(equation); if(!strcmp(equation, "exit")){ printf("종료합니다.\n"); break; } else if(!ValidityCheck(equation)) printf("잘못된 방정식입니다.\n\n"); else printf("정상적인 방정식입니다.\n\n"); } } intValidityCheck(char *str){ inti, token, numberFlag=0, operFlag=0, unknownQuantityFlag=0; char unknownQuantity='x'; for(i=0;str[i]!='\0';i++){ //토큰 분류 (자연수는 0, 연산자는 1, 미지수는 2) if(str[i]>='0'&&str[i]<='9') token=0; else if(str[i]=='+'||str[i]=='-') token=1; //자연수와 연산자가 아니라면 else if(str[i] == 'x'){ token=2;//미지수 토큰 설정 } else{ printf("잘못된 문자 입력 잘못된 문자 인덱스: %d\n", i); return 0; }

  14. 실습-역량실습 • 제공 프로그램 //토큰이 자연수일때 if(token==0){ //자연수가 감지된 상태일 때(자연수 연속일 때) if(numberFlag) continue; //미지수 뒤에 자연수가 왔을 때 else if(unknownQuantityFlag){ printf("항이 시작되는데 연산자가 없다니. 잘못된 문자 인덱스: %d\n", i); return0;//앞의 항이 끝난 뒤 연산자가 없는 경우로 에러 } else{ numberFlag=1; //자연수 감지 on 셋팅 operFlag=0; //항 시작으로 연산자 감지 off 셋팅 } } //토큰이 연산자일때 else if(token==1){ //연산자 다음에 연산자가 오면 에러 if(operFlag){ printf("연속 연산자로 에러. 잘못된 문자 인덱스: %d\n", i); return 0; } else{ operFlag=1;//연산자 감지 on 셋팅 //항 시작이므로 자연수 감지, 미지수 감지 off 셋팅 numberFlag=0; unknownQuantityFlag=0; } }

  15. 실습-역량실습 • 제공 프로그램 //토큰이 미지수일때 else{ //이미 미지수가 있다면 연속 미지수로 에러 if(unknownQuantityFlag){ printf("연속 미지수로 에러. 잘못된 문자 인덱스: %d\n", i); return 0; } //항 종료이므로 자연수감지, 연산자 감지 off 셋팅 else{ unknownQuantityFlag=1; operFlag=0; numberFlag=0; } } } return 1; }

  16. 실습 • 제공된 프로그램에서의 수행과정과 수행결과는 아래와 같다 • 자연수 : • 항이 시작되거나, 자연수 뒤에 미지수(x)가 나오면 OK : 2x+3, 3+4x • 두 개 이상의 미지수들(x,y)이 나오면 Fail : 2x+3y • 미지수 뒤에 자연수가 따라오면 Fail : 2x+x4 • 연산자 : • 항이 시작될 때 나오면 OK : -4+2x • 연산자 뒤에 연산자가 나오면 Fail : 3+2x+-5 • 미지수 : • 항이 시작되거나,자연수 뒤에 나오면 OK : x+3, 3x+2 • 미지수 뒤에 미지수가 나오면 Fail : 4xx • 실행 결과

  17. 실습 • 프로그래밍 실습 – 석차 연명부 • 기존 프로그램에 추가하여 코딩 • 검색 기능 추가 • 이름, 학번 , 학과 세가지 검색 옵션을 이용하여 검색 • 표준 라이브러리인 strcmp()를 이용하여 검색 Chapter1 프로그램 Chapter2 프로그램 Chapter3 프로그램 변수 선언 변수 선언 입력 메뉴선택 변수 선언 및 초기화 입력 처리 (average 부분) 출력 출력 출력

  18. 실습 • 프로그래밍 실습 – 석차 연명부 • 기존 프로그램에 추가하여 코딩 • 검색 기능 추가 • 이름, 학번 , 학과 세가지 검색 옵션을 이용하여 검색 • 표준 라이브러리인 strcmp()를 이용하여 검색 Chapter4 프로그램 Chapter5 프로그램 변수 선언 변수 선언 메뉴선택 메뉴선택 입력 입력 검색 부분출력 처리 (계산) 검색 전체출력 출력 처리 (계산)

  19. 실습 • 프로그래밍 실습 - 석차 연명부 • 다음의 결과와 같도록 프로그램 작성 • 검색메뉴 선택 시 검색 옵션을 선택 • 입력받은 배열들을 순회하며 조건이 참일 때, 출력 HINT!! for(i=0;i<입력배열; i++){ if(조건){ 출력 } } HINT!! intstrcmp(const char *src, const char* des); // src와 des의 문자열이 같을 때 0을 반환한다. //C언어 실습 Chapter 9. 17pp, 41pp 참조

More Related