본문 바로가기

분류 전체보기

(295)
코드업 1030번(long long int) 정수 1개를 입력받아 그대로 출력해보자. 단, 입력되는 정수의 범위는 -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807이다. #include int main(void) { long long int A; scanf("%lld", &A); printf("%lld",A); return 0; } 이 정도의 값의 범위가 큰 수를 입출력할 때에는 long long int를 사용해 주어야 한다 long long int는 %lld를 사용해 입력을 받고 출력을 해준다
코드업 1029번(실수형의 값의 표현 범위) 실수 1개를 입력받아 그대로 출력해보는 문제이다. (단, 입력되는 실수의 범위는 +- 1.7x10의-308승 ~ +- 1.7x10의 308승이다.) 추가적으로 입력된 실수를 소수점 이하 11자리까지 반올림하여 출력한다. 일반적으로 실수형인 float형은 크기는 4바이트이고, 값의 표현 범위는 (+- 3.4*10-37승 ~ +- 3.4*10의 38승 이하)이다. 그에 반해 double형은 +- 1.7x10의-308승 ~ +- 1.7x10의 308승 정도의 값을 표현해 줄 수 있다고 한다. float형의 소수점 이하 정밀도는 6자리 이고, double형의 소수점 이하 정밀도는 15자리이다. long double의 소수점이하 정밀도는 18자리이다 #include int main(void) { double A;..
코드업 1028번(unsigned int 사용해보기) 정수 1개를 입력받아 그대로 출력해보자. (단, 입력되는 정수의 범위는 0 ~ 4,294,967,295이다.) 값의 표현 범위가 int형이 표현할 수 있는 범위를 넘어섰기 때문에, long long int나 unsigned int(0 이상~ 40억 이하 정도는 표현 가능)를 사용하여 풀어준다. #include int main(void) { long long int A; scanf("%lld", &A); printf("%lld", A); return 0; } unsigned int는 % u의 서식 문자를 사용한다. #include int main(void) { unsigned int A; scanf("%u", &A); printf("%u", A); return 0; } unsigned 형들의 값의 표현 범..
코드업 1025번(%1d의 사용) 다섯 자리의 정수 1개를 입력받아 각 자리별로 나누어 출력하는 문제 #include int main(void) { int a, b, c, d, e; scanf_s("%1d%1d%1d%1d%1d", &a, &b, & c, &d, &e); printf("[%d0000]\n", a); printf("[%d000]\n", b); printf("[%d00]\n", c); printf("[%d0]\n", d); printf("[%d]\n", e); return 0; } %1d 라고 넣어주면 어떠한 긴문장이 있을때 하나씩 끊어서 입력받을 수있다.
열혈 c프로그래밍 13-1(4) 배열의 앞과 뒤를 가리키는 포인터 변수 2개를 선언해서 이를 활용해 저장된 값의 순서를 6 5 4 3 2 1로 바꾸어 출력하는 문제이다. 처음 풀이인데 문제도 잘못 읽었고, 문제 해결도 엉망인 문장들이다. #include int main(void) { int arr[6] = { 1,2,3,4,5,6 }; int* front = arr; int* back = &arr[5]; *front = arr[0]; arr[0] = *back; *back = *front; *(front + 1) = arr[1]; arr[1] = *(back - 1); *(back - 1) = *(front - 1); *(front + 2) = arr[2]; arr[2] = *(back - 2); *(back - 2) = *(front..
열혈 c프로그래밍 13-1(3) 포인터 변수 ptr에 저장된 값을 감소시키는 형태의 연산을 기반으로 모든 배열 요소에 접근하여, 배열에 저장된 모든 정수를 더하여 그 결과를 출력하는 프로그램을 작성해보는 문제이다. #include int main(void) { int arr[5] = { 1, 2, 3, 4, 5 }; int* ptr = &arr[4]; int sum = 0; int i = 0; for (i = 0; i < 5; i++) { sum += *(ptr--); } printf("%d", sum); return 0; } ptr--는 후위 감소 이기때문에 sum += *(ptr--);에서 += 연산의 진행 후에 후위 감소가 이루어진다.
열혈 c프로그래밍 13-1(2) 이번에는 포인터 변수 ptr에 저장된 값을 변경시키지 않고, ptr을 대상으로 덧셈 연산을 하여, 그 결과로 반환되는 주소 값을 통해서 모든 배열 요소에 접근하여 값을 2씩 증가시키는 문제이다. #include #define SIZE 5 int main(void) { int arr[SIZE] = { 1 , 2, 3, 4, 5 }; int* ptr = arr; int n = 0; for (n = 0; n < SIZE; n++) { *(ptr + n); printf("%d", ptr[n] + 2); } return 0; } ptr++; 은 ptr에 저장된 값 변경하지 말자 했으므로 사용하지 못한다. #include #define SIZE 5 int main(void) { int arr[SIZE] = { 1,..
열혈 c 프로그래밍 문제 13-1(1) 처음 문제를 접근할 때, 문제를 잘못 읽고 푼 풀이인데, 그런 겸에 포인터 연산에 관한 개념 정리를 해보았다. #include int main(void) { int arr[5] = { 1 , 2 , 3 , 4 ,5 }; int* ptr = arr; printf("첫번째 요소: %d\n", *ptr); ptr++; printf("두번쨰 요소: %d\n", *ptr); ptr++; printf("세번째 요소: %d\n", *ptr); ptr++; printf("네번째 요소: %d\n", *ptr); ptr++; printf("5번째 요소: %d\n", *ptr); printf("\n"); return 0; } 이 문장을 통해 *ptr이 배열의 요소값에 접근한다라는 점을 알 수 있다. 그렇다면 밑의 문장도 출..