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

정보처리기사 실기 - 프로그래밍 언어 활용 개념 정리 (1~5일차)

by aesup 2023. 7. 1.
728x90

 

 

01 프로그래밍을 위한 기본 사항

진수 

특정 개수의 숫자만을 이용하여 수를 나타내는 수의 체계이다

 

10진수를 n 진수로 변환 

- 10 진수 값을 몫이 n  보다 작을 때까지 n  으로 나누고 나머지 값을 표시

 

10진수 이하일때는 0~9를 사용하지만 , 10진 수 초과시 10을 넘어가는 값은 영어로 표기

10  A

11 B

12 C

13 D

14 E

15 F

 

N진수를 10진수로 변환

- n 진수에서 마지막 자리는 자리 숫자에 자리값인 n 0제곱을 곱하고, 마지막에서 두번째 자리는 자리 숫자에 자리값인 n 1 제곱을 곱하고, 마지막에서 세 번째 자리는 자리 숫자에 자리값인 n2  제곱을 곱하고 ... 다 더해 10진수를 구한다

 

- 16진수 C9를 10진수로 변환 =  12 * 16 + 9 * 1 = 201

 

아스키 코드

- 아스키 코드는 미국 ANSI  에서 표준화한 정보교환용 부호체계이다

- 영문 키보드로 입력할 수 있는 모든 기호가 할당된 기본적인 부호 체계이다

- A = 65

- a = 97

- 0 = 48

- 1 =  49

- c언어에서 0 = null


02 C언어

- c 언어는 본문 전에 처리하는 전처리부분과 본문으로 구성되어 있다

- 헤더는 xxx.h  파일로 되어 있고, 헤더 안에는 프로그래밍에 필요한 함수들이 포함되어 있다

 

전처리기(Preprocessor) 개념

- 실행 파일을 생성하는 과정에서 소스 파일 내에 존재하는 전처리 지시문을 처리하는 작업

- C 언어에서 #  이 붙으면 전처리 지시문, 전처리기라고 표현

 

#include 

- c 언어 프로그램에 헤더 파일을 포함할 때 사용하는 전처리기

 

#define

- 매크로를 정의할 때 사용하는 전처리기

- 상수값을 지정하기 위한 예약어로 구문의 상수로 치환할때 사용하는 전처리기

 

자료형

- 프로그래밍 언어에서 실수값, 정수값과 같은 여러 종류의 데이터를 식별하는 형태이다

- 메모리 공간을 효율적으로 사용하고 2진수 데이터를 다양한 형태로 사용하기 위해 존재한다

- 문자 Character = char

- 정수 Integer = int

- 부동 소수점 floating point = float, double

 

식별자

- 변수, 상수, 함수 등 서로를 구분하기 위해서 사용되는 이름이다

- 영문 대문자/소문자, 숫자, 밑줄의 사용이 가능

- 첫자리에서는 숫자를 사용할 수 없음

- 변수 이름의 중간에는 공백을 사용할 수 없음

- 이미 사용되고 있는 예약어의 경우 사용 불가능(For , If, while 사용가능)

 

식별자 표기법 🔔 (2020 년 3회)

 

카멜 표기법(Camel Case)

- inputFunction

- 식별자 표기시 여러단어가 이어지면 첫 단어 시작만 소문자로 표시하고, 각 단어의 첫글자는 대문자로 지정하는 표기법

 

파스칼 표기법(Pascal Case)

- InputFunction

- 식별자 표기시 여러단어 가 이어지면 각 단어의 첫 글자는 대문자로 지정하는 표ㅕ기법

 

스네이크 표기법(Snake Case)

-input_function

- 식별자 표기시에 여러단어가 이어지면 단어 사이에 언더바를 넣는 표기법

 

헝가리안 표기법(Hungarian Case)

- 식별자 표기시 접두어에 자료형을 붙이는 표기법

- int 의 경우 n, char  의 경우 c, 문자열일 경우 sz  를 서술한다.

 

연산자 우선순위 : 증산시 관비 논삼대

#include <stdio.h>
void main(){
 int x=3, y=3;
 x++;
 ++y;
 printf("%d %d",x,y);
}

'''
출력 값
4 4
'''

printf -> 개행 하려면 /n 필요 

 

static 변수

프로그램이 시작될때 생성 끝날때 없어짐.

#include <stdio.h>
void fn(){
 static int a = 3;
 a = a + 1;
 print("%d\n", a);
}

void main(){
 fn();
 fn();
}


'''
출력 값
4
5
'''

 

포맷 스트링

%[-][0][전체자리수].[소수점자리수]스트링

#include <stdio.h>
void main(){
 int a=4, c=5;
 char b = 'A';
 printf("a는 %d b는 %c입니다."a,b);
 printf("%d",a+c);
}

'''
출력값
a는 4 b는 65 입니다.
9
'''
#include <stdio.h>
void main(){
	float a = 1.234;
    int b = 10;
    printf("%.2f\n",a);		// 소수점 두번째자리까지 출력
    printf("%5.1f\n",a);	// 전체자리수 5개, 소수점 1번째 자리까재지 출력
    printf("%05.1f\n",a);	// 전체자리수 5개, 소수점 1번째 자리, 공백은 0으로 채움
    printf("%-5f\n",a);		// 전체자리수 5개, 왼쪽정렬		
    
}

출력

1.23

(공백)(공백)(공백)1.2

001.2

10

 

 

문자열함수

strcat(a,b) :  a에 b 를 연결

strcpy(a,b) : b를 a 에 복사

strcmp(a,b) : a,b 대소 비교 

strrev(a) : 해당 문자열 전환

strchr(str,c) :  str 에 c 문자가 존재하는지 , 존재 시 해당 존재 첫번째 위치 포인터 변수로 저장, 출력시 해당 위치부터 출력

strlen(str) : 문자열의 길이 반환

#include <stdio.h>
#include <string.h>
void main(){
 char a[20] = "Hello";
 char b[10] = "Soojebi";
 char c[20] = "Hello";
 
 #문자열 연결
 strcat(a,b);
 printf("%s %s \n",a,b);
 strncat(c,b,3);
 printf("%s %s \n",c,b);
 
 #문자열 복사
 strcpy(a,b);
 printf("%s %s \n",a,b);
 strncpy(c,b,3);
 printf("%s %s \n",c,b);
 
}

'''
출력 값
HelloSoojebi Soojebi
HelloSoo Soojebi
Soojebi Soojebi
Soolo Soojebi
'''

 

수학함수

sqrt : 제곱 계산

ceil : 소수점 올림

floor :  소수점 내림

 

유틸리티 함수

atoi  : 문자열을 정수로

atof  :  문자열을 실수로 "1.0" => 1.00

itoa(value, str, 진수) : 정수형을 문자열로 변환

 

포인터 🔔

- 변수의 주소값을 저장하는 공간

- 표기법 : 자료형* 포인터변수명 = &변수명;

- 자료형 뒤에 * 를 붙이면 주소를 저장하는 포인터 변수라는 의미

- 변수명에 & 를 붙이면 해당 변수의 주솟값을 의미

- 주소에 해당하는 값을 가리킬 때는 * 를 사용한다

 

배열과 포인터

구분 코드
배열의 i번지 주소  배열 + i == &배열[i]

a+1 == &a[1]
배열의 i번지 값 *(배열+i) == 배열[i]

*(a) == a[0]
#include <stdio.h>
void main(){
 int a[2][3] = {1,2,3,4};
 int i,j;
 for(i=0; i<2; i++)
  for(j=0; j<3; i++)
   printf("%d", a[i][j]);
}

'''
a[0][0] = 1
a[0][1] = 2
a[0][2] = 3
a[1][0] = 4
a[1][1] = 0
a[1][2] = 0

출력 값
123400
'''

헷갈리는 부분 !!! ✨✨✨✨

#include <stdio.h>
void main(){
 int a[3][2] = {1,2,3,4,5,6};
 int *p=a[1];
 
 printf("%d %d %d \n", *a[0], *a[1], *a[2]);
 printf("%d %d %d \n", **a, **(a+1), **a(a+2));
 printf("%d %d \n", *p, *(p+1));
 printf("%d %d \n", p[0], p[1]);
}

'''
12
34
56

*(p+1) = *(a[1] + 1) 
p[0] = a[1][0]
p[1] = a[1][1]


출력 결과

1 3 5
1 3 5
3 4
3 4

'''


2차원 배열과 1차원 포인터✌️✌️✌️✌️✌️

#include <stdio.h>
void main(){
	int a[3][2] = {{1,2},{3,4},{5,6}};
    int *p = a[1];
    
    printf("%d %d %d\n", *a[0], *a[1], *a[2]);
    printf("%d %d %d\n", **a, **(a+1), **(a+2));
    printf("%d %d\n", *p, *(p+1));
    printf("%d %d\n", p[0], p[1]);
    
}

1 3 5

1 3 5

3 4

3 4

주소
1 &a[0][0]
2 &a[0][1]
3 &a[1][0]
4 &a[1][1]
5 &a[2][0]
6 &a[2][1]

03 자바

2021년 1회

public class test{
	public static void main(String[] args){
    	int[][] a = new int[3][2];
        System.out.println(a.length);
        System.out.println(a[0].length);
    }
}

출력 

3  : a 배열의 행의 개 수

2  : a[0]배열의 개수

 

표준 출력 함수

print() : 개행을 하지 않는 출력함수

println() : 개행을 하는 출력함수

printf() : c언어 처럼 변수를 출력할 수 있는 출력 함수

 

static 메서드⭐⭐⭐

- static 메서드는 클래스가 메모리에 올라갈 때 자동적으로 생성되는 메서드이다.

- 인스턴스를 생성하지않아도 호출이 가능하게 된다.

public class A{
	public static void main(String[] args){
    	System.out.println(A.check(1));
    }
    
    static String check(int num){
    	return(num>=0)? "positive":"negative";
    }
}

 

 

클래스⭐⭐⭐

- 클래스는 객체 지행 프로그래밍(OOP)에서 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 틀이다

 

클래스 접근제어자 종류

- 접근제어자는 지정된 클래스, 변수, 메서드를 외부에서 접근할 수 있도록 권한을 설정하는 기능이다

종류 설명
public 외부의 모든 클래스에 접근이 가능한 접근제어자
protected 같은 패키지 내부에 있는 클래스, 하위 클래스에서 접근이 가능한 접근 제어자
자기자신과 상속받은 하위클래스 둘 다 접근이 가능한 접근 제어자
default 접근 제어자를 명시하지 않은 경우로 패키지 내부에 있는 클래스에서 접근가능
private 같은 클래스 내에서만 접근이 가능한 접근 제어자

생성자⭐⭐⭐

- 해당 클래스의 객체가 생성될때 자동으로 호출되는 특수한 종류의 메서드이다

- 생성자는 일반적으로 클래스의 멤버 변수를 초기화하거나 클래스를 사용하는데 필요한 설정이 필요한 경우 사용한다

- 클래스명과 동일한 메서드명을 가지고 반환값이 없다

 

클래스 상속⭐⭐⭐

- 상속은 어떤 객체가 있을 때 객체의 변수와 메서드를 다른 객체가 물려받는 기능

- 자식 클래스를 생성하면 무조건 부모 클래스의 생성자를 실행한 후에 자식 클래스의 생성자를 실행

class parentClass{
}

class childClass extends parentClass{
}
class A{
	public void fnA(){
    	System.out.println("A");
    }	
}

class B extends A{
	public void fnB(){
      	System.out.prinln("B");
    }
}

public static void main(String[] args){
	B b = new B();
    b.fnA();	// B 클래스에는 fnA 메서드 없으므로 부모 클래스에서 가져온다 출력 - A
    b.fnB();	// B 클래스에 존재하는 fnB 메서드를 실행한다 - B
}

 

오버로딩⭐⭐⭐

- 동일한 이름의 메서드를  매개변수만 다르게 해서 여러개로 정의할 수 있다

- 메서드 이름이 같아야한다

- 매개변수 개수가 달라야 한다

- 매개변수 개수가 같을 경우 데이터 타입이 달라야한다

- 반환형은 같거나 달라도 된다

 

오버라이딩⭐⭐⭐

- 하위클래스에서 상위클래스의 메서드를 재정의 할 수 있다

class A{
    public void fn(){
        System.out.println("A");
    }
}

class B extends A{
    public void fn(){
        System.out.println("B");
    }
}

public class App {
    public static void main(String[] args) throws Exception {
        A a = new B();
        a.fn();    // B 출력
    }
}

 

부모 클래스 접근

- 자바는 super 키워드를 이용하여 상위 클래스의 변수나 메서드에 접근할 수 있다

 

super.메서드명();

 

추상클래스 Abstract Class

-추상 클래스는 미구현 추상 메서드를 한 개 이상 가지며, 자식 클래스에서 해당 추상 메서드를 반드시 구현하도록 강제하는 기능이다

abstract class A{
	abstract fnA();
}

class B extends A{
	fnA(){
    	명령어;
    }
}

 

인터페이스

- 인터페이스는 자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위한 문법이다

- 구현된 것이 없고 밑그림만 있는 설계도

interface A{
	void fnA();
}

class B implements A{
	public fnA(){
    	System.out.println("B");
    }
}

 

스레드 Thread

- 스레드는 프로세스보다 가벼운, 독립적으로 수행되는 순차적인 제어의 흐름

- 실행단위

- 스레드를 만들기 위해서는 Thread 클래스를 상속받고, run() 메서드에 스레드 동작 시 수행할 코드를 작성

class T_Soojebi extends Thread{
	public void run(){
    	System.out.println("Run");
    }
}

public class Soojebi {
	public static void main(String[] args){
    	Thread t1 = new T_Soojebi();
        Thread t2 = new Thread(new T_Soojebi());
        
        t1.start();
        t2.start();
        System.out.println("Main");
    }
}

 

컬렉션 Collection

- 컬렉션 프레임워크는 다수의 데이터를 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합이다

- 자바에서는 컬렉션 프레임 워크를 통해 모든 컬렉션 클래스와 인터페이스를 제공한다

List :  LinkedList, ArrayList

Set :  HashSet, TreeSet

Map: Hashtable ,  HashMap, TreeMap

 

List 예시

public class A{
	public static void main(String[] args){
    	List a = new ArrayList();
        a.add(2);
        System.out.println(a);	// [2]
        a.add(1);
        System.out.println(a);	// [2, 1]
        a.add(1);
        System.out.println(a);	// [2, 1, 1]
        a.add(1,3);
        System.out.println(a);	// [2, 3, 1, 1]
        a.remove(2);			
        System.out.println(a);	//  [2,3,1]
        System.out.println(a.get(2));	// 1
        System.out.println(a.size());	// 3
        
        
    }
}

Set 예시

public class A{
	public static void main(String[] args){
    
    	/*
        	add(값) - 값을 추가, 중복된 값이 들어오면 추가하지 않음!!!!
            remove(값) - 값을 제거하는 메서드(List 인터페이스랑 다름***)
            size() - 원소의 개수를 얻는 메소드
        */
    
    	Set h = new HashSet();
        h.add(2);
        System.out.println(h); //[2]
        
        h.add(1);
        System.out.println(h); //[2,1]
        
        h.add(1);
        System.out.println(h); //[2,1]
     
        h.remove(1);
        System.out.println(h); //[2]  
    }
}

Map 예시

public class A{
	public static void main(String[] args){
    	
        /*
        	put(키,값)
            remove(키)
            get(키)
            size()
        */
        
        Map h = new HashMap();
		h.put(1, "A");
        System.out.println(h); // {1=A}
        
        h.put(1,"C");
    	System.out.println(h); // {1=C}
        
        h.put(2,"D");
    	System.out.println(h); // {1=C, 2=D}
        
        h.remove(1);
    	System.out.println(h); // {2=D}
        
        
    }
}

 

예외처리

- 프로그램이 동작 중에 의도하지 않은 비정상적인 동작을 처리하는 기법

- try 다음에 수행할 명령문에서 예외가 발생하면 catch 에서 예외를처리

-  catch 는 하나 이상 작성하며, 상황에 맞는 예외처리가 수행됨

- finally 문장은 예외처리 끝나고 반드시 실행되어야 하는 명령문을 수행함

public class A{
	public static void main(String[] args){
    	try{
        	int a = 4/0;
        }
        catch(Exception e){
        	System.out.println(e.getMessage);
        }
        finally{
        	System.out.println("finally");
        }
        
    }
}

 


04 파이썬

구분 유형 설명
시퀀스자료형 문자열형(String) s = "test"
리스트형(List) i = [1,2,3]
튜플형(Tuple) i = (1,2,3)
비시퀀스자료형 세트형(Set) i = {1,2,3}
- 중복 불가
- 데이터가 숫자일시 자동정렬
딕셔너리형(Dictionary) {'s':1, 'j':2, 'b':3}
- 요소변경 : 딕셔너리명[키] = 값
- 요소제거 : del 딕셔너리명[키]

 

a = [10, 20, 30]
print(a) // [10, 20, 30]

a.extend(a) 
print(a) // [10, 20, 30, 10, 20, 30]

a.pop() 
print(a) // [10, 20, 30, 10, 20]

a.reverse()
print(a) // [20, 10, 30, 20, 10]

l = [3, 5, 7]
l.append(3)
print(l) // [3, 5, 7, 3]

l.insert(2,4) 
print(l) // [3, 5, 4, 7, 3]

l.remove(3)
pring(l) // [5, 4, 7, 3]

 

시퀀스 자료형 요소 접근 방법 - 인덱싱

print("abcdefg"[3]) // d
print("abcdefg"[-1]) // g

시퀀스 자료형 요소 접근 방법 - 슬라이싱

// 시퀀스변수명[시작:종료:스텝]
// 시작 : 생략할경우 처음부터 슬라이싱
// 종료 : 생략할경우 마지막까지 슬라이싱, 종료인덱스에 있는 인덱스 전까지만 슬라이싱

print("pythontest"[1:])  // ythontest
print("pythontest"[2:4]) // th
print("pythontest"[:3])  // pyt

a = [4, 2, 7, 3, 5]
print(a[0:4:2]) // [4,7]

 

Swap 연산자

a, b = 10,20
print(a)
print(b)
a, b = b , a
print(a)
print(b)

/*
10
20
20
10
*/

산술 연산자

print(3/2)
print(3//2)
print(3**2)
print(3%2)

/*
1.5
1
9
1
*/

람다 함수

- 람다함수는 함수 이름 없이 동작하는 함수이다

- 매개변수에 값을 전달하면 표현식에서 연산을 수행한다

- lambda 매개변수 : 표현식

//(lambda 매개변수: 표현식)

(lambda n, m: n + m)(2,3)  // 5

 

생성자

- 해당 클래스 의 객체가 생성될때 자동으로 호출되는 특수한 종류의 메서드이다

 

728x90