Kako postaviti pametne telefone i računala. Informativni portal

Jezik cc. C Osnove

OSNOVE C

Uvod

Poglavlje 1 C Osnove

1.1. Abeceda

1.2. Osnovne C konstrukcije

1.3. Ulaz izlaz.

1.3.1. Zaključak

1.4. Osnovni tipovi Podaci o jeziku C

1.4.1. Identifikatori.

1.4.2. Tipizirane konstante

1.4.3. Varijable

1.4.3.1. Cjelobrojni tipovi

1.4.3.2. Pravi tipovi

1.4.3.3. Tipovi likova

1.4.4. Tip podataka string

1.4.5. strukture

1.4.5.1. Nizovi

1.4.5.2. Upisi

1.4.6 Opseg i životni vijek varijabli

1.5. Glavni operateri

1.6. Pretprocesor

1.7. Programi. Funkcije

1.8. Pokazivači

1.9. Pokazivači i funkcije

1.10. Datoteke

1.11. Dodatne funkcije Xi

1.11.1. Funkcije pretvorbe

Funkcije pretvorbe niza znakova: atoi(), atof(). 37s.

1.11.3. Funkcije nizova

1.12. Značajke C programiranja

1.12.1. Moduli. Višemodulno programiranje

1.12.2. Modeli memorije

1.12.3. Programiranje u DOS-u i Windows-u

1.12.4. Korištenje asemblerskog jezika u C programima

Poglavlje 2 C Primjeri

2.1. Sortiranje

2.2. Rekurzivni algoritmi

2.3. Zadatak "Kule Hanoja"

Poglavlje 3 Osnove C++

3.1. Razlike između C++ i C

3.2. Objektno orijentirano programiranje u C++

3.2.1. Nastava

3.2.2. Preopterećenje funkcija

3.2.3. Konstruktori

3.2.4. Destruktori

3.2.5. Konstruktori s parametrima

3.2.6. Uvod u nasljeđivanje

3.2.7. Virtualne funkcije

3.2.8. Pokazivači na objekte

Poglavlje 4. Osnove programiranja u C++Builderu

4.1. Značajka C++Buildera

4.2. VCL komponente. Svojstva. Razvoj događaja. Metode

4.2.1. Vrste komponenti

4.2.2. Hijerarhija VCL klasa

4.3. Struktura datoteke u C++Builderu

4.4. Vizualne komponente (VCL)

4.5. Programi, event management, iznimke

4.6. Strategija otklanjanja pogrešaka za Windows programe

4.7. Korištenje VCL komponenti u razvoju programa

4.8. Grafičke komponente.

4.9. Multimedija

4.10. Sprite grafika

4.11. OLE2 objektna tehnologija

4.12. DLL-ovi.

4.13. Razvoj vizualnih komponenti

4.14. Uvod u CGI programiranje

3.15. Programiranje baze podataka.

3.16. Paketi

Zaključak

Književnost

Dodatak N1

Uvod

Godine 1804. francuski izumitelj Joseph Marie Jacquard stvorio je "programski upravljani" tkalački stan. Za upravljanje strojem korištene su bušene kartice međusobno povezane u obliku trake. Drvene igle “čitača” stroja, položajem rupa na bušenoj kartici, određivale su koje niti treba podići, a koje spustiti da bi se dobio željeni uzorak.

Godine 1890. u SAD-u izumitelj Herman Hollerith razvio je elektromehaniku stroj za računanje- tabulator kontroliran bušenim karticama korišten je za tabeliranje rezultata američkog popisa stanovništva. Tvrtka tabulator koju je osnovao Hollerith kasnije je postala International Business Machines (IBM) Corporation.

Godine 1936. dvadesetpetogodišnji student na Sveučilištu Cambridge, Englez Alan Turing, objavio je članak "O izračunljivim brojevima", u kojem je razmatrao hipotetski uređaj ("Turingov stroj"), pogodan za rješavanje bilo kojeg matematičkog ili matematičkog problema koji se može odlučiti. logički zadatak, - prototip programabilnog računala.

Godine 1941. njemački inženjer Konrad Zuse izgradio je operativno računalo Z3 koji je korišten binarni sustav računanje. Programi su snimani na bušenu traku.

Godine 1945., na Visokoj tehničkoj školi Sveučilišta u Pennsylvaniji (SAD), fizičar John Mauchly i inženjer Prosper Eckert izgradili su potpuno elektronski stroj"Eniac". Programiranje je zahtijevalo ručno postavljanje tisuća prekidača i uključivanje stotina utikača u utičnice na kontaktnoj ploči.

Dana 1. lipnja 1945. poslano je izvješće američkog matematičara mađarskog podrijetla Johna von Neumanna, "Preliminarni izvještaj o stroju Advak", koje je sadržavalo koncept pohranjivanja računalnih instrukcija u vlastitu internu memoriju.

21. lipnja 1948. na Sveučilištu u Manchesteru (Velika Britanija) na stroju Mark-1 izvršen je prvi svjetski program pohranjen u memoriji stroja - traženje najvećeg faktora zadanog broja.

Godine 1949., pod vodstvom Mauricea Wilksa, stvoreno je računalo Edsack. Edsac dizajneri uveli su sustav mnemoničke notacije, gdje je svaka strojna instrukcija predstavljena jednom veliko slovo, i automatizirati postavljanje potprograma na određeno mjesto u memoriji. Maurice Wilks nazvao je mnemoničko kolo i biblioteku potprograma asemblerskim sustavom - otuda riječ "assembler".

Godine 1949. u Philadelphiji (SAD) pod vodstvom Johna Mauchlyja stvoren je "Short Code" - prvi primitivni interpreter jednog programskog jezika.

Godine 1951. američka programerka Grace Hopper razvila je prvi program emitiranja na Remington Randu. Hopper ga je nazvao kompajler (prevodilac - povezivač).

Godine 1957. na 20. katu sjedišta IBM-a na aveniji Madison u New Yorku rođen je jezik Fortran (FORmula TRANslation - prijevod formula). Razvojni tim vodio je 30-godišnji matematičar John Backus. Fortran je prvi od "pravih" jezika visoke razine.

Godine 1972. Dennis Ritchie, 31-godišnji sistemski programer u Bell Labsu, razvio je programski jezik C.

Godine 1984. francuski matematičar i saksofonist Philip Kahn osnovao je Borland International.

C je izvorno razvijen kao programski jezik za operativni sustav Unix.

Ubrzo se počeo širiti na praktične programere. U kasnim 70-ima razvijeni su C prevoditelji za mikroračunala operacijski sustav SR/M.

Nakon pojave IBM PC-a počeli su se pojavljivati ​​i C prevoditelji (za ovo računalo sada ih ima više od 20).

Godine 1983. Američki institut za standarde (ANSI) formirao je Tehnički odbor X3J11 za stvaranje standarda za jezik C. Borlandov C++ jezik, koji se pojavio na tržištu, udovoljava većini zahtjeva standarda.

U svojoj srži, C je jezik funkcija. Programiranje u C-u vrši se pisanjem funkcija i pozivanjem funkcija knjižnice. Većina funkcija vraća neku vrijednost koja se može koristiti u drugim izjavama.

Među mnogim prednostima jezika C treba istaknuti glavne:


Univerzalnost (koristi se na gotovo svim postojećim računalima);

Kompaktnost i univerzalnost koda;

Brzina izvršavanja programa;

Fleksibilnost jezika;

Visoka struktura.


Poglavlje 1 C Osnove

1.1. Abeceda

Abeceda jezika sastoji se od sljedećih znakova:

Velika i mala latinica slova A-Z, a-z i podvlaka. Brojevi od 0 do 9. Posebni znakovi + - * / = > < . ; , : { } () # $.

Znakovi razmak, tabulator, novi redak, povratak na početak nazivaju se razmak.

C++ program je niz ACSII znakova koji predstavljaju njegov izvorni tekst.

1.2. Osnovne C konstrukcije

Smatrati jednostavan program ispisivanje fraze "Pozdrav s računala" na ekranu

#uključi

// program

printf("Pozdrav s računala\n");

Razmotrite strukturu programa

Naredba #include uključuje datoteku stdio.h u naš program. Datoteka sadrži informacije o I/O funkcijama.

Datoteka pod nazivom stdio.h sadrži informacije o I/O.

Simbol # označava da je prije prevođenja programa u njega potrebno uključiti funkcije iz datoteke stdio.h - to je takozvana pretprocesorska obrada, koja obavlja neku preliminarnu obradu teksta programa prije prevođenja.

Redak main() sadrži naziv funkcije s kojom se program uvijek pokreće. Prazne zagrade označavaju da je ovo funkcija, ali nema parametara.

Nakon znakova // slijede komentari (za jedan red), (znakovi između /* i */ također se nazivaju komentarima).

Proteza za zube() označava početak i kraj tijela programa ili funkcije. Također se koriste za grupiranje više programskih izraza u blok.

Redak printf ("Pozdrav s računala\n") sadrži standardnu ​​C funkciju ispisa. Niz znakova u zagradama (argument) je proslijeđena informacija printf funkcije() od našeg glavna funkcija glavni(). Kada funkcija završi, kontrola se vraća na izvorni program. Simbol \n označava pomicanje retka na nova linija nakon tiskanja.

Smatrati sljedeći primjer Napišite program za pretvaranje metara u centimetre.

#uključi

#uključi

printf("M?\n");

printf(" %d M sadrži %d cm\n", I,J);

Ovaj program definira dvije cjelobrojne varijable I i J.

Uvedena funkcija scanf("%d",&I); koji vam omogućuje ulazak decimalni broj s tipkovnice i dodijeliti vrijednost varijabli I, zatim naredbom J=100*I; izračun u tijeku 4.

Sljedeći red printf(" %d M sadrži %d cm\n", I,J); ispisuje izraz. Prvi %d (d je cjelobrojna varijabla) zamijenjen je vrijednošću I, drugi %d zamijenjen je vrijednošću J.

Funkcija getch() omogućuje vam da držite sliku na ekranu i zahtijeva bilo koji znak da dovrši posao.

Razmotrimo još jedan primjer. Napišimo funkciju i pozovimo je iz našeg programa.

#uključi

#uključi

printf("Jeste li me zvali?\n");

printf("Pozivam funkciju nadzornika.\n");

printf("Da. Pogledajte koji učenici spavaju i probudite ih.\n");

Osnove i suptilnosti programskog jezika C++. Praktični zadaci i testovi. Želite li naučiti programirati? Onda ste na pravom mjestu. Bez obzira imate li iskustva u programiranju ili ne, ove lekcije pomoći će vam da počnete stvarati, kompilirati i otklanjati pogreške u C++ programima u različitim razvojnim okruženjima: vizualni studio, Code::Blocks, Xcode, Eclipse i drugi IDE-ovi. Puno primjera i detaljna objašnjenja. Savršen i za početnike (lutke) i za naprednije. Sve je objašnjeno od nule do najsitnijih detalja. Ove lekcije (200+) dat će vam dobru osnovu/temelj za razumijevanje programiranja ne samo u C++, već iu drugim jezicima. I to potpuno besplatno!

Sve što trebate je želja, želja za učenjem. Sve ostalo možete pronaći ovdje.

Za repost +20 na karmu i moju zahvalnost!

Poglavlje broj 0. Uvod. Početak rada

Poglavlje broj 1. Osnove C++

Poglavlje broj 2. Varijable i osnovni tipovi podataka u C++

Poglavlje broj 3. Operatori u C++

Poglavlje broj 4. Opseg i druge vrste varijabli u C++

Ovi vodiči su za svakoga, bilo da ste tek počeli programirati ili već imate veliko iskustvo u programiranju na drugim jezicima! Ovaj materijal za one koji žele naučiti C / C ++ od njegovih samih osnova do najsloženijih struktura.

C++ je programski jezik, poznavanje ovog programskog jezika omogućit će vam da upravljate svojim računalom najviša razina. U idealnom slučaju, možete natjerati računalo da radi što god želite. Naša stranica pomoći će vam da naučite C++ programski jezik.

Instaliranje /IDE

Prva stvar koju biste trebali učiniti prije nego počnete učiti C++ je osigurati da imate IDE - integrirano razvojno okruženje (program u kojem ćete programirati). Ako nemate IDE, onda ste ovdje. Kada odlučite o izbor IDE-a, instalirajte ga i vježbajte stvaranje jednostavnih projekata.

Uvod u C++

Jezik C++ skup je naredbi koje govore računalu što treba učiniti. Ovaj skup uputa obično se zove izvor ili samo kod. Naredbe su ili "funkcije" ili "ključne riječi". Ključne riječi (C/C++ rezervirane riječi) osnovni su građevni blokovi jezika. Funkcije su složeni građevni blokovi jer su napisane u terminima više jednostavne funkcije- ovo ćete vidjeti u našem prvom programu, koji je prikazan u nastavku. Ova struktura funkcija nalikuje sadržaju knjige. Sadržaj može prikazivati ​​poglavlja knjige, svako poglavlje u knjizi može imati vlastiti sadržaj koji se sastoji od odlomaka, svaki odlomak može imati svoje podstavke. Iako C++ pruža mnoge zajedničke funkcije i rezervirane riječi koje možete koristiti, još uvijek postoji potreba za pisanjem vlastitih funkcija.

U kojem ste dijelu programa krenuli? Svaki program u C++ ima jednu funkciju, zove se glavna ili glavna funkcija, izvršavanje programa počinje ovom funkcijom. Iz glavne funkcije također možete pozvati bilo koju drugu funkciju, bilo da smo je napisali mi ili, kao što je ranije spomenuto, omogućio prevoditelj.

Dakle, kako pristupiti tim standardnim funkcijama? Pristupiti standardne karakteristike koji dolaze s kompajlerom, morate se povezati datoteka zaglavlja pomoću direktive pretprocesora - #include. Zašto je učinkovit? Pogledajmo primjer program rada:

#uključi << "Моя первая программа на С++\n"; cin.get(); }

Pogledajmo pobliže elemente programa. #include je direktiva "pretprocesora" koja govori kompajleru da stavi kod iz datoteke zaglavlja iostreama u naš program prije stvaranja izvršne datoteke. Uključivanjem datoteke zaglavlja u svoj program, dobivate pristup mnogim različitim funkcijama koje možete koristiti u svom programu. Na primjer, naredba cout zahtijeva iostream. Redak koji koristi prostor imena std; govori prevoditelju da koristi grupu funkcija koje su dio std standardne biblioteke. Ovaj red također omogućuje programu korištenje operatora kao što je cout. Točka i zarez dio je sintakse C++. Saopćava kompajleru da je ovo kraj naredbe. Malo kasnije vidjet ćete da se točka-zarez koristi za završetak većine naredbi u C++.

Sljedeća važna linija programa je int main() . Ovaj redak govori kompajleru da postoji funkcija pod nazivom main i da funkcija vraća cijeli broj tip int. Vitičaste zagrade ( i ) označavaju početak ( i kraj ) funkcije. Vitičaste zagrade također se koriste u drugim blokovima koda, ali uvijek znače isto - početak i kraj bloka, redom.

U C++, cout objekt se koristi za prikaz teksta (izgovara se "cout"). On koristi likove<< , известные как «оператор сдвига», чтобы указать, что отправляется к выводу на экран. Результатом вызова функции cout << является отображение текста на экране. Последовательность \n фактически рассматривается как единый символ, который обозначает новую строку (мы поговорим об этом позже более подробно). Символ \n перемещает курсор на экране на следующую строку. Опять же, обратите внимание на точку с запятой, её добавляют в конец, после каждого оператора С++.

Sljedeća naredba je cin.get() . Ovo je još jedan poziv funkcije koji čita podatke iz ulaznog toka podataka i čeka da se pritisne tipka ENTER. Ova naredba sprječava zatvaranje prozora konzole dok se ne pritisne tipka ENTER. To vam daje vremena da pogledate izlaz programa.

Nakon što dođe do kraja glavne funkcije (zatvarajuća vitičasta zagrada), naš program će vratiti vrijednost 0 za operativni sustav. Ova vraćena vrijednost je važna jer, analizirajući je, OS može procijeniti je li naš program uspješno dovršen ili ne. Povratna vrijednost 0 znači uspjeh i vraća se automatski (ali samo za tip podataka int, druge funkcije zahtijevaju da vrijednost vratite ručno), ali ako želimo vratiti nešto drugo, poput 1, morali bismo to učiniti ručno .

#uključi korištenje imenskog prostora std; int main() ( cout<<"Моя первая программа на С++\n"; cin.get(); return 1; }

Za konsolidaciju materijala upišite programski kod u svoj IDE i pokrenite ga. Nakon što se program pokrene i vidite izlaz, malo eksperimentirajte s naredbom cout. To će vam pomoći da se naviknete na jezik.

Obavezno komentirajte svoje programe!

Dodajte komentare kodu kako biste ga učinili jasnijim ne samo sebi nego i drugima. Prevodilac zanemaruje komentare prilikom izvođenja koda, što dopušta da se koristi bilo koji broj komentara za opisivanje stvarnog koda. Za stvaranje komentara upotrijebite ili // , što prevoditelju govori da je ostatak retka komentar, ili /* nakon čega slijedi */ . Kada učite programirati, korisno je imati mogućnost komentiranja određenih dijelova koda kako biste vidjeli kako se mijenja rezultat programa. Detaljno možete pročitati o tehnici komentiranja.

Što učiniti sa svim tim vrstama varijabli?

Ponekad može biti zbunjujuće imati više vrsta varijabli kada se čini da su neke vrste varijabli suvišne. Vrlo je važno koristiti ispravan tip varijable, jer neke varijable zahtijevaju više memorije od drugih. Također, zbog načina na koji se brojevi s pomičnim zarezom pohranjuju u memoriju, tipovi podataka float i double su "neprecizni" i ne bi se trebali koristiti kada se mora pohraniti točna vrijednost cijelog broja.

Deklariranje varijabli u C++

Za deklaraciju varijable koristite tip sintakse<имя>; . Evo nekoliko primjera deklaracija varijabli:

int broj; lik; float broj_float;

Dopušteno je deklarirati nekoliko varijabli istog tipa u jednom retku, za to svaka od njih mora biti odvojena zarezom.

int x, y, z, d;

Ako ste pažljivo pogledali, možda ste vidjeli da deklaracija varijable uvijek slijedi točka-zarez. Možete pročitati više o konvenciji - "o imenovanju varijabli".

Uobičajene pogreške prilikom deklariranja varijabli u C++

Ako pokušate koristiti varijablu koja nije deklarirana, vaš program se neće kompilirati i dobit ćete pogrešku. U C++-u sve ključne riječi jezika, sve funkcije i sve varijable razlikuju velika i mala slova.

Korištenje varijabli

Dakle, sada znate kako deklarirati varijablu. Evo primjera programa koji pokazuje korištenje varijable:

#uključi korištenje imenskog prostora std; int main() ( int broj; cout<< "Введите число: "; cin >>broj; cin.ignore(); cout<< "Вы ввели: "<< number <<"\n"; cin.get(); }

Pogledajmo ovaj program i proučimo njegov kod, red po red. Ključna riječ int kaže da je taj broj cijeli broj. Funkcija cin >> čita vrijednost u broju, korisnik mora pritisnuti enter nakon unesenog broja. cin.ignore() je funkcija koja čita znak i ignorira ga. Organizirali smo unos u program, nakon unosa broja pritisnemo tipku ENTER, znak koji se također prosljeđuje u ulazni tok. Ne treba nam, pa ga odbacujemo. Imajte na umu da je varijabla deklarirana kao cijeli broj, ako korisnik pokuša unijeti decimalni broj, ona će biti skraćena (tj. decimalni dio broja bit će zanemaren). Pokušajte unijeti decimalni broj ili niz znakova kada pokrenete primjer programa, odgovor će ovisiti o ulaznoj vrijednosti.

Imajte na umu da se navodnici ne koriste kada se ispisuje iz varijable. Odsutnost navodnika govori kompajleru da postoji varijabla i stoga da program mora provjeriti vrijednost varijable kako bi zamijenio ime varijable njenom vrijednošću kada se izvrši. Višestruki operatori pomaka u istoj liniji savršeno su prihvatljivi i izlaz će biti učinjen istim redoslijedom. Morate razdvojiti string literale (stringove pod navodnicima) i varijable, dajući svakom drugačiji operator pomaka<< . Попытка поставить две переменные вместе с одним оператором сдвига << выдаст сообщение об ошибке . Не забудьте поставить точку с запятой. Если вы забыли про точку с запятой, компилятор выдаст вам сообщение об ошибке при попытке скомпилировать программу.

Mijenjanje i uspoređivanje vrijednosti

Naravno, bez obzira koju vrstu podataka koristite, varijable su od malog interesa osim ako se njihova vrijednost ne može promijeniti. Sljedeće prikazuje neke od operatora koji se koriste zajedno s varijablama:

  • * množenje,
  • - oduzimanje,
  • + zbrajanje,
  • / podjela,
  • = dodjela,
  • == jednakost,
  • > više
  • < меньше.
  • != nije jednako
  • >= veće ili jednako
  • <= меньше или равно

Operatori koji izvode matematičke funkcije moraju se koristiti desno od znaka dodjele, kako bi se rezultat dodijelio varijabli s lijeve strane.

Evo nekoliko primjera:

A = 4 * 6; // koristi komentar retka i točku-zarez, a je 24 a = a + 5; // jednako je zbroju izvorne vrijednosti i pet a == 5 // nije dodijeljeno pet, provjerite i jednako je 5 ili ne

Često ćete koristiti == u konstrukcijama kao što su uvjetne izjave i petlje.

A< 5 // Проверка, a менее пяти? a >5 // Provjerite je li a veće od pet? a == 5 // Provjerite je li a pet? a != 5 // Provjerite nije li a jednako pet? a >= 5 // Provjerite je li a veće ili jednako pet? a<= 5 // Проверка, a меньше или равно пяти?

Ovi primjeri ne pokazuju vrlo jasno korištenje znakova za usporedbu, ali kada počnemo proučavati operatore odabira, shvatit ćete zašto je to potrebno.

Odjel: Automatizacija i informacijske tehnologije

OSNOVE C

Uvod

Poglavlje 1 C Osnove

1.1. Abeceda

1.2. Osnovne C konstrukcije

1.3. Ulaz izlaz.

1.3.1. Zaključak

1.4. Osnovni C tipovi podataka

1.4.1. Identifikatori.

1.4.2. Tipizirane konstante

1.4.3. Varijable

1.4.3.1. Cjelobrojni tipovi

1.4.3.2. Pravi tipovi

1.4.3.3. Tipovi likova

1.4.4. Tip podataka string

1.4.5. strukture

1.4.5.1. Nizovi

1.4.5.2. Upisi

1.4.6 Opseg i životni vijek varijabli

1.5. Glavni operateri

1.6. Pretprocesor

1.7. Programi. Funkcije

1.8. Pokazivači

1.9. Pokazivači i funkcije

1.10. Datoteke

1.11. Dodatne C funkcije

1.11.1. Funkcije pretvorbe

Funkcije pretvorbe niza znakova: atoi(), atof(). 37s.

1.11.3. Funkcije nizova

1.12. Značajke C programiranja

1.12.1. Moduli. Višemodulno programiranje

1.12.2. Modeli memorije

1.12.3. Programiranje u DOS-u i Windows-u

1.12.4. Korištenje asemblerskog jezika u C programima

Poglavlje 2 C Primjeri

2.1. Sortiranje

2.2. Rekurzivni algoritmi

2.3. Zadatak "Kule Hanoja"

Poglavlje 3 Osnove C++

3.1. Razlike između C++ i C

3.2. Objektno orijentirano programiranje u C++

3.2.1. Nastava

3.2.2. Preopterećenje funkcija

3.2.3. Konstruktori

3.2.4. Destruktori

3.2.5. Konstruktori s parametrima

3.2.6. Uvod u nasljeđivanje

3.2.7. Virtualne funkcije

3.2.8. Pokazivači na objekte

Poglavlje 4. Osnove programiranja u C++Builderu

4.1. Značajka C++Buildera

4.2. VCL komponente. Svojstva. Razvoj događaja. Metode

4.2.1. Vrste komponenti

4.2.2. Hijerarhija VCL klasa

4.3. Struktura datoteke u C++Builderu

4.4. Vizualne komponente (VCL)

4.5. Programi, event management, iznimke

4.6. Strategija otklanjanja pogrešaka za Windows programe

4.7. Korištenje VCL komponenti u razvoju programa

4.8. Grafičke komponente.

4.9. Multimedija

4.10. Sprite grafika

4.11. OLE2 objektna tehnologija

4.12. DLL-ovi.

4.13. Razvoj vizualnih komponenti

4.14. Uvod u CGI programiranje

3.15. Programiranje baze podataka.

3.16. Paketi

Zaključak

Književnost

Dodatak N1


Uvod

Godine 1804. francuski izumitelj Joseph Marie Jacquard stvorio je "programski upravljani" tkalački stan. Za upravljanje strojem korištene su bušene kartice međusobno povezane u obliku trake. Drvene igle “čitača” stroja, položajem rupa na bušenoj kartici, određivale su koje niti treba podići, a koje spustiti da bi se dobio željeni uzorak.

Godine 1890. u Sjedinjenim Američkim Državama izumitelj Herman Hollerith razvio je elektromehanički računski stroj - tabulator kojim su upravljale bušene kartice korišten je za sastavljanje tablica s rezultatima američkog popisa stanovništva. Tvrtka tabulator koju je osnovao Hollerith kasnije je postala International Business Machines (IBM) Corporation.

Godine 1936. dvadesetpetogodišnji student na Sveučilištu Cambridge, Englez Alan Turing, objavio je članak "O izračunljivim brojevima", u kojem je razmatrao hipotetski uređaj ("Turingov stroj"), pogodan za rješavanje bilo kojeg rješivog matematičkog ili logički problem – prototip programabilnog računala.

Godine 1941. njemački inženjer Konrad Zuse napravio je funkcionalno računalo Z3 koje je koristilo binarni brojevni sustav. Programi su snimani na bušenu traku.

Godine 1945., na Visokoj tehničkoj školi Sveučilišta u Pennsylvaniji (SAD), fizičar John Mauchly i inženjer Prosper Eckert izgradili su potpuno elektronički stroj Eniac. Programiranje je zahtijevalo ručno postavljanje tisuća prekidača i uključivanje stotina utikača u utičnice na kontaktnoj ploči.

Dana 1. lipnja 1945. poslano je izvješće američkog matematičara mađarskog podrijetla Johna von Neumanna, "Preliminarni izvještaj o stroju Advak", koje je sadržavalo koncept pohranjivanja računalnih instrukcija u vlastitu internu memoriju.

21. lipnja 1948. na Sveučilištu u Manchesteru (Velika Britanija) na stroju Mark-1 izvršen je prvi svjetski program pohranjen u memoriji stroja - traženje najvećeg faktora zadanog broja.

Godine 1949., pod vodstvom Mauricea Wilksa, stvoreno je računalo Edsack. Edsacovi dizajneri uveli su sustav mnemoničke notacije, gdje je svaka strojna instrukcija bila predstavljena jednim velikim slovom, i automatizirali su postavljanje potprograma na određeno mjesto u memoriji. Maurice Wilks nazvao je mnemoničko kolo i biblioteku potprograma asemblerskim sustavom - otuda riječ "assembler".

Godine 1949. u Philadelphiji (SAD) pod vodstvom Johna Mauchlyja stvoren je "Short Code" - prvi primitivni interpreter jednog programskog jezika.

Godine 1951. američka programerka Grace Hopper razvila je prvi program emitiranja na Remington Randu. Hopper ga je nazvao kompajler (prevodilac - povezivač).

Godine 1957. na 20. katu sjedišta IBM-a na aveniji Madison u New Yorku rođen je jezik Fortran (FORmula TRANslation - prijevod formula). Razvojni tim vodio je 30-godišnji matematičar John Backus. Fortran je prvi od "pravih" jezika visoke razine.

Godine 1972. Dennis Ritchie, 31-godišnji sistemski programer u Bell Labsu, razvio je programski jezik C.

Godine 1984. francuski matematičar i saksofonist Philip Kahn osnovao je Borland International.

C je izvorno razvijen kao programski jezik za operativni sustav Unix.

Ubrzo se počeo širiti na praktične programere. U kasnim 1970-ima razvijeni su C prevoditelji za mikroračunala za CP/M operativni sustav.

Nakon pojave IBM PC-a počeli su se pojavljivati ​​i C prevoditelji (za ovo računalo sada ih ima više od 20).

Godine 1983. Američki institut za standarde (ANSI) formirao je Tehnički odbor X3J11 za stvaranje standarda za jezik C. Borlandov C++ jezik, koji se pojavio na tržištu, udovoljava većini zahtjeva standarda.

U svojoj srži, C je jezik funkcija. Programiranje u C-u vrši se pisanjem funkcija i pozivanjem funkcija knjižnice. Većina funkcija vraća neku vrijednost koja se može koristiti u drugim izjavama.

Među mnogim prednostima jezika C treba istaknuti glavne:


Univerzalnost (koristi se na gotovo svim postojećim računalima);

Kompaktnost i univerzalnost koda;

Brzina izvršavanja programa;

Fleksibilnost jezika;

Visoka struktura.


Poglavlje 1 C Osnove

1.1. Abeceda

Abeceda jezika sastoji se od sljedećih znakova:

Veliko i malo slovo slova A-Z, a-z i podvlaka. Brojevi od 0 do 9. Posebni znakovi + - * / =>

Znakovi razmak, tabulator, novi redak, povratak na početak nazivaju se razmak.

C++ program je niz ACSII znakova koji predstavljaju njegov izvorni tekst.

1.2. Osnovne C konstrukcije

Razmotrite jednostavan program za ispis fraze "Pozdrav s računala" na ekranu.

// program

printf("Pozdrav s računala");

Razmotrite strukturu programa

C-program
# Direktive pretprocesora
Glavni
Operatori
Funkcija 1()
Operatori
funkcija n()
Operatori
Opisi
Zadaci
Funkcije
Ured
prazan

Naredba #include uključuje datoteku stdio.h u naš program. Datoteka sadrži informacije o I/O funkcijama.

Datoteka pod nazivom stdio.h sadrži informacije o I/O.

Simbol # označava da je prije prevođenja programa u njega potrebno uključiti funkcije iz datoteke stdio.h - to je takozvana pretprocesorska obrada, koja obavlja neku preliminarnu obradu teksta programa prije prevođenja.

Redak main() sadrži naziv funkcije s kojom se program uvijek pokreće. Prazne zagrade označavaju da je ovo funkcija, ali nema parametara.

Nakon znakova // slijede komentari (za jedan red), (znakovi između /* i */ također se nazivaju komentarima).

Vitičaste zagrade () označavaju početak i kraj tijela programa ili funkcije. Također se koriste za grupiranje više programskih izraza u blok.

Linija printf ("Pozdrav s računala") sadrži standardnu ​​C funkciju ispisa. Niz znakova u zagradama (argument) je informacija proslijeđena funkciji printf() iz naše funkcije main(). Kada je funkcija dovršena, kontrola se vraća na izvorni program. Znak - označava pomicanje retka u novi red nakon ispisa.

Razmotrite sljedeći primjer - napišite program za pretvaranje metara u centimetre.

printf(" %d M sadrži %d cm ", I, J);

Ovaj program definira dvije cjelobrojne varijable I i J.

Uvedena funkcija scanf("%d",&I); koji omogućuje unos decimalnog broja s tipkovnice i dodjeljivanje vrijednosti varijabli I, zatim naredbom J=100*I; izračun u tijeku 4.

Sljedeći red printf(" %d M sadrži %d cm ", I, J); ispisuje izraz. Prvi %d (d je cjelobrojna varijabla) zamijenjen je vrijednošću I, drugi %d zamijenjen je vrijednošću J.

Funkcija getch() omogućuje vam da držite sliku na ekranu i zahtijeva bilo koji znak da dovrši posao.

Razmotrimo još jedan primjer. Napišimo funkciju i pozovimo je iz našeg programa.

printf("Jesi li me nazvao?");

printf("Pozivam funkciju nadzornika. ");

printf("Da. Vidite koji učenici spavaju i probudite ih.");

Prvo opisujemo funkciju supervisor(), a zatim se pozivamo na nju u glavnom programu pomoću naredbe supervisor();. Rezultat je dijalog:

Pozivam funkciju supervizora.

Jesi li me zvao?

Da. Pogledajte koji učenici spavaju i probudite ih.

1.3 I/O
Za rješavanje problema u bilo kojem problemskom području potrebno je napisati program u kojem bi trebale postojati naredbe koje omogućuju:
- dodijeliti prostor za pohranu podataka;

Unesite početne podatke;

Obraditi početne podatke prema algoritmu;

Izlazni izlaz.

C sadrži funkcije potrebne za izvođenje ovih radnji. Razmotrit ćemo sve funkcije s primjerima i započeti s ulazno-izlaznim funkcijama.

1.3.1. Zaključak

Ispis se vrši na ekranu, pisaču, tvrdom disku (diskete), portu. Pogledajmo funkcije zaslona.

Funkcija printf dizajnirana je za tu svrhu. Format: printf([,argument1],...).

Format je niz dvostrukih navodnika koji se ispisuje na ekranu. Prije ispisa, printf zamjenjuje sve objekte u nizu prema specifikacijama argumenata. Na primjer, printf(" %d M sadrži %d cm ", I, J); %d u nizu formata je specifikacija argumenta.

Specifikacije argumenata počinju znakom postotka (%) i jednim slovom koje označava vrstu podataka.

%d korišten u specifikaciji označava da se očekuje neki cijeli broj. Evo nekoliko drugih često korištenih specifikacija formata:

- %d cijeli broj;

- %u cijeli broj bez predznaka;

- %ld dugi cijeli broj;

- vrijednost pokazivača %p;

- %f broj s pomičnim zarezom;

- %e broj s pomičnim zarezom u eksponencijalnom obliku;

- znak %c;

- %s niz;

- %x cijeli broj u heksadecimalnom formatu.

Možete postaviti širinu polja, na primjer %6d - širina polja 6.

Vrijednost će biti ispisana udesno (razmaci ispred), tako da je ukupna širina polja 6.

Za format realnih brojeva možete navesti razlomački dio, na primjer %8.4f - polje širine 8, decimalni dio 4.

Na kraju niza formatiranja možete staviti znakove:

linijski prijevod;.

f (pretvorba formata ili brisanje zaslona)

(kartica)

xhhh (umetnite znak s ASCII kodom hhh, gdje hhh sadrži 1 do 3 heksadecimalne znamenke)

Za izlaz možete koristiti funkcije: puts i putchar.

Funkcija puts ispisuje niz na ekran. Na primjer:

puts("Bok učenike");

Funkcija putchar ispisuje jedan znak na ekran.

1.3.2 Unos

Unos u C se uglavnom vrši s tipkovnice, iz datoteke i porta.

Funkcija scanf slična je funkciji printf. Njegov format je scanf([,argument1],...). scanf koristi iste specifikacije formata kao printf. Treba napomenuti da scanf ima jednu osobitost: argumenti koji slijede niz formata moraju biti adrese, a ne vrijednosti (ovo se ne odnosi na znakovne varijable). Ranije u primjerima vidjeli smo da je prilikom unosa cijelog broja funkcija napisana na sljedeći način:

scanf("%d", &a);

& je operator adrese, koji prosljeđuje adrese scanf.

Kada unosite više varijabli odvojenih zarezima, možete koristiti zarez unutar formata. Primjer:

scanf("%d, %d", &a, &b);

Sada možete unijeti, na primjer, 23.56.

Postoje poteškoće s unosom niza znakova od nekoliko riječi - unijet će se samo podaci do prvog razmaka. Za rješavanje ovog problema postoji funkcija gets.

printf("Kako se zoveš: ");

printf("Bok %s ", ime);

Funkcija gets čita sve što je upisano dok se ne pritisne Enter.

U C++-u, I/O se može raditi ne samo s funkcijama, već i s operacijama. Izlazna operacija >.

Format izlaza zaslona: cout

Format unosa tipkovnice: cin

Kada koristite I/O operacije, datoteka iostream.h mora biti uključena u program.

Moguć je I/O nekoliko vrijednosti (odvojenih razmakom).


1.4 Osnovni C tipovi podataka

1.4.1 Identifikatori

Imena dana konstantama, tipovima podataka, varijablama i funkcijama nazivaju se identifikatorima. U C-u, sljedeća pravila za stvaranje identifikatora moraju započeti slovom (a...z,A...Z) ili donjom crtom (_), ostatak identifikatora mora se sastojati od slova, podvlake i/ili brojeva (0 ...9 ).

1.4.2 Tipizirane konstante

C koristi konstante, koje su nazivi koji se daju vrijednosti. Identifikator imena može biti bilo koje duljine, ali se prepoznaju prva 32 znaka. Identifikator počinje latiničnim slovom ili podvlakom, sljedeći znakovi mogu biti brojevi, latinična slova i podvlake.

C prevodilac tretira velika i mala slova kao različite znakove.

Tipizirane konstante su: cijeli brojevi, pokretni zarez, znakovne konstante i znakovni nizovi.

Konstante su predstavljene kao cijeli decimalni, oktalni ili heksadecimalni brojevi.

Opis konstanti počinje s ključna riječ const, zatim tip i vrijednost, na primjer const int Nalog=2.

1.4.3 Varijable

Varijabla je imenovana vrijednost čija se vrijednost može mijenjati tijekom izvođenja programa. Varijabla pripada određenom tipu.


1.4.3.1 Cjelobrojni tipovi

Cijeli brojevi su predstavljeni cjelobrojnim tipovima. Cjelobrojni tip je generički tip čije predstavljanje ovisi o operacijskom sustavu i tipu procesora.

Razmotrite glavne vrste cijelih brojeva:

Razmotrimo jednostavan primjer.

const int Porez= 2;

Symma = stopa * porez;

printf("Symma porez = %d ",Symma);

Primjer deklarira jednu konstantu i dvije varijable cjelobrojnog tipa.

1.4.3.2 Realni tipovi

Pravi tip se koristi za pohranjivanje brojeva s razlomačkim dijelom.

U C++-u postoje sljedeće glavne vrste realnih brojeva:

Razmotrite sljedeći primjer.

const float porez = 0,7;

Symma = stopa * porez;

printf("Symma porez = %8.4f ",Symma);

NA ovaj primjer pravi tip je predstavljen Symma varijablom.

1.4.3.3 Vrste znakova

Tip znaka -Char dizajniran je za pohranu jednog znaka, tako da je njegova veličina jedan bajt.

Razmotrite primjer:

printf("A=%c B=%c",A,B);

printf("C= %c ",C);

U ovom primjeru, varijabla A je postavljena na 'D^, varijabla B je postavljena na '!^', a varijabla C je postavljena na '*^'.

1.4.4 Vrsta podataka niz

Za predstavljanje niza znakova u C-u koriste se nizovi tipa char.

Razmotrite primjer.

charA; /* duljina može biti do 256 znakova */

strcpy(A,"IBM PC Pentium");

strcpy(B,"Windows 95");

strcpy(C,""); /* brisanje varijable */ printf("A= %s ",A);

printf("B= %s ",B);

printf("C= %s ",C);

U ovom primjeru postoje tri niza znakova A, B, C.

Naredbom, na primjer, strcpy (A,"IBM PC Pentium"); redak A sadrži tekst IBM PC Pentium.

Uz gornji primjer, možete koristiti pokazivač na znakove za definiranje nizova. Primjer:

msg = "Bok učeniku";

Zvjezdica ispred msg znači da je msg pokazivač na znak - tj. msg može pohraniti adresu simbola. Međutim, ovo ne dodjeljuje memoriju za smještaj znakova.

Naredba msg = "Bok, student" dodjeljuje početnu adresu ovog stringa - (adresu znaka U) varijabli msg. Naredba puts(msg) ispisuje znakove dok ne naiđe na null znak, koji označava kraj niza.

1.4.5 Strukture

Skup međusobno povezanih podataka smještenih u memoriju predstavlja strukturu. U C-u se razmatraju sljedeće strukture: nizovi, zapisi i njihove kombinacije.

1.4.5.1 Nizovi

Imenovana zbirka homogenih podataka naziva se polje. Svaki element niza pohranjen je u posebnom memorijskom području i ima svoj broj (počevši od nule).

Razmotrite primjer.

B=10; B=20; B=30;

printf("B= %d ",B);

printf("B= %d ",B);

printf("B= %d ",B);

printf("B= %d ",B);

U razmatranom primjeru definiran je niz B koji se sastoji od četiri cjelobrojna elementa. Elementima niza može se manipulirati kao običnim varijablama.

Postoje višedimenzionalni nizovi, na primjer:

Niz A je dvodimenzionalni niz (sastoji se od četiri retka i tri stupca):

Niz A je četverodimenzionalni niz.

Razmotrite primjer rada s dvodimenzionalnim nizom.

B = 1,2; B = 1,3;

printf("B= %4.2f B= %4.2f B= %4.2f ", B,B,B);

printf("B= %4.2f B= %4.2f B= %4.2f ", B,B,B);

1.4.5.2 Upisi

Za razliku od nizova, zapis vam omogućuje pohranu podataka različitih vrsta. Unos počinje nakon ključne riječi struct. Razmotrimo primjer - podaci o studentima pohranjeni su u evidenciji: prezime, godina rođenja, broj grupe.

typedef struct A (

strcpy(B.Fio,"Ivanow G.I."); B. Bog = 1977.;

printf("Fio = %s ",B.Fio);

printf("Bog = %d ",B.Bog);

U razmatranom primjeru zapis ima sljedeću strukturu:

struct A ( /* Ime zapisa) */

charFio; /* 1 polje zapisa */

intGod; /* 2 polje zapisa */

Ključ typedef strukturama daje ime.

Primjer se može prepisati na sljedeći način.

typedef struktura (

strcpy(B.Fio,"Ivanow G.I.");

printf("Fio = %s ",B.Fio);

printf("Bog = %d ",B.Bog);

printf("Grupa = %d ",B.Grupa);

U primjeru smo razmatrali jedan zapis, ali u stvarnom životu ne može postojati jedan učenik u grupi, tako da možemo kombinirati niz i zapis i stvoriti niz zapisa. Razmotrite primjer.

typedef struct A (

WGruppa.God = 1977;

WGruppa.Gruppa = 384;

WGruppa.God = 1978;

WGruppa.Gruppa = 384;

printf("Fio2 = %s ",WGruppa.Fio);

printf("Bog2 = %d",WGruppa.God);

printf("Grupa2 = %d ",WGrupa.Grupa);

Prvotno smo definirali strukturu A, a zatim je upotrijebili kada smo deklarirali strukturu WGruppa kao niz od 12 unosa strukture B.

Sada, za adresiranje, moramo navesti broj elementa polja i naziv polja.

Postoje opcije kada jedan unos sadrži drugi unos, na primjer, dodavanje adrese studentskom unosu o kojem je gore bilo riječi. Primjer.

typedef struct Address(

char Street_Nd_Kw; );

typedef struct A (

Adresa D_addr; );

strcpy(WGruppa.Fio,"Ivanow G.I.");

WGruppa.God = 1977;

WGruppa.Gruppa = 384;

strcpy(WGruppa.D_addr.City,"Shadrinsk"); strcpy(WGruppa.D_addr.Street_Nd_Kw,"Lenjina 10 kw.1");

strcpy(WGruppa.Fio,"Petrow R.G.");

WGruppa.God = 1978;

WGruppa.Gruppa = 384;

strcpy(WGruppa.D_addr.City,"Kataisk"); strcpy(WGruppa.D_addr.Street_Nd_Kw,"Akulowa 1 kw.2");

printf("Fio1 = %s ",WGruppa.Fio);

printf("Bog1 = %d",WGruppa.God);

printf("Grupa1 = %d ",WGrupa.Grupa);

printf("Grad= %s ",WGruppa.D_addr.City);

printf("Fio2 = %s ",WGruppa.Fio);

printf("Bog2 = %d",WGruppa.God);

printf("Grupa2 = %d ",WGrupa.Grupa);

printf("Grad= %s ",WGruppa.D_addr.City);

printf("Ulica= %s ",WGruppa.D_addr.Street_Nd_Kw);

1.4.6 Opseg i životni vijek varijabli

Prema opsegu, varijable u C-u mogu se podijeliti u tri skupine:

1. Varijabla definirana u svim modulima (datotekama) programa. Takva se varijabla definira pomoću ključne riječi extern. Ova će varijabla biti vidljiva u svim točkama programa. Takva varijabla je globalna za cijeli program.

2. Varijabla definirana u jednom od modula (datoteci) prije tekstova svih funkcija. Takva varijabla bit će globalna za ovaj modul, tj. može se koristiti u svim točkama ovog modula.

3. Varijabla definirana u ovoj funkciji. Ova se varijabla može koristiti samo unutar ove funkcije. Takvu varijablu nazvat ćemo lokalnom.

Prema životnom vijeku sve varijable možemo podijeliti u dvije skupine:

1. Varijable koje žive tijekom programa.

2. Varijable koje se uništavaju nakon izlaska iz funkcije.

Globalne varijable su prve vrste u smislu trajanja. Lokalne varijable se uništavaju kada funkcija izađe. U slučaju kada lokalnu varijablu želimo učiniti dugovječnom, koristi se riječ statična. Lokalne varijable ovog tipa žive od trenutka prvog poziva funkcije do kraja programa. Međutim, u smislu vidljivosti, te varijable ostaju lokalne. Napišite static int i=0; Znači da se varijabla inicijalizira na nulu pri prvom ulasku u funkciju, ali pri sljedećim ulascima u funkciju njena vrijednost se čuva ovisno o radnjama koje su nad njom izvršene.

Moderni C prevoditelji prevode program na takav način da optimiziraju njegovu izvedbu što je više moguće. Jedna optimizacija je pohranjivanje varijabli, kada je to moguće, u registre umjesto na memorijske lokacije. U slučajevima kada želite spriječiti da se određena varijabla pohranjuje u registre, koristite volatile modifikator. Takva se potreba može pojaviti ako se očekuje da će se varijabla promijeniti kao rezultat vanjskih utjecaja (na primjer, prekida).

I zadnja opaska. Dinamički dodijeljena memorija, gdje god je dodijelite, živi dok je ne oslobodite.

1.5 Glavni operateri

operacija dodjele.

Najčešća operacija je dodjela, na primjer c= a/b. U C-u je dodjela označena znakom jednakosti=, pri čemu se vrijednost s desne strane znaka jednakosti dodjeljuje varijabli s lijeve strane. Također je moguće koristiti sekvencijalne dodjele, na primjer: c = a = b.

Aritmetički operatori.

U C-u se izvode sljedeće grupe aritmetičkih operacija:

1.Binarno: zbrajanje(+), oduzimanje(-), množenje(*), dijeljenje(/), cjelobrojno dijeljenje(%) (za tip int dobivanje ostatka).

2. Unarni: unarni plus (+), unarni minus (-), adresiranje (&), neizravno adresiranje (*), određivanje veličine memorije tipa (sizeof).

3. Logički: i (&&), ili (!!), a ne (!=).

4. Odnosi:

a) jednako (==), a ne jednako (!>);

b) manje od (), manje od ili jednako (=);

5. Inkrementi (++) i dekrementi (--). Na primjer, i++ znači i=i+1, a i-- znači i=i-1.

6.Bit operacije - omogućuju izvođenje operacija nad bitovima.

7. Kombinirane operacije. Turbo-C ima prečace za pisanje izraza koji sadrže više operacija:

a = a + b skraćeno na a += b;

a = a - b; skraćeno na a -= b;

a = a * b; skraćeno u a *= b;

a = a / b; skraćeno na a /= b;

a = a % b; svedeno na a %= b;

8. Adresne operacije:

1. Operacija određivanja adrese (&) 2. Operacija pristupa adresi (*).

& operator vraća adresu zadane varijable; ako je X int varijabla, tada je &X adresa (memorijska lokacija) te varijable. S druge strane, ako je msg pokazivač na tip char, tada je *msg znak na koji pokazuje msg. Razmotrite primjer:

msg = "zdravo";

printf("X = %d &X = %p",X,&X);

printf("*msg = %c msg = %p ", *msg, msg);

Kada se ispiše, prva funkcija ispisuje dvije vrijednosti: vrijednost X 7 i adresu X (dodijeljenu od strane kompajlera). Druga funkcija također ispisuje dvije vrijednosti: znak na koji ukazuje msg (P) i vrijednost msg, koja je adresa tog znaka (također dodijeljena od strane kompajlera).

Prednost operacija u C-u odgovara prednosti operacija u matematici.

Operator zarez.

Operator zarez koristi se za organiziranje više izraza unutar zagrada. Izraz unutar zagrada se procjenjuje slijeva nadesno, a cijeli izraz poprima vrijednost koja je posljednja procijenjena. Na primjer:

(X=Y, Y=getch())

varijabli X dodjeljuje vrijednost Y, zatim čita znak unesen s tipkovnice i pohranjuje ga u Y. Rezultat cijelog izraza, na kraju, bit će vrijednost znaka unesenog s tipkovnice.

Kontrolni operatori.

Naredba If... omogućuje, ovisno o uvjetu, izvršavanje jedne ili druge grane programa. Sintaksa operatora je sljedeća:

If uvjet izraz1 else izraz2;

Uvjet mora dati Booleovu vrijednost true ili false. Izraz1 će se izvršiti ako je uvjet istinit. Izraz2 će se izvršiti ako je uvjet lažan.

Postoji skraćena verzija operatora:

if izraz uvjeta1

Primjer. Utvrdite je li uneseni broj dan u tjednu, tj. je li broj u rasponu od 1 do 7.

printf("Greška %d ",A);

else printf("OK %d ",A);

Izraz uvjeta (A 7) će biti TRUE ako se izvrši A 7 - u ovom slučaju se izvršava grana printf("Error ",A); u suprotnom se izvršava grana printf("OK ",A);

Postoji još jedan način za pisanje naredbe If .... Primjer:

y=(t>0)? t*10: t-10; /* if t>0 y=t*10 else y=t-10;*/

printf("OK %d ",y);

U ovoj verziji tip operatora prikazan je u komentarima.

Naredba switch... case koristi se kada je potrebno analizirati varijablu i izvršiti određene radnje ovisno o njezinoj vrijednosti. Razmotrite primjer. Slova latinične abecede unose se s tipkovnice. Ovisno o slovu, izvršite određene radnje.

case "c": printf(" mali %c ",A); pauza; /* blok izlaz */

case "G": printf("veliki %c",A);

zadano: printf("Pogreška %c ",A);

U ovom primjeru, ako se unese znak c, tada se unese printf(" small %c ",A); ako se unesu velika slova F ili G, tada se izvršava printf(" big %c ",A); ako nijedan od razmatranih znakova nije unesen, tada se izvršava printf("Error %c ",A);

Za ponavljanje skupa naredbi nekoliko puta, možete koristiti naredbu do... while. Razmotrite primjer.

printf("Zifra? ");

printf("Greška %d ",A);

) dok je (!(A == 9));

printf("OK %d ",A);

Broj se unosi s tipkovnice. Izvršava se naredba printf("Greška %d ",A); Slijedi analiza - je li broj 9 jednak ili ne, ako nije jednak, ponovno se izvodi tijelo petlje:

printf("Zifra? ");

printf("Pogreška %d ",A).

Ako je broj 9, tada se izvršava naredba printf("OK %d ",A); i petlja završava.

Glavna značajka naredbe do... while je činjenica da se tijelo petlje zatvoreno između naredbi do i while izvršava barem jednom, tj. prvo se izvršava tijelo petlje, a zatim se analizira stanje.

Dakle, značenje dotičnog operatora je sljedeće: "Izvrši tijelo petlje dok uvjet nije istinit."

Naredba while..., za razliku od do... while, prvo analizira uvjet, a zatim izvršava tijelo petlje.

printf("Zifra? ");

printf("Greška %d ",A);

printf("OK %d ",A);

U ovom primjeru, varijabla A:=0; je inicijalizirana. To se radi jer je prvo analiza da li je 9 ili ne. Ako nije jednako, tada se tijelo petlje izvršava. Značenje razmatranog operatora je sljedeće:

"Sve dok je uvjet istinit, izvrši tijelo petlje."

Naredba for... koristi se kada se zna koliko se puta tijelo petlje treba izvršiti, ali je ova naredba puno fleksibilnija u usporedbi s Pascalom. Razmotrite primjer.

printf("Zifra %d ",A);

U ovom primjeru A pohranjuje stanje brojača petlje. U početku A:=1. Izvršava se naredba printf("Zifra %d ",A). Tada se vrijednost A povećava za jedan. A se analizira

U sljedećem primjeru razmotrite opciju za izjavu... kada je početna vrijednost varijable veća od konačne vrijednosti, a varijabla se smanji za jedan tijekom petlje.

za (A = 5; A >= 1; A--) /* A-- znači A=A-1 */

printf("Zifra %d ",A);

Postoje mnoge izmjene naredbe for..., na primjer:

Prazna izjava - za vremensku odgodu:

; /* prazna izjava */

Korištenje različite visine:

Mijenjanje varijabli:

Razmotrimo primjer u kojem su dvije varijable inicijalizirane i od kojih se svaka mijenja nakon ponavljanja petlje:

Naredba goto omogućuje prijenos kontrole na bilo koji redak programa. U tu svrhu koristi se oznaka. Primjer.

oznaka_1:/* oznaka */ printf("? ");

if (A != "y") goto label_1; )

Možete koristiti naredbu break da prekinete petlju nekim uvjetom. Primjer.

i (A == "y") prijelom;

Za prekid iteracije petlje i prelazak na sljedeću iteraciju, koristite Nastavak izjave. Primjer.

if (A == "y") nastaviti;

printf("Radi %c ",A);

Naredbe return() i exit() također se koriste za prekid programa.

1.6. Pretprocesor

Predprocesor jezika C omogućuje uključivanje fragmenata programa napisanih odvojeno od glavnog u program prije početka prijevoda.

#define direktiva.

Direktiva #define može se pojaviti bilo gdje u programu, a definicija koju daje vrijedi od te točke do kraja programa.

#definiraj ODGOVOR TRI*TRI

#define OT printf("ODGOVOR je %d. ",OTWET)

#definiraj jd cin >>C;

Nakon izvođenja programa dobit ćete:

ODGOVOR je 9

U prvom retku programa, TRI je makro definicija i jednaka je 3, gdje je 3 zamjenski niz.

U drugom retku, makro OTWET ima zamjenski niz TRI*TRI, i tako dalje. Svaka linija ima tri dijela. Prva je direktiva #define, nakon koje slijedi definicija makronaredbe. Makronaredbe ne smiju sadržavati razmake unutar sebe. I na kraju dolazi niz (nazvan "zamjenski niz") koji predstavlja makronaredba. Kada predprocesor pronađe jednu od definicija makronaredbe u programu, zamjenjuje je zamjenskim nizom. Ovaj proces prelaska od makro definicije do konačnog zamjenskog niza naziva se "makro ekspanzija".

Direktiva #include.

Kada predprocesor "prepozna" direktivu #include, traži naziv datoteke koji slijedi nakon nje i uključuje je u trenutni program. Direktiva dolazi u dva oblika:

#uključi naziv datoteke u uglaste zagrade

#include "my.h" naziv datoteke u dvostrukim navodnicima

Uglate zagrade govore pretprocesoru da traži datoteku u jednom ili više standardnih direktorija sustava. Navodnici mu govore da prvo pogleda u radni direktorij, a zatim na "standardna" mjesta.

Direktive: #undef, #ifdef, #else, #endif

Ove vam direktive omogućuju obustavu ranijih definicija.

Direktiva #undef nadjačava najnoviju definiciju imenovane makronaredbe.

#undef TRI /* TRI je sada nedefiniran */

#define F 10 /* F redefinirano kao 10 */

#undef F /* F je opet 5 */

#undef F /* F je sada nedefiniran */

Razmotrimo još jedan primjer.

#include "otw.h" /* će se izvršiti ako je OTW definiran */

#include "w.h" /* će se izvršiti ako OTW nije definiran */

Direktiva ifdef kaže da ako predprocesor specificira sljedeći OTW identifikator, tada se sve sljedeće direktive izvršavaju do prvog pojavljivanja #else ili #endif. Kada postoji #else u programu, program od #else do #endif će se izvršiti ako identifikator nije definiran.

1.7 Programi. Funkcije

Kao što smo vidjeli ranije, C program ima korijenski segment koji počinje direktivama pretprocesora i glavnom ključnom riječi.

Često korišteni dijelovi programa istaknuti su u funkciji. Svaka funkcija također počinje direktivama pretprocesora i imenom nakon kojeg slijede zagrade ( ).

Razmotrite primjer programa za crtanje stepenica.

printf("|----| ");

printf("|----| ");

printf("|----| ");

Sada napišimo ovaj program pomoću funkcije Lestniza.

printf("|----| ");

Kao što možete vidjeti iz programa, funkcija se poziva tri puta. Kako bismo prevladali ovaj nedostatak, prerađujemo program i uvodimo formalne i stvarne argumente:

Lestniza(int B)/* B - formalni argument */

printf("|----| ");

ljestve(3); /* 3 -stvarni argument */

U ovoj funkciji B je formalni argument (konačna vrijednost operatora for to). Da bi joj se dodijelila određena vrijednost, koristi se stvarni argument koji se prosljeđuje funkciji kada se pozove u glavnom programu.

Ako se nekoj funkciji prosljeđuje nekoliko parametara, tada se moraju proslijediti redoslijedom kojim su napisani u funkciji.

Razmotrimo funkciju koja vraća svoju vrijednost koristeći primjer kvadriranja broja.

float Kwadrat (float A)

printf("Kwadrat = %8.2f ",Kwadrat(B));

Kao što možete vidjeti iz primjera - naziv funkcije je Kwadrat - ona izračunava kvadrat broja. U retku printf("Kwadrat = %8.2f ",Kwadrat(B)); ova funkcija se poziva - ulaz je vrijednost (uneseni broj), a kao rezultat dobivamo rezultat - kvadrat broja, koji se naredbom return vraća programu.

Razmotrimo još jednu varijantu rada s funkcijom koja vraća vrijednost bez naredbe return.

Kwadrat (float A, float *B)

printf("Kvadrat = %8.2f ",D);

1.8. Pokazivači

Pokazivač je varijabla koja sadrži adresu podataka, a ne njegovu vrijednost. Pokazivač se koristi:

1. Za povezivanje neovisnih struktura jedna s drugom.

2. Za dinamičku dodjelu memorije.

3. Za pristup raznih elemenata strukture.

Razmotrite sljedeći program:

printf("Izravna vrijednost Z: %d ", Z);

printf("Z vrijednost dobivena preko pokazivača: %d ",*Y);

printf(" Adresa Z putem dohvaćanja adrese: %p ",&Z);

printf("Adresa Z preko pokazivača: %p ", Y);

U ovom primjeru, Y je pokazivač na cjelobrojnu varijablu i sadrži njezinu adresu. Zauzvrat, & vam omogućuje da dobijete adresu na kojoj se nalazi vrijednost varijable Z. U ovom programu:

Adresa varijable Z dodjeljuje se Y;

Vrijednost cijelog broja 100 dodijeljena je Z;

Operator & vam omogućuje da dobijete adresu,

na koji se stavlja Z vrijednost.

Rezultat programa:

Izravna Z vrijednost: 100

Z vrijednost primljena putem pokazivača: 100

Adresa Z putem adrese za dobivanje: 85B3:0FDC

Z adresa preko pokazivača: 85B3:0FDC

Pokazivači se također koriste za optimalnu dodjelu memorije.

Razmotrimo primjer pokazivača na broj tipa char.

char*str; /* pokazivač na znakovnu varijablu */

str = (char*)malloc(10);

strcpy(str, "zdravo");

printf("Niz je %s", str);

Prvo, na naredbu char *str; kreira se tip str, koji je pokazivač na varijabla tipa char(* označava "pokazivač"). Naredbom str = (char *)malloc(10); dodijelimo 10 bajtova memorije za str varijablu (string tip). Naredbom strcpy(str, "Zdravo"); provodi se - "upišite u memorijsko područje na koje pokazuje str, niz znakova "Hello". Naredbom printf("Niz je %s ", str); "ispišite na ekranu ono na što pokazuje str. naredba free(str); oslobađa memoriju na koju ukazuje str.

Razmotrite više složen primjer pristup zapisu pomoću pokazivača.

); /* kraj zapisa */

struct Student *A;

if ((A =(Student *) malloc(sizeof(Student))) == NULL)

printf("Ponestalo memorije");

strcpy(A.Fio, "Ivanov");

printf("Fio1 %s Grupa %d ", A.Fio, A.Grupa);

strcpy(A.Fio, "Petrov");

printf("Fio2 %s Grupa %d ", A.Fio, A.Grupa);

Pokazivač se također može koristiti za dobivanje neizravnog pokazivača na strukturu.

Neka poit bude pokazivač na strukturu i neka elem bude element definiran predloškom strukture. Zatim point->elem definira element na koji se upućuje. Razmotrimo prethodni primjer.

struct Student ( /* unos Student */

charFio; /* polje zapisa Fio */

int grupa; /* Polje zapisa grupe */

); /* kraj zapisa */

Sada možemo pristupiti poljima strukture na nekoliko načina. Ekvivalentni tretman:

Student.Group=236;

točka->Gruppa=236;

Bilježimo jednu važna značajka pokazivači u C. Prevoditelj automatski uzima u obzir tip pokazivača u aritmetičkim operacijama na njemu. Na primjer, ako je i pokazivač na cjelobrojnu (tj. dvobajtnu) varijablu, tada radnja tipa i++ znači da se pokazivač ne povećava za jedan, već za dva bajta, tj. pokazat će na sljedeću varijablu ili element niza. Iz tog razloga, pokazivač se može koristiti umjesto indeksa polja. Na primjer, ako je A pokazivač na niz cjelobrojnog tipa, tada umjesto A[i] možete napisati *(A+i). Štoviše, korištenje pokazivača umjesto indeksa omogućuje kompajleru da proizvodi lakši i brži kod.

1.9 Pokazivači i funkcije

Pokazivači se također mogu koristiti kao formalni parametri funkcije. Razmotrite primjer.

Funkcija swap deklarira dva formalna parametra x i y kao pokazivače na int podatke. To znači da swap funkcija radi na adresama cjelobrojnih varijabli (a ne na njihovim vrijednostima). Stoga će se obraditi podaci čije se adrese prosljeđuju funkciji tijekom poziva. Funkcija main() poziva swap.

zamjena (int *x, int *y)

wr = *x; *x = *y; *y=wr;

printf("Bilo je: i=%d, j=%d ",i,j);

printf("Sada: i =%d, j=%d ",i,j);

Nakon što se program izvrši, vrijednosti i i j će se zamijeniti. Treba napomenuti da, iako pokazivači štede memoriju, koriste puno više vremena procesora.

Dakle, razmatraju se glavni elementi jezika C.

1.10 Datoteke

Datoteka je skup podataka snimljenih na nekom mediju. Možete stvoriti datoteku, pisati podatke u nju, brisati podatke, ažurirati podatke, dodavati podatke. I/O u datoteku obavlja se pomoću metoda izravnog ili sekvencijalnog pristupa.

Razmotrimo najprije način sekvencijalnog pristupa.

I/O je međuspremnik. To znači da program piše i čita u međuspremnik; podaci se razmjenjuju između međuspremnika i datoteke ako je međuspremnik pun, ili je datoteka zatvorena, ili prije izlaska iz programa.

printf("izvorna datoteka");

printf("izlazna datoteka");

if ((in = fopen(n1, "rt"))== NULL)

printf("Ne mogu otvoriti izvornu datoteku"); povratak 1;

if ((out = fopen(n2, "wt"))== NULL)

printf("Ne mogu otvoriti izlaznu datoteku"); povratak 1;

dok (!feof(in))

fputc(fgetc(in),out);

string FILE *in, *out; definira pokazivač na dvije datoteke. Naziv datoteke može biti bilo koji - u našem slučaju, in je izvorna datoteka, out je izlaz.

NA sljedeći redak char n1, n2; definirajte dvije varijable n1 i n2 za pohranjivanje imena datoteka. U sljedeća četiri retka možete unijeti nazive ulaznih i izlaznih datoteka i dodijeliti ta imena varijablama n1 i n2. Prije nego počnete raditi s datotekom, ona mora biti otvorena. Da biste to učinili, postoji funkcija fopen () u kojoj prvi parametar sadrži naziv datoteke, a drugi - vrstu posla, na primjer "rt" - pročitajte datoteku.

Naredba in = fopen(n1, "rt" otvorit će datoteku pohranjenu u varijabli n1 za čitanje, a program će vratiti in pokazivač na ovu datoteku, koji ćemo (pokazivač) koristiti prilikom čitanja znakova iz Ako datoteka ne postoji, fp će biti NULL, fprintf(stderr, "Ne mogu otvoriti izlaznu datoteku "); vrati 1; i program će izaći.

Funkcija out = fopen(n2, "wt", samo što je sada out izlazna datoteka, a način rada "wt" je pisanje u datoteku) radi slično.

Ova naredba stvara datoteku s imenom pohranjenim u varijabli n2.

Čitanje iz datoteke vrši se pozivom fgetc(in). Čita jedan znak iz datoteke pridružene in pokazivaču.

Naredbom fputc(fgetc(in),out); pročitani znak ispisuje se u datoteku. Za čitanje informacija iz cijele datoteke upotrijebite konstrukciju while (!feof(in)).

fputc(fgetc(in),out);.

Funkcija feof(in) vraća vrijednost različitu od nule ako je na krajnjoj poziciji, odnosno nulu u suprotnom. Dok se ne naiđe na nulu, podaci iz izvorna datotekačitati i pisati na slobodan dan.

Datoteka se zatvara kada se pozove funkcija fclose(). Ako je datoteka otvorena za pisanje u isto vrijeme, prikazuje se sadržaj međuspremnika koji je povezan s ovom datotekom. Veza između pokazivača i datoteke je prekinuta.

Slično, funkcija fgetc(string,n,fp) čita niz iz datoteke pridružene fp-u i stavlja ga u niz. Znakovi se čitaju dok se ne primi znak " ", ili dok se datoteka ne potroši, ili dok se ne pročita (n-1) znakova.

Način rada Direktni pristup fleksibilniji, jer omogućuje izravan pristup bilo kojem unosu u datoteci. Minimalni unos za datoteku s izravnim pristupom je bajt. U nastavku ćemo razmotriti slučaj datoteke s izravnim pristupom sa zapisom jednakim bajtu. Takve datoteke se nazivaju binarne. Datoteke s izravnim pristupom nezamjenjive su pri pisanju programa koji moraju raditi s velikim količinama pohranjenih informacija vanjski uređaji. DBMS obrada temelji se na datotekama s izravnim pristupom.

Ukratko ćemo opisati glavne odredbe rada s datotekama s izravnim pristupom.

jedan). Svaki unos u datoteci s izravnim pristupom ima broj. Zapisi su numerirani od 0 do N-1, gdje je N broj zapisa u datoteci. Za binarna datoteka N je duljina datoteke u bajtovima. Za otvorena datoteka jedan od zapisa je trenutni - kaže se da je pokazivač postavljen na ovaj unos. Pokazivač možete pomicati pomoću funkcije lseek.

2). Prilikom otvaranja (ili kreiranja datoteke) pokazivač se automatski postavlja na početak (zapis 0). Prilikom izvođenja operacija čitanja ili pisanja, pokazivač se automatski pomiče iza posljednjeg zapisa čitanja (pisanja).

3). Možete promijeniti veličinu datoteke (povećati ili skratiti) pomoću funkcije chsize. Kada se veličina datoteke poveća, u nju se dodaju zapisi ispunjeni kodovima 0.

Ispod je program koji pokazuje kako raditi s datotekama.

int h; /*ručka datoteke koja se stvara*/

char * s="Ovaj niz bit će smješten u datoteku";

charbuf; /*spremnik za čitanje iz datoteke*/

Fmode=O_BINARY; /*rad s binarnim datotekama*/

if((h=creat("proba.txt",S_IREAD |S_IWRITE))==-1) /*stvori datoteku*/

printf("Nije uspjelo otvaranje datoteke!");

napisati(h,s,strlen(s)); /*zapiši niz s u datoteku*/

lseek(h,4,SEEK_SET); /*četvrti bajt od početka datoteke*/

međuspremnik=0; /*označi kraj retka*/

zatvori(h); /*zatvori datoteku*/

printf("%s",buf); /*ispiši pročitani red*/

Naš program je dosta komentiran, tako da dajemo dovoljno kratka objašnjenja. Program stvara datoteku s izravnim pristupom i tamo upisuje niz bajtova (niz). Zatim postoji izravan pristup podnizu ovog niza izravno u datoteci. Kada analiziramo tekst programa, skrećemo čitatelje na neke točke:

1. Obrada pogreške pri stvaranju datoteke. Zaista, otvaranje datoteke može biti neuspješno, a dobar program trebao bi rješavati takve situacije.

2. Ako je datoteka uspješno otvorena, dodjeljuje joj se deskriptor (jedinstveni broj) pomoću kojeg možete pristupiti datoteci.

3. Na kraju, ne zaboravite da će string postati niz samo kada završi kodom

Najpopularniji povezani članci