반응형

언어 자료구조 알고리즘/디딤돌 C언어 150

50. 인덱스 연산자

C언어에서는 포인터와 정수 사이의 더하기 연산 후에 간접 연산을 수행하는 것을 간단하게 인덱스 연산으로 표현할 수 있어요. 인덱스 연산자는 배열 선언에 사용하는 지시 연산자 [ ]와 기호가 같아요. 선언문 이외에서 포인터와 정수가 피연산자인 이항 연산자 [ ]를 인덱스 연산자라 불러요. 인덱스 연산은 상대적 거리에 있는 원소를 접근할 수 있어요. 인덱스는 상대적 거리를 나타내기 때문에 n 번째 원소에 접근하려면 n-1을 사용해야 한답니다. int arr[3]={1,2,3}; int *p = arr; int index = 0; 위와 같이 배열과 포인터, 기본 형식을 선언하였을 때 arr[index]와 p[index]와 같이 사용하면 *(arr+index), *(p+index)와 같은 표현이예요. 인덱스 연..

49. 간접 연산자

피연산자로 포인터를 사용하는 더하기, 빼기 연산은 프로그램 메모리 주소를 계산하거나 상대적 거리를 계산하죠. 하지만 실제 개발자는 프로그램 메모리 주소를 아는 것은 큰 의미가 없어요. 개발자는 특정 프로그램 메모리 주소에 있는 값을 얻어오거나 설정하는 것을 원해요. C언어에서 포인터(배열 이름 포함)가 갖는 메모리 주소에 원하는 값을 설정하거나 얻어오는 방법은 크게 간접 연산자와 인덱스 연산자를 사용하는 방법이 있어요. 간접 연산자는 선언문이 아닌 코드 구문에서 포인터 형식을 피연산자로 오는 단항 연산자예요. 연산 기호는 포인터 변수를 선언할 때 사용한 지시 연산자 *와 같아요. 모양은 같지만 선언문에 있는 것은 선언한 변수가 포인터 형식임을 나타내는 지시 연산자예요. 간접 연산의 결과는 포인터 변수가 ..

48. 포인터와 - 연산

C 언어에서는 같은 원소의 포인터 사이의 - 연산을 제공하죠. 연산 결과는 정수 형식으로 두 포인터 사이의 원소 개수예요. 예를 들어 int 형식 변수 a의 값이 1016이고 int 형식 변수 b의 값이 1000일 때 a-b의 결과는 4랍니다. ◈ 포인터 형식 사이의 - 연산 #include int main() { int *a = (int *)1016; int *b = (int *)1000; printf("a:%d b:%d a-b:%d\n",a,b,a-b); return 0; } ◈ 실행 결과 a:1016 b:1000 a-b:4 ◈ 배열 이름과 포인터 형식 사이의 - 연산 #include int main() { int arr[10]; int *p = arr+4; printf("arr:%d p:%d p-a..

47. 포인터 + 정수

C 언어에서 배열 이름은 관리하는 메모리의 시작 주소를 의미하죠. 프로그램에서 배열 이름은 포인터 상수로 취급해요. 따라서 배열을 효과적으로 사용하려면 포인터 관련 연산자를 잘 사용할 수 있어야 겠죠. C 언어에서 + 연산에는 하나의 포인터 형식과 정수 형식을 피연산자가 오는 것을 허용해요. 이 때 연산 결과는 상대적 거리의 메모리 주소를 의미한답니다. 여기에서 말하는 상대적 거리는 예를 들어 알아볼게요. int 형식 원소의 포인터 변수의 값이 1000일 때 상대적 거리 4는 1000번지에서 int 형식 원소 4개 크기를 더한 주소예요. 즉 int 형식의 메모리 크기가 4바이트이므로 1000번지에서 상대적 거리 4는 1016이예요. 물론 여기서 1016은 정수 형식이 아니고 포인터 형식이랍니다. ◈ 포인..

46. 배열 선언문

C언어에서 배열을 선언할 때 컴파일러에게 선언하는 것이 배열임을 알려주는 [ ]지시 연산자를 사용해요. 포인터를 선언할 때는 포인터임을 알려주는 * 지시 연산자를 사용해요. 배열을 선언하려면 컴파일러에게 선언하는 것이 배열임을 알려주는 [ ]지시 연산자 내부에 원소 개수를 지정하세요. 그리고 배열 이름과 지시 연산자, 원소 개수를 제외한 나머지 부분이 원소 형식이예요. 포인터도 변수 이름과 지시 연산자를 제외한 나머지 부분이 원소 형식이죠. int arr[10]; //배열 선언문, 원소 개수:10, 원소 형식: int int *p = arr; //포인터 선언문, 원소 형식: int int arr[10]; 구문은 원소 형식이 int 이고 원소 개수가 10인 배열 arr을 나타내는 선언문이예요. 컴파일러는 ..

45. 배열과 포인터 개요

C언어에서는 같은 형식의 여러 데이터를 효과적으로 사용할 수 있는 배열을 제공하고 있어요. C언어에서 제공하는 기본 형식들은 변수가 관리하는 데이터가 하나여서 변수 이름은 갖고 있는 값을 의미하죠. 하지만 배열은 관리하는 데이터가 여러 개이므로 배열 이름이 특정 값을 대표할 수 없어요. C언어에서는 배열 이름은 관리하는 특정 값이 아닌 배열에 할당한 메모리의 시작 주소를 의미한답니다. 배열의 원소에 접근할 때는 배열 이름과 상대적 거리를 의미하는 인덱스 값을 사용하는 것이 일반적이예요. 예를 들어 3번째 원소를 접근하려면 시작 위치에서 거리 2이므로 인덱스 2를 사용해요. 따라서 상대적 거리를 나타낼 때 첫 번째 원소는 상대적 거리가 0이므로 n번째 원소는 상대적 거리가 n-1임을 잊지 마세요. 또한 C..

44. 정리하기

39. 조건문 (if, else) 40. 선택문 (switch case) 41. 반복문 (while, do while, for) 42. 제어문 연습 - 별출력 43. 매크로 구문 1. 두 개의 정수를 입력받아 작은 값을 출력하는 코드를 작성하시오. 2. 10개의 정수를 입력받아 최소값과 최대값을 출력하는 코드를 작성하시오. 3. 정수를 입력받아 약수를 출력하는 코드를 작성하시오. 4. 1부터 1000 사이에 소수(Prime Number, 1과 자기 자신만 약수인 수)를 출력하는 코드를 작성하시오. 5. 정수를 입력받은 후에 이진수로 출력하는 코드를 작성하시오. 6. 정수를 입력받은 후에 다음과 같이 화면에 출력하는 코드를 작성하시오. [정답] 디딤돌 C언어 44.정리하기(제어문)

43. 매크로 구문

C언어에서는 자주 사용하는 표현을 약속하여 쉽게 표현할 수 있게 매크로 구문을 제공하고 있어요. 매크로 구문은 자주 사용하는 표현을 약속한 후 개발자가 매크로 구문을 사용하여 쉽게 코드를 작성하는 문법이예요. 개발자가 매크로 구문으로 코드를 작성하면 컴파일러가 기계어 코드로 번역하기 전에 약속한 구문으로 바꾸어 줘요. 이러한 과정을 전개라 부르며 컴파일 전에 수행해서 전처리 구문이라고도 불러요. C언어에서는 #include문으로 다른 파일의 내용을 포함시키거나 #define문으로 매크로 구문을 약속하는 것이 대표적이죠. #include #include “파일명” #include 문은 다른 파일에 있는 내용을 포함시키는 매크로 구문이예요. 개발도구를 설치하면서 함께 설치한 파일들이 있는 폴더는 개발도구의 ..

42. 제어문 연습 - 별출력

제어문의 문법을 보면 어렵지 않아요. 그런데 실제 프로그래밍에서 사용하려면 논리를 전개해는 것이 어려워요. 다양한 문제를 해결하면서 조금씩 숙련시킬 수 있어요. 간단한 제어문 연습을 해 봐요. 먼저 속이 빈 정사각형을 출력하는 것을 해 봐요. 최종 사용자가 정수를 입력하면 입력한 정수에 맞게 속이 빈 정사각형을 출력하는 거예요. 물론 화면의 X좌표의 폭과 Y좌표의 폭이 서로 달라 정사각형처럼 보이지는 않아요. 논리를 먼저 생각하세요. 정수를 입력받는 것이 제일 먼제 해야 할 일겠죠. scanf_s("%d",&n);//입력 그리고 입력한 정수만큼 정사각형을 출력해야 되겠죠. 따라서 입력한 정수만큼 반복 수행하는 구문이 필요하겠네요. for(line=1;line

41. 반복문 (while, do while, for)

41. 반복문 (while, do while, for) 반복문은 특정 조건이 참일 동안 반복해서 구문을 수행하는 구문이예요. C언어에서는 세 가지 종류의 반복문을 제공합니다. while(조건 표현식) 반복 수행 구문; do 반복 수행 구문 while(조건 표현식); for(초기 수행문; 조건 표현문; 조건 변화 구문) 반복 수행 구문; 반복문에서도 조건문처럼 반복해서 수행할 구문이 하나 이상일 때 블록을 지정해서 사용해요. while(조건 표현식) 반복 수행 구문; ◈ while문을 이용하여 1부터 100까지 합계를 구하는 예 #include int main() { int sum = 0; //합계를 위한 변수 선언 int lcnt=0; //반복문 루프 카운터 변수 선언 lcnt = 1; //lcnt를 1..

반응형