1회-2번) 다음 C 언어의 출력값을 작성하시오. 🤔
#include <studio.h>
int main() {
char a[] = "Art";
char *p = NULL;
p = a;
printf("%s\n", a);
printf("%c\n", *p);
printf("%c\n", *a);
printf("%s\n", p);
for(int i=0; a[i]!='\0'; i++)
printf("%c", a[i]);
}
답:
Art
A
A
Art
Art
풀이
혼자 풀어보려고 끙끙댔으나.. 포인터 너무 어렵다.
*p, *a 출력값이 A가 나오는 것이 이해가 잘 가지 않아서 2회차 3번 문제 이후에 문제 풀이를 봤다.
우선, a라는 배열이 1000번째 기억장소를 할당받았다고 가정하자.
char *p = NULL은 문자형 포인터 변수 p를 선언하면서 NULL 값으로 초기화하는 것이고,
p = a는 a의 시작 주소를 p라는 포인터 변수에 저장하라는 뜻이다.
따라서 p는 1000번지를 가리키게 될 것이다.
printf("%s\n", a);는 a라는 배열에 저장된 문자를 싹 출력 👉 Art
printf("%c\n", *p);는 p라는 포인터 변수가 가리키고 있는 곳에 들어 있는 것 👉 A
printf("%c\n", *a);는 a라는 배열이 가리키고 있는 곳에 들어 있는 것 👉 A
printf("%s\n", p);는 p는 1000번지를 가리키고 있고, 모든 문자열을 출력 👉 Art
for문 내용은 자바랑 다를 게 없어서 이해했음 👉 Art
1회-3) 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
#include <studio.h>
main() {
char *a = "qwer";
char *b = "qwtety";
for(int i=0; a[i] != '\0'; i++)
for(int j = 0; b[j] != '\0'; j++)
if(a[i] == b[j])
prinf("%c", a[i]);
}
답: qwe
1회-9번) 다음은 2진수 101110을 10진수로 변환하는 C언어 프로그램이다. 프로그램을 분석하여 괄호에 들어갈 알맞은 답을 쓰시오.
#include <studio.h>
main() {
int input = 101110;
int di = 1;
int sum = 0;
while(1) {
if(input == 0) break;
sum = sum + (input( 1 )( 2 )) * di;
di = di*2;
input = input/10;
}
printf("%d", sum);
}
답: (1) % (2) 10
2회-1번) 다음 C언어로 구현된 프로그램을 실행시킨 결과가 43215일 때, 처리조건을 참고하여 괄호에 들어갈 알맞은 식을 쓰시오.
#include <studio.h>
main() {
int n[] = {5, 4, 3, 2, 1};
for(int i=0; i<5; i++)
printf("%d", ( ));
}
<처리조건>
괄호의 식에 사용할 문자는 다음으로 제한한다.
- n, i
- +, -, /, *, %
- 0~9, (, ), [, ]
답: n[i+1]%5
2회-2번) 다음 C언어로 구현된 프로그램과 <처리조건>을 참고하여 괄호에 들어갈 알맞은 식을 쓰시오.
#include <studio.h>
main() {
int m = 4620;
int a = ( 1 );
int b = ( 2 );
int c = ( 3 );
int d = ( 4 );
printf("1000원의 개수: %d\n", a);
printf("500원의 개수: %d\n", b);
printf("100원의 개수: %d\n", c);
printf("10원의 개수: %d\n", d);
}
<처리조건>
괄호 1~4의 식에 사용할 문자는 다음으로 제한한다.
- a, b, c, d, m, i, d
- +, -, /, *, %
- 0~9, (, )
답:
(1) m/1000
(2) (m%1000)/500
(3) (m%500)/100
(4) (m%100)/10
2회-3번) 다음 C언어로 구현된 프로그램을 분석하여 "홍길동", "김철수", "박영희"를 차례로 입력했을 때 그 실행 결과를 쓰시오.
#include <stdlib.h>
#include <stdlib.h>
char n[30];
char *getname() {
printf("이름 입력 : ");
gets(n);
return n;
}
int main() {
char *n1 = getname();
char *n2 = getname();
char *n3 = getname();
printf("%s\n", n1);
printf("%s\n", n2);
printf("%s\n", n3);
}
답:
박영희
박영희
박영희
풀이
C언어를 배우지 않은 채로 무작정 문제만 풀려고 봤더니 모르겠다.
문법을 다 정리하기에는 시간이 촉박해서 이 문제는 풀이 영상을 봤다.
우선 n의 시작 주소를 1000이라고 가정해보자.
char n[30];은 크기가 30인 배열이고 전역변수이다.
gets(n)은 사용자가 입력한 문자열을 n이라는 변수에 저장한다는 뜻이다.
getname 함수는 n의 시작주소를 반환해준다.
따라서 getname 함수가 처음으로 실행되었을 때는
n이라는 변수에 "홍길동"이 저장이 되고,
char *n1 = getname()에서 n1에 n의 시작 주소인 1000이 할당된다.
두 번째 getname 함수가 실행되었을 때는
n이라는 변수에 "김철수"가 저장이 되고,
char *n2 = getname()에서는 n2에 n의 시작 주소인 1000이 할당된다.
마지막 getname 함수가 실행되었을 때는
n이라는 변수에 "박영희"가 저장이 되고,
char *n3 = getname()에서는 n3에 n의 시작 주소인 1000이 할당된다.
최종적으로 n이라는 변수에 박영희가 저장이 되고,
n1, n2, n3 모두 n의 시작 주소인 1000을 저장되어 있는 것이다.
따라서 printf("%s\n", n1); printf("%s\n", n2); printf("%s\n", n3); 모두 박영희가 출력된다.
아래는 공책에 적어본 하찮은 풀이이다..

2회-5번) 다음 C 언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
#include <stdio.h>
main() {
int n[] = {73, 95, 82};
int sum = 0;
for(int i=0; i<3; i++)
sum += n[i];
switch(sum/30) {
case 10:
case 9: printf("A");
case 8: printf("B");
case 7:
case 6: printf("C");
default : printf("D");
}
}
답: BCD
2회-7번) 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
#includ <studio.h>
main() {
int c = 0;
for(int i=1; i<=2023; i++)
if(i % 4 == 0)
c++;
printf("%d", c);
}
답: 505
2회-9번) 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
#inlcude <studio.h>
#define MAX_SIZE 10
int isWHat[MAX_SIZE];
int point = -1;
int isEmpty() {
if (point == -1) return 1;
return 0;
}
int isFull() {
if (point == 10) return 1;
return 0;
}
void into(int num) {
if(isFull() == 1) printf("Full");
else isWhat[++point] = num;
}
int take() {
if(isEmpty() == 1) printf("Empty");
else return isWhat[point--];
return 0;
}
main() {
into(5); into(2);
while(!isEmpty()) {
printf("%d", take());
into(4); into(1); printf("%d", take());
into(3); printf("%d", take()); printf("%d", take());
into(6); printf("%d", take()); printf("%d", take());
}
}
답: 213465
2회-18번) 다음은 데이터를 오름차순으로 정렬하는 선택 정렬 알고리즘을 C 언어 프로그램으로 구현한 것이다. 프로그램을 분석하여 괄호에 들어갈 알맞은 연산자를 쓰시오.
#include <studio.h>
main() {
int E[] = {64, 25, 12, 22, 11};
int n = sizeof(E)/sizeof(E[0]);
int i = 0;
do {
int j = i + 1;
do {
if(E[i] ( ) E[j]) {
int tmp = E[i];
E[i] = E[j];
E[j] = tmp;
}
j++;
} while(j < n);
i++;
} while(i < n - 1);
for(int i = 0; i <= 4; i++)
printf("%d", E[i]);
}
답: >
3회-3번) 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
#include <stdio.h>
main() {
char *p = "KOREA";
printf("1. %s\n", p);
printf("2. %s\n", p + 1);
printf("3. %c\n", *p);
printf("4. %c\n", *(p+3));
printf("5. %c\n", *p + 4);
}
답:
1. KOREA
2. OREA
3. K
4. E
5. O
풀이
p가 가리키고 있는 곳의 주소가 1000이라고 가정하자.

3회-4번) 다음 C언어 프로그램과 그 <실행결과>를 분석하여 괄호에 공통으로 들어갈 알맞은 답을 쓰시오.
#include <stdio.h>
struct insa {
char name[10];
int age;
struct insa* impl_a;
struct insa* impl_b;
};
main() {
struct insa p1 = {"Kim", 28, NULL, NULL};
struct insa p2 = {"Lee", 36, NULL, NULL};
struct insa p3 = {"Park", 41, NULL, NULL};
p1.impl_a = &p2;
p2.impl_b = &p3;
printf("%s\n", p1.impl_a( )name); // Lee
printf("%d", p2.impl_b( )age); // 41
}
답: ->
impl_a는 구조체 포인터이다.
포인터에서 멤버에 접근하려면 화살표 연산자를 사용해야 한다.
3회-9번) 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
#include <stdio.h>
int isPerfectNum)(int num) {
int sum = 0;
for(int i=1; i<num; i++)
if(num%i == 0)
sum += i;
if(num == sum) return 1;
else return 0;
}
main() {
int r = 0;
for(int i=1; i<=100; i++)
if(isPerfectNum(i))
r += i;
printf("%d", r);
}
답: 34
자기 자신을 제외한 양의 약수를 더했을 때 자기 자신이 되는 양의 정수를 구하는 문제이다.
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14이므로 6+28=34
3회-15번) 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.
#include <stdio.h>
inf f(int n) {
if(n<=1) return 1;
else return n * f(n-1);
}
main() {
printf("%d", f(7));
}
답: 5040
7*6*5*4*3*2*1 = 5040
'Language > C' 카테고리의 다른 글
[정보처리기사] 2022 C 프로그래밍 언어 문제 (0) | 2024.04.16 |
---|---|
[C언어] 구조체 포인터 선언 및 메모리 할당 (0) | 2024.04.13 |
[C언어] 문자열 포인터에서 인덱스로 문자에 접근하기 (0) | 2024.04.11 |
[C언어] 문자와 문자열 포인터 (0) | 2024.04.11 |
[C언어] 배열 형태로 문자열 선언하기 (0) | 2024.04.11 |