char ch;
short sh;
int in;
float ft;
double db;
scanf("%d%f", &in, &float);
다음 프로그램의 빈칸에 알맞은 내용을 채워보세요.
1) 망고
2) 3
키보드로 문자를 입력하여 아스키 코드 값을 출력하는 프로그램을 작성하세요. 어떤 문자가 입력될지는 실행할 때 결정합니다.
#include <stdio.h>
int main(void)
{
char ch;
printf("문자 입력 : ");
scanf("%c", &ch);
printf("%c문자의 아스키 코드 값은 %d입니다.", ch, ch);
return 0;
}
#include <stdio.h>
int main(void)
{
int res;
res = sizeof(short) > sizeof(long);
printf("%s\n", (res == 1) ? "short" : "long");
return 0;
}
#include <stdio.h>
int main(void)
{
int seats = 70;
int audience = 65;
double rate;
rate = (double)audience / (double)seats * 100.0;
printf("입장률: %.1lf\n", rate);
return 0;
}
#include <stdio.h>
int main(void)
{
int hour, min, sec;
double time = 3.76;
hour = (int)time;
time -= hour;
time *= 60.0;
min = (int)time;
time -= min;
time *= 60.0;
sec = (int)time;
printf("3.76시간은 %d시간 %d분 %d초입니다.\n", hour, min, sec);
return 0;
}
#include <stdio.h>
int main(void)
{
int kg;
double cm;
double m;
double bmi;
printf("몸무게(kg)와 키(cm) 입력: ");
scanf("%d%lf", &kg, &cm);
m = cm / 100.0;
bmi = (double)kg / (m * m);
if ((bmi >= 20.0) && (bmi < 25.0)) printf("표준입니다.\n");
else printf("체중관리가 필요합니다.\n");
return 0;
}
: 데이터의 종류에 맞는 자료형과 변수명을 나란히 입력한다.
int a;
double b;
char c;
a = 10;
b = 3.5;
c = 'A';
: 컴퓨터의 메모리 공간은 여러 프로그램이 사용하는, 즉 재활용되는 공간이다. 따라서 값을 입력하여 초기화하는 과정이 없다면, 이전의 프로그램에서 사용되었던 변수의 값 (현재 실행되고 있는 프로그램의 입장에서는 쓰레기 값, garbage value)으로 인하여 오류를 발생시킬 수 있다.
하나의 블록({ }) 내에서 선언되며, 해당 블록 내에서만 변수의 값이 인정된다.
변수의 자료형이 같으면 동시에, 둘 이상의 변수를 선언할 수 있다.
int a;
int b, c;
int a, b, c;
컴파일러에 따라 변수의 선언 위치가 제한될 수 있다.
: 현재 사용하는 VC++ 2019 버전 이상의 컴파일러는 실행되는 코드 중간에 변수를 선언해도 딱히 문제가 발생하지 않으나, C99 버전 이전 및 2012 VC++ 컴파일러의 경우 반드시 맨 앞에 변수를 선언해야 한다.
대입 연산자는 보통의 수식처럼 변수명의 오른쪽에 쓰이고, 대입 연산자의 오른쪽의 값을 변수에 저장한다.
변수명이 왼쪽에 쓰일 경우 (대입 연산자의 왼쪽) 저장 공간이 되며, 오른쪽에 쓰일 경우 (대입 연산자의 오른쪽) 값이 된다.
a = 10; // 이 때의 a는 저장 공간
c = a; // 이 때의 a는 값
n = 비트의 수
: - 2 ^ n ~ 2^n - 1
char ~ 1Byte ~ %c
short ~ 2Byte ~ %d
int ~ 4Byte ~ %d
long ~ 4Byte ~ %ld
: 간혹 가다 int형이 2바이트로 구현된 컴파일러가 존재하는데, 이 때 큰 값을 저장하기 위해 long 자료형을 사용하곤 한다.
long long ~ 8Byte ~ %lld
: 우리가 사용하는 컴파일러는 프로그램에서 사용하는 모든 문자를 0~127 사이의 정수 (아스키 코드 값)로 바꾸어 처리하고, 이러한 문자의 정수값을 가장 효율적으로 저장하는 자료형은 char 형이다.
unsigned int a;
unsigned double b;
unsigned char c;
- %d로 출력할 경우 음수로 출력될 경우가 존재한다.
: %d는 값의 이진수를 판단할 때 맨 앞의 '부호 비트'를 인식하기 때문이다.- 따라서 %u로 출력하는 편이 바람직하다.
: %u는 값의 이진수를 판단할 때 부호 비트를 인식하지 않는다.
float ~ 4byte ~ %f
: 유효 숫자 = 7
double ~ 8byte ~ %lf
: 유효 숫자 = 15
long double ~ 8byte ~ %lf
: 유효 숫자 = 15 이상
char 배열명[문자열 길이+1] = 문자열;
: 이 때 배열의 크기를 문자열의 길이보다 하나 더 크게 잡는 이유는, 문자열의 끝을 나타내는 널 문자(null character, \0)을 자동으로 추가하기 때문이다.
#include <stdio.h>
#include <string.h>
int main(void)
{
char fruit[20] = "banana";
printf("%s\n", fruit);
strcpy(fruit, "melon");
printf("%s\n", fruit);
return 0;
}
const 자료형 변수명 = 값;
예약어와 식별자
: 예약어(reserved word, key word)란 컴파일러와 사용 방법이 약속된 단어.
: 식별자(identifier)란 필요에 따라 만들어 사용하는 단어.
int, char 과 같은 자료형은 예약어
a, fruit, tax 등과 같은 변수명은 식별자
식별자를 사용하기 위한 규칙
- 알파벳 대소문자 A~Z, a~z / 숫자 0~9 / 밑줄 '_' (underline)로 만든다.
- 숫자로 시작할 수 없다.
- 대문자와 소문자는 다른 식별자로 인식한다.
- 예약어는 식별자로 사용할 수 없다.
scanf("값을 입력하고자 하는 변수 자료형의 변환문자", &변수명);
scanf("%d", &a); // int형 변수 a
scanf("%d%lf", &a, &b) // int형 변수 a와 실수형 변수 b 동시 입력
: 문자열의 경우, 배열명 앞에는 &를 붙이지 않는다.
: 스페이스나 엔터, 탭 등을 입력하기 바로 전까지만 입력하는 값으로 저장된다.
5 / 2; --> 2
5.0 / 2.0; --> 2.5
5 % 2; --> 1
++a; // = ( a = a + 1)
--a; // = ( a = a - 1)
: 다른 수식과 섞여 있을 때, 먼저 피연산자의 값을 1 증가시킨 후 계산된다.
: 후위 표기는 (a++)와 같이 증감 연산자가 피연산자 뒤에 놓이는 표현법
: 다른 수식과 섞여 있을 때, 1이 증가되기 이전의 피연산자 값으로 계산이 진행된 후 끝에 피연산자의 값을 1 증가시킨다.
관계 연산자
: 연산의 결과값은 1(참) 또는 0(거짓)이다.
- 대소 관계 연산자 : > , <, >=, <=
- 동등 관계 연산자 : == (같다), != (다르다)
논리 연산자
: 참과 거짓을 판단할 때 사용된다.
- && (and) : 두 개의 피연산자가 모두 참일 때만 참
- || (or) : 두 개의 피연산자 중 하나만 참일 때에도 참
- ! (not) : 피연산자를 하나 사용하며, 그 값의 참과 거짓을 뒤바꿀 때 사용
- &&의 경우 연산의 좌항이 거짓이라면 우항의 값과 상관없이 거짓 출력
- ||의 경우 연산의 좌항이 참이라면 우항의 값과 상관없이 참 출력
(자료형)피연산자
int a = 10;
double b = (double)a;
: 컴파일러는 컴파일 과정에서 피연산자의 자료형이 다르면 자동으로 형태를 일치시키는 자동 형 변환 과정을 진행한다.
: 자동 형 변환 과정이 진행될 경우, 일반적으로 크기가 작은 값이 다른 쪽의 크기가 큰 값으로 변환된다.
: 자동 형 변환을 통해 결과값의 자료형이 변하였더라도, 무조건 변수형의 크기에 맞게 저장되므로 예기치 못한 오류가 발생할 수 있다.
sizeof(int) --> 4
sizeof(a) --> 4
sizeof(10.0) --> 8
int a = 10;
a += 1;
콤마 연산자(,)
: 한 번에 여러 개의 수식을 차례로 나열할 때 사용한다.
조건 연산자
: 유일한 삼항 연산자이다.
: 첫 항에는 조건식을 입력하며, 해당 조건식이 참일 경우 두 번째 항의 값을, 거짓일 경우 세 번째 항의 값을 출력한다.
(조건식)?(값1):(값2);