정보처리기사 13. 프로그래밍 언어
본문 바로가기

정보처리기사

정보처리기사 13. 프로그래밍 언어

728x90
반응형

 

데이터 타입

 

 

데이터 타입의 유형 (불문열 정부)

 

 

불린(Boolean) / 문자(Char) / 문자열(String) / 정수(Int) / 부동 소수점(Float)

 

데이터타입 뒤에 *를 붙히면 주소를 저장하는 포인터 변수이고, &를 붙히면 해당 변수의 주솟값

 

 

 

[1] C/C++ 데이터 타입

 

 

· 문자: (unsigned) char

· 정수: (unsigned) short, int (4Bytes), long/long long

· 실수: float(4), double, long double

∴ unsigned? 부호없는 정수형, 양수의 표현 범위를 2배로 증가

 

 

[2] Java 데이터 타입

 

 

· 문자: char

· 정수: byte(1), short, int(4), long

· 실수: float(4), double

· 논리: boolean(1)

 

 

[3] Python 데이터 타입

 

· 문자: str

· 정수: int(무제한)

· 실수: float(8), complex(복소수, 실수 + 허수)

· 변수를 상수로 만들어 사용하기: const

· 단정도형: float / 배정도형: long float

 

 

변수

 

 

종류 기억영역 예약어 생존기간 사용범위
자동 변수 메모리(스택) auto 일시적 지역적
레지스터 변수 레지스터 register
정적 변수(내부) 메모리(데이터) static 영구적
정적 변수(외부) 전역적
외부 변수 external

 

 

기억클래스

 

변수 선언 시 메모리 내에 변수의 값을 저장하기 위한 기억영역이 할당되는데, 할당되는 기억영역에 따라 사용 범위에 제한이 있다.

이러한 기억영역을 결정하는 작업을 기억 클래스(Storage Class)라고 한다.

 

· 자동 변수: 초기화하지 않으면 쓰레기 값(Garbage Value)가 저장

· 레지스터 변수: 레지스터가 없는 경우 자동 변수로 취급되어 메모리에 할당, 주소 연산자(&)를 사용할 수 없음

· 정적 변수: 초기화하지 않으면 자동으로 0으로 초기화

· 외부 변수: 초기화하지 않으면 자동으로 0으로 초기화

 

 

데이터 입출력

 

 

[1] scanf() 함수

 

키보드로 입력받아 변수에 저장하는 함수

scanf(서식 문자열, 변수의 주소) 

· 입력한 데이터 중 빈 칸(공백)이 있다면 빈 칸 앞까지만 저장한다.

 

 

[2] printf() 함수

 

인수로 주어진 값을 화면에 출력하는 함수

printf(서식 문자열, 변수)

· 출력할 값이 지정한 자릿수보다 큰 경우에는 자릿수를 무시하고 모두 출력

· 소수점 이하는 기본적으로 6자리로 출력

 

C언어: printf();

 

유형 포맷스트링 설명
문자형 %c 문자
%s 문자열
정수형 %d 10진수
%x 16진수
%o 8진수
실수형 %f
%[전체자리수].[소수점자리수]
실수출력

 

 

[3] 기타 표준 입/출력 함수

 

· 입력

getchar() 한 글자를 입력받아 변수에 저장

gets() 문자열을 입력받아 변수에 저장

 

· 출력

putchar() 인수로 주어진 한 문자 화면에 출력

puts() 인수를 주어진 문자열을 화면에 출력

 

 

연산자

 

 

[1] 산술 연산자: +, -, *, /, %, ++, --

 

· 전치 (++a, --a): 변수의 값을 증/감 시킨 후 변수를 연산에 사용

· 후치 (a++, a--): 변수를 연산에 사용한 후 변수의 값을 증감

 

 

[2] 관계 연산자 (>=, ==, !=)

 

 

[3] 비트 연산자

· & (and): 모든 비트가 1일때 1

· ^ (xor): 모든 비트가 같으면 0, 하나라도 다르면 1

·  | (or): 모든 비트 중 한 비트라도 1이면 1

·  ~, <<, >>

 

 

 

 

 

[4] 논리 연산자: !, &&, ||

 

[5] 대입 연산자: +=, -=, *=, /=, %=, <<=, >>=

 

[6] 조건 연산자: 조건 ? 수식1 : 수식2

 

num2 = num1 ? 100 : 200; 의 ?는 num1 변수 자체를 참인지 거짓인지 판단한다.

삼항 연산자는 if 조건문과 마찬가지로 0일 때 거짓, 0이 아닐 때는 참으로 동작한다.

 

 

 

 

 

언어특성 활용

 

절차적 언어

절차적 프로그래밍 언어

 

절차적(Procedural) 프로그래밍 언어는 프로시저 호출의 개념을 바탕으로 하고 있는 프로그래밍 언어이다.

명령형 프로그래밍 언어라고도 불린다.

알골(ALGOL), C언어, 포트란(FORTRAN)

 

 

절차적 프로그래밍 언어의 특징

 

· 유지보수 용이

· 같은 코드 재사용 가능

· 흐름 파악 용이

· 모듈화 하거나 구조화 가능

 

 

구분 설명
for 초깃값, 최종값, 증감 값을 지정하여 반복을 실행
scanf 값을 입력받는 함수
struct 구조체를 사용하여 데이터를 처리할 때 사용하는 키워드
abstract 자식 클래스에서 해당 추상 메소드를 반드시 구현하도록 강제하는 키워드

 

 

객체지향

객체지향 프로그래밍 언어

 

객체지향(Object Oriented) 프로그래밍 언어는 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위인 "객체" 중심의 프로그래밍 언어이다.

C++, C#, JAVA(자바), Delphi(델파이)

 

 

객체지향 프로그래밍 언어 기능

 

자료 추상화 / 상속 / 다중 상속 / 다형성 / 동적 바인딩 / 접근 제어자(Accesss Modifier)

 

 

허용범위 public protected default private
클래스 내부 O O O O
동일 패키지 O O O X
하위 패키지 O O X X
다른 패키지 O X X X

 

 

스크립트 언어

스크립트 언어

 

스크립트 언어는 소스 코드를 컴파일하지 않고도 실행할 수 있는 프로그래밍 언어이다.

PHP, Perl(펄), Python(파이썬), Javascript(자바스크립트), Bash(배시), Basic(베이직)

 

 

스크립트 언어 특징

 

빨리 배운다.

쉽게 작성할 수 있다.

 

 

선언형 언어

선언형 언어

 

선언형(Declarative) 언어는 선언형 프로그래밍을 사용하여 해법을 정의하기보다는 문제를 설명하는 단어이다.

 

 

선언형 언어 기능 (함순익고 논사규질)

 

선언형 언어 유형 기능
수형 언어 수 함수 (Pure Function)
명 함수 (Anonymous Function)
계 함수 (Higher Order Function)
리형 언어 실 (Facts)
칙 (Rule)
문 (Question)

 

 

선언형 언어 종류

 

구분 종류 설명
함수형 언어 하스켈 (Haskell) 하스켈은 패턴 맞춤, 커링, 조건제시법, 가드, 연산자 정의 등의 기능이 존재하는 함수형 언어이다.
리스프 (LISP) 리스프는 수학 표기법을 나타내기 위한 목적으로 생성하고, 트리 자료구조, 가비지 콜렉션, 동적 자료형과 인터프리터와 같은 개념을 제시한다.
논리형 언어 프롤로그 (Prolog) 프롤로그는 논리형 언어로 논리식을 기반으로 객체 간의 관계에 관한 문제를 해결하기 위해 사용된다.
함수형 언어로 함수 호출 시 이름 혹은 연산자가 첫번째로 위치하여 피연산자가 이어 위치하는 언어는 리스프(LISP)이다.
특수 분야 언어 SQL 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.

 

 

 

라이브러리

 

 

라이브러리

 

효율적 프로그램 개발을 위해 필요한 프로그램을 모아 놓은 집합체. 도움말, 설치파일, 샘플 코드 등을 제공한다.

 

1) 표준 라이브러리: 여러 종류의 모듈과 패키지를 가지며, 별도의 파일 설치없이 사용가능

2) 외부 라이브러리: 별도의 파일을 설치해야 한다. 누구나 개발하여 설치 가능하며 인터넷을 통해 공유 가능.

라이브러리는 모듈과 패키지를 총칭함

· 모듈: 전역변수, 함수 등을 모아둔 개별 파일

· 패키지: 모듈을 디렉터리 형식으로 구조화한 라이브러리

 

 

 


 

 

문제 1. 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.

 

 

#include <stdio.h>
main()
{
	int i = 10, j = 10, k = 30;
   	i /= j;
    j -= i;
    k %= j;
    printf("%d, %d, %d\n", i, j, k);
}

 

 

더보기

1, 9, 3

#include <stdio.h>
main()
{
	int i = 10, j = 10, k = 30;
   	i /= j; // i = i / j와 같다. 즉, i = 10 / 10으로 i에는 1이 저장된다.
    j -= i; // j = j - i와 같다. 즉 j = 10 - 1로 j에는 9가 저장된다.
    k %= j; // k = k % j와 같다. 즉 k = 30 % 9로 k에는 3이 저장된다.
    printf("%d, %d, %d\n", i, j, k);
}

 

 

문제 2. 다음 C언어로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.

 

 

#include <stdio.h>
main()
{
	int result, a = 100, b = 200, c = 300;
    result = a < b ? b++ : --c;
    printf("%d, %d, %d\n", result, b, c);
}

 

 

더보기

200, 201, 300

#include <stdio.h>
main()
{
	int result, a = 100, b = 200, c = 300;
    result = a < b ? b++ : --c; // b++는 후치 연산이고 --c는 전치 연산이므로 
    // a가 b보다 작으면 result에 b의 값 200을 저장한 후 b를 1 증가시키고(b++) 그렇지 않으면
    // c에서 1을 뺀(c--) 값 299를 저장한다.
    printf("%d, %d, %d\n", result, b, c);
}

 

 

문제 3. 다음은 변수 n에 저장된 10진수를 2진수로 변환하여 출력하는 Java 프로그램이다. 프로그램을 분석하여 괄호(⓵, ⓶)에 들어갈 알맞은 답을 쓰시오.

 

 

public class Test {
	public static void main (String[] args) {
    	int a[] = new int[8];
        int i = 0;
        int n = 10;
        while( ⓵ ) {
        	a[i++] = ( ⓶ );
            n /= 2;
        }
        for(i = 7; i >=0; i--)
        	System.out.print(a[i]);
        }
}

 

 

더보기

⓵ n > 0, ⓶ n % 2

public class Test {
	public static void main (String[] args) {
    	int a[] = new int[8];
        int i = 0;
        int n = 10;
        while( n > 0 ) { // n이 0보다 큰 동안 5~6번을 반복수행
        	a[i++] = n % 2; // i++ 후치 증가 연산자이므로, a[i]에 n을 2로 나눈 나머지를 저장한 후, i의 값을 1 증가시킨다.
            n /= 2; // 'n = n/2;'와 동일하다. n을 2로 나눈 값을 n에 저장한다. 
        }
        for(i = 7; i >=0; i--) // 반복 변수 i가 7에서 시작하여 1씩 감소하면서 0보다 크거나 같은 동안 반복 수행한다.
        	System.out.print(a[i]);
        }
}

 

 

문제 4. 다음 Java로 구현된 프로그램을 분석하여 그 실행 결과를 쓰시오.

 

 

public class Test {
	public static void main(String[] args){
    	int a = 0, sum = 0;
        while (0 < 10) {
        	a++;
            if (a % 2 == 1)
            	continue;
            sum += a;
        }
		System.out.println(sum);
	}
}

 

 

더보기

30

public class Test {
	public static void main(String[] args){
    	int a = 0, sum = 0;
        while (0 < 10) {
        	a++;
            if (a % 2 == 1) // a%2 즉 a를 2로 나눈 나머지가 1이면 다음을 수행
            	continue;
            sum += a; // 0 + 2 + 4 + 6 + 8 + 10
        }
		System.out.println(sum);
	}
}

 

 

 

반응형