본문 바로가기
교육관련/한화비전 VEDA 수강일지

[VEDA 1기 수강일지] 1일차 - C언어 기초 (1) : 변수, 입출력, 제어문

by 김수효 2024. 7. 15.

한화비전에서 주최하는 부트캠프 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기 학습 기록으로 작성되었습니다.

댓글