목차
변수 |
데이터 입력 |
A. 변수
변수선언은 메모리에 저장 공간을 확보하는 것. 정수: int 실수: double 문자: char 문자열: char
____1. 선언방법
자료형 변수명; //초기에 가비지 값이 들어있음.
변수명 = 값 //초기화
- 선언 대입 규칙
- 중괄호 블록 안에 선언. 선언 후 블록 끝까지 사용 가능
- 자료형 같으면 동시 선언 가능
- 대입 연산자는 연산자 왼쪽 변수에 오른쪽 값 저장
- 변수는 대입연산자 왼쪽에서 저장소(메모리주소의 별칭) 오른쪽에서는 밸류
____2. 타입
정수형 실수형
정수형 | byte | 범위: -2^(비트수-1) ~ 2^(비트수-1)-1 | ||||||||
char | 1 | ■ | ASCII값 %c: 문자출력 %d: 정수출력 | |||||||
short | 2 | ■ | ■ | 연산과정에서 int변환 | ||||||
int | 4 | ■ | ■ | ■ | ■ | 가장 빠르고 일반적 | ||||
long | 4 | ■ | ■ | ■ | ■ | 큰 값 저장 | ||||
long long | 8 | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | 메모리 낭비가 큼 |
*컴파일러에 따라 각 자료형 크기가 다를 수 있으나 다음 규칙은 유지
char ≤ short ≤ int ≤ long ≤ long long
컴파일러가 구현한 자료형 크기 확인하기
print("%d", sizeof(long long));
- unsigned int: 양수 전용 출력시 %u 사용해야 바른 값 출력
#include <stdio.h>
int main(void)
{
for (int i = -10 ; i <= 10; i++) {
printf("%d, ", i);
printf("%u\n", i);
}
return 0;
}
-10, 4294967286
-9, 4294967287
-8, 4294967288
-7, 4294967289
-6, 4294967290
-5, 4294967291
-4, 4294967292
-3, 4294967293
-2, 4294967294
-1, 4294967295 // 11111111 11111111 11111111 11111111
0, 0
1, 1
2, 2
3, 3
4, 4
5, 5
6, 6
7, 7
8, 8
9, 9
10, 10
실수형 | byte | 범위: -2^(비트수-1) ~ 2^(비트수-1)-1 |
유효숫자 | ||||||||
float | 4 | ■ | 7 | ||||||||
double | 8 | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | 15 | |
long double | 8 이상 | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ | ■ ■ ■ ■ ■ ■ ■ ■ | 15이상 |
- 정수형을 기본으로 사용하고 꼭 필요한 경우에만 실수형 사용
- 실수형은 double 형을 기본으로 사용
- long double은 gcc에서는 16바이트 vc++컴파일러에서는 8바이트(코드 호환성 보장안됨.)
- float 사용할 때는 1.23f(또는 1.23F)처럼 4바이트 크기 상수로 저장할 값 지정
- 문자열: char 배열로 저장. 문자열의 길이보다 1 이상 길어야 함(컴파일러가 문자열 끝에 \0 Null추가함). %s
char fruit[6] = "apple";
*초기화 이외에 문자열을 저장항 때는 strcpy함수 사용 <string.h>, #define _CRT_SECURE_NOWARNINGS
- const: 선언과 동시에 초기화(안하면 가비지값 고정)
____3. 예약어 식별자
- 예약어: 컴파일러 예약된 단어
- 식별자: 사용자 지정-
규칙: 대소문자(*서로 구분됨) 숫자(*첫 글자는 안됨.) 언더라인. 예약어 사용 불가능
출처: https://hijjang2.tistory.com/m/359
[C] C언어 변수,예약어 종류
-예약어- *예약어 = 정해진 기능을 수행하도록 이미 용도가 정해져 있는 단어 -정의- *단정도 / 배정도 -> float자료형은 '단정도형', double, long double 자료형은 '배정도형'이다 -틀린거 고친거-
hijjang2.tistory.com
연습문제
#include <stdio.h>
int main(void)
{
int kor, eng, math, total; // 세과목과 총점 저장할 변수 선언
kor = 70; //국어 점수 초기화
eng = 80; //영어 점수 초기화
math = 90; //수학 점수 초기화
total = kor + eng + math; // 총점 계산
printf( "국어 : %d, 영어 : %d, 수학 : %d\n", kor, eng, math);
printf( "총점 : %d\n", total);
return 0;
국어 : 70, 영어 : 80, 수학 : 90
총점 : 240
B. 데이터 입력
본문내용 삽입
____1. scanf
- 사용법
scanf("%d", &a);
scanf("%d%lf",&a,&b); //빈 칸(혹은 탭, 엔터)으로 구분해 입력받음
- 메모리에 직접 엑세스하기 때문에 보안 문제 #define _CRT_SECURE_NOWARNINGS 첫줄 추가하고 컴파일해야 함.
- &: 변수명의 주소를 구하는 연산자. 스캔에프는 메모리~주소에 ~형식으로 써 라는 함수
- 입력 형식이 맞지 않으면 함수가 실행 중단, 메모리의 이전 값이 계속 사용.
____2. 문자와 문자열 입력
- 문자열: char형 변수에 문자를 입력할 때는 공백 개행 모두 하나의 문자로 전달됨. 문자열 중간에 스페이스 엔터 탭을 만나면 바로 전까지만 저장됨. 문자열 저장할 때는 &안씀(배열)
#include <stdio.h>
int main(void)
{
char grade;
char name[20];
printf("학점 입력:");
scanf("%c", &grade);
printf("이름 입력:");
scanf("%s", name);
printf("%s의 학점은 %c입니다.\n", name, grade);
return 0;
}
*정상입력 시
학점 입력:A
이름 입력:홍길동
홍길동의 학점은 A입니다.
____3. 비정상 종료
\사용시 한 번의 입력으로 다음 입력까지 되어버림
학점 입력:\0
이름 입력:0의 학점은 \입니다.
학점 입력:\\
이름 입력:\의 학점은 \입니다.
이름 길이 초과시(학점은 엔터키) 에러
학점 입력:
이름 입력:11111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111의 학점은
입니다.
한글은 한 자당 2바이트, 9자까지 입력 가능. scanf_s는 잘라먹음. 메모리 침범 문제를 일으키는 함수는 gets도 있음.
%d로 받아서 char 주소에 입력하면 1바이트 메모리에 4바이트를 쓰면서 메모리 침범.
short 형은 %hd로 받아야 함.
연습문제
#include <stdio.h>
int main(void)
{
char ch;
printf("문자 입력:");
scanf("%c", &ch);
printf("%c문자의 ASCII코드 값은 %d입니다.\n", ch, ch);
return 0;
}
문자 입력:A
A문자의 ASCII코드 값은 65입니다.