JavaRush /Java Blog /Random-KO /CS50 강의 추가 자료: 1주차(3강 및 4강)
Masha
레벨 41

CS50 강의 추가 자료: 1주차(3강 및 4강)

Random-KO 그룹에 게시되었습니다
러시아어 추가 자료의 cs50 1주차 작업

첫 주 목표

  • 기본 Linux 명령을 숙지하세요.
  • 기본 C 구문을 배우고 몇 가지 문제를 해결하세요.
  • 더 명확하게 생각해보세요 =)
IDE CS50
작업을 완료하기 위해 CS50은 클라우드에서 IDE(통합 개발 환경)를 제공합니다. 이를 사용하려면 edX 플랫폼에서 계정을 만들고 원래 강좌 에 등록하세요 . 그 후:
1. cs50.io로 이동하여 목록에서 edX를 선택하고 로그인 및 비밀번호를 입력한 후 제출을 클릭합니다. 2. edX 계정 정보를 입력하고 ID.CS50.NET으로 돌아가기를 클릭합니다 . cs50.io 3. 기다리고 있습니다. 가상 공간이 생성되고 있습니다. 가상 공간 cs50 4. 끝났습니다! cs50 IDE
명령줄 및 CS50 IDE 실행
CS50 IDE 창 하단의 터미널 탭에는 터미널 창 또는 명령줄 패널이 있습니다. 여기에 문자열 명령을 입력할 수 있습니다. 예를 들어 응용 프로그램 실행, 파일 삭제 및 생성, 소프트웨어 설치 등 창 인터페이스와 동일한 작업을 수행할 수 있습니다. 명령줄을 사용해 본 적이 없다면 이 방법은 아마도 번거로울 것입니다. 아이콘과 버튼을 클릭하는 대신 명령을 기억하고 입력해야 하기 때문입니다. 어느 정도 이는 사실이며, 윈도우 인터페이스가 발명되었습니다. 그러나 명령줄은 모든 운영 체제에서 사용할 수 있으며 관리자는 이를 좋아합니다. 때로는 그것 없이는 살 수 없기 때문입니다. 터미널의 IDE 창에 다음과 같은 신비한 줄이 표시됩니다. "username" 대신에 username:~/workspace $ (등록 데이터를 기반으로) 자동으로 생성된 이름이 있습니다. 터미널 창을 클릭하고 update50 Enter를 누르십시오. 이 명령은 시스템에 업데이트를 요청합니다. 설치 프로세스를 설명하는 줄이 터미널에 나타나는 것을 볼 수 있습니다. 업데이트 완료가 표시될 때까지 CS50 IDE를 닫지 마십시오 ! . 그 후에는 귀하의 이름이 포함된 기본 줄이 다시 나타납니다.
IDE에서 작업
파일이 저장될 폴더를 만들어 보겠습니다. CS50 IDE 왼쪽 상단에 있는 ~/workspace (루트 디렉터리)를 마우스 오른쪽 버튼으로 클릭 하고 새 폴더 를 선택합니다 . 폴더 이름을 pset1 로 바꿉니다 . 이름을 잘못 입력한 경우 폴더를 마우스 오른쪽 버튼으로 클릭하고 이름 바꾸기를 선택하세요 . 그런 다음 pset1 폴더를 마우스 오른쪽 버튼으로 클릭 하고 새 파일을 선택합니다 . Untilted 파일이 나타나면 hello.txt 로 이름을 바꾸겠습니다 . hello.txt를 두 번 클릭하세요. CS50 IDE에서는 오른쪽에 입력할 수 있는 새 탭과 필드가 표시됩니다. 이 작업을 수행한 경우 탭의 파일 이름 앞에 나타나는 별표(*) 기호에 주의하세요. 이는 파일이 변경되었지만 저장되지 않았음을 나타내는 표시입니다. *파일 > 저장 으로 이동하거나 command + S (Apple 시스템) 또는 Ctrl + S (PC) 를 사용하여 파일을 저장합니다 . 별표가 사라져야 합니다. 파일이 있어야 할 위치에 있는지 확인해 보겠습니다. 명령줄을 사용하여 이 작업을 수행해 보겠습니다. 이제 익숙해질 시간입니다. :). 이전과 마찬가지로 터미널의 활성 라인은 다음과 같습니다. Workspace - 현재 작업 디렉터리(작업 환경에서 열려 있는 디렉터리). 물결표(~)는 루트 디렉터리(작업 공간이 있는 디렉터리)를 나타냅니다. 터미널의 작업 공간은 CS50 IDE 왼쪽 상단에 있는 ~/workspace 아이콘과 동일합니다. 연습하자. 터미널의 아무 곳이나 클릭하고 명령줄을 입력한 후 Enter를 누르세요. 이 두 개의 소문자("list"의 약어)는 현재 작업공간 디렉토리 내에 있는 파일 및 폴더 목록을 표시합니다. 무엇보다도 생성한 pset1이 표시됩니다 ! 이제 명령을 사용하여 폴더를 열어 보겠습니다. 다음과 같이 더 장황하게 입력합니다 . cd(디렉터리 변경) 명령은 활성 디렉토리를 변경합니다. 이 경우 활성 행이 다음으로 변경되었습니다 . 이는 현재 디렉토리에 있음을 확인합니다 (행은 "I am in pset1 inside the Workspace"를 나타냅니다). ~"로 표시되는 루트 폴더에 있는 폴더입니다. 이제 다음을 입력하십시오 . hello.txt 파일이 표시됩니다 ! 터미널에서 이름을 클릭하면 아무 일도 일어나지 않습니다. 텍스트이며 활성 상태를 제공하지 않습니다. cd 명령 자체만 작성하고 인수(즉, 이동해야 하는 폴더 이름)를 제공하지 않으면 hello.txt가 있어야 하는 위치에 있는지 확인합니다. 기본 루트 디렉토리로 이동하면 활성 라인에 다음 그림이 표시됩니다. pset1 폴더로 돌아가려면 다음을 누르십시오.cs50 ide 폴더 이름 바꾸기cs50 IDECS50 강의 추가 자료: 1주차(3강 및 4강) - 1username:~/workspace $lscd pset1cd ~/workspace/pset1~/pset1username:~/workspace/pset1 $~/workspace/pset1lscdusername:~ $cd workspace Enter 키를 누릅니다. 그런 다음 cd pset1 다시 입력하세요. 또한 이 두 명령을 보다 확실한 하나의 명령으로 바꿀 수도 있습니다. cd workspace/pset1
안녕하세요, C님!
드디어 이 순간이 왔습니다! 프로그래밍을 시작해보자. IDE의 pset1 폴더 안에 hello.c (확장자가 필요함)라는 파일을 생성하고 새 탭에서 엽니다(이전 단락에서 이 작업을 수행하는 방법을 기억할 것입니다). 중요한! 문자는 소문자여야 하며 Linux는 대소문자를 구분합니다. Hello.c와 hello.c는 다른 파일입니다. CS50 IDE 창 오른쪽에 아래와 같이 정확히 동일한 텍스트를 입력합니다. 예, 복사할 수 있지만 입력하는 것이 더 유용합니다. CS50 IDE에는 구문 강조 기능이 있으므로 문자 색상이 다릅니다. 가독성을 높이기 위해 텍스트 블록을 색상으로 강조 표시합니다. 색상은 파일 자체에 저장되지 않으며 IDE에서만 볼 수 있습니다. 해당 항목이 있으면 IDE가 C를 이해하고 파일 확장자(*.c)에 C라고 표시한 것입니다. 동일한 파일 hello.txt를 호출하면 텍스트는 단색이 됩니다. 예제와 같이 모든 내용을 정확하게 입력했는지 확인하십시오. 그렇지 않으면 첫 번째 버그가 발생합니다 =). 다시 한 번 소문자와 대문자의 차이점에 주목하세요. \n 문자는 커서를 다음 줄로 이동시키고, 다음에 입력된 텍스트는 프로그램 출력과 달라붙지 않습니다. 아, 그리고 세미콜론(;)도 잊지 마세요. 이것은 프로그램 명령문을 구분하는 중요한 구분 기호입니다. C는 이것이 없으면 작동하지 않을 것입니다. 파일 > 저장 (또는 command-또는 Ctrl-s)을 클릭합니다 . 파일 이름 앞의 별표가 사라진 것을 확인하세요. 그렇다면 변경 사항이 저장되었습니다. 터미널 창에서 코드 아래 아무 곳이나 클릭하고 ~/workspace/pset1 내부에 있는지 확인하세요 (그렇지 않은 경우 cd를 클릭하고 Enter를 누른 다음 cd 작업 공간/pset1을 누르고 다시 Enter를 누르세요). 활성 행은 다음과 같아야 합니다. hello.c 파일이 정확히 있어야 할 위치에 있는지 확인하겠습니다 . 입력 하고 Enter를 누르세요. hello.c도 보이나요? 그렇지 않은 경우 몇 단계로 돌아가 원하는 디렉터리에 파일을 다시 만듭니다. ... 이제 엄숙한 순간이 왔습니다. 손가락을 교차시키고... 입력합니다. 그리고 손가락을 교차시킨 채 Enter 키를 누릅니다. hello가 아니라 정확히 hello.c. 이 작업 후에 여러분 앞에 보이는 것이 이전 라인과 똑같은 두 번째 활성 라인뿐이라면 모든 것이 제대로 작동하고 있는 것입니다! 귀하의 소스 코드는 기계 코드 또는 개체 코드(즉, 0과 1의 순서)로 변환되었습니다. 이제 이 코드를 실행할 수 있습니다(즉, 프로그램을 실행할 수 있습니다!). 이렇게 하려면 명령줄에 다음을 입력하고 Enter를 누르세요. "" 사이에 포함된 텍스트를 변경하지 않은 경우 아래와 같은 내용이 표시됩니다. 이제 명령을 입력 하고 Enter를 누르면 hello.c 및 hello.txt와 함께 새로운 hello 파일이 표시됩니다. 첫 번째 hello는 이름 뒤에 별표가 있어야 합니다. 이는 실행 파일, 즉 프로그램을 시작하는 데 사용되는 파일임을 나타냅니다. #include int main(void) { printf("hello, world\n"); } username:~/workspace/pset1 $lsmake hello./hellohello, worldls
버그?
make 명령 후에 오류가 표시되면 첫 번째 디버깅을 해야 할 때입니다! "예상 선언"과 같은 비문은 어딘가에 오타가 있다는 의미입니다. 위의 코드를 다시 확인하세요. 모든 세부 사항에 매우 주의하세요. 주목! 오류 설명은 영어로 제공됩니다. 명확하지 않은 경우 검색 엔진, Google 번역을 사용하거나 댓글로 질문하세요. 오류를 수정한 후에는 파일 > 저장 (또는 명령 또는 Ctrl-s) 을 사용하여 코드를 저장하는 것을 잊지 마세요 . 터미널 창 내부를 다시 클릭하고 다음을 입력 make hello 하세요. /workspace/pset1 먼저 ). 더 이상 오류가 없으면 명령을 입력하여 프로그램을 실행하십시오. ./hello 이론적으로 "print"를 명령하는 printf 연산자의 따옴표로 묶인 소중한 문구가 앞에 나타납니다. 터미널 창이 너무 작은 것 같으면 hello.c 옆에 있는 원 안의 더하기(+) 아이콘을 클릭하세요.
정확성 확인 중
check50 애플리케이션은 CS50 IDE에 내장되어 있습니다. 명령줄에서 작동하며 일부 프로그램의 오류를 확인합니다. 아직 거기에 없으면 터미널에서 다음 명령을 실행하여 ~/workspace/pset1 디렉터리로 이동합니다. cd ~/workspace/pset1 이제 실행하면 ls 최소한 hello.c 파일이 표시됩니다. 파일 이름이 Hello.c 또는 hello.C가 아닌 다음과 같은지 확인하세요. mv source destination 소스 - 현재 파일 이름, 대상 - 새 파일 이름 명령을 실행하여 파일 이름을 바꿀 수 있습니다 . mv(영어 move에서 유래)는 이름 바꾸기 유틸리티입니다. 실수로 파일 이름을 Hello.c로 지정했다면 다음 줄을 입력하세요. mv Hello.c hello.c 파일 이름이 hello.c인지 확인한 후 check50 검사 프로그램을 호출해 보겠습니다. 2015.fall.pset1.hello는 "hello world" 문제에 대한 고유 식별자입니다. check50 2015.fall.pset1.hello hello.c 프로그램이 올바르게 실행되면 다음과 같이 표시됩니다. CS50 강의 추가 자료: 1주차(3강 및 4강) - 2 녹색 웃는 얼굴은 테스트가 통과되었음을 의미합니다. check50 출력 하단에서 URL을 볼 수도 있지만 이는 직원에게만 해당됩니다(그러나 관심이 있는 경우 확인하십시오!). check50은 hello.c 파일이 존재하는지, hello.c가 컴파일되는지, 애플리케이션이 "hello, world\n"이라는 줄을 생성하는지 여부 등 3가지 테스트를 실행합니다. 슬픈 빨간색 이모티콘이 보이면 버그가 있다는 뜻입니다. :( hello.c exists \ expected hello.c to exist :| hello.c compiles \ can't check until a frown turns upside down :| prints "hello, world\n" \ can't check until a frown turns upside down 여기서 check50은 hello.c를 찾지 못했고 빨간색 스마일 표시는 이름이 잘못되었거나 파일을 잘못된 위치에 업로드했음을 나타냅니다. 노란색 "중립" 이모티콘은 테스트가 실행되지 않았음을 의미합니다. 프로그램이 확인해야 할 파일을 찾지 못하면 어디서 시작할 수 있습니까? printf() 함수가 출력해야 하는 텍스트를 변경한 경우 팝업되는 또 다른 옵션은 다음과 같습니다. :) hello.c exists :) hello.c compiles :( prints "hello, world\n" \ expected output, but not "hello, world" check50은 hello, world\n 행이 예상되었지만 다른 항목이 나타났다고 보고합니다. check50은 과정 완료에 대한 점수를 계산하지 않지만 과제 결과가 예상한 것과 다른지 확인합니다. 그리고 코스 내에서 작업의 정확성을 확인하기 전에 이를 확인할 수 있습니다(이 작업을 수행하는 방법은 나중에 알려드리겠습니다).
C 기초: 스크래치와의 비교
스크래치와 C의 안녕하세요 세상:
CS50 강의 추가 자료: 1주차(3강 및 4강) - 3 #include int main(void) { printf("hello, world\n"); }
  • CS50 강의 추가 자료: 1주차(강의 3 및 4) - 4스크래치에서 스프라이트의 "단어"를 만화 풍선에 인쇄하는 함수를 나타냅니다. C에는 만화 없이 동일한 작업을 수행하는 printf 함수가 있습니다.
  • 메인 - 영어 - "메인". 프로그램의 진입점입니다. 와 동일합니다 CS50 강의 추가 자료: 1주차(3강 및 4강) - 5.
끝없는 순환
CS50 강의 추가 자료: 1주차(3강 및 4강) - 6 C로 번역하면 while (true) { printf("hello, world\n"); } while(true)은 동일한 작업을 수행합니다. 즉, 값이 true인 동안(부울 표현식 "true" 또는 "one") 루프가 작업을 계속합니다. 이 루프는 끝없이 실행됩니다.
화면에 문구를 10번 표시하는 루프
스크래치 CS50 강의 추가 자료: 1주차(3강 및 4강) - 7 C for (int i = 0; i < 10; i++) { printf("hello, world!\n"); } i는 카운터 변수입니다; 그 값은 증가 연산자 i++에 의해 변경되어 루프가 반복될 때마다 1씩 증가합니다. 처음에는 할당 연산자 =를 사용하여 i에 값 0이 할당됩니다. 주목! Java에서와 마찬가지로 C에서도 동등성은 ==, 할당 연산자 =로 표시됩니다. 즉, a = 5는 변수 a에 값 5가 할당되었음을 의미하고 (a= =5)는 Boulogne 표현식을 의미합니다(a가 5이면 해당 표현식은 true이고, 같지 않으면 false입니다). . i가 9로 "성장"하면 루프가 중지됩니다. 계산하기 쉽습니다. 루프는 10번 실행됩니다. 따라서 특정 횟수만큼 반복해야 하는 경우 C에서는 for 루프(int i = 0; i < 10; i++)를 정의합니다. 또 다른 예: CS50 강의 추가 자료: 1주차(강 3 및 4) - 8 그리고 동일한 내용이 C로 번역되었습니다. int counter = 0; while (true) { printf("%i\n", counter); counter++; }
  • 카운터는 C와 스크래치에 값을 저장합니다. C에서는 대신에 int counter = 0을 설정했습니다 Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 9.
  • 설명을 위해 변수 유형을 int로 표시합니다. i는 정수(영어 정수, 전체)입니다.
  • 4번째 줄의 printf에서 사용하는 %i 기호는 printf에게 자리 표시자를 카운터 변수가 취하는 값으로 바꾸라고 지시하는 것과 마찬가지로 십진수 정수를 인쇄하라고 지시하는 자리 표시자입니다.
부울 표현식
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 10 와 똑같다 (x < y) ((x < y) && (y < z))
정황
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 11 그리고 "똥"에 해당하는 것은: Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12 처음으로 이해할 수 없는 문구는 어떻습니까? 이에 대한 자세한 내용은 나중에 "라이브러리" 섹션에서 설명합니다. #include
조건문
이들은 어떤 조건(논리적 표현, "예" 또는 "아니요"로만 대답할 수 있는 질문)이 참인지 확인하고, 참이면 이 조건에 연결된 몇 가지 작업을 수행합니다. 삶의 예: 비가 내리고(비가 온다고 가정) 밖에 있으면(나는 비가 올 때 밖에 있다) 우산을 펼친다. if (condition) { //исполнить, если meaning истинно } 더 복잡한 옵션: 조건이 충족되면 조치를 취하고, 그렇지 않으면 다른 조치를 취합니다. if (condition) { //выполнить действие } else { //выполнить другое действие, если condition ложно } 예: 18세 이상인 경우 액세스를 승인하세요. 그 이하이면 승인되지 않습니다. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12
선택 연산자
switch (n) { case const1: // если n equals const1, выполнить break; // condition совершилось — выйти из выбора case const2: // если n equals const2, выполнить break; ... default: // если n не equals ни одной из констант, выполнить break; } 예: n = 50이면 "CS50은 컴퓨터 과학 입문 I입니다"를 인쇄하고, n = 51이면 "CS51은 컴퓨터 과학 입문 II입니다"를 인쇄하고, 그렇지 않으면 "죄송합니다. 저는 그 수업에 익숙하지 않습니다!"를 인쇄합니다. switch (n) { case 50: printf("CS50 is Introduction to Computer Science I\n"); break; case 51: printf("CS51 is Introduction to Computer Science II\n"); break; default: printf("Sorry, I'm not familiar with that class!\n"); break; }
사이클
while: 조건을 확인한 후 조건이 true인 동안 작업을 실행합니다. while (condition) { // выполнять, пока истина } do/while은 처음에는 조건을 확인하지 않고 작업을 수행한 다음 확인만 한다는 점에서 다릅니다. 조건이 true이면 조건이 false가 될 때까지 해당 작업을 반복합니다. do { ) // выполнять, пока истина } while (condition); for 루프는 지정된 횟수만큼 작업을 반복합니다. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 13 루프는 서로 중첩될 수 있습니다. 이 경우 외부 루프의 각 단계에서 내부 루프가 완전히 실행됩니다. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 14
C의 기본 데이터 유형
основные типы данных в C
라이브러리 C
C 프로그램의 첫 번째 줄이 무엇을 의미하는지 이미 궁금했을 것입니다. C 프로그램 의 역할은 무엇이며 C 프로그램 없이도 할 수 있습니까? #include 행은 매우 중요한 작업을 수행합니다. 이미 작성된 코드 라이브러리를 프로그램에 포함합니다. 연결된 라이브러리의 이름은 꺾쇠괄호(<>)로 묶이고 확장자(.h)를 갖습니다. 라이브러리가 없다면 가장 기본적인 동작이라도 매번 반복해서 설명해야 할 것입니다. 우리가 연결한 도서관#include 입력/출력 기능이 포함되어 있습니다. printf() 함수를 사용하여 화면에 인쇄할 수 있게 해줍니다. 즉, #include 줄을 작성하지 않았다면 , 그러나 프로그램 본문에 printf() 함수를 남겨 두었습니다. 이를 실행하려고 하면 오류가 발생했을 것입니다! 왜냐하면 이 라이브러리가 없으면 컴파일러는 printf()가 무엇인지 알 수 없기 때문입니다. 표준 라이브러리가 있으며 언어의 어휘를 구성합니다. printf() 함수는 컴퓨터에 내장되어 있지 않고 표준 C 라이브러리에 포함되어 있는 함수로, 이전에 일부 프로그래머가 작성하여 라이브러리에 포함시켰습니다. 이제 다른 사람들도 바퀴를 재발명하지 않고도 이를 사용할 수 있습니다. 컴파일러가 이를 "이해"할 수 있도록 다음과 같이 연결합니다. . CS50 프로세스에는 다른 표준 라이브러리가 사용됩니다. 예를 들어, 문자열 작업(길이, 추가 등 결정)을 설명하는 문자열 라이브러리입니다. 다른 인기 있는 프로그래밍 언어에 비해 표준 C 라이브러리의 수는 매우 적습니다. 그러나 자체 작성되었으며 대부분 고도로 전문화된 라이브러리가 있습니다. 응, 도서관 CS50 학생들을 위해 특별히 제작되었습니다. 이제 중요한 점을 지적할 시간입니다. 프로그램을 작성하고 자신의 코드를 사용하여 문제를 해결하는 것 외에도 좋은 개발자는 또 다른 중요한 기술을 가지고 있습니다. 즉, 이미 작성된 도구에 대한 지식과 이를 사용하는 능력(다른 사람의 라이브러리)입니다. "바퀴"를 재발명하는 데 시간을 낭비하지 마십시오. 따라서 꽤 흔해 보이는 지루하거나 복잡한 문제를 해결하는 과정에 있다면 "다른 사람이 솔루션을 작성했나요?"라는 질문을 스스로에게 물어보는 법을 배우십시오. 이것이 사실일 가능성이 높으며 기존 라이브러리에서 이 함수를 찾을 수 있습니다. 기술적인 용어로 라이브러리는 링커를 사용하여 개체 파일 모음을 결합하여 생성된 이진 파일입니다. 개체 파일은 응용 프로그램을 컴파일할 때 얻는 확장자(*.o)가 있는 파일입니다.
C 라이브러리의 구조
Когда программист пишет библиотеку, code распределяется по двум типам файлов — заголовочный файл (header, расширение *.h) и файл реализации (implementation, расширение *.c). Заголовочный файл содержит code, описывающий ресурсы библиотеки, которые вы можете использовать. То есть описания переменных, функций, структур, типов и прочее. Если вам интересно, что содержит та or иная библиотека, нужно заглянуть именно в заголовочный файл. В терминале CS50 IDE (и других средах Linux) вы можете вызвать приложение less для просмотра файлов и открыть с его помощью интересующую вас библиотеку: less /usr/include/stdio.h Файл откроется прямо в терминале. Правда, для новичков он будет очень трудночитаемым. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 15 Whatбы выйти из less, нажмите q на клавиатуре. Заголовочный файл не содержит code функций, что служит примером очень важного понятия — сокрытия данных or инкапсуляции. Пользователю системы незачем знать «внутренности» библиотек, ему достаточно, чтобы она работала. Если вы прошерстите stdio.h, то не найдете там реализации printf(), хотя How её использовать, вы уже знаете. Это сделано для того, чтобы защитить данные от вмешательства, которое порой может плохо отразиться на системе. Так, если кто-то изменит реализацию функции printf() в библиотеке, это отразится на всех тех программах, которые её используют. Любознательным будет интересно, где спрятана реализация. Согласно конвенции (соглашения, принятые в мире программирования) такой code хранят в файле с расширением (*.c). После компиляции библиотеки на основе двух файлов с одинаковым именем, но разным расширением создается an objectный файл, который собран так, чтобы создать файл с двоичным codeом библиотеки. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 16 Author библиотеки передает программисту, который хочет её использовать, два file — с двоичным codeом, а также заголовочный файл. Таким образом, файл с исходным codeом программисту не нужен. Точнее, он может быть нужен, если программист хочет что-то поменять в самой библиотеке и перекомпorровать её под собственные нужды. Whatбы воспользоваться функциями библиотеки в своей программе нужно проделать следующее: 1. Включить заголовочный файл в программу с помощью строки #include В случае стандартных библиотек достаточно указать Name библиотеки в угловых скобках: #include <Name_библиотеки.h> Если библиотека, которую вы хотите подключить, лежит в той же папке, что и ваша программа, подключайте её следующим образом: #include “Name_библиотеки.h” 2.Присоединить бинарный файл для компиляции. Это очень важный шаг, поскольку, How мы говорor выше, заголовочный файл не содержит реализации элементов библиотеки. Whatбы это сделать, нужно вызвать компилятор clang с флагом –l и идущим непосредственно за ним названием библиотеки. Например, компонуем библиотеку cs50: clang hello –lcs50 Clang — один из компиляторов. Для компиляции можно также использовать уже знакомую вам программу make. По сути, она вызывает clang с определенными аргументами командной строки.
И снова Hello C: разбор синтаксиса простейших программ
Директива #include подключает библиотеку ввода/вывода . Программы в C состоят из функций, а те — из операторов и переменных. Функция — это кусок codeа, в котором уже есть or подаются Howие-то данные, а Howие-то данные получают в результате её исполнения. Фигурные скобки { } ограничивают тело функции — описание того, что она должна делать. printf() из стандартной библиотеки stdio выводит любую строку на экран. Строки заключаются в двойные кавычки, а символ “\n” означает перевод курсора на новую строку. Пример: функция «посчитать квадрат целого числа». Передаем функции данные, в нашем случае — число, которое нужно возвести в квадрат. Затем в ней прописывается алгоритм умножения числа на самое себя, и результат этого умножения она выдает на выходе. int sqr(int a) { return a*a; } int sqr(int a) — название функции. В скобках — её аргумент a, это то, что подается на вход функции. Это How переменная в уравнении. То есть, если мы хотим узнать квадрат числа 5, то мы вызовем нашу функцию в виде sqr(5) и получим результат 25. int — тип данных (от англ. integer — целые числа). Наша функция написана так, что мы не можем вызвать её с аргументом a = 5.5. Такая попытка выдаст ошибку, поскольку 5.5 — число дробное, а наше число должно быть целым. int перед именем функции означает тип, который должна эта функция возвращать. Он не обязательно совпадает с типом аргумента. Пример: функция, которая отнимает от целого числа 0.5: double bit_less(int a) { double b; b = a – 0.5; return b; } int main (void) — название главной функции. В одной программе может быть много функций, но, чтобы начать её выполнять, нужна функция под названием main. Слово void в скобках означает, что у этой функции нет аргументов. Внимание! main всегда возвращает int, но return для неё не обязателен. Пример функции не возвращающей значения: void sayhello(void) { printf(“hello everyone!\n”); } При вызове функции в главной программе, она выведет приветствие. Давайте напишем одну программу, в которой будет несколько функций. Тех, что мы уже создали выше. Две созданные нами функции вызовем через главную функцию main(). В C, How и любом языке, есть такой элемент, How комментарий or примечание в коле программы, предназначенное не для компьютера, а для понимания людей. Например, описание, что именно делает code. Компилятор комментариев не видит. Комментирование программ — очень важный момент, поскольку порой разобраться в чужом (и даже своем) codeе очень сложно. //пример однострочного комментария /** а это – многострочного **/ #include //функция возведения в квадрат числа a int sqr(int a) { return a*a; } //выводит приветствие void test(void) { printf ("hello everyone!\n"); } //главная функция int main(void) { test(); printf("%d\n", sqr(5)); } Почти всё, что есть в этой программе вы уже видели. Две функции — возведения в квадрат и приветствия и главная функция main, где мы последовательно вызываем эти две функции. В результате выполнения программы у нас сначала выведется приветствие, на следующей строке — квадрат 5. Обратите внимание, функция test() вызывается с пустыми скобками, потому что её аргументы определены How void.
Еще немного о вводе/выводе в C
Вы, наверное, уже успели заметить странные символы %d и %f в скобках оператора printf. Дело в том, что функция printf выводит данные в следующем обобщенном виде: рrintf ("управляющая строка", аргумент1, аргумент2,...); Управляющая строка содержит компоненты трех типов:
  • символы, которые выводятся на экран дисплея;
  • спецификаторы преобразования, которые вызывают вывод на экран очередного аргумента из последующего списка;
  • управляющие символьные константы.
Спецификатор преобразования начинается со знака % и заканчивается символом, задающим преобразование. Некоторые из таких символов:
  • с: meaningм аргумента является символ;
  • d or i: десятичное целое число;
  • f: десятичное число с плавающей точкой;
  • s: строка символов.
То есть, %d означает, что на экране появится целое десятичное, а %f — десятичное с плавающей запятой. What если нам нужно, чтобы пользователь ввёл данные с клавиатуры? Для этого можно использовать функцию scanf( ), прототип которой также лежит в библиотеке stdio. Whatбы считать с экрана вещественное число, в программе нужно написать строку scanf("%d", &a); Давайте перепишем нашу программу так, чтобы пользователь сам вводил число, которое нужно возвести в квадрат. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 17
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION