본문 바로가기

전체 글

(295)
c언어 포인터 이해. //두 변수의 값을 서로 변환하는 포인터 함수 #include void swap(int* x, int* y) { int temp; temp = *x; *x = *y; *y = temp; } int main(void) { int x = 1; int y = 2; swap(&x, &y); printf("x = %d\ny = % d\n", x, y); return 0; } 출력은 x와 y값이 바뀐채로 출력이 된다. swap(&x, &y);를 통해 void swap(int* x, int* y) 함수가 호출이 되었고 swap 함수를 통해 x가 가리키는 값과 y가 가리키는 값이 바뀌게 되면서 x y의 값이 서로 바뀌었다. 포인터 추가 개념이해 int x = 70; int *y = &x; (x주소를 가리키도록 선언)가..
코드업 1019번 문제(원하는 자릿수(칸)만큼 출력) 년, 월, 일 을 입력받아 지정된 형식으로 출력하는 문제. #include int main(void) { int Y,M,D; scanf("%d.%d.%d",&Y,&M,&D ); printf("%04d.%02d.%02d",Y,M,D); return 0; } 와 같이 풀어야 하는데, 위문제에서 보이는 %02d는 2칸을 사용하여 출력을 하는데 한자리인 경우에는 앞에 0을 붙여 출력한다. 그럼 %04d는 ? 4칸을 사용하여 출력을 한다. 한자리인 경우에는 앞에000을 붙여 출력을 한다.
코드업 기초100제 1018번(scanf 입력형태) 어떤 형식에 맞추어 시간이 입력될 때, 그대로 출력하는 연습을 해보는 문제이다. #include int main(void) { int h , m; scanf("% d:%d",&h,&m); 입력창에서 3:16과 같은 형태로 입력을 해주어야 한다. 평소 입력했듯이 공백을 두게 되면 printf("% d:%d", h, m); 출력 값에서 오류가 나게 된다. return 0; } #include int main(void) { int h , m; scanf("% d^%d",&h,&m); 3과 16을 입력해준다 하면 3^16으로 입력을 해주어야 정상적인 출력 결과를 얻을 수 printf("% d^%d", h, m); 있다. return 0; } scanf()는 지정한 형식에 따라 입력받는 함수이다. 따라서 입력받고..
코드업 1015번(선언한 자료형에 맞는 서식문자 사용) 실수 한 개를 입력받은 후 저장되어 있는 값을 소수점 셋째 자리에서 반올림한 후 소수점 이하 둘째 자리까지 출력하는 문제이다. #include int main(void) { float A; scanf("% f", &A); printf("%. 2f", A); %f 의 f앞에 .2를 붙여 줌 으로써 소수점 둘째자리 까지 출력한다는 명령을 내렸다. return 0; } #include int main(void) { float A; scanf("%lf", &A); printf("%lf", A); 출력이 에러가 뜨는 코드인데, 선언한 자료형에 알맞은 실수형 서식문자 f 를 사용하여야 한다. return 0; } #include int main(void) { double A; scanf("%lf", &A); 선언한..
배열 기반의 문자열 표현 11-2 문제 3 영단어를 입력받아 입력받은 영단어 중 아스키코드 값이 가장 큰 문자를 출력하는 문제이다. 처음 문제를 구상할때 전체적인 틀을 떠올리는 데에 성공했지만, 16행 17행 부분에서 문자 요소끼리는 대소 비교를 할 수 있나?라는 의문이 들어 결국 풀지 못했던 문제이다. 밑에 사진에 나온대로 여러 경우의 코드 문장을 작성해보며 궁금증을 해결하였다. 위 50행에서 문자가 컴파일되어 아스키코드값으로 출력될 수 있음을 알 수 있다. 가장 궁금하였던 것은 58행 부분인데, 숫자 값 변환 없이 대 소 비교를 할 수 있는지에 대한 것이었다. '조건 연산자'를 통해 대 소 비교를 해보았고, 그 결과 문자열 배열의 요소끼리도 먼저 % d를 통해 정수 값으로 변경해 주지 않고도 대 소 비교를 진행할 수 있다는 것을 알 ..
배열기반의 문자열 표현 문제 11-2(영단어 길이계산) -윤성우 열혈 c 프로그래밍- 문제 1 영단어를 입력받아 그 영단어의 길이를 계산하여 출력하는 프로그램을 작성하는 문제이다. 널문자가 문자열의 끝에 있으므로 이와 같이 문장을 구성할 수 있다. 위 37~39행의 과정은 영단어의 길이를 출력하는 과정이지, 문자열 배열의 길이를 출력하는 과정이 아니다. 위 문제를 풀던 중 반복문에 대한 개념이 헷갈려 반복문에 대한 고민을 해보았다. 위는 for반복문인데, is = 5가 될 때 for문을 탈출한다 왜냐하면 (is < 5)라는 조건식이 있기 때문이다. 그러면 9행에서 출력되는 is의 값은 4 일까? 그것은 출력 결과를 통해 아니라는 답을 얻을 수 있다. is = 5인 상태에서 for문을 나온 것이므로 위 9행의 출력 결과는 5 인 것이다. 문제 2 프로그램 사용..
배열을 이용한 문자열 변수의 표현 char str [14] = "Good Morning!"; char str[ ] = "Good Morning!"; 위 문장들에서 볼 수 있듯이 이문장의 배열의 길이는 14이다. 그런데 공백문자와 !문자를 포함하여 13 문자인데 왜 길이가 14일까? 그것은 문자열 끝의 널문자('\0') 때문이다. 즉 문자열의 저장을 목적으로, char형 배열을 선언할 경우 널문자가 저장될 공간까지 생각해서 배열의 길이를 결정해야 한다. 5행에서 4행에서 선언된 배열의 크기를 출력하고 있는데, 출력 값은 14이다. 이는 널문자를 고려해서 배열의 길이가 결정된 결과이다. char형의 크기가 1바이트 이기 때문에 14라는 수가 나올 수 있었다. 그리고 위에서 볼 수있듯이 널문자의 아스키 코드값은 0이고 이를 문자의 형태로 출력..
c언어 포인터란? 우선 포인터 변수란? 메모리의 주소 값을 저장하기 위한 변수이다! int main(void) { int num = 7; // 정수 7이 저장된 변수 num선언. int * pnum; // 포인터 변수 pnum의 선언 pnum = &num; // num의 주소값을 포인터 변수 pnum에 저장 } ○ int * pnum; 의 문장이 포인터 변수의 선언이다. 1. pnum :포인터 변수의 이름 2. int * : int형 변수의 주소 값을 저장하는 포인터 변수의 선언. ○ pnum = &num; 위 문장에서 &연산자는 오른쪽에 등장하는 피 연산자의 주소값을 반환하는 연산자이다. 따라서 &연산의 결과로 변수 num의 주소 값이 반환되며, 이를 포인터 변수 pnum에 저장하게 된다. 포인터 형(type)이란? 우..