목적
  - 문자열을 받아 판단하여 조건문을 실행하게 한다.

문제
사용자 삽입 이미지

코드

#include <iostream>
#include <cstring>

using namespace std;

int main(void)
{
 int i, iCurriculum, iScr;
 float fTotal, fScrTotal;
 char sGrade[2] = {0};
 i = 1;
 fTotal = fScrTotal = iCurriculum = 0.0;

 cout << "수강과목 수 : ";
 cin >> iCurriculum;

 while(i<= iCurriculum)
 {
  cout << i << "번째 과목 학점과 등급 : ";
  cin >> iScr >> sGrade;

  if(!strcmp(sGrade,"A+"))
   fTotal += 4.5 * iScr;

  if(!strcmp(sGrade,"A"))
   fTotal += 4.0 * iScr;

  if(!strcmp(sGrade,"B+"))
   fTotal += 3.5 * iScr;

  if(!strcmp(sGrade,"B"))
   fTotal += 3.0 * iScr;

  if(!strcmp(sGrade,"C+"))
   fTotal += 2.5 * iScr;

  if(!strcmp(sGrade,"C"))
   fTotal += 2.0 * iScr;

  if(!strcmp(sGrade,"D+"))
   fTotal += 1.5 * iScr;

  if(!strcmp(sGrade,"D"))
   fTotal += 1.0 * iScr;

  fScrTotal += iScr;
  i++;

 }

 cout << "이번학기 학점 : " << fTotal / fScrTotal << endl;

 return 0;
}

해설
  - F 학점은 fTotal 더하지 않기 때문에 판정을 하지 않아도 문제 없습니다.
  - 다중 if 문으로 else 없이 써도 한 루프에 하나의 if 만 걸리기 때문에 문제 없이 작동할수 있습니다.
  - float 형으로 선언하여 소숫점 계산을 할수 있습니다.
  - 문자형 이나 기타 단순 비교용 == 연산자로 sGrade == "A+" 이렇게 될거 같지만 문자열에 대한 비교는 이 연산자로는 되지 않습니다. 대신 strcmp 함수를 쓰면 가능합니다.

참고
  -유사 문제 검색

Posted by 카켈



1. 목적

  - 문자열 속의 문자 제어를 이해한다.

2. 문제 (점수 : 10 점)
  - 키보드로부터 문자열을 입력 받아 모음(a/A, e/E, i/I, o/O, u/U)만을 출력하고 그 갯수를 출력
    하는 프로그램을 작성하라.
  - 출력 화면

문자들을 입력하세요 : Hello World. Hi there. I'm a boy..
eooieeIao
모음의 개수 : 9개

3. 이해
  - 문자를 다룰줄 아는가?
  - 조건문을 쓸줄 아는가?

4. 코드

#include <stdio.h>

int main()
{
 char in[255];
 int i,count;
 i = count = 0;

 printf("문자들을 입력하세요 : ");
 gets(in);

 while(in[i] != 0)
 {
  if ((in[i] == 'a' || in[i] == 'e' || in[i] == 'i' || in[i] == 'o' || in[i] == 'u') || (in[i] == 'A' || in[i] == 'E' || in[i] == 'I' || in[i] == 'O' || in[i] == 'U'))
  {
   putchar(in[i]);
   count++;
  }

  i++;

 }

 putchar('\n');
 printf("모음의 개수 : %d개\n", count);

 return 0;

}

5. 해설
  - if 문으로 모음이 되는 조건을 or 연산자(||)를 써서 구분했습니다.
  - gets 문으로 띄워 쓰기 포함(whitespace) 문장을 받을수 있습니다.

6. 참고
  -
http://www.winapi.co.kr/clec/cpp1/4-1-2.htm : 조건문
  - 유사 문제
 

Posted by 카켈



1. 목적

  - 조건문과 반복문을 익힌다.

2. 문제 (점수 : 20점)
  - 100부터 200 사이에 존재하는 4의 배수의 합을 출력한다.
  - 특정 조건문 제한 없음
  - 출력 화면

100 부터 200 사이의 4의 배수의 합 : 3900
Press any key to continue

3. 이해
  - 조건문을 이해하는가?
  - 특정 범위 사이내 구간을 활용할수 있는가?
  - 배수가 될수 있는 조건을 아는가?

4. 코드

#include <stdio.h>

int main(void)
{
 int i = 100;
 int total = 0;

 while(i<=200)
 {
  if (i % 4 == 0) total += i;
  i++;

 }

 printf("100 부터 200 사이의 4의 배수의 합 : %d\n",total);
 
 return 0;
}

5. 해설
  - 4의 나머지가 0 이 되었을때 4의 배수라는 조건을 걸고 반복문을 실행합니다.
  - 정수형 변수 i 가 100 ~ 200 까지 수행합니다.

6. 참고
  - 네이버 검색
  - 구글 검색
  - 내부 검색

Posted by 카켈




1. 목적
  - 사칙 연산에 관해 이해한다.

2. 문제
  - 날짜, 시간, 분, 초를 입력받아 전체 초를 계산하는 프로그램을 작성한다.
  - 해당 단위 보다 큰 숫자를 받았을때 오류를 내고 다시 시작한다.
  - 실행화면

=========================================================
일, 시간, 분, 초를 각각 순서대로 입력하세요 :3 4 62 67
잘못된 값을 입력하셨습니다. 다시 입력하세요.
=========================================================
일, 시간, 분, 초를 각각 순서대로 입력하세요 :3 4 50 28
3일 4시간 50분 28초는 276628초 입니다.
=========================================================
Press any key to continue

3. 이해
  - 조건을 적용하여 반복 수행할수 있는가?
  - 계산하여 출력할수 있는가?

4. 코드

#include <stdio.h>

int main()
{
 int day, hour, min, sec;

start:

 printf("=========================================================\n");
 printf("일, 시간, 분, 초를 각각 순서대로 입력하세요 : ");
 scanf("%d %d %d %d", &day, &hour, &min, &sec);
 if(day > 365 || hour > 25 || hour > 24 || min > 60 || sec > 60)
 {
  printf("잘못된 값을 입력하셨습니다. 다시 입력하세요.\n");
  goto start;
 }

 printf("%d일 %d시간 %d분 %d초는 %d초 입니다.\n", day, hour, min, sec, (day * 24 * 3600) + hour * 3600 + min * 60 + sec);
 printf("=========================================================\n");

 return 0;
}

5. 해설
  - 특별한 조건이 없으므로 잘 쓰지 않는 goto 문을 써서 반복 수행 하였습니다.
  - 다음 단위로 넘어갈수 있는 숫자를 수행했을때 다시 수행하라는 문장과 함께 start 레이블로
    이동합니다.
  - 날짜과 시간, 분에 따른 초계산을 하여 기존 초와 더하여 결과 값을 나타냅니다.
  - goto 문은 조건없는 제어문이므로 문제가 생길수 있으므로 잘 쓰지 않습니다.

6. 참고
  - http://www.winapi.co.kr/clec/cpp1/4-5-1.htm : goto 문 설명

Posted by 카켈



1. 목적
  - 조건에 따른 출력 능력을 확인한다.
  - 함수 생성을 안다.

2. 문제
  - 점수 3개를 입력 받아 성적 판정을 확인한다. (입력값의 범위 소숫점 : 0.00 ~ 100.00)
  - 판정 부분은 함수를 생성해서 코드의 크기를 줄인다.
  - 판정 기준
사용자 삽입 이미지

(조건표)

  - 출력 화면

===========================
 점수 세 개를 입력하세요 : 90.99 20 100
===========================
90.99 에 대한 학점은 A입니다.
20.00 에 대한 학점은 F입니다.
100.00 에 대한 학점은 A+입니다.
Press any key to continue

3. 이해
  - 조건문을 잘 이해 하였는가?
  - 함수 루틴을 구현할수 있는가?
  - 화면 출력을 정확히 할수 있는가?

4. 코드

#include <stdio.h>

void detect(double in)
{
 printf("%2.02f 에 대한 학점은 ", in);
 if(in >= 95 && in <= 100) { putchar('A'); putchar('+'); }
 if(in >= 90 && in <   95) { putchar('A'); }
 if(in >= 85 && in <   90) { putchar('B'); putchar('+'); }
 if(in >= 80 && in <   85) { putchar('B'); }
 if(in >= 75 && in <   80) { putchar('C'); putchar('+'); }
 if(in >= 70 && in <   75) { putchar('C'); }
 if(in >= 65 && in <   70) { putchar('D'); putchar('+'); }
 if(in >= 60 && in <   65) { putchar('D'); }
 if(in >=  0 && in <   60) { putchar('F'); }

 printf("입니다.\n");

 return;

}

int main()
{
 float a,b,c;
 a = b = c = 0;
 printf("===========================\n");
 printf(" 점수 세 개를 입력하세요 : ");
 scanf("%f %f %f", &a, &b, &c);
 printf("===========================\n");
 detect(a);
 detect(b);
 detect(c);
 
 return 0;

}

5. 해설
  - detect 함수는 점수에 따른 원하는 결과값을 화면에 출력하는 함수 입니다.
  - 특정 범위에 따른 출력은 C 의 switch-case 에서는 구현되지 않습니다.(베이직과 차이)
  - scanf 에 소숫점 숫자 입력을 받는 자료형은 float 형이 입력되며 double 형을 입력하면 엉뚱한 값이
   나옵니다.
  - detect 형은 void 리턴 하며 입력 인수는 double 형 자료 입니다.
  - putchar 문은 한글자를 출력하는 함수입니다. puts 을 써도 되지만 자동줄내림이 되므로 여기서는
   쓰지 않았습니다.

6. 참고
  - http://www.cplusplus.com/reference/clibrary/cstdio/scanf.html : scanf 함수
  - 구글 검색 : && 논리 연산자

Posted by 카켈
이전페이지 1 다음페이지