1. C언어 문법(혼공C) - 변수와 데이터 입력
1) 변수(p52~p68)
(1) 변수 선언
데이터에 맞는 자료형과 변수명을 나란히 쓴다.
변수와 대입 연산자, 데이터를 쓴다.
int a; // int형 변수 선언
a = 10; // a 변수에 10 이라는 값을 대입함
사용하기
블록({}) 안에 변수를 선언할 수 있다.
변수 자료형이 같으면 동시에 둘 이상의 변수를 선언할 수 있다.#include <stdio.h>
int main(void)
{
int a; // 정수형 변수 a선언
int b, c; // 정수형 변수 b, c 동시에 선언
double da;// 실수형 변수 da 선언
char ch; // 문자형 변수 ch 선언
a = 10;
b = a;
c = a + 20;
da = 3.5;
ch = 'A';
printf("a : %d\n",a);
printf("b : %d\n",b);
printf("c : %d\n",c);
printf("da : %d\n",da);
printf("ch : %d\n",ch);
return 0;
}
(2) 정수 자료형(데이터형)
1바이트 = 8비트
char = 1바이트
int = 4바이트
long = 4바이트
char형 변수를 사용할 때 주의점
%c로 출력하게 되면 변수에 저장된 값을 아스키 코드 값으로 해석하여 그 문자를 출력함
%d로 출력하게 되면 정수로 출력한다.
#include <stdio.h>
int main(void)
{
char ch1 = 'A';
char ch2 = 65;
printf("%c의 아스키 코드 값 : %d\n", ch1, ch2);
//ch1을 %c(문자)로 출력, ch2를 %d(정수)로 출력
printf("아스키 코드 %d의 문자 : %c\n", ch2, ch2);
//ch2를 %d(문자)로 즉 아스키 코드의 값으로 출력, ch2를 %d(정수)로 출력
return 0;
}
(3) unsigned 정수 자료형
음수가 없는 데이터(양수만)를 저장할 때 사용하는 자료형
항상 양수만 저장하고, %u로 출력하기를 권장함
(4) 실수 자료형
float = 4바이트
double = 15바이트
#include <stdio.h>
int main(void)
{
float ft = 1.234567890123456789;
double db = 1.234567890123456789;
printf("float : %.20f\n",ft);
printf("dobule : %.20lf\n",db);
return 0;
}
결과는 float형과 double형의 출력값이 다르게 나온다.
이유는 실수형을 저장하는데 오차가 발생하는 문제점이 있기 때문이다.
따라서
정수형을 기본으로 사용, 실수형은 필요할 때만 사용
실수형은 double형을 기본으로 사용
(5) 문자열 자료형
기본 형태
char 배열명[문자열길이+1] = 문자열;
char fruit[6] = "apple";
여기서, 중요한 점은 문자열 길이보다 배열 크기를 +1 해야한다는 점인데,
이는 문자열 끝에 \0(널 문자)을 자동으로 추가하기 때문임.
새로운 문자열 저장
strcpy 함수를 사용해야 함.
strcpy 함수를 사용하려면 string.h 헤더 파일을 포함하여 작성해야 함.
#include <stdio.h>
#include <string.h> #추가됨
int main(void)
{
char fruit[20] = "strawberry";
printf("%s\n", fruit);
strcpy(fruit, "banana"); #fruit에 banana 복사
printf("%s\n", fruit);
return 0;
}
(6) const 사용한 변수
const를 사용한 변수는 그 변수의 값을 바꿀 수 없는 상태가 됨.
#include <stdio.h>
int main(void)
{
const double tax_rate = 0.12; // const를 이용한 실수형 변수 tax_rate에 0.12를 저장하고 초기화
tax_rate = 1.2 // 값을 바꿀 수 없으므로 당연히 컴파일 시 오류가 나옴.
}
C문법에 의하면 const를 사용해도 변수라고 하는데,
변수란 변하는 값을 저장하기 위해 사용되는 것인데
변하지 않게 만들어 버린다면 그게 변수가 될 수 있는 것인지..?
2) 데이터 입력
(1) scanf 함수
기본 사용법
scanf("%d",&a); // 자료형 변환 문자, &(앰퍼샌드)+변수명
#include <stdio.h>
int main(void)
{
int a;
scanf("%d", &a);
printf("입력된 값 : %d\n", a);
return 0;
}
※ &(앰퍼샌드)는 반드시 사용해야 함.
※ 자료형 변환 문자를 잘못 입력하게 되면?
> 예를 들어, %d를 지정하고 abc 문자열 입력을 하게 되면 정수로 변환할 수 없게되고, 실행 이전 변수에 있던 쓰레기 값을 계속 사용하게 됨
연속 입력 방법
#include <stdio.h>
int main(void)
{
int age;
double height;
printf("나이와 키를 입력하세요 : ");
scanf("%d%lf", &age, &height);
// 연속으로 입력받기
// "자료형자료형", &변수, &변수
printf("나이는 %d살, 키는 %.1lfcm입니다\n", age, height);
return 0;
}
(2) 문자와 문자열을 입력할 때의 scanf 함수
문자일 때는 위처럼 &를 붙이고
문자열일 때는 &를 붙이지 않음 !
#include <stdio.h>
int main(void)
{
char grade; //문자 변수 grade
char name[20]; //문자열 변수 name
printf("학점 입력 : ");
scanf("%c", &grade); //문자 변수에는 &를 쓴다.
printf("이름 입력 : ");
scanf("%s", name); //문자열 변수에는 &를 사용하지 않는다.
printf("%s의 학점은 %c입니다.\n", name, grade);
return 0;
}
1. C언어 문법(혼공C) - 연산자
1) 산술 연산자, 관계 연산자, 논리 연산자
(1) 산술 연산자
더하기(+), 빼기(-), 곱하기(*), 나누기(/), 나머지(%)
#include <stdio.h>
int main(void)
{
int a, b;
int sum, sub, mul, inv;
double c;
int d;
int e;
a = 10;
b = 20;
sum = a + b; // 더하기
sub = a - b; // 빼기
mul = a * b; // 곱하기
inv = -a; // 음수
c = 5.0 / 2.0; // 실수와 실수 나누기
d = 5 / 2; // 정수와 정수 나누기
e = 5 % 2; // 정수와 정수 나머지
printf("a의 값 : %d, b의 값 : %d\n",a,b);
printf("덧셈 : %d\n",sum);
printf("뺄셈 : %d\n",sub);
printf("곱셈 : %d\n",mul);
printf("a의 음수 : %d\n",inv);
printf("c : %.1lf\n", c);
printf("d : %d\n",d);
printf("e : %d\n",e);
return 0;
}
(2) 대입 연산자
(=)
a = 10; // 상수 10을 변수 a에 저장(대입)
sum = a + b; // a + b 라는 연산의 결과를 변수 sum에 저장(대입)
(3) 관계 연산자
같다(==) 같지않다(!=)
#include <stdio.h>
int main(void)
{
int a = 10, b = 20, c = 10;
int res;
res = (a == b); // a == b는 거짓이므로 결과는 0
printf(" a == b : %d\n", res);
res = (a != c); // a != c는 거짓이므로 결과는 0
printf("a != c : %d\n", res);
return 0;
}
(4) 논리 연산자
AND(&&) OR(||) NOT(!)
#include <stdio.h>
int main(void)
{
int a = 30;
int res;
res = (a > 10) && (a < 20); // 좌항은 맞지만 우항이 틀리므로 0
printf("(a > 10) && (a < 20) : %d\n", res);
res = (a < 10) || (a > 20); // 좌항은 틀리지만 우항이 맞으므로 1
printf("(a < 10) || (a > 20) : %d\n", res);
res = ! (a >= 30); // 항의 내용이 참이므로 거짓으로 출력, 0
printf("! (a >= 30) : %d\n", res);
return 0;
}
※ 주의할 점1
(10 < a) && (a < 20)
은 마치
10 < a < 20
처럼 사용이 가능할 것 같지만
위의 코드를 해석해보면
10 < a 에서는 참으로 1이 대입됨
a < 20 에서는 거짓으로 0이 대입됨
따라서 1 && 0 은 거짓이 되고 결과는 0이 됨
하지만
아래 코드를 해석해보면
10 < a 는 참이므로 1이 대입됨
1 < 20은 참이므로 결과는 1이 됨
따라서 매우 다른 결과를 도출하므로 주의해야 한다.
※ 주의할 점 2(숏 서킷 룰)
불필요한 연산을 줄이기 위해 좌항만을 검사해서 참과 거짓의 결과를 판별하는 기능
예를 들어
AND(&&) 연산자는 좌항이 거짓이면 우항의 결과와 관계없이 항상 거짓
OR(||) 연산자는 좌항이 참이면 우항의 결과와 관계없이 항상 참
2) 그 외의 연산자
(1) 형 변환 연산자
int a = 10; // 정수형인 a 변수
(double)a // a는 일시적으로 실수형으로 바뀜
double b = 10.9; // 실수형인 b 변수
(int)b // b는 일시적으로 정수형으로 바뀜, 출력값 : 10
(2) sizeof 연산자
피연산자의 크기를 알려줌
int a = 10;
double b = 10.9;
print("a 변수의 크기 : %d\n", sizeof(a)); // 4
print("b 변수의 크기 : %d\n", sizeof(b)); // 8
(3) 조건 연산자
(a > b) ? a : b; //(a > b)가 참이면 a, 거짓이면 b
# include <stdio.h>
main(void)
{
int a = 10, b = 20, res;
res = (a>b) ? a : b; // a>b가 참이면 a를, 거짓이면 b를 res에 저장한다.
printf("큰 값 : %d\n",res);
return 0;
}
'LMS 7 > 개발일지' 카테고리의 다른 글
| 25.06.13 학습개발일지 / C언어 (0) | 2025.07.22 |
|---|---|
| 25.06.12 학습개발일지 (1) | 2025.06.12 |
| 25.06.09 개발일지 / C언어 (0) | 2025.06.09 |
| 25.06.08 개발일지 / C언어 예습하기 (0) | 2025.06.09 |
| 25.06.07 개발일지 / 4팀 PC방 키오스크 개발일지 마무리 (0) | 2025.06.09 |