한화비전에서 주최하는 부트캠프 VEDA에 참여하게 되었다.
그날 배운 내용 중 기억해야하는 부분과 기타 특이사항 등을 기록하려고 한다.
수강한 개념
변수
- 변수는 동적 바인딩
- 'a' = a라는 문자 하나
- "a" = a\0라는 문자열 (문자열에는 종료를 뜻하는 널문자 \0이 있다. - > 배열의 크기 = 문자열 길이 + 1)
자료형
- 자료형의 크기는 아키텍쳐에 따라서 차이가 있을 수 있다. -> 장비를 새로 가져오면 확인해야함.
- unsigned -> sign은 부호를 뜻함. unsigned는 양수와 0만 표현 가능
데이터 입출력
- printf에 배열명을 넣으면 배열의 시작주소를 의미함
- 변수명을 넣으면 변수의 값을 뜻함
- C언어에서는 타 언어와 달리 배열 이름으로만 비교가 안됨 (ex. 배열 a가 있을때 a=="apple" 이게 안됨)
- 좀 더 알아 볼 것 : strcpy, enum, void 포인터, volatile(임베디드에서는 중요하다고 함)
- VS에서 scanf 오류 뜰 때 : #define _CRT_SECURE_NO_WARNINGS 맨 앞에 넣기
- 실수 입력 받은 후 문자 입력 받을 때 : scanf("%f", &f); getchar(); scanf("%c", &c);
연산자
- C는 0 아니면 다 참이다.
- 비트 연산자, 연산자 우선순위에 대해 더 알아보기
- 형변환
#include <stdio.h>
int main()
{
//형변환
int num = 10;
float fnum = (float) num / 3;
printf("%d\n", num / 3);
printf("%f\n", fnum);
//배열의 크기 구하기 = 배열의 메모리 사이즈 / 첫번째 인덱스 사이즈
short str[10];
printf("%d\n", sizeof(str)/sizeof(str[0]));
return 0;
}
조건문 (if / switch - case)
반복문 (while / for / do-while)
- while과 다르게 do-while은 반드시 한번은 작동함
문제 구현 / 개선방안
1. 조건문 - 어떤 정수를 입력받아 홀짝 판별하기
int main()
{
//어떤 정수를 입력받아 홀짝 판별
int num;
scanf("%d", &num);
//2로 나누어 떨어지면 짝수
if(num%2 == 0)
{
printf("%d는 짝수입니다.", num);
}
else printf("%d는 홀수입니다.", num);
return 0;
}
2. 조건문 - 나이에 따라 다른 티켓 값 출력
int main(){
int age;
printf("나이를 입력하세요 : ");
scanf("%d", &age);
if (age > 64 || age < 7) { printf("무료"); }
else if (age > 55) { printf("7000원 입니다."); }
else if (age > 23) { printf("13000원 입니다."); }
else if (age > 16) { printf("10000원 입니다."); }
else { printf("5000원 입니다."); }
// 조건을 하나씩 줄여나가는 방식으로 진행
// 기존에는 나이 범위를 &&를 사용하여 구현했으나 번거롭고 수정도 어려워진다
}
- 이진 탐색도 괜찮은지 확인해 볼 것
3. 조건문 - 서로 다른 세 개의 정수를 입력받아 최대값과 최소값 구하기
int main(){
int a, b, c;
int max, min;
scanf("%d %d %d", &a, &b, &c);
if (a < b) { max = b; min = a; } //max와 min을 사용하여 두개씩 비교
else {max = a; min = b;}
if (c > max) { max = c; }
else if (c < min) { min = c; }
printf("min = %d max = %d", min, max);
}
다른 시도 (배열과 반복문 사용 - 아직 해결 못함)
int main(){
int arr[3];
int minNum, maxNum;
scanf("%d %d %d", arr);
minNum = arr[0];
maxNum = arr[0];
for (int i = 1; i < 3; i++) {
if (arr[i] > maxNum) maxNum = arr[i];
if (arr[i] < minNum) minNum = arr[i];
}
printf("min = %d max = %d", minNum, maxNum);
return 0;
}
4. 반복문 - (switch-case) 성적처리
#include <stdio.h>
int main() {
// 수학 A-F까지 성적처리
int mScore;
char grade;
printf("점수를 입력하세요 : ");
scanf("%d", &mScore);
switch (mScore / 10) { //10으로 나누어 case 맞춤
case 10:
case 9:
grade = 'A';
break;
case 8:
grade = 'B';
break;
case 7:
grade = 'C';
break;
case 6:
grade = 'D';
break;
default :
grade = 'F';
break;
}
printf("%c\n", grade);
return 0;
}
5. 반복문 - q를 누르면 종료되는 프로그램
int main() {
char c;
scanf("%c", &c); // (scanf가 없을 때)초기화 하지 않은 변수 while에 넣지 않기
while (c != 'q') {
printf("%c\n", c);
//q를 프린트 하지 않기 위해 printf와 scanf 위치변경
//초기화한 변수가 보이지 않도록 while전에 scanf 한번 더
scanf("%c", &c);
}//q입력시 반복 종료
}
6. 반복문 - (for) 1-1000 사이 3의 배수 개수와 합
int main(){
int count = 0;
int sum = 0;
for (int i = 1; i <= 1000; i++) {
if ((i % 3) == 0) {
count++; //3으로 나눈 나머지가 0이면 수를 세고
sum += i;//더한다
}
}
printf("count = %d, sum = %d\n", count, sum);
}
7. 반복문 - 추 2g 10개, 3g 10개, 5g 10개로 81g 만들어지는 경우의 수
int main() {
//2x + 3y + 5z = 81
//2g짜리와 3g짜리만으로는 81g을 만들 수 없다
int count = 0;
for (int i = 0; i <= 10; i++) {
for (int j = 0; j <= 10; j++) {
for (int k = 0; k <= 10; k++) {
if ((2 * i + 3 * j + 5 * k) == 81) {
count++;
printf("2g = %d, 3g = %d, 5g = %d\n", i, j, k);
break;
}
}
}
}
printf("경우의 수 : %d\n", count);
}
8. 반복문 - 소수확인 프로그램
int main(){
//소수인지 아닌지 확인하는 프로그램
int num;
scanf("%d", &num);
for (int i = 2; i < num; i++) {
if ((num % i) == 0) {
printf("X");
break;
}
}
if(i==num) printf("O");
}
9. 반복문 - (do - while)메뉴 선택
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
//do-while 입력/출력/검색 메뉴 프로그램
int menuNo;
do {
printf("1. 입력\n");
printf("2. 출력\n");
printf("3. 검색\n");
printf("9. 종료\n");
printf("선택 --->");
scanf("%d", &menuNo);
switch (menuNo) {
case 1:
printf("입력을 선택하였습니다.\n");
break;
case 2:
printf("출력을 선택하였습니다.\n");
break;
case 3:
printf("검색을 선택하였습니다.\n");
break;
case 9:
printf("종료를 선택하였습니다.\n");
break;
default:
printf("잘못 선택하였습니다.\n");
}
} while (menuNo != 9);
}
기타 사항
VEDA 바로가기 : www.vedacademy.co.kr
VEDA(한화비전 아카데미) 영상으로 확인하기 : https://url.kr/zy9afd
본 후기는 VEDA(한화비전 아카데미) 1기 학습 기록으로 작성되었습니다.
'교육관련 > 한화비전 VEDA 수강일지' 카테고리의 다른 글
[VEDA 1기 수강일지] 6일차 - C언어 (임베디드/리눅스) (1) (0) | 2024.07.22 |
---|---|
[VEDA 1기 수강일지] 5일차 - C언어 기초 (5) : 파일입출력, 전처리, 비트연산, volatile (0) | 2024.07.19 |
[VEDA 1기 수강일지] 4일차 - C언어 기초 (4) : 구조체 포인터, 연결 리스트 (0) | 2024.07.18 |
[VEDA 1기 수강일지] 3일차 - C언어 기초 (3) : 포인터 응용, 동적 할당, 구조체 (0) | 2024.07.17 |
[VEDA 1기 수강일지] 2일차 - C언어 기초 (2) : 함수, 배열, 포인터 (0) | 2024.07.16 |
댓글