JavaRush /Java блогу /Random-KY /CS50 лекциялары үчүн кошумча материалдар: 1-жума (3 жана ...
Masha
Деңгээл

CS50 лекциялары үчүн кошумча материалдар: 1-жума (3 жана 4-лекциялар)

Группада жарыяланган
cs50 орус тorнде кошумча материалдар 1-апта тапшырмалары

Биринчи жуманын максаттары

  • Негизги Linux буйруктары менен таанышыңыз
  • Негизги С синтаксисин үйрөнүп, бир нече маселелерди чечиңиз
  • Тазараак ойлоно баштаңыз =)
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 терезесинин ылдый жагында, Терминал өтмөгүндө терминал терезеси же буйрук сабы панели бар. Сиз бул жерге сап буйруктарын киргизсеңиз болот: терезе интерфейси сыяктуу эле нерсени жасай аласыз, мисалы, тиркемелерди ишке киргизүү, файлдарды жок кылуу жана түзүү, программалык камсыздоону орнотуу. Эгер сиз эч качан буйрук сабы менен иштебеген болсоңуз, анда бул ыкма түйшүктүү көрүнөт: сиз буйруктарды эстеп, иконалар менен баскычтарды басуунун ордуна аларды теришиңиз керек. Кандайдыр бир деңгээлде бул чындык, андан кийин терезе интерфейси ойлоп табылган. Бирок, буйрук сабы бардык операциялык системаларда жеткorктүү жана администраторлор аны жакшы көрүшөт. Жана баары, анткени кээде ансыз жашай алbyte. Терминалдагы IDE терезесинде сиз табышмактуу сызыкты көрөсүз: username:~/workspace $ "колдонуучунун аты" ордуна автоматтык түрдө түзүлгөн ат (сиздин каттоо маалыматыңыздын негизинде) болот. Терминал терезесин чыкылдатып, териңиз: update50 Enter баскычын басыңыз. Буйрук системаны жаңыртууну суранат. Терминалда орнотуу процессин сүрөттөгөн сызыктарды көрөсүз. Жаңыртуу аяктаганга чейин CS50 IDEди жаппаңыз ! . Андан кийин, демейки сызык кайрадан пайда болот, сиздин атыңыз менен.
IDEде иштөө
Келиңиз, файлдарыңыз сактала турган папканы түзөлү. CS50 IDE жогорку сол бурчунда ~/workspace (өзүңүздүн түпкү каталогуңуз) оң баскычын чыкылдатып , Жаңы папканы тандаңыз . Папканын атын өзгөртүү pset1 (эгер сиз атын туура эмес жазсаңыз, папкаңызды оң баскыч менен басып, Атын өзгөртүүнү тандаңыз ). Андан кийин pset1 папкасын оң баскыч менен чыкылдатып , Жаңы файлды тандаңыз . Untilted файлы пайда болот, анын hello.txt атын өзгөртөлү . hello.txt файлын эки жолу басыңыз. CS50 IDEде сиз жаңы өтмөктү жана оң жакта тере турган талааны көрөсүз. Эгер сиз муну жасаган болсоңуз, өтмөктөгү файлдын аталышынын алдында пайда болгон жылдызчага (*) көңүл буруңуз - бул файлга өзгөртүүлөр киргизилгенин, бирок сакталбаганын көрсөтүүчү көрсөткүч. Файлды сактаңыз *Файл > Сактоо же команданы + S (Apple машиналарында) же Ctrl + S (компьютерде). Жылдызча жоголуп кетиши керек. Келгиле, файл кайсы жерде болушу керек экенин текшерип көрөлү. Келиңиз, муну буйрук сабын колдонуп жасайлы, ага көнүүгө убакыт келди :). Мурдагыдай эле, терминалдагы активдүү сызык төмөнкүдөй көрүнөт: Workspace - учурдагы жумушчу каталог (жумуш чөйрөсүндө ачык). Тильда (~) тамыр каталогун көрсөтөт (иш мейкиндиги анда жайгашкан). Терминалдагы иш мейкиндиги CS50 IDEнин жогорку сол бурчундагы ~/workspace сөлөкөтү менен бирдей экенин эске алыңыз. Кел, машыгалы. Терминалдын каалаган жерин чыкылдатып, буйрук сабына териңиз жана Enter баскычын басыңыз. Бул эки кичине тамгалар - "тизме" үчүн кыска - учурдагы иш мейкиндигиндеги каталогдун ичинде жайгашкан файлдар менен папкалардын тизмесин алып чыгат. Башка нерселердин арасында сиз жараткан pset1ди көрөсүз ! Эми команданы колдонуп папкабызды ачалы. Биз же кененирээк теребиз: cd (каталогду өзгөртүү) буйругу активдүү каталогду өзгөртөт, биздин учурда активдүү сап болуп өзгөрдү Бул сиздин азыр каталогдо экениңизди ырастайт (сап "Мен жумушчу мейкиндиктин ичинде pset1демин" дегенди билдирет. түпкү папкадагы папка, ~" менен белгиленет). Эми териңиз hello.txt файлын көрөсүз ! Терминалдагы атын бассаңыз, эч нерсе болбойт: бул текст, ал активдүү бербейт. шилтеме, бирок ал hello.txt болушу керек экенин ырастайт.Түр Эгер сиз жөн гана cd буйругун жазып, бирок аргумент бербесеңиз (б.а. ал кире турган папканын атын), ал сизге кайтарып берет демейки түпкү каталогуна, андыктан сиз активдүү сапта төмөнкү сүрөттү көрөсүз: 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
Салам!
Акыры, бул учур келди! Программалоону баштайлы. IDEдеги pset1 папкабыздын ичинде hello.c деп аталган файлды түзүңүз (кеңейтүү талап кылынат), аны жаңы өтмөктө ачыңыз (биз муну мурунку абзацтан кантип жасоону эстейсиз деп ойлойбуз). МААНИЛҮҮ! Тамгалар кичине болушу керек, Linux регистрди сезгич. Hello.c жана hello.c башка файлдар. CS50 IDE терезесинин оң жагына төмөндө көрсөтүлгөн текстти жазыңыз. Ооба, сиз аны көчүрө аласыз, бирок аны терүү пайдалуураак. CS50 IDE синтаксисин баса белгилегендиктен тамгалар ар кандай түстө. Ал жакшыраак окуу үчүн түс менен тексттин блокторун баса белгилейт. Түстөр файлдын өзүндө сакталbyte, алар IDEде гана көрүнөт. Эгерде алар бар болсо, анда IDE Cти түшүнөт жана сиз файлдын кеңейтorшинде (*.c) C экенин көрсөттүңүз. Эгер сиз ошол эле файлды hello.txt деп атасаңыз, текст бир түстө болмок. Баарын мисалдагыдай тергениңизди текшериңиз, антпесе биринчи катаны кармап каласыз =). Дагы бир жолу сиздин көңүлүңүздү кичине жана чоң тамгалардын айырмасына бурабыз. \n символу курсорду кийинки сапка жылдырат жана кийинки киргизилген текст программанын чыгарылышы менен жабышпайт. Ооба, жана чекиттүү үтүр (;) жөнүндө унутпа. Бул программалык билдирүүлөр үчүн маанилүү бөлгүч; С аларсыз иштегиси келбейт. Файл > Сактоо (же буйрук же Ctrl баскычтарын) чыкылдатыңыз . Файлдын аталышынын алдындагы жылдызча жоголуп кеткенин байкадыңызбы? Ооба болсо, анда өзгөртүүлөр сакталды. Кодуңуздун астындагы терминал терезесинин каалаган жерин чыкылдатыңыз жана ~/workspace/pset1 ичинде экениңизди текшериңиз (эгерде сиз жок болсоңуз, cd баскычын чыкылдатып, Enter баскычын, андан кийин cd workpace/pset1 жана кайра Enter баскычын басыңыз). Сиздин активдүү сызыгыңыз төмөнкүдөй болушу керек: hello.c файлы дал ошол жерде болушу керек экенин текшерип көрөлү . Терип , Enter басыңыз. Сиз дагы hello.cти көрүп жатасызбы? Болбосо, бир нече кадам артка кайтыңыз жана кайра керектүү каталогдо файлды түзүңүз. ...Эми салтанаттуу учур келет: манжаларыбызды кайчылаштырып,... теребиз: жана манжаларыбызды кайчылаштырып Enter баскычын басабыз. Hello.c эмес, так салам. Бул аракеттен кийин сиздин алдыңызда мурункуга так окшош экинчи активдүү сызык болсо, анда баары иштеп жатат! Сиздин баштапкы codeуңуз машинага же an object codeуна которулган (башкача айтканда, 0 жана 1 ырааттуулугу менен). Эми бул codeду аткарууга болот (башкача айтканда, программаны иштетсе болот!). Бул үчүн, териңиз: буйрук сабына Enter баскычын басыңыз. Эгер сиз ""лардын ортосундагы текстти өзгөртпөсөңүз, анда төмөндө көрөсүз: Эгер азыр буйрукту терип , Enter баскычын бассаңыз, hello.c жана hello.txt менен бирге жаңы hello файлын көрөсүз. Биринчи саламда ысымдан кийин жылдызча болушу керек, ал бул аткарылуучу файл, башкача айтканда, сиз программаны ишке киргизген файл экенин билдирет. #include int main(void) { printf("hello, world\n"); } username:~/workspace/pset1 $lsmake hello./hellohello, worldls
Мүчүлүштүктөрбү?
Эгерде make буйругунан кийин каталарды көрсөңүз, анда биринчи мүчүлүштүктөрдү оңдоого убакыт келди! "Күтүлгөн декларация" сыяктуу жазуулар сиз бир жерде ката кетиргениңизди билдирет. Жогорудагы codeду дагы бир жолу текшериңиз, бардык майда-чүйдөсүнө чейин этият болуңуз. Көңүл бургула! Ката сүрөттөмөлөрү англис тorнде берилген. Эгер түшүнүксүз болсо, Google Translate деген издөө системасын колдонуңуз же комментарийлерде суроо бериңиз. Каталарды оңдогондон кийин, File > Save (же буйрук же Ctrl-s) аркылуу codeуңузду сактап коюңуз, кайра терминал терезесинин ички жагын басып, териңиз make hello (жөн гана ~/workspace/pset1 ичинде экениңизди текшериңиз. алгачкы ). Эгерде каталар жок болсо, анда команданы терүү менен программаны иштетиңиз.Теорияда ./hello , сиз “басып чыгаруу” буйругун берген 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 "салам дүйнө" көйгөйүнүн уникалдуу идентификатору экенин эске алыңыз. check50 2015.fall.pset1.hello hello.c Эгерде программа туура аткарылса, сиз көрөсүз: Лекциялар үчүн кошумча материалдар CS50: 1-жума (3 жана 4-лекциялар) - 2 Жашыл смайликтер сынактан өткөнүн билдирет. Ошондой эле check50 чыгаруунун ылдый жагындагы URL дарегин көрө аласыз, бирок ал кызматкерлер үчүн гана (бирок, эгер сизди кызыктырса, текшерип көрүңүз!). check50 3 тестти өткөрөт: hello.c файлы барбы, hello.c компиляциялайбы жана колдонмо "салам, дүйнө\n" деген сапты чыгарабы. Эгер сиз кайгылуу кызыл смайликтерди көрсөңүз, анда сизде ката бар. :( 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 таба алган жок жана кызыл смайлик сиздин атыңызда ката кетиргениңизди же файлды туура эмес жерге жүктөгөнүңүздү көрсөтүп турат. Сары "нейтралдуу" эмотикондор сыноолор өтпөй калганын билдирет. Эгерде программа текшерorши керек болгон файлды таппаса, алар кайдан баштаса болот? Бул жерде сиз printf() функциясы чыгара турган текстти өзгөртсөңүз, калкып чыга турган дагы бир вариант: :) hello.c exists :) hello.c compiles :( prints "hello, world\n" \ expected output, but not "hello, world" check50 hello, world\n сызыгы күтүлгөнүн кабарлайт, бирок башка нерсе пайда болду. check50 курсту аяктоо үчүн упайларды эсептебейт, бирок тапшырманын жыйынтыгы күтүлгөндөн айырмаланганын текшерет. Жана бул курстун ичиндеги тапшырманын тууралыгын тастыктоодон мурун муну текшерүүгө мүмкүндүк берет (бул кантип жасалаарын кийинчерээк айтып беребиз).
C Негиздери: Scratch менен салыштыруу
Scratch жана Cдеги салам дүйнөсү:
CS50 лекциялары үчүн кошумча материалдар: 1-жума (3 жана 4-лекциялар) - 3 #include int main(void) { printf("hello, world\n"); }
  • Лекциялар үчүн кошумча материалдар CS50: 1-жума (3 жана 4-лекциялар) - 4Scratch'те спрайттын "сөздөрүн" комикс көбүгүгө басып чыгаруучу функцияны билдирет, C тorнде бир эле нерсени аткарган printf функциясы бар, мультфильмдерсиз гана.
  • негизги - англис тorнде - "негизги". Программага кирүү чекити. Ошол эле CS50 лекциялары үчүн кошумча материалдар: 1-жума (3 жана 4-лекциялар) - 5.
Чексиз цикл
CS50 лекциялары үчүн кошумча материалдар: 1-жума (3 жана 4-лекциялар) - 6 C тorне которулган: while (true) { printf("hello, world\n"); } while (true) бир эле нерсени аткарат: цикл өз ишин улантууда, ал эми мааниси true (бул "чын" же "бир" туюнтмасы). Бул цикл чексиз иштейт.
Экранда фразаны 10 жолу көрсөткөн цикл
Scratch Лекциялар үчүн кошумча материалдар CS50: 1-жума (3 жана 4-лекциялар) - 7 C for (int i = 0; i < 10; i++) { printf("hello, world!\n"); } i – эсептегич өзгөрмө; анын мааниси i++ көбөйтүү оператору тарабынан өзгөртүлүп, циклдин ар бир итерациясында аны 1ге көбөйтөт. Алгач i га 0 мааниси ыйгарылган = ыйгаруу оператору. Көңүл бургула! Javaдагыдай эле, С тorнде теңдик ==, дайындоо оператору = менен белгиленет. Башкача айтканда, a = 5 a өзгөрмөсүнө 5 мааниси ыйгарылганын билдирет, ал эми (a= =5) Булон туюнтмасын билдирет (эгерде a 5ке барабар болсо, анда туюнтма чын, тең эмес болсо, анда жалган) . Цикл i 9га "өскөндө" токтойт. Аны эсептөө оңой, цикл 10 жолу аткарылат. Демек, бир нерсени белгилүү бир санда кайталашыңыз керек болсо, C тorнде сиз for циклин аныктайсыз (int i = 0; i < 10; i++). Дагы бир мисал: Лекциялар үчүн кошумча материалдар CS50: 1-жума (3 жана 4-лекциялар) - 8 Жана ошол эле нерсе C тorне которулган: int counter = 0; while (true) { printf("%i\n", counter); counter++; }
  • эсептегич C жана Scratch тилдеринде маанини сактайт. С тorнде биз int counter = 0 ордуна койдук Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 9.
  • Биз тактоо үчүн өзгөрмөнүн түрүн int деп белгилейбиз: i бүтүн сан (англис тorнен бүтүн, бүтүн).
  • Төртүнчү саптагы 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: шартты текшерет, андан кийин шарт чын болуп турганда аракетти аткарат while (condition) { // выполнять, пока истина } do/while шартты текшербестен аракетти биринчи жолу аткаргандыгы менен айырмаланат, андан кийин гана текшерет. Шарт чын болсо, шарт жалган болгонго чейин аракетти кайталайт. do { ) // выполнять, пока истина } while (condition); for цикли иш-аракетти белгилүү бир нече жолу кайталайт. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 13 Циклдерди бири-бирине уя салса болот. Бул учурда, тышкы циклдин ар бир кадамында, ички цикл толугу менен аткарылат. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 14
С тorндеги маалыматтардын негизги түрлөрү
основные типы данных в C
Китепканалар C
Сиз C программасынын биринчи сабы эмнени билдирерин ойлонгондурсуз: анын ролу эмнеде жана ансыз да мүмкүнбү? #include сабы абдан маанилүү нерсени аткарат: ал программаңызга мурунтан эле жазылган codeдун китепканаларын камтыйт. Туташкан китепкананын аталышы бурчтуу кашаалардын ичинде (<>) жана узартылышы (.h) бар. Эгерде китепканалар жок болсо, анда кандайдыр бир, ал тургай эң негизги иш-аракет, ар бир жолу кайра-кайра сүрөттөлүшү керек болчу. Биз бириктирген китепкана#include киргизүү/чыгарма функцияларын камтыйт. Бул экранга басып чыгаруу үчүн printf() функциясын колдонууга мүмкүндүк берет. Башкача айтканда, #include сабын жазбаганыбызда , бирок printf() функциясын программанын негизги бөлүгүндө калтырдык; биз аны иштетүүгө аракет кылганыбызда, биз ката кетирмекпиз! Анткени бул китепканасыз компилятор printf() деген эмне экенин билбейт. Стандарттуу китепканалар бар, алар тилдин лексикасын түзөт. printf() функциясы компьютерге курулган эмес, бирок Си тorнин стандарттык китепканасына киргизилген.Б.а., аны мурда кандайдыр бир программист жазып, китепканага киргизген. Эми башкалар аны дөңгөлөктү ойлоп таппай эле колдоно алышат. Компилятор аны "түшүнүшү" үчүн биз туташып турабыз . CS50 процессинде колдонулган башка стандарттуу китепканалар бар. Мисалы, саптар менен операцияларды сүрөттөгөн саптардын китепканасы (узундукту аныктоо, кошуу ж.б.). Башка популярдуу программалоо тилдерине салыштырмалуу стандарттык С китепканаларынын саны өтө аз. Бирок өз алдынча жазылган, көбүнчө жогорку адистештирилген китепканалар бар. Ооба, китепкана CS50 студенттери үчүн атайын түзүлгөн. Маанилүү эскертүү жасоого убакыт келди: программаларды жазуудан жана өзүңүздүн codeуңузду колдонуу менен көйгөйлөрдү чечүүдөн тышкары, жакшы иштеп чыгуучунун дагы бир маанилүү жөндөмү бар: буга чейин жазылган куралдарды билүү жана аларды (башка адамдардын китепканалары) колдонуу жөндөмү. "дөңгөлөктү" кайра ойлоп табууга убакытты текке кетирбөө. Андыктан, эгер сиз абдан кеңири таралган көрүнгөн тажатма же татаал маселени чечүү процессинде жүрсөңүз, анда өзүңүзгө суроо бергенди үйрөнүңүз: "Чечүүнү башка бирөө жаздыбы?" Мүмкүнчүлүктөр жакшы, жана сиз бул функцияны учурдагы китепканадан таба аласыз. Техникалык тил менен айтканда, китепкана бул шилтемени колдонуу менен an object файлдарынын жыйындысын бириктирүү аркылуу жасалган бинардык файл. Объект файлдары, сиз тиркемелерди компиляциялоодо ала турган кеңейтүү (*.o) бар файлдар.
С китепканаларынын структурасы
Когда программист пишет библиотеку, 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