정보처리기사 실기를 대비해서 수제비 카페의 Daily 문제를 풀고, 기록하려고 한다.
보기 좋게 모아서 정리할 것.. 정답 및 해설은 더보기에!
👩💻👩💻👩💻
1. 다음 프로그램의 출력결과를 쓰시오.
#include <stdio.h>
int main()
{
char sTemp[16] = "Hello Sujebi";
printf("%s", sTemp);
retrun 0;
}
정답
Hello Sujebi
해설
C언어는 String 지원안함, 그래서 char 배열 형태로 문자열 처리함 !! 출력시 s 포맷스트링 썼으니까 변수 출력하면 문자열 전부 나옴
* %s : 문자열 출력
2. 다음 프로그램의 출력결과를 쓰시오.
#include <stdio.h>
int main()
{
char sTemp[16] = "Hello Sujebi";
printf("%s", &sTemp[6]);
retrun 0;
}
정답
Sujebi
해설
sTemp의 7번째( array는 0부터시작) 값인 'S' 부터 문자열의 끝까지 출력합니다.
추가 해설
'&'는 주소값을 참조하는 역할을 하는데, &sTemp[6] 의 의미는 char 배열의 6번째 주소부터 참조하겠다는 의미.
배열의 인덱스 값은 0부터 시작하므로
H e l l o (공백) S u j e b i
0 1 2 3 4 5 6 7 8 9 10 11
6번째인 S 부터 끝까지 문자열을 출력한다.
여기서 왜 S 단일값이 출력되지 않고 S부터 문자열 전체가 출력될까 ? 하는 궁금증이 생길 수 있다.
그 이유는 출력하는 포맷형태가 %c 가 아닌 %s 이기 때문이다.
만약, %c (char)라면 S 하나만 출력되겠지만, %s (string)문자열 포맷 형식으로 출력했을 때 원래는 Hello Sujebi 가 출력되어야 하는데 여기서 포인터로 시작점을 지정해줬다고 생각하면 이해가 쉬울 것이다.
따라서 전체 문자열에서 포인터의 시작점부터 출력한 문자열이 출력되므로 Sujebi 가 출력되는 것!
3. 다음 프로그램의 출력결과를 쓰시오.
#include <stdio.h>
void swap(int *a, int *b);
int main()
{
int a=10; // 정수 a 선언 및 초기화
int b=20; // 정수 b 선언 및 초기화
swap(&a, &b); // swap 함수 호출
printf("%d %d\n", a, b); // a, b 출력
return 0;
}
void swap(int *a, int *b) // 두 정수를 교환
{
int temp=0;
temp = *a;
*a = *b;
*b = temp;
}
정답
20 10
해설
두 정수를 교환(swap)하는 함수 사용 예 입니다.
추가 해설
Call by Address, 주소에 의한 호출 혹은 주소를 이용한 호출
함수 호출 시 인자로 넣은 변수의 주소 값을 저장해서 각각 그 변수의 값을 변경하기 위해 포인터 변수 사용
'*' 포인터 참고 : m.blog.naver.com/PostView.nhn?blogId=lyw94k&logNo=220847883516&proxyReferer=https:%2F%2Fwww.google.com%2F
5. 다음 프로그램의 출력결과를 쓰시오.
#include <stdio.h>
int main()
{
char sTemp[16] = "Hello Soojebi";
char *p = sTemp;
printf("%c", *(p + 6));
return 0;
}
정답
S
해설
char * 타입 변수 p는 char array 타입 변수 sTemp를 가리킵니다.
printf함수에서 문자를 출력하므로 포맷스트링 %c 를 사용합니다
p변수에 +6을 하면 'S'의 주소값인데, '*' 기호를 앞에 붙이면 가리키는 값('S')을 access 합니다.
6. 다음 프로그램의 출력결과를 쓰시오.
#include <stdio.h>
double power(double base, int exp);
int main()
{
printf("%.2f\n", power(2,3));
return 0;
}
double power(double base, int exp)
{
double result = 1;
int n = exp;
while(n--) result *= base;
return result;
}
정답
8.00
해설
지수승을 구하는 프로그램 입니다.
power함수에서 base와 exp를 매개변수로 전달 받아서
while문에서 n값이 1씩 감소하면서 0이 될때까지 반복을 하면서 base를 곱한 결과를 result에 대입 합니다
while문 반복이 종료되고 result값을 리턴 합니다
printf함수에서 2의3승인 8을 출력하는데 포맷스트링이 "%.2f" 이므로 8.00을 출력 합니다
(소수점 뒤 두자리까지 표시)
추가 해설
C언어에는 true, false 가 없고 0이면 거짓, 0이 아니면 참으로 동작한다
n-- => 출력 후 감소
처음에 n을 3으로 받았기 때문에
while (3--) 1 *= 2;
-> 3으로 한번 돌고 n = 2
while (2--) 2 *= 2;
-> 2로 한번 돌고 n = 1
while(1--) 4 *= 2;
-> 1로 한번 돌고 n = 0
while(0) 8 *= 2;
-> 0이면 거짓이니 안에 내용 계산 하지 말고 while 문 빠져나오기
7. 다음 프로그램의 출력결과를 쓰시오.
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[8] = "2021";
int num = atoi(str);
printf("%d", num * 2);
return 0;
}
정답
4042
해설
#include <stdio.h>
#include <stdlib.h> //atoi() 함수 사용하기 위한 헤더파일
int main()
{
char str[8] = "2021"; // 문자열 "2021"
int num = atoi(str); // 문자열을 숫자로 변환
printf("%d", num * 2); // 2021(숫자) * 2 한 값을 출력
return 0;
}
atoi는 문자열을 숫자로 변환하는 함수이다. (atoi = Ascii TO Integer)
문자열 "2021"을 숫자 2021로 변환하고 2를 곱한 값을 출력한다.
추가 해설
atoi = char to int = 문자열을 정수 타입으로
atof = char to double = 문자열을 실수 타입으로
atol = char to long int = 문자열을 long 정수 타입으로
👩💻 여기서 char는 char[N], char* 로 표현이 되는 문자열 >> C++ 에서는 string 클래스에 의해서 문자열을 string으로 표현할 수 있는데, C언어에서는 string 클래스가 존재하지 않기 때문에 char 배열을 이용하여 문자열을 표현하기 때문입니다.
만약 숫자가 아닌 문자를 숫자로 바꾸려 한다면?
만약에 char[]에....
- 숫자가 아닌 문자들만 들어있다면?
- 숫자 + 문자가 들어있다면?
- 문자 + 숫자가 들어있다면?
#include<iostream>
#include<cstdlib>
using namespace std;
int main(void)
{
char str1[] = "HEESTORY"; //문자열만 있는 경우
char str2[] = "2021"; //숫자만 있는 경우
char str3[] = "2021HEESTORY"; //숫자+문자(숫자가 먼저 나올 경우)
char str4[] = "HEESTORY2021"; //숫자+문자(문자가 먼저 나올 경우)
cout << "atoi(\"문자만\"); -" << atoi(str1) << endl;
cout << "atoi(\"숫자만\"); -" << atoi(str2) << endl;
cout << "atoi(\"숫자+문자\"); -" << atoi(str3) << endl;
cout << "atoi(\"문자+숫자\"); -" << atoi(str4) << endl;
return 0;
}
실행결과
atoi("HEESTORY") : 0
atoi("2021") : 2021
atoi("2021HEESTORY") : 2021
atoi("HEESTORY2021") : 0
출처: https://blockdmask.tistory.com/331 [개발자 지망생]
9. 다음 프로그램의 출력결과를 쓰시오.
public class Sujebi{
public int add(int a, int b){
return a+b;
}
public double add(double a, double b){
return a+b;
}
public static void main(String []args){
Sujebi s = new Sujebi();
System.out.print(s.add(5,4) + " ");
System.out.println(s.add(5.0,4.0));
}
}
정답
9 9.0
해설
Sujebi클래스에서 객체를 new연산자를 이용하여 생성하고 멤버 메소드인 add를 호출하여 화면에 출력하는 오버로딩(Overloading) 예제이다
public class Sujebi{
public int add(int a, int b){ // 정수의 합계 계산
return a+b;
}
public double add(double a, double b){ // 소수점 합계 계산
return a+b;
}
public static void main(String []args){
Sujebi s = new Sujebi();
System.out.print(s.add(5,4) + " "); // 정수의 합 출력
System.out.println(s.add(5.0,4.0)); //소수점 합 출력
}
}
20. 다음 빈칸에 들어갈 코드를 작성하시오
#include <stdio.h>
#define MAX_SIZE 10
int stack[MAX_SIZE];
int top;
void init()
{
top = -1;
}
int push(int val)
{
if(top>=MAX_SIZE-1){
printf("stack overflow\n");
return -1;
}
stack[ (1) ] = val;
return val;
}
int pop(void)
{
if(top<0){
printf("stack underflow\n");
return -1;
}
return stack[ (2) ];
}
void print_stack(){
int i;
printf("in stack.. ");
for(i=top;i>=0;i--){
printf("%d ", stack[i]);
}
printf("\n");
}
int main()
{
int i;
int item;
init();
for(i=1;i<=10;i++){
push(i);
}
print_stack();
item = pop();
printf("pop item is %d\n", item);
print_stack();
return 0;
}
실행결과
in stack.. 10 9 8 7 6 5 4 3 2 1
pop item is 10
in stack.. 9 8 7 6 5 4 3 2 1
답)
① _____________________
②_____________________
정답
① ++top
② top--
해설
스택을 C로 구현한 코드이다.
init() |
스택을 초기화 함수 |
|
push() |
스택에 삽입하는 함수 |
|
pop() |
스택에서 꺼내는 함수 |
|
print_stack() |
스택을 출력하는 함수 |
22. 다음 프로그램 실행 결과를 쓰시오.
public class Sujebi
{
public static void main (String[] args){
int[] arr = {1,2,3,4,5};
int sum = 0;
for (int num : arr) {
sum += num;
}
System.out.print(sum);
}
}
정답
15
해설
Java 에서는 foreach반복문을 아래와 같이 작성한다.
for (type var : array)
{
statements using var;
}
아래 문장과 동일하게 동작한다.
for (int i=0; i<arr.length; i++)
{
type var = arr[i];
statements using var;
}
'정보처리기사' 카테고리의 다른 글
(11과목) 응용SW 기초기술 활용 (0) | 2021.04.14 |
---|---|
(5과목) 인터페이스 구현 (0) | 2021.04.14 |
(10과목) 애플리케이션 테스트 관리 (0) | 2021.04.14 |
(9과목) 소프트웨어 개발 보안 구축 (0) | 2021.04.14 |
(7과목) SQL 응용 (0) | 2021.04.13 |