Professional Documents
Culture Documents
프기실 개인과제3
프기실 개인과제3
#include는 헤더파
일을 포함시키는 기능을 가지고 있는데, 헤더파일을 포함시키도록 컴파일러에 지시한다. 여기
서 헤더파일은 .h라는 확장자를 가지는 라이브러리를 의미한다.
1-4. arr이라는 array 함수의 이름만 언급한다면 array 함수의 0번째를 가리키는 pointer로
취급된다. 따라서 (int* source)와 같이 포인터로 선언된 함수도 이용될 수 있다. 즉, 배열이
함수에 전달될 때, 배열의 첫 번째 요소가 함수에 전달되어 작동되기 때문에 포인터로 선언된
함수임에도 작동이 가능하다.
1-7. pointer arithmetic은 array 함수 + i꼴로 이루어져 있다. 이는 array 함수의 i번째 즉,
array[i]와 동일한 의미를 가진다. 첫 번째로, 7번 라인에서 *(source + i)와 같이 pointer
arithmetic을 사용하여 배열의 요소에 접근하였다. 이와 동일하게 14번 라인에서 arr+i라는
pointer arithmetic이 사용되었다.
1-8. pointer arithmetic에 의해 arr 배열의 0번째 요소에 scanf를 이용하여 정수값이 입력
된다. 이후 loop를 통해 i가 1, 2, 3, 4로 변경된다. 따라서 arr이 i칸 만큼 이동하여 다시
scanf에 의해 정수값이 입력된다. 이후 loop가 끝나면 Print 함수가 실행되면서 Print 함수의
작업이 수행된다. Print 함수는 arr배열의 0~4번째 요소가 차례대로 print되는 함수로써 이후
arr 배열의 0~4번째 요소가 출력될 것이다.
1-9. 동적 할당을 이용하면 문제를 해결하는 데 도움이 된다. 동적 할당된 배열은 크기의 유
연성과 메모리 관리의 효율성 면에서 일반적으로 더 유리합니다. 그 중, malloc 함수를 사용
하면 되는데, arr을 동적 할당을 통해 배열의 size를 결정할 수 있다. 이를 통해 유동적으로
array의 size나 elements를 설정하는 데 용이할 것이다.
2-1. %s는 문자열을 저장하는 연산자이다. 즉, 입력값에서 공백을 만날때까지 문자를 한꺼번
에 저장하는 연산자이다. %c는 문자를 저장하는 연산자이다. 즉, 입력값에서 한 문자씩만을
저장한다. 또한, 공백을 생략하지 않는다는 차이점이 존재한다.
2-2. 문자의 길이를 구하기 위한 코드이다. loop가 작동되고, 사전에 정수 0으로 할당했던
cnt값을 ++를 통해 값을 증가시킨다. \0이 문자의 끝에 존재하기 때문에, null character를
만났을 때 break문을 사용하여 문자의 길이를 세는 것을 종료시킨다.
2-4. 작은 따옴표 (‘)는 단일 문자를 나타내며 큰 따옴표 (“)는 문자열 자체를 나타내는데 사
용된다. \0은 위에서 말했듯, null character이다. 이는 하나의 단일 문자를 의미하기 때문에
작은 따옴표를 사용하여 코드를 짜는 것이 옳은 방법이다.
3-4. 문제가 없다. 10개 중 9개가 채워지게 되면, 나머지 채워지지 않은 부분에는 자동적으로
0이 채워진다. 따라서 num은 1,2,3,4,5,6,7,8,9,0의 값이 요소로 할당될 것이다.
4-2. fgets 함수를 통해 사용자가 입력한 만큼의 요소만이 str에 입력될 것이다.
CountSpaces 함수 내에서 strlen 함수를 통해 배열의 문자 길이를 파악하여 count를 올리
도록 설정해놓았기 때문에 배열의 유연성과 편의성을 위하여 일부러 함수 배열의 길이를 설정
해놓지 않은 것이다.
4-3. 공백을 셈으로써 단어의 개수를 파악하려고 하기 때문에 오류가 일어날 것이다. 예를 들
어, “Hello World” 와 같은 문장은 프로그램에서 5개의 공백이 존재하기 때문에 6의 값
이 출력되지만 실제 단어 수는 2개이므로 오류가 발생하는 것을 확인할 수 있다.
4-4. fgets 함수는 띄어쓰기가 포함된 문장 즉, 공백이 포함된 문자열들을 저장할 수 있다.
하지만 scanf는 띄어쓰기가 포함된 문장을 입력하면 띄어쓰기가 시작되기 이전 즉, 공백이 나
타나기 전의 문자열만이 저장된다. 위 코드는 공백을 세야하는 프로그램이기 때문에 scanf 대
신 fgets를 선택한 것이다.
논의한 학생 (1명)
2023312043 김솔규