분류 전체보기
[CodeUp] 1085 : [기초-종합] 소리 파일 저장용량 계산하기
문제 : https://codeup.kr/problem.php?id=1085 #include int main() { float a, b, c, d, e; scanf_s("%f %f %f %f", &a, &b, &c, &d); e = a * b * c * d / 8 / 1024 / 1024; printf("%.1f MB", e); return 0; } e = 소리 파일을 저장하기 위해 필요한 저장 공간 (a, b, c, d) 4가지 요소를 모두 곱셈 = (e) 저장 공간 입력받은 요소들의 값은 전부 다 bit 단위로 입력받은 것이기 때문에 문제에서 제시하는 MB 단위로 치환한 값을 출력 bit 단위로 이루어진 a*b*c*d 의 값을 MB로 치환하기 위해 e = a * b * c * d / 8 / 1024 ..
[CodeUp] 1080 : [기초-종합] 언제까지 더해야 할까?
문제 : https://codeup.kr/problem.php?id=1080 #include int main(void) { int num, sum, i; sum = 0; i = 0; scanf_s("%d", &num); while (1)// 계속 더해야 하므로 무한루프 while { i++; sum += i; if (sum >= num) { break; }// sum >= num : sum이 num보다 많아지면 반복문 탈출 } printf("%d", i);// 문제에서 원하는 "어디까지 더해야" = i return 0; }
[CodeUp] 1079 : [기초-종합] 원하는 문자가 입력될 때까지 반복 출력하기
문제 : https://codeup.kr/problem.php?id=1079 #include int main(void) { char a; do { scanf_s("%c ", &a); printf("%c\n", a); } while (a != 'q'); return 0; }
[CodeUp] 1078 : [기초-종합] 짝수 합 구하기
문제 : https://codeup.kr/problem.php?id=1078 #include int main(void) { int num, sum; scanf("%d", &num); sum = 0; // 더할 값을 넣을 빈 변수 sum을 만들지 않았음 for (int i = 1; i
[C] E0144 "const char *" 형식의 값을 사용하여 "char" 형식의 엔터티를 초기화할 수 없습니다
문자열 리터럴을 사용하기 위해서 char 형태의 변수를 선언했을 때 E0144 에러가 발생한다. 에러의 내용은 "홀수"라는 문자열은 const(상수)값인데 변수에 그 값을 집어넣으려고 하니 에러가 발생한다는 것이다. 위 에러의 발생 원인을 MSDN에서는 다음과 같이 설명한다. "C에서는 문자열 리터럴이 char의 배열이지만, C++에서는 const char의 배열이다." 즉, char(혹은 char *)에 문자열 리터럴을 담는 방식은 C 방식이며, C++ 에서는 잘못된 코딩방법이기 때문에 위와 같은 오류가 발생하는 것이다. 해결방법 1. pointer가 아닌 array 형식으로 선언 1 char s1[] = "aa"; cs 2. (char *) 형식으로 형변환(casting) 1 char *s1 = (c..
[C] 비트 시프트 연산의 원리
2진수 형태로 저장되어 있는 값들을 왼쪽()으로 지정한 비트 수만큼 밀어주면 2배씩 늘어나거나 반으로 줄어드는데, 이를 비트 시프트 연산이라고 합니다. 왼쪽 비트시프트()가 될 때에는 왼쪽에 0(0 또는 양의 정수인 경우)이나 1(음의 정수인 경우)이 개수만큼 추가됩니다. 범위(32비트)를 넘어서 이동되는 비트는 삭제됩니다. int a=10; printf("%d", a > 1); // 10을 반으로 나눈 값인 5 가 출력된다. printf("%d", a > 2); // 10을 반으로 나눈 후 다시 반으로 나눈 값인 2 가 출력된다. #include int main(void) { int a=10; printf("%d\n", a
[C] 지역변수와 전역변수 : 전역변수의 적절한 사용 시기
일반적인 변수를 구분할 때는 데이터의 형태로(정수, 소수, 문자 . . .) 구분하지만 사용할 수 있는 범주에 따라서 구분하기도 하는데 이를 지역변수와 전역변수 라고 합니다. 이 두 가지 변수는 프로그램 내 모든 곳에서 사용할 수 있느냐 없느냐에 따라 구분합니다. 코딩 시 중괄호 내의 범위를 블록이라고 칭하는데, 이 블록이라는 범위는 함수가 될 수도 있고 if 문이나 for 문이 될 수도 있습니다. 지역변수의 경우 블록 내에서만 사용이 가능하고, 전역변수의 경우 프로그램 전체에서 사용이 가능하다는 차이만 숙지하면 되겠습니다. 그럼 전역변수는 어떤 경우에 사용할까요 ? 예제 위 예제를 아래 소스 코드를 통해서 전역변..
[C] 절댓값, 최댓값, 최솟값을 출력하는 다양한 방법 : 숏코딩(Short Coding)
코딩을 효율적으로 하기 위해서는 숏코딩, 즉 문장을 간결하게 써야합니다. 이는 컴퓨터의 메모리는 둘째치고, 사람이 소스코드를 확인하는데에 있어서 직관적으로 해석할 수 있어야 하기 때문입니다. 아주 쉬운 예로 절댓값, 최댓값, 최솟값 이 3가지를 출력하는 코딩 방법 또한 어떻게 구성하느냐에 따라 보기 어렵게 만들 수도 있고, 보기 쉽게 만들 수 도 있습니다. 조건 연산자 : 피연산자가 3개인 삼항 연산자 문장을 간단하게 만들어주는 대표적인 예로는 조건 연산자가 있습니다. 조건 연산자는 if else 문을 일부 대체할 수 있고, 이를 통해 알 수 있듯이 조건 연산자가 자주 사용되는 이유는 코드를 짧고 간결하게 만들어주기 때문이죠. 조건 연산자의 구성은 아래와 같습니다. 조건 ? TRUE : FALSE; 이해..
[C] C4700 초기화되지 않은 ~ 지역 변수를 사용했습니다.
코딩을 하다보면 종종 위와 같은 문구로 오류가 발생하는 경우가 있습니다. 이 오류가 발생하는 이유와 해결방법을 간단하게 설명하겠습니다. #include int main(void) { int input; printf("%d", input); return 0; } 위 소스코드 예시를 통해 살펴보겠습니다. 이 오류는 'input' 변수를 초기화하지 않은 상태에서 그대로 변수를 사용하려고 했기 때문에 나타나는 현상입니다. 쉽게 이야기해서, 변수안에 아무런 값이 들어가있지 않은데 어떻게 정수값을 출력하느냐는 말입니다. int input=0; // or scanf_s("%d", &input); 본문을 보고 이해하셨을 거라 생각합니다. 해결법은 간단합니다. 변수를 출력을 하기전에 이처럼 변수값을 선언해주거나, sca..