[정보처리기사/예상문제] - 2024 정보처리기사 실기 예상 문제 모음
목차
1. 조건문
2. 반복문
3. 배열
1. 조건문
조건에 맞을 경우 해당 실행문장을 처리하고자 할 때 사용한다
조건문에는 if문과 swtich-case문이 있다.
먼저 if문
a>b가 참이면 a=a+b;가 실행이 되고 거짓이면 a=a-b;가 실행된다
아래 예문은a=a+b가 실행이 돼 13이 출력 된다
#include<stdio.h>
int main() {
int a = 8, b = 5;
if (a > b)
a = a + b;
else
a = a - b;
printf("%d\n", a);
return 0;
}
비트연산자에서 봤듯이 조건문에서도 연산자가 있다. &&, ||
&&는 2개의 조건이 모두 참이어야 참(1)을 반환한다
||는 2개의 조건중 하나만 참이어도 참(1)을 반환한다
if외에도 또 다른 조건을 추가하고 싶을 때는 else if를 쓰기도 하고 그냥 if를 더 써주기도 하는데
if-else if-else의 경우에는 조건문중 해당하는 1개만 실행되는 반면
if-if-if의 경우에는 해당 조건에 맞는 모든 조건문이 전부 실행된다.
#include<stdio.h>
int main() {
int a = 90;
int count = 0;
if (a >= 90)
count++;
else if (a >= 80)
count++;
else if (a >= 70)
count++;
else
count++;
printf("%d", count);
return 0;
}
출력 : 1
#include<stdio.h>
int main() {
int a = 90;
int count = 0;
if (a >= 90)
count++;
if (a >= 80)
count++;
if (a >= 70)
count++;
printf("%d", count);
return 0;
}
출력 : 3
switch-case문
switch 키워드 다음 괄호안에 들어가는 num이 무슨 값이냐에 따라 그 해당하는 경우를 실행한다.
break는 조건문을 종료하라는 키워드이고
default는 그냥 else라고 생각하면 된다
#include<stdio.h>
int main() {
int num = 3;
switch (num) {
case 1:
printf("안녕1");
break;
case 2:
printf("안녕2");
break;
case 3:
printf("안녕3");
break;
default :
printf("안녕안녕");
break;
}
return 0;
}
출력 : 안녕3
break가 없으면 case3부터 아래 모든 조건문이 다 실행된다
#include<stdio.h>
int main() {
int num = 3;
switch (num) {
case 1:
printf("k");
case 2:
printf("o");
case 3:
printf("re");
default :
printf("a");
}
return 0;
}
출력 : rea
2. 반복문
반복문에는 for, while, do-while이 있다
먼저 for문이다
i=0가 시작값
i<=5가 조건식
i++이 증가감값
i가 0부터 시작해서 i가 5가 될때 까지 i가 1씩 증가하면서 반복해라라는 의미이다
#include<stdio.h>
int main() {
for (int i = 0; i <= 5; i++) {
printf("%d", i);
}
return 0;
}
위 for문은 따라서 012345가 출력이 된다
다음은 while문이다
while 오른쪽 괄호에 조건식을 넣어준다
i가 5이하일때까지 반복해라
그리고 while문은 증감값을 출력문 아래에 적어준다.
출력결과는 012345이다
#include<stdio.h>
int main() {
int i = 0;
while (i <= 5){
printf("%d", i);
i++;
}
return 0;
}
break를 이용해 해당 조건일 경우 while문이 종료되도록 해줄 수도 있다
아래는 0만 출력된다
#include<stdio.h>
int main() {
int i = 0;
while (i <= 5){
if (i %2==1) break;
printf("%d", i);
i++;
}
return 0;
}
또한 continue라는 키워드를 통해 실행문을 실행하지 않고 건너 뛰라고 할 수도 있다
예를 들어 i==1에서 continue를 만났으면 i==1에서 실행될 예정이었던 모든 구문이 건너뛰기 되고 i==2구문이 시작된다
아래처럼 하면 024가 출력이 된다
#include<stdio.h>
int main() {
int i = 0;
while (i <= 5) {
if (i % 2 == 1) {
i++;
continue;
}
printf("%d", i);
i++;
}
return 0;
}
for 문은 반복횟수를 알고 있을 때, while 문은 반복 조건위주에 따라 반복할 때 사용된다.
마지막으로 do-while문이다
조건에 따라 반복을 계속할지를 결정할 때 사용하는 것은 while 문과 동일한데
조건 중괄호 {} 블럭을 한번 실행하고, 조건을 검사하여 반복을 결정한다
#include<stdio.h>
int main() {
int i = 0;
do {
printf("%d", i);
i++;
} while (i <= 5);
return 0;
}
출력결과는 012345이다
반복문이 중첩될 수 도 있다
그것을 중첩반복문이라고 한다.
간단한 예시를 보겠다.
아래는 이중 for문이다.
#include<stdio.h>
int main() {
int k = 1;
for (int i = 1; i <= 3; i++) {
for (int j = k; j <= k+2; j++) {
printf("%d ", j);
}
printf("\n");
k += 3;
}
return 0;
}
이중for문에 맨 처음for문은 행, 안쪽은 열이라고 생각하면 된다.
i가 1부터 3까지니까 3행이 생기는 것이다.
j도 k부터 k+2까지니까 3열이 생기는 것이다.
i=1일때(즉 1행이 만들어졌을 때) j를 k부터 k+2만큼 반복해라(즉 열을 k에서 k+3만큼 만들어라)
i=2일때(즉 1행이 만들어졌을 때) j를 k부터 k+2만큼 반복해라(즉 열을 k에서 k+3만큼 만들어라)
i=3일때(즉 1행이 만들어졌을 때) j를 k부터 k+2만큼 반복해라(즉 열을 k에서 k+3만큼 만들어라)
1행 만들어짐-> 3열 만듦
2행 만들어짐-> 3열 만듦
3행 만들어짐->3열 만듦
그래서 위에 이중 for문 출력결과를 생각해보자.
3. 배열
배열은 같은 데이터형 변수를 여러개로 묶어놓은 것이다
관련 있는 데이터를 하나의 변수에 할당하여 관리하기 위해 필요하다
아래와 같이 a[]형태가 배열 선언 형태이고 선언과 동시에 {1,2,3,4,5}로 초기화를 했다.
배열의 인덱스는 0부터 시작한다
a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5
#include<stdio.h>
int main() {
int a[5] = { 1,2,3,4,5 };
for(int i=0;i<5;i++){
printf("%d", a[i]);
}
return 0;
}
출력결과가 무엇일지 생각해보자
12345
포인터를 배울 때 얘기하겠지만 배열의 이름은 배열의 주소이다.
int a=0; 이라는 변수가 있다고 하면 &a를 해야 a변수의 주소를 가리킬 수 있지만
배열은 a라는 배열 이름만 있어도 변수의 주소를 가리킬 수 있다
◆배열에서 문자열
'a', 'A'같은 것을 문자라고 하고 문자가 2개이상 결합된 것을 문자열이라고 하는데 배열에 문자열을 저장할 때는 반드시 문자열의 개수+1의 크기로 선언해야한다
문자열의 마지막에는 \0(널 값)이 추가되기 때문이다.
즉, KOREA로 문자가 5개뿐이지만 널값을 포함해야해서 배열길이를 6개로 해줘야한다.
널 값이 추가되는 이유는 메모리상에서 문자열은 이진 데이터로 저장되기 때문에 문자열의 시작과 끝이 표시되어 있지 않아 구분하기 위해서 존재한다.
#include<stdio.h>
int main() {
char a[6] = "KOREA";
printf("%s", a);
return 0;
}
%s는 문자열을 받는 서식문자로 a나 &a로 사용 가능하다
a로 써도 되는 이유는 a라는 배열의 이름은 배열의 주소를 가리키기 때문이다
#include<string.h>를 추가해준 후 strlen이라는 함수로 a라는 배열안에 문자열길이를 구할 수 있다
5가 출력된다
#include<stdio.h>
#include<string.h>
int main() {
char a[6] = "KOREA";
printf("%d", strlen(a)); //5
return 0;
}
위 문제를 토대로 문제를 하나 풀어보자.
#include<stdio.h>
#include<string.h>
int main() {
char a[6] = "KOREA";
int b = 0;
b = strlen(a);
for (int i = 0; i < b; i++) {
printf("%c", a[i]);
}
return 0;
}
출력결과 : KOREA
◆2차원 배열
2차원 배열은 말그대로 2차원 배열이다.
배열이 이렇게 1차원이였다면
2차원 배열은 이런식으로 생각하면된다.
아래 처럼 생각하면 된다 x[][] 이런 형태인데
x는 배열의 이름이고 첫번째 []는 행, 두번째 []는 열이라고 생각하면 된다
보기 편해서 이렇게 보는 것이고 실제로 메모리상에는 나란히 이어져있다.
출처 : c언어 2차원 배열 : 메모리 상에 어떻게 저장이 될까요? (tistory.com)
아래의 출력결과를 생각해보자.
#include<stdio.h>
int a[5][5];
int main() {
int i, j, k = 1;
for (i = 0; i < 5; i++) {
for (j = 4; j >= 0; j--) {
a[i][j] = k;
k++;
}
}
for (i = 0; i < 5; i++) {
for (j = 0; j < 5; j++) {
printf("%3d", a[i][j]);
}
printf("\n");
}
return 0;
}
[정보처리기사/예상문제] - 2024 정보처리기사 실기 예상 문제 모음
'정보처리기사 > 정처기 코딩 꿀팁' 카테고리의 다른 글
정보처리기사 실기-비전공자용 JAVA 요약 2탄(객체지향, 클래스) (0) | 2023.05.11 |
---|---|
정보처리기사 실기-비전공자용 Java 요약 1탄 (2) | 2023.05.10 |
정보처리기사 실기-비전공자용 C언어 요약 4탄(포인터 심화, 구조체) (8) | 2023.05.07 |
정보처리기사 실기-비전공자용 C언어 요약 3탄(함수, 포인터) (3) | 2023.05.05 |
정보처리기사 실기-비전공자용 C언어 요약 1탄 (7) | 2023.04.29 |