관리 메뉴

나구리의 개발공부기록

2장 - 프로그래밍 언어 활용 | 섹션7. 데이터 입/출력, 섹션8. 제어문, 섹션9. 반복문 본문

2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비)/필기 4강 - 프로그래밍 언어 활용

2장 - 프로그래밍 언어 활용 | 섹션7. 데이터 입/출력, 섹션8. 제어문, 섹션9. 반복문

소소한나구리 2024. 5. 9. 20:09

2024년도 시나공 필기 책 내용 정리 


섹션7. 데이터 입/출력

 

1. C언어의 표준 입/출력 함수의 개요

 

  • 키보드로 입력받아 화면으로 출력할 때 사용하는 함수
  • 대표적으로 scanf(), getchar(), gets(), printf(), putchar(), puts() 등이 있음

2. scanf() 함수

 

  • C언어의 표준 입력함수로 키보드로 입력받아 변수에 저장하는 함수
// 형식
scanf(서식 문자열, 변수의 주소)
scanf("%3d", &a);

// % : 서식 문자입을 지정
// 3 : 입력 자릿수를 3자리로 지정
// d : 10진수로 입력
// &a : 입력받은 데이터를 변수 a의 주소에 저장
  • 서식 문자열 : 입력받을 데이터의 자료형을 지정
  • 변수의 주소 : 데이터를 입력받을 변수를 작성, 변수의 주소로 입력 받아야하기 때문에 변수에 주소연산자 &을 붙힘

  • 특징

    • 입력받을 데이터의 자료형, 자릿수 등을 지정할 수 있음
    • 한 번에 여러 개의 데이터를 입력 받을 수 있음
    • 서식 문자열과 변수의 자료형은 일치 해야 함
scanf("%d %f", &i, &j); // %d와 i, %f와 j는 자료형이 일치해야함

 

  • 서식 문자열 : printf() 함수로 출력할 때도 동일하게 적용 됨
서식 문자열 의미
%d 정수형 10진수를 입/출력하기 위해 지정
%u 부호없는 정수형 10진수를 입/출력하기 위해 지정
%o 정수형 8진수를 입/출력하기 위해 지정
%x 정수형 16진수를 입/출력하기위해 지정
%c 문자를 입/출력하기 위해 지정
%s 문자열을 입/출력하기위해 지정
%f 소수점을 포함하는 실수를 입/출력하기위해 지정
%e 지수형 실수를 입/출력하기 위해 지정
%ld long타입 10진수를 입/출력하기 위해 지정
%lx long타입 16진수를 입/출력하기 위해 지정
%lo long타입 8진수를 입/출력하기 위해 지정
%p 주소를 16진수로 입/출력하기 위해 지

 

JAVA에서의 표준 입력

 

  • JAVA 에서 키보드로 입력받은 값을 변수에 저장하려면 먼저 Scanner 클래스를 이용해 키보드로부터 값을 입력 받는 객체 변수를 생성한 후 이를 사용해야 함
Scanner scan01 = new Scanner(System.in);
inNum = scan01.nextInt();

// 객체 변수 생성
// Scanner : 입력에 사용할 객체 변수를 생성할 때 사용하는 클래스 이름
// scan01 : 객체 변수명, 사용자 임의대로 작성
// new : 객체 생성 예약어
// Scanner() : 클래스의 이름, ()를 붙여 그대로 작성
// System.in : 표준 입력장치(키보드)를 의미함,

// 객체 변수 활용
// inNUM : 입력받은 값을 저장할 변수, 해당 변수는 미리 선언 되어 있어야 함
// scan01 : 입력에 사용할 객체 변수 이름, 객체 변수 생성 시 사용한 객체 변수 이름과 동일 해야 함
// nextINt() : 입력받은 값을 정수형으로 반환

3. printf()함수

 

  • C언어의 표준 출력함수, 인수로 주어진 값을 화면에 출력하는 함수
// 형식
printf(서식 문자열, 변수)

// 서식 문자열 : 변수의 자료형에 맞는 서식 문자열을 입력
// 변수 : 서식 문자열의 순서에 맞게 출력할 변수를 작성, scanf() 달리 주소 연산자 &을 붙히지 않음

print("%-8.2f", 200.2);

// % : 서식 문자임을 지정
// - : 왼쪽부터 출력
// 8 : 출력 자릿수를 8자리로 지정
// 2 : 소수점 이하를 2자리로 지정
// f : 실수로 출력

 

  • 주요 제어 문자 : 입력 혹은 출력 내용을 제어하는 문자
문자 의미 기능
\n new line 커서를 다음 줄 앞으로 이동
\b backspace 커서를 왼쪽으로 한 칸 이동
\t tab 커서를 일정 간격 띄움
\r carriage return 커서를 현재 줄의 처음으로 이동
\0 null 널 문자를 출력
\' single quote 작은따옴표를 출력
\" double quote 큰따옴표를 출력
\a alert 스피커로 벨 소리를 출력
\\ backslash 역슬래시를 출력
\f form feed 한 페이지를 넘김
printf("%d\n", a); // a의 값을 정수형 10진수로 출력 후 다음줄로 이동

 

JAVA에서의 표준 출력

 

  • JAVA에서 값을 화면에 출력할 때는 System 클래스의 서브 클래스인 out 클래스의 메소드 pinrt(), println(), printf()등을 사용하여 출력함
// 형식1 : 서식 문자열에 맞게 변수의 내용을 출력
System.out.printf(서식 문자열, 변수) // C언어의 printf() 함수와 사용법이 동일

// 형식2 : 값이나 변수의 내용을 형식 없이 출력
System.out.print()
System.out.print("abc123" + "def") // abc123def
System.out.print("abc" + 12 + 34) // abc1234
System.out.print("abc" + (12 + 34)) // abc46
// 문자열을 출력할 때는 큰따옴표로 묶어줘야 함
// 문자열 또는 문자열 변수를 연속으로 출력할 때는 + 를 이용
// '숫자 + 숫자'는 두 숫자를 합한 값을 출력하지만 '문자열 + 숫자 or 숫자 + 문자열' 과같은 경우 모두문자열로 인식됨

// 형식3 : 값이나 변수의 내용을 형식없이 출력한 후 커서를 다음 줄의 처음으로 이동
System.out.println()
// print()메소드와 사용법이 동일하며, 출력 후 다음 줄로 건너뜀(\n)

4. 기타 표준 입/출력 함수

입력 getchar() 키보드로 한 문자를 입력받아 변수에 저장하는 함수
gets() 키보드로 문자열을 입력받아 변수에 저장하는 함수
Enter를 누르기 전까지를 하나의 문자열로 저장
출력 putchar() 인수로 주어진 한 문자를 화면에 출력하는 함수
puts() 인수로 주어진 문자열을 화면에 출력한 후 커서를 자동으로 다음 줄 앞으로 이동하는 함수

섹션8. 제어문

 

1. 제어문의 개념

 

  • 컴퓨터 프로그램은 명령어가 서술된 순서에 따라 무조건 위에서 아래로 실행되는데, 조건을 지정해서 진행 순서를 변경할 수 있음 -> 프로그램 순서를 변경할 때 사용하는 명령문을 제어문이라고 함
  • if문, 다중if문, switch문, goto, 반복문 등이 있음

2. 단순 if문

 

  • 조건에 따라서 실행할 문장을 달리하는 제어문, 단순 if문은 조건이 한개 일때 사용하는 제어문
  • 조건이 참일 때만 실행할 문장을 지정할 수도 있고, 참과 거짓에 대해 각각 다른 실행문을 지정할 수도 있음
  • 형식1 - 조건이 참일 때만 실행함
if (조건)        // if는 조건 판단문에 사용되는 예약어
                 // 조건은 참(1) 또는 거짓(0)이 결과로 나올 수 있는 수식을 () 안에 입력
    실행할 문장; // 조건이 참일 때 실행할 문장을 작성

// 조건이 참일 때 실행할 문장이 두 문장 이상인 경우
if (조건)
  {              // { } 사이에 조건이 참일 경우 실행할 문장을 작성
    실행할 문장1;
    실행할 문장2;
    ...
  }
  
// 예제 - a가 10보다 크면 a에서 10을 빼기
#include <stdio.h>
main()
{
  int a = 15, b;
  if (a > 10)
    b = a - 10;
  printf("%d\n", b);
}

 

  • 형식2 - 조건이 참일 때와 거짓일 때 실행할 문장이 다름
if (조건)
    실행할 문장1; // 실행할 문장이 두 문장 이상이면 { } 를 입력하고 그 사이에 문장을 작성
else              // else문 : 조건이 거짓일 경우 실행할 문장을 작성
    실행할 문장2;
    
// 예제 - a가 b보다 크면 'a - b', 아니면 'b - a'를 수행
#include <stdio.h>
main()
{
  int a = 10, b = 20, cha;
  if (a > b)
    cha = a - b;
  else
    cha = b - a;
  printf("%d\n", cha);
}

3. 다중 if문 : 조건이 여러개

  • 형식1
if (조건1)         // 조건1이 참일 경우 실행할 문장 작성
    실행할 문장1;
else if (조건2)    // 조건2가 참일 경우 실행할 문장 작성
    실행할 문장2;
else if (조건3)    // 조건3이 참일 경우 실행할 문장 작성
    실행할 문장3;
    ...
else               // 앞의 조건이 모두 거짓일 경우 실행할 문장을 작성
    실행할 문장4;
    
// 예제 - 점수에 따라 등급 표시하기
#include <stdio.h>
main()
{
  int jum = 85;
  if (jum >= 90)
    printf("학점은 A입니다.\n");
  else if (jum >= 80)
    printf("학점은 B입니다.\n");
  else if (jum >= 70)
    printf("학점은 C입니다.\n");
  else
    printf("학점은 F입니다.\n");
}
// 결과 : 학점은 B입니다

 

  • 형식2 : if문 안에 if문이 포함
if (조건1)
  {                 // 조건1이 참일 경우 실행할 문장의 시작점
    if (조건2)      // 조건1이 참이고 조건2가 참일 경우 실행할 문장을 작성
      실행할 문장1;
    else            // 조건1이 참이고 조건2가 거짓일 경우 실행할 문작을 작성
      실행할 문장2;
  }
else                // 조건1이 거짓일 경우 실행할 문장을 작성
  실행할 문장3;


// 예제 - 홀수,짝수 판별기
#include <stdio.h>
main()
{
  int a = 21, b = 10;
  if (a % 2 == 0)	// a를 2로 나눈 나머지가 0이면(짝수) if문을 실행, 아니면(홀수) else문 실행
    if (b % 2 == 0) // b를 2로 나눈 나머지가 0이면 if문 실행
      printf("모두 짝수\n");
    else            // if문의 조건이 아니면 else문 실행
      printf("a: 짝수, b: 홀수\n");
  else              // a % 2 != 0 이면(홀수)면 else문
    if (b % 2 == 0) // 위와 동일 로직 실행
      printf("a: 홀수, b: 짝수\n")
    else
      printf("모두 홀수\n");
}

4. switch문

 

  • 조건에 따라 분기할 곳이 여러 곳인 경우 간단하게 처리할 수 있는 제어문
  • case문의 레이블에는 한 개의 상수만 지정할 수 있고 int, char, enum형의 상수만 가능함
  • case문의 레이블에는 변수를 지정할 수 없음
  • break문은 생략이 가능하지만 break 문이 생략되면 수식과 레이블이 일치할 때 실행할 문장부터 break문 또는 switch문이 종료될 때까지 모든 문장이 실행됨
switch (수식) // 수식 : 레이블1 ~ 레이블n의 값중 하나를 도출하는 변수나 수식을 입력
{
  case 레이블1: // 수식의 결과가 될 만한 값중 하나를 입력, 수식의 결과가 일치하면 문장을 실행
    실행할 문장1;
    break;      // switch문을 탈출하여 종료
  case 레이블2:
    실행할 문장2;
    break;
    ...
  default:  // if문의 else문과 같은역할, 위의 레이블1 ~ 레이블n까지 해당되지 않는 경우 실행됨
    실행할 문장3; // 마지막에 실행되기 때문에 break문이 필요없음
}

#예제 - 점수(jum)에 따라 등급 표시하기
#include <stdio.h>
main()
{
  int jum = 85;
  switch (jum / 10)
  {
    case 10: // 100점일 경우 찾아오는 곳이지만 case9와 같은 문장을 실행하기 위해
             // 실행할 문장을 입력하지 않으면 다음 케이스로 넘어감
    case 9:
      printf("학점은 A입니다.\n");
      break;
    case 8:
      printf("학점은 B입니다.\n");
      break;
    case 7:
      printf("학점은 C입니다.\n");
      break;
    case 6:
      printf("학점은 D입니다.\n");
      break;
    default:
      printf("학점은 F입니다.\n");
  }
}

5. goto문

 

  • 프로그램 실행 중 현재 위치에서 원하는 다른 문장으로 건너뛰어 수행을 계속하기 위해 사용하는 제어문
  • 원하는 문장으로 쉽게 이동할 수 있지만 사용하면 프로그램의 이해와 유지 보수가 어려워져 거의 사용하지 않음
goto 레이블:
레이블:  //  goto문의 주소값. 레이블 형태로 작성되며, 레이블명은 사용자가 원하는 이름을 임의로 지정
  실행할 문장
  
  
// 예제 - 10보다 큰 값을 입력할 때까지 입력하기
#include <stdio.h>
main()
{
  int a;
again:             // goto문의 주소값
  scanf("%d", &a); // 정수형 변수 a에 10진수를 입력 받음
  if (a <= 10)
    goto again;    // a가 10보다 작거나 같으면 again레이블로 돌아감
  else
    printf("%d는 10보다 큽니다.", a); // a의 값이 10을 넘어가면 a의 값을 출력
}

섹션9. 반복문

 

1. 반복문의 개요

 

  • 제어문의 한 종류로 일정한 횟수를 반복하는 명령문, 보통 변수의 값을 일정하게 증가시키면서 정해진 수가 될 때까지 명령이나 명령 그룹을 반복 수행
  • for, while, do ~ while 문이 있음

2. for문

 

  • 초기값, 최종값, 증가값을 지정하는 수식을 이용해 정해진 횟수를 반복하는 제어문
  • 초기값을 정한 다음 최종값에 대한 조건이 참이면 실행할 문장을 실행한 후 초기값을 증가값 만큼 증가시키면서 최종값에 대한 조건이 참인 동안 실행할 문장을 반복 수행함
for(식1; 식2; 식3) // 식1 : 초기값을 지정할 수식 입력, 식2 : 최종값을 지정할 수식 입력
                   // 식3 : 증가값으로 사용할 수식 입력
    실행할 문장;   // 식2가 참일 동한 실행할 문장을 입력, 2문장 이상일 경우 { } 사이에 입력
    
// 초기값, 최종값, 증가값 중 하나 이상을 생략할 수 있고 각각의 요소에 여러 개의 수식을 지정할 수도 있음
for (a = 1; sum <= 30;) sum += a; // 증가값을 생략, 실행할 문장에서 증가값을 만듦

for (a = 0; sum <= 10; a++, sum += a) // 증가값을 a+=, sum += a 2개를 지정

for (a = 0, b = 5; a <= 5, b >= 0; a++, b--) // 초기값, 최종값, 증가값을 모두 두 개씩 지정

for ( ; ; ) // 모두생략하면 무한방복문이 됨
  • for( ; ; )와 같이 조건에 참여하는 수식을 모두 생략하면 for문은 무한 반복함
  • for문은 처음부터 최종값에 대한 조건식을 만족하지 못하면 한 번도 수행하지 않음
  • 문자도 for문을 수행할 수 있음

    • ex) for(char a = 'A'; a <= 'Z'; a++) // a에 'A'. 'B' ... 'Z' 순으로 저장함
    • a에 실제로 해당 문자를 저장하는 것이 아닌 아스키 코드를 저장함, 'A' = 65, 'B' = 66 ... 'Z' = 90
// for문을 이용하여 1 ~ 5까지 합을 더하는 다양한 방법
int a, hap = 0;
for (a = 1; a <= 5; a++)
    hap += a;
    
int a, hap = 0;
for (a = 0; a < 5; a++, hap += a); // for문의 마지막에 ;이 있으므로 실행할 문장 없이 for문만 반복

int a = 1, hap = 0;
for (; a <= 5; a++) // 변수 선언시 a를 1로 초기화 했기 때문에 for문의 초기값은 생략 가능함
    hap += a;
    
int a, hap = 0;
for(a = 0; a++ < 5;) // 증가값을 지정하지 않아도 최종값에서 a++;를 수행하기 때문에 반복문이 수행됨
    hap += a;

int a = 1, hap = 0;  // 엄청나게 비효율적인 for문, 아무도 이따위로 짜지 않을 듯
for (; a <= 5;)
    {
      hap += a;
      a++;
    }
}

3. while문

 

  • 조건이 참인 동안 실행할 문장을 반복 수행하는 제어문
  • 조건이 참인동안 실행할 문장을 반복 수행하다가 조건이 거짓이면 while문을 끝낸 후 다음 코드를 실행
  • 조건이 처음부터 거짓(0)이면 한번도 수행하지 않음
while (조건)      // 조건에 참이나 거짓을 결과로 갖는 수식을 입력, 참(1)을 직접 입력해도 됨
    실행할 문장 ; // 마찬가지로 2개 이상일 경우 { } 사이에 입력해야함
    
// 예제 - 1 ~ 5까지의 합을 더하는 프로그램
#include <stdio.h>
main()
{
  int a = 0, hap = 0;
  while (a < 5)
  {
    a++;
    hap += a;
  }
  printf("%d, %d\n", a, hap);
}
// 결과 5, 15

4. do ~ while 문

 

  • while문과 같은 동작을 수행하지만 do ~ while문은 문장을 무조건 한번 실행한 다음 조건을 판단하여 탈출 여부를 결정함
  • 실행할 문장을 우선 실행한 후 조건을 판별하여 조건이 참이면 실행할 문장을 반복 수행하고, 거짓이면 do ~ while문을 끝내고 다음 코드를 실행
do
  실행할 문장;
while (조건);

// 예제 - 1 ~ 10까지의 홀수의 합을 더하는 프로그램
#include <stdio.h>
main()
{
  int a = 1, hap = 0;
  do
  {           // 반복 범위
    hap += a; // 우선 문장을 1번 수행시키고 while문의 조건이 true인경우 계속 문장을 실행
  	a += 2;
  } while (a < 10)
  printf("%d, %d\n", a, hap)
}

5. break, continue;

 

  • switch문이나 반복문의 실행을 제어하기 위해 사용되는 예약어
  • break : switch문이나 반복문 안에서 break가 나오면 블록을 벗어남
  • continue : continue 이후의 문장을 실행하지 않고 제어를 반복문의 처음으로 옮김, 반복문에서만 사용됨
// 예제 - 1 ~ 5까지의 합을 더하되 2의 배수는 배제하는 프로그램
#include <stdio.h>
main()
{
  int a = 0, hap = 0;
  while(1) // while의 조건식이 참(1)이므로 무한 반복함
  {
    a++;
    if (a > 5) // 만약 a가 5보다 크면 반복문을 멈춤
      break;
    if (a % 2 == 0) // 만약 a가 2의 배수이면 continue로 반복문의 처음으로 돌아감
      continue; 
  	
    hap += a; // while문이 실행되는 동안에는 a의 값을 hap에 누적하여 더하는 연산을 수행
  }
  printf("%d, %d\n", a, hap);
}    
// 결과 6, 9