본문 바로가기
정보처리기사/실기

정보처리기사 실기 10장 - 프로그래밍 언어 활용

by 애기 개발자 2024. 7. 16.
반응형

118. 데이터 입출력 (A)

//C
int result, a = 100, b = 200, c = 300;
result = a < b ? b++ : --c;
printf("%d, %d, %d\n", result, b, c);
200, 201, 300

 

a < b 이므로 result = b++이 된다.

b++은 후위계산이므로 result = 200, b = 201이 된다.

 

//C
int i, j;
scanf("%o#%x", &i, &j);
printf("%d %d", i, j);

입력
15#22
13 34

 

%o - 8진수

%x - 16진수

15 = $ 1 * 8^1 + 5 * 8^0 $ = 8 + 5 = 13

22 = $ 2 * 16^1 + 2 * 16^0 $ = 32 + 2 = 34

 

 

//C
int j = 024, k = 24, L = 0x24, hap;
hap = j + k + L;
printf("%d, %d, %d, %d\n", j, k, L, jap);
20, 24, 36, 80

 

024 - 8진수

0x24 - 16진수

j = $ 2 * 8^1 + 4 * 8^0 $ = 20

L = $ 2 * 16^1 + 4 * 16^0 $ = 36

 

//Java
public class Main {
	public static void main(String[] args) {
		int w = 3, x = 4, y = 3, z = 5;
		
		if( (w == 2 | w == y) & !(y > z) & (1 == x ^ y != z) ) {
			w = x + y;
			if(7 == x ^ y != w) 
				System.out.println(w);
			else 
				System.out.println(x);
		} else {
			w = y + z;
			if(7 == y ^ z != w)
				System.out.println(w);
			else
				System.out.println(z);
		}
	}
}
7

 

 

 

w = x + y = 7

결과 : 7


119. 제어문 (A)

public class Main {
	public static void main(String[] args) {
		int c = 1;
		switch(3) {
		case 1: c += 3;
		case 2: c++;
		case 3: c = 0;
		case 4: c += 3;
		case 5: c -= 10;
		default: c--;
		}
		System.out.println(c);
	}
}
-8

 

위의 코드는 break가 없기 때문에 case 3부터 switch가 종료될 때 까지 모든 문장을 실행한다.

 


120. 포인터 (A)

 

* 만약 char형 배열이면 주소는 1씩 증가 (1byte)

#include <stdio.h>

main() {
    char *p = "KOREA";
    printf("%s\n", p);
    printf("%s\n", p+3);
    printf("%c\n", *p);
    printf("%c\n", *(p+3));
    printf("%c\n", *p+2);
}

 

KOREA
EA
K
E
M

 

#include <stdio.h>
int main() {
    int* array[3];
    int a = 12, b = 24, c = 36;
    array[0] = &a;
    array[1] = &b;
    array[2] = &c;
    printf("%d", *array[1] + **array + 1);
}

 

37

 

결론 : 24 + 12 + 1 = 37


121. 구조체 (A)

구조체 정의

struct sawon {
    char name[10];
    char jikwi[10];
    int pay;
};

 

구조체 변수 선언

struct sawon ansan, *seoul;

 

sawon ansan : sawon 구조체 타입의 ansan 변수

*seoul : 구조체 포인터 변수, struct sawon *seoul; 로 선언도 가능

 

구조체 멤버 지정

ansan.name = "김한국";
ansan.jikwi = "대리";
ansan.pay = 40;

seoul->name = "홍길동";
seoul->jikwi = "과장";
seoul->pay = 50;

(*seoul).name = "홍길동";
(*seoul).jikwi = "과장";
(*seoul).pay = 50;

 

구조체 일반 변수에 '.' 을 찍어 사용하거나

구조체 포인터 변수에 '->'를 사용하거나

구조체 포인터 변수에 *를 사용하여 일반 포인터 변수처럼 사용할 수 있다.

 

#include <stdio.h>

struct jsu {
    char nae[12];
    int os, db, hab, hhab;
}

int main() {
    struct jsu st[3] = { {"데이터1", 95, 88},
                         {"데이터2", 84, 91},
                         {"데이터3", 86, 75} };
    struct jsu* p;
    p = &st[0];
    (p+1)->hab = (p+1)->os + (p+2)->db;
    (p+1)->hhab = (p+1)->hab + p->os + p->db;
    
    printf("%d", (p+1)->hab + (p+1)->hhab);
}

 

  nae os db hab hhab
st[0] 데이터1 95 88    
st[1] 데이터2 84 91 159
(p+1)->os = 84
(p+2)->db = 75
84 + 75 = 159
342
p->os = 95
p->db = 88
159+95+88 = 342
st[2] 데이터3 86 75    

 

(p+1)->hab + (p+1)->hhab = 159 + 342 = 501


122. 사용자 정의 함수 (A) 

#include <stdio.h>
int factorial(int n);

main() {
    int (*pf) (int);
    pf = factorial;
    printf("%d", pf(3));
}

int factorial(int n) {
    if (n <= 1)
        return 1;
    else
        return n * factorial(n-1);
}

 

int (*pf) (int)

-> 정수형 인수 한 개를 받는 정수형 함수 포인터 pf를 선언

  • (*pf) : 함수가 저장된 곳의 위치를 저장하는 함수 포인터
  • (int) : 함수가 전달받을 인수의 자료형
#include <stdio.h>
char n[30];
char* getname() {
    printf("이름입력 : ");
    gets(n);
    return n;
}

main() {
    char* n1 = getname();
    char* n2 = getname();
    char* n3 = getname();
    printf("%s\n", n1);
    printf("%s\n", n2);
    printf("%s\n", n3);
}

"홍길동", "김철수", "박영희" 가 차례로 입력 될 때 출력은?

박영희
박영희
박영희

 

n 이 전역변수임

gets(n) -> n을 갱신시킴 (홍길동 -> 김철수 -> 박영희)

char* n1 = getname() 은 char* n1 = &n과 같음

즉, n1->n, n2->n, n3->n 을 가르킴

 

n1 = n2 = n3 = &n

그리하여 마지막으로 갱신된 n값 박영희가 3번 나옴

 


123. Java의 클래스 (A)

 

생성자

 - 객체 변수를 생성하면서 초기화를 수행하는 메소드

 

class ClassA {
	ClassA() {
		System.out.print('A');
		this.prn();
	}
	
	void prn() {
		System.out.print('B');
	}
}

class ClassB extends ClassA {
	ClassB() {
		super();
		System.out.print('D');
	}
	
	void prn() {
		System.out.print('E');
	}
	
	void prn(int x) {
		System.out.print(x);
	}
}

public class Main{
	public static void main(String[] args) {
		int x = 7;
		ClassB cal = new ClassB();
		cal.prn(x);
	}
}
AED7

 

  1. ClassB()의 생성자로 이동
  2. super()를 통해 ClassB의 부모인 ClassA로 이동
  3. ClassA에서 'A' 출력
  4. this.prn()으로 ClassB의 prn()으로 이동하여 'E' 출력 -> ClassA의 prn이 있으나 ClassB에서 prn이 재정의 되었음
  5. super()밑의 'D'출력
  6. cal.prn(x)로 오버로딩된 prn(int x)로 이동하여 7 출력
class Parent {
	int x = 1000;
	Parent() {
		this(3000);
	}
	Parent(int x) {
		this.x = x;
	}
}

class Child extends Parent {
	int x = 4000;
	Child() {
		this(5000);
	}
	Child(int x) {
		this.x = x;
	}
	int getX() {
		return this.x;
	}
}

public class Main {
	public static void main(String[] args) {
		Child c = new Child();
		System.out.println(c.getX());
	}
}

 

5000
  1. Child c = new Child() 를 통해 Child()로 이동한다.
  2. this(5000)을 통해 Child(int x)로 가는 것이 아닌, Parent()로 간다. -> 자식 생성자는 super()가 없어도 생략된 것. 그러므로 부모에게 한번 다녀온다.
  3. Parent() 안의 this(3000)을 통해 Parent.x = 3000이 된다.
  4. 부모 클래스가 종료되었으므로 다시 Child()로 이동한다
  5. Child()안의 this(5000)으로 넘어간다.
  6. Child(int x)의 x는 5000이므로 Child.x = 5000이 된다
  7. c.getX()는 Child.x를 리턴받아서 5000을 출력

124. Java의 활용 (A)

추상 메소드는 자식 클래스에서 재정의해야만 사용할 수 있는 메소드

abstract class ClassName { ... } 과 같이 사용

 

위와 같은 메소드를 포함하는 클래스를 추상 클래스라 함

이렇게 재정의한 메소드를 부모 클래스의 객체 변수를 통해 사용하려면

부모 클래스의 객체 변수를 선언할 때 자식 클래스의 생성자를 이용해야함

이것을 클래스의 형 변환이라 함

 

abstract class Animal { //추상 클래스, 만약 Animal a = new Animal(); 을 선언 시 오류 발생
	String a = " is animal";
	abstract void look(); // 추상 메소드 look()을 정의함
	void show() {
		System.out.println("zoo");
	}
}

class Chicken extends Animal { // Animal을 부모 클래스로 지정하여 Animal에 속한 변수와 메소드를 상속 받음
	public Chicken() {
		look();
	}
	
	void look() { // Animal의 추상 메소드 look()을 재정의한 것
		System.out.println("Chicken" + a);
	}
	
	void display() {
		System.out.println("tow wings");
	}
}

public class Main {
	public static void main(String[] args) {
		Animal a = new Chicken();
		a.show();
	}
}
Chicken is animal
Zoo

 

 

abstract class Vehicle {
	String name;
	abstract public String getName(String val);
	public String getName() {
		return "Vehicle name : "+name;
	}
}

class Car extends Vehicle {
	private String name;
	public Car(String val) {
		name = super.name = val;
	}
	public String getName(String val) {
		return "Car name : "+val;
	}
	public String getName(byte[] val) {
		return "Car name : "+val;
	}
}

public class Main {
	public static void main(String[] args) {
		Vehicle obj = new Car("Spark");
		System.out.println(obj.getName());
	}
}
Vehicle name : Spark

 

  1. Vehicle obj = new Car("Spark")를 통해 먼저 Car(String val)로 간다.
  2. name = super.name = val은 Car.name = "Spark", Vehicle.name = "Spark"가 된다.
  3. obj.getName()은 파라미터가 없다. 즉 Vehicle의 getName()을 호출한다.
class Parent {
	int compute(int num) {
		if(num <= 1) return num;
		return compute(num-1) + compute(num-2);
	}
}

class Child extends Parent {
	int compute(int num) {
		if(num <= 1) return num;
		return compute(num-1) + compute(num-3);
	}
}

public class Main {
	public static void main(String[] args) {
		Parent obj = new Child();
		System.out.println(obj.compute(4));
	}
}
 1

 

  1. Parent obj = new Child()로 인해 형 변환이 이루어짐
  2. obj.compute(4)는 Parent의 compute()가 아닌 Child에서 재정의된 compute()를 호출함

125. Python의 활용 1(A)

range

range(최종값)

range(초기값, 최종값)

range(초기값, 최종값, 증가값)

 

slice

a[초기위치:최종위치]

a[초기위치:최종위치:증가값]

 

생략할 경우

a[:] or a[::]

a[초기위치:]

a[:최종위치]

a[::증가값]

 

리스트 관련

  • pop(위치)
    • 위치 값 출력, 해당 값 삭제
    • [10, 11, 12].pop(1) -> 11출력 후 [10, 12]
  • index(값)
    • 값이 지정된 요소의 index를 반환
    • [10, 11, 12].index(12) -> 2
  • count(값)
    • 값과 같은 개수를 반환
    • [1, 0, 1, 0, 0].count(0) -> 3
  • extend(리스트)
    • 리스트 뒤에 리스트를 붙임
    • [1, 2].extend([3, 4]) -> [1, 2, 3, 4]
  • reverse()
    • 역순으로 뒤집음
    • [1, 2, 3].reverse() -> [3, 2, 1]
  • sort()
  • copy()

세트 관련

  • pop()
    • 랜덤 값을 출력하고, 그 값을 삭제함
    • {1, 2, 3}.pop() -> 2 출력, 2삭제
  • add(값)
    • 세트에 값을 추가함
    • {1, 2, 3}.add(4) -> {1, 2, 3, 4}
  • update(세트)
    • 세트에 세트를 추가하여 확장함
    • {1, 2, 3}.update({2, 3, 4, 5}) -> {1, 2, 3, 4, 5} (set는 중복을 허용하지 않음)
  • remove(값)
a = 100
result = 0
for i in range(1, 3):
    result = a >> i
    result = result + 1
print(result)
26

 

100을 2진수로 표현하면 1100100

result = 으로 초기화하고 있으므로 i = 2일 때의 경우만 생각하면 됨.

result = a >> 2 : a 를 오른쪽으로 2번 쉬프트 = 11001

result = result + 1 : 11001 + 1 = 11010 = 26

 

a = "REMEMBER NOVEMBER"
b = a[0:3] + a[12:16]
c = "R AND %s" % "STR"
print(b+c)
REMEMBER AND STR

 

b = REM + EMBE

c = R AND STR

b+c = REMEMBER AND STR

 

%s 는 %뒤의 STR로 대응됨


126. Python의 활용 2 (A)

a = [1, 2, 3, 4, 5]
a = list(map(lambda num : num+100, a))
print(a)

 

a의 각 요소에 100씩 더하는 lambda 식을 적용한 후, 100씩 더해진 값들을 다시 리스트로 구성

 

lambda 변수명 : 수학식

 

def func(x):
    return x * x - 3
print(func(10))

func = lambda x : x * x - 3
print(func(10))

 

위의 두 방식은동일한 방법


 

127. 절차적 프로그래밍 언어 (D)

일련의 처리 절차를 정해진 문법에 따라 순서대로

  • C
    • 시스템 프로그래밍 언어
    • 고급과 저급 모두 가능
  • ALGOL
    • 수치 계싼, 논리 연산을 위한 과학 기술 계산용 언어
    • PASCAL, C의 모체
  • COBOL
    • 사무 처리용
    • 영어 문장 형식으로 구성
  • FORTRAN
    • 과학 기술 계산용

128. 객체지향 프로그래밍 언어 (D)

객체를 조립해서 프로그램을 작성

  • JAVA
    • 분산네트워크에 적용
    • 멀티스레드 기능
  • C++
    • C언어에 객체지향 개념을 적용
  • Smalltalk
    •  최초의 GUI 제공
    • 1세대 객체지향 프로그래밍 언어

129. 스크립트 언어

HTML 문서 안에 직접 프로그래밍 언어를 삽입하여 사용하는 언어

  • 자바 스크립트
  • VB 스크립트 (Visual Basic)
    • MS에서  제작
    • Active X를 사용
  • ASP
    • MS 제작
    • Window에서만 사용 가능
  • JSP
    • Java로 만들어진 서버용 스크립트 언어
  • PHP
    • C, Java와 유사함, 웹 페이지 제작에 많이 사용
  • Python
    • 객체지향 기능을 지원하는 대화형 인터프리터언어
  • 쉘 스크립트
    • 유닉스/리눅스 계역 쉘에서 사용
    • 선택형 : if, case
    • 반복형 : for, while, until
  • Basic
    • 절차지향 지원하는 대화형 인터프리터 언어
    • 쉬움

130. 라이브러리 (B)

자주 사용하는 함수나 데이터들을 미리 만들어 모은 집합체

2. C언어 라이브러리

  • stdio.h
    • 데이터 입출력 기능 제공
    • printf, scanf, fprintf, fscanf, fclose, fopen 등
  • math.h
    • 수학 함수 제공
    • sqrt, pow, abs 등
  • string.h
    • 문자열 처리 기능 제공
    • strlen, strcpy, strcmp
  • stdlib.h
    • 난수 발생, 메모리 할당 기능 제공
    • atoi, atof, srand, rand, malloc, free 등
  • time.h
    • 시간 처리 기능 제공
    • time, clock 등

2. Java 라이브러리

  • java.lang
    • 자바기본 인터페이스, 자료형, 등
    • import 문 없이도 사용 가능
    • String, System, Process, Runtime, Math, Error 등
  • java.util
    • 날짜 처리, 난수 발생, 문자열처리 등 기능 제공
    • Date, Calendar, Random, StringTokenizer 등
  • java.io
    • 파일 입출력 기능
    • InputStream, OutputStream, Reader, Writer 등
  • java.net
    • 네트워크 관련 기능
    • Socket, URL, InetAddress 등
  • java.awt
    • 사용자 인터페이스 관련
    • Frame, Panel, Dialog, Button, Checkbox 등

4. Python 라이브러리

  • 내장함수
    • abs(), slice(), pow(), print() 등
  • os
    • 운영체제와 상호작용 기능
    • getcwd(), chdir(), system()
  • re
    • 고급 문자열 처리
    • findall(), sub() 등
  • math
    • 복잡한 수학 연산 기능
    • cos(), log() 등
  • random
    • 무작위 선택 기능
    • choice(), sample(), random(), randrange() 등
  • statistics
    • 통계값 산출 기능
    • mean(), median(), variance() 등
  • datetime
    • 날짜와 시간 조작 기능
    • today(), date(), strftime() 등

 

반응형

댓글