190 likes | 450 Views
TRUE. 조 건. 문장 1. FALSE. TRUE. 조 건. 문장 2. 문장 1. FALSE. 7. 관계 . 논리연산자 활용 프로그램. 문제내용 정수형 변수들을 초기화하여 각각 비교하는 프로그램 작성 학습내용 관계 및 논리연산자를 이용하여 주어진 두 값을 서로 비교하여 그 결과가 참 [ 또는 거짓 ] 인지 이해 조건비교를 위해 If 문을 사용 If 문의 형식 관계연산자 사용. 형 식 : if ( 조건 ) 문장 1; [else 문장 2 ; ]
E N D
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 • 관계 연산자 사용 예
7. 관계.논리연산자활용 프로그램 • 논리연산자의 사용(입력: 0이 아닌값:참, 0:거짓)(출력: 1:참,0:거짓) • 수학에서 논리연산 • C언어에서 논리연산( 1: 참, 0:거짓) • 논리연산자의 사용 예 • 참조 프로그램(25, 26)
실습 • 7.1 아래 변수에 주어진 초기값을 적용하여 각 표현식(산술.관계연산)의 결과값을 출력하시오 char c = ‘w’; inti=1, j=2, k=-7, x=7e+33, y=0.001;
실습 #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); }
실습 • 7.2 아래 변수에 주어진 초기값을 적용하여 각 표현식(산술.관계,논리연산)의 결과값을 출력하시오 char c = ‘w’; /* 논리연산에서 c는 참 */ inti=3, j=3, k=3; /* i, j, k는 참 */ double x = 0.0, y = 2.3; /* x는 거짓, y는 참 */
참 실습 #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)); }
실습 • 방정식(자연수와, +,- 연산자로만 이루어진 식) 검사 프로그램 의 이해 • 산술연산(+,-)과 자연수(0~9)만 사용한 산술 방정식 • 방정식을 입력하면 유효한 방정식인지 검사 후 결과 출력 • 자연수와 연산자를 토큰(token)으로 분리 • 자연수와 연산자 감지 여부를 나타내는 Flag 사용 • Flag(자연수,연산자)를 활용하여 에러 감지 (잘못된 문자나 연산자가 연속으로 두 번 나오면 잘못된 방정식을 알림)
실습 • 방정식 검사 프로그램 플로우 차트 현재값 이전값 이전값 숫자 (0~9) 숫자 숫자 연산자 연산자 이전 값 = 숫자 이전 값 = 숫자 시작으로 연산자 (+, -) 이전 값 = 연산자 시작 현재 값 읽기 에러 종료 다른 값 (문자…) 에러 종료 NULL (\0) 종료
실습 방정식 시작 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
실습 방정식 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
방정식입력(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 실습
실습-역량실습 • 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;
실습-역량실습 • 제공 프로그램 #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; }
실습-역량실습 • 제공 프로그램 //토큰이 자연수일때 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; } }
실습-역량실습 • 제공 프로그램 //토큰이 미지수일때 else{ //이미 미지수가 있다면 연속 미지수로 에러 if(unknownQuantityFlag){ printf("연속 미지수로 에러. 잘못된 문자 인덱스: %d\n", i); return 0; } //항 종료이므로 자연수감지, 연산자 감지 off 셋팅 else{ unknownQuantityFlag=1; operFlag=0; numberFlag=0; } } } return 1; }
실습 • 제공된 프로그램에서의 수행과정과 수행결과는 아래와 같다 • 자연수 : • 항이 시작되거나, 자연수 뒤에 미지수(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 • 실행 결과
실습 • 프로그래밍 실습 – 석차 연명부 • 기존 프로그램에 추가하여 코딩 • 검색 기능 추가 • 이름, 학번 , 학과 세가지 검색 옵션을 이용하여 검색 • 표준 라이브러리인 strcmp()를 이용하여 검색 Chapter1 프로그램 Chapter2 프로그램 Chapter3 프로그램 변수 선언 변수 선언 입력 메뉴선택 변수 선언 및 초기화 입력 처리 (average 부분) 출력 출력 출력
실습 • 프로그래밍 실습 – 석차 연명부 • 기존 프로그램에 추가하여 코딩 • 검색 기능 추가 • 이름, 학번 , 학과 세가지 검색 옵션을 이용하여 검색 • 표준 라이브러리인 strcmp()를 이용하여 검색 Chapter4 프로그램 Chapter5 프로그램 변수 선언 변수 선언 메뉴선택 메뉴선택 입력 입력 검색 부분출력 처리 (계산) 검색 전체출력 출력 처리 (계산)
실습 • 프로그래밍 실습 - 석차 연명부 • 다음의 결과와 같도록 프로그램 작성 • 검색메뉴 선택 시 검색 옵션을 선택 • 입력받은 배열들을 순회하며 조건이 참일 때, 출력 HINT!! for(i=0;i<입력배열; i++){ if(조건){ 출력 } } HINT!! intstrcmp(const char *src, const char* des); // src와 des의 문자열이 같을 때 0을 반환한다. //C언어 실습 Chapter 9. 17pp, 41pp 참조