Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 2024 정보처리기사 수제비 실기
- 자바의 정석 기초편 ch13
- 게시글 목록 api
- @Aspect
- jpa - 객체지향 쿼리 언어
- 2024 정보처리기사 시나공 필기
- 스프링 mvc2 - 로그인 처리
- 자바의 정석 기초편 ch6
- 스프링 입문(무료)
- 스프링 mvc1 - 스프링 mvc
- 자바의 정석 기초편 ch7
- 스프링 mvc1 - 서블릿
- 자바의 정석 기초편 ch5
- 코드로 시작하는 자바 첫걸음
- 스프링 mvc2 - 타임리프
- 자바의 정석 기초편 ch14
- 자바의 정석 기초편 ch1
- 스프링 db2 - 데이터 접근 기술
- 자바의 정석 기초편 ch8
- 자바의 정석 기초편 ch2
- 자바의 정석 기초편 ch4
- 스프링 mvc2 - 검증
- 스프링 고급 - 스프링 aop
- 자바의 정석 기초편 ch11
- 자바의 정석 기초편 ch3
- 타임리프 - 기본기능
- jpa 활용2 - api 개발 고급
- 자바의 정석 기초편 ch12
- 스프링 db1 - 스프링과 문제 해결
- 자바의 정석 기초편 ch9
Archives
- Today
- Total
나구리의 개발공부기록
Chapter 02 - C언어(변수, 표준 입출력 함수) 본문
2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비)/실기 6강 - 프로그래밍 언어 활용
Chapter 02 - C언어(변수, 표준 입출력 함수)
소소한나구리 2024. 5. 19. 21:472024년도 수제비 실기책(6판) 내용 정리
4. 변수
1) 변수(Variable)의 개념
- 저장하고자 하는 어떠한 값이 있을 때, 그 값을 주기억장치에 기억하기 위한 공간
- 자료형과 변수명을 작성하여 변수를 생성하는 과정
2) 변수 선언(Variable Declaration)
- 변수나 함수가 있음을 알려주는 행위
- 변수가 어떤 자료형을 사용할지 알려주기 위해 사용함
- 초기화 하지 않는 경우 : 자료형 변수명;
- 초기화 하는 경우 : 자료형 변수명= 초깃값;
- 초기화(Initialization) : 변수를 선언함과 동시에 변수에 값을 지정해 주는 과정
#include <stdio.h> // stdio.h 헤더 파일을 읽어옴
int main(){
char a; // char(문자)형 변수 a 선언
int b = 4; // int(정수)형 변수 b를 선언하고 b를 4로 초기화
float c, d; // float(실수)형 변수 c, d를 선언
double e=1.1, f=2.4; // double(실수)형 변수 e,f를 선언하고 e를 1.1로, f를 2.4fh 초기화
return 0;
}
3) 변수 유효 범위(Variable Scope)
(1) 전역 변수 (Global Variable)
- 어떤 블록{ } 에도 속하지 않는 변수이며 아무 곳에서나 사용할 수 있음
- 프로그램이 시작되면 변수가 생성되고, 프로그램이 종료되면 변수가 소멸됨
- 초기화 하지 않으면 정수형은 0, 실수형은 0.0, 문자형은 null(아스키코드0 == null)로 초기화됨
#include <stdio.h>
int a = 5; // a라는 정수형 전역 변수에 5를 대입(Assignment)
void fn(){ // 반환값이 없는 fn 함수
a = a + 3; // fn함수가 호출되면 실행될 코드
}
int main(){ // 프로그램이 실행되는 main함수
a = a + 5; // a에 5를 더해서 a에 저장, a에는 10이 저장됨
fn(); // fn 함수 호출 -> a(10) + 3 을 a에 저장, a에는 13이 저장됨
printf("%d", a); // a를 출력 -> 13이 출력됨
return 0; // 프로그램 종료
}
(2) 지역 변수 (Local Variable)
- 블록{ } 내에서 선언하는 변수이며 해당 블록 안에서만 사용할 수 있음
- 블록이 시작되는 부분에 바로 선언해주어야 하고, 중괄호가 닫히는 시점에 소멸됨
#include <stdio.h>
int main(){
int a = 3, b = 4; // int타입 전역변수 a에 3을 b에 4를 초기화하고 선언
{ // main함수 블록 안에서 또다른 블록 시작
int a = 5; // int타입 지역변수 a에 5를 선언
printf("%d %d\n", a, b); // 지역변수 a와 전역변수 b의 값을 출력 -> 5, 4
} // 내부 블록 종료
printf("%d %d\n", a, b); // 전역변수 a와 b의 값을 출력 -> 3, 4
return 0;
}
(3) static 변수 (Static Variable)
- 블록 내외부 상관없이 선언할 수 있는 변수
- 변수 선언할 때 static이라는 키워드를 붙여줌
- 블록 내외부 상관없이 프로그램이 시작되면 변수가 생성되고, 프로그램이 종료되면 변수가 소멸됨
- 전역 변수로 선언할 경우 프로그램 전체에서 사용할 수 있고 블록 내에 선언할 경우 블록 내에서만 사용할 수 있음
#include <stdio.h>
void fn(){ // fn함수 정의 시작
static int a = 3; // static int타입 변수 a에 3을 초기화,
// static 변수는 함수 안에 선언되어있어도 함수의 호출과 상관없이 선언 및 초기화가 먼저 됨
a = a + 1; // 스태틱 변수 a에 1더해서 a에 저장
printf("%d\n", a); // a의 값을 10진 정수형식으로 출력
}
int main(){
// 프로그램 실행 시 static 변수 a는 초기화가 되었으므로 함수가 호출 되어도 다시 초기화가 되지 않고
// 값이 계속해서 누적해서 쌓이게 됨
fn(); // fn함수 호출 -> a는 4가 되고 4가 출력됨
fn(); // fn함수 호출 -> a는 누적연산되여 5가 되고 5가 출력됨
return 0;
}
5. 표준 입출력 함수
1) printf 함수
- 지정된 포맷 스트링으로 데이터를 출력하는 함수
- printf를 사용하기 위해서는 stdio.h 헤더를 선언해야 함
(1) 단순 출력
- printf(문자열);
- printf 함수 안에 큰따옴표로 묶여 있는 문자열을 출력
#include <stdio.h>
int main(){
printf("Hello C World"); // 문자열 Hello C World 출력
return 0;
}
// 출력 Hello C World
(2) 이스케이프 문자를 이용한 출력
- 이스케이프 문자는 문자열 내에서 특수한 기능을 수행하는 문자
- 이스케이프 문자를 printf 함수의 큰다옴표 안에 넣어서 입력
종류 | 의미 | 설명 |
\n | New Line | 커서를 다음 줄 앞으로 이동 (개행) |
\t | Tab | 커서를 일정 간격만큼 수평 이동 |
#include <stdio.h>
int main(){
printf("Hello\tC\nWorld");
/*
C언어 에서는 printf("A
"); 와 같이 코드를 작성하면 에러가 발생함, 한줄에서 코드가 끝나야됨
만약 개행을 하고 싶다면 printf("A\n 이렇게 개행문자를 작성해야 에러가 발생하지 않음
*/
return 0;
}
// 출력 Hello C(탭 공간만큼 간격을 띄우고 C가 출력됨)
// World
(3) 포맷 스트링을 이용한 변수 출력
- 일반적으로 scanf를 통해 사용자로부터 입력을 받아들이거나 printf를 통해 결과를 출력하기 위하여 사용하는 형식
- 인자에는 변수명, 값, 수식이 올 수 있음
- printf(포맷_스트링이_포함된_문자열, 인자, ...);
유형 | 설명 | 의미 | 설명 |
문자 (Character) |
%c | Character | 문자 1글자에 대한 형식 |
문자열 (String) |
%s | String | 문자가 여러 개인 문자열에 대한 형식 |
정수 (Integer) |
%u | Usigned Decimal | 부호 없는 10진수 정수 |
%d | Decimal | 10진수 정수 | |
%o | Octal | 8진수 정수 | |
%x %X |
Hexa Decimal | 16진수 정수, %x일 경우 영어로 표기되는 부분이 소문자로, %X일 경우 대문자로 표시됨 |
|
부동 소수점 (Floating Point) |
%e %E |
Exponent | 지수 표기 %e는 지수 표현을 e로하고 %E는 E로 함 |
%f | Floating Point | 부동 소수점 표기 | |
%lf | Long Floating Point |
#include <stdio.h>
int main(){
int a = 4, c = 5;
char b = 'A';
// a를 10진 정수형태로 b를 문자형태로 출력, 작성된 포맷 스트링의 순서에 맞게 변수가 출력 됨
printf("a는 %d, b는 %c 입니다.", a, b);
printf("%d", a + c); // a + c 가 연산된 값이 %d(10진수 정수) 형태로 출력됨
return 0;
}
// 출력 a는 4, b는 A입니다.9
(4) 포맷 스트링을 이용한 변수 상세 출력
- 포맷 스트링을 이용하면 정렬, 0 채우기, 출력할 공간 확보, 소수점 자릿수 표기를 지정할 수 있음
- %[-][0][전체자리수].[소수점자리수]스트링
포맷 스트링 | 설명 |
[-] | [-]를 붙히면 왼쪽 정렬, [-]를 붙히지 않고 [전체자리수]가 정해져 있을 경우 오른쪽 정렬 |
[0] | [0]을 붙이면 전체 자릿수에서 앞에 빈공간 만큼 0으로 채움 |
[전체자리수] | [전체자리수]만큼 공간이 확보되며 소수점.도 한 자릿수로 포함됨 |
.[소수점자리수] | [소수점자리수]만큼 소수점이 출력됨, 실수형일 때만 적용 |
#include <stdio.h>
int main(){
float a = 1.234;
int b = 10;
printf("%.2f\n", a); // 소수점 줄째 자리까지 출력(반올림 적용) 1.23 출력 후 개행
// 소수점을 포함하여 전체 자리수를 5칸으로 설정하고 소수점 첫째 자리까지 출력(반올림 적용)
// 앞에 공백을 2번찍고 1.2를 출력 후 개행 -> ' '1.2(공백2번)
printf("%5.1f\n", a);
// 소수점을 포함하여 전체 자리수를 설정하고 소수점 첫째 짜리까지 출력(반올림 적용)
// 001.2 처럼 공백 대신에 0으로 채우로 출력 후 개행
printf("%05.1f\n", a);
// 위와 동일하지만 -가 붙어있어서 0을 무시하고 왼쪽으로 정렬되어서 1.2가 출력되고 개행
printf("-%05.1f\n", a);
print("%5d\n", b); // 전체자리를 5자리로 하고 빈공간은 공백으로 출력 후 개행, ' '10(공백3번)
print("%05d\n", b); // 공백 대신 0으로 빈공간을 메우고 출력 후 개행, 00010
print("%-5d\n", b); // - 가 붙었으므로 빈 공간을 무시하고 왼쪽 정렬 출력 후 개행, 10
print("%-05d\n", b); // 위와 동일하게 출력됨(왼쪽 정렬이므로 0이 무시됨), 10
return 0;
}
2) scanf 함수
- 키보드로 입력받은 문자열에서 지정된 포맷 스트링으로 데이터를 읽는 함수
- 포맷 스트링은 printf의 포맷 스트링과 동일함
- scanf(포맷_스트링이_포함된_문자열, 변수의_주솟값, ...);
#include <stdio.h>
int main(){
int a;
char b;
scanf("%d %c", &a, &b); // 만약 입력을 1B 이렇게 입력했다면,
// 입력받은 첫 번째 값인 1은 10진 정수 형으로 변한되어 a에 저장
// 두 번째 값인 B는 문자 형태로 b에 저장됨
printf("a는 %d, b는 %c입니다.", a, b); // 출력도 1B 이렇게 됨
return 0;
}
// 입력 1B
// 출력 a는 1, b는 B입니다.
3) gets 함수
- 매우 위험한 함수로 입력된 문자열이 배열의 크기를 초과하면 오버플로우를 발생함 'fgets' 함수가 대신 사용됨
- 키보드로 입력받은 문자열을 문자형 배열에 저장하는 함수
- gets(문자형_배열_변수);
- gets 함수는 C11 이전 버전에서는 계속 사용할 수 있으나 C11 버전 부터는 완전히 제거되어서 사용할 수 없고 오버플로우가 방지된 fgets함수를 사용할 수 있음
#include <stdio.h>
int main(){
char a[10]; // 길이가 10인 문자형 배열 변수 a을 선언
gets(a); // 문자열을 입력받아서 a에 저장
printf("%s", a);
return 0;
}
'2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비) > 실기 6강 - 프로그래밍 언어 활용' 카테고리의 다른 글
Chapter 02 - C언어(함수) (0) | 2024.05.24 |
---|---|
Chapter 02 - C언어(배열, 문자열, 구조체) (0) | 2024.05.21 |
Chapter 02 - C언어(조건문, 반복문) (0) | 2024.05.21 |
Chapter 02 - C언어(연산자) (0) | 2024.05.20 |
Chapter 01 - 프로그래밍을 위한 기본 사항(진수) , Chapter 02 - C언어(C언어 기본, 자료형, 식별자) (0) | 2024.05.18 |