Cum se configurează smartphone-uri și PC-uri. Portal informativ

Limba cc. C Bazele

BAZELE C

Introducere

Capitolul 1 C Noțiuni de bază

1.1. Alfabet

1.2. Construcții de bază C

1.3. Intrare ieșire.

1.3.1. Concluzie

1.4. Tipuri de bază date în limbajul C

1.4.1. Identificatori.

1.4.2. Constante tipizate

1.4.3. Variabile

1.4.3.1. Tipuri întregi

1.4.3.2. Tipuri reale

1.4.3.3. Tipuri de caractere

1.4.4. Tip de date șir

1.4.5. structurilor

1.4.5.1. Matrice

1.4.5.2. Intrări

1.4.6 Domeniul de aplicare și durata de viață a variabilelor

1.5. Operatori principali

1.6. Preprocesor

1.7. Programe. Funcții

1.8. Indicatori

1.9. Indicatori și funcții

1.10. Fișiere

1.11. Funcții suplimentare Xi

1.11.1. Funcții de conversie

Funcții de conversie a șirurilor de caractere: atoi(), atof(). 37s.

1.11.3. Funcții șiruri

1.12. Caracteristicile programării C

1.12.1. Module. Programare multimodule

1.12.2. Modele de memorie

1.12.3. Programare în DOS și Windows

1.12.4. Utilizarea limbajului de asamblare în programele C

Capitolul 2 C Exemple

2.1. Triere

2.2. Algoritmi recursivi

2.3. Sarcina „Turnurile din Hanoi”

Capitolul 3 Bazele C++

3.1. Diferențele dintre C++ și C

3.2. Programare orientată pe obiecte în C++

3.2.1. Clase

3.2.2. Supraîncărcarea funcției

3.2.3. Constructorii

3.2.4. Distructori

3.2.5. Constructori cu parametri

3.2.6. Introducere în moștenire

3.2.7. Funcții virtuale

3.2.8. Indicatori către obiecte

Capitolul 4. Fundamentele programării C++Builder

4.1. Caracteristica C++Builder

4.2. Componentele VCL. Proprietăți. Evenimente. Metode

4.2.1. Tipuri de componente

4.2.2. Ierarhia claselor VCL

4.3. Structura fișierului în C++Builder

4.4. Componente vizuale (VCL)

4.5. Programe, management de evenimente, excepții

4.6. Strategia de depanare pentru programe Windows

4.7. Utilizarea componentelor VCL în dezvoltarea programului

4.8. Componente grafice.

4.9. Multimedia

4.10. Grafică sprite

4.11. Tehnologia obiectelor OLE2

4.12. DLL-uri.

4.13. Dezvoltarea componentelor vizuale

4.14. Introducere în programarea CGI

3.15. Programarea bazelor de date.

3.16. Pachete

Concluzie

Literatură

Anexa N1

Introducere

În 1804, inventatorul francez Joseph Marie Jacquard a creat un răzbătut „controlat de program”. Pentru a controla mașina, s-au folosit cărți perforate conectate între ele sub formă de bandă. Știfturile de lemn ale „cititorului” mașinii, prin amplasarea găurilor din cardul perforat, au determinat ce fire trebuie ridicate și care trebuie coborâte pentru a obține modelul dorit.

În 1890, în SUA, inventatorul Herman Hollerith a dezvoltat un electromecanic mașină de calcul- a fost folosit un tabulator controlat de cărți perforate pentru a tabula rezultatele recensământului din SUA. Compania de tabulator fondată de Hollerith a devenit mai târziu Corporation International Business Machines (IBM).

În 1936, Alan Turing, un student englez în vârstă de douăzeci și cinci de ani la Universitatea Cambridge, a publicat un articol „On Computable Numbers”, care considera un dispozitiv ipotetic („Mașină Turing”), potrivit pentru rezolvarea oricăror elemente matematice sau determinabile. sarcină logică, - un prototip de calculator programabil.

În 1941 a construit inginerul german Konrad Zuse calculator de operare Z3 care a folosit sistem binar socoteala. Programele au fost înregistrate pe bandă perforată.

În 1945, la Școala Tehnică Superioară a Universității din Pennsylvania (SUA), fizicianul John Mauchly și inginerul Prosper Eckert au construit un mașină electronică„Eniac”. Programarea a necesitat setarea manuală a mii de comutatoare și conectarea sutelor de prize în prizele panoului de contact.

La 1 iunie 1945, a fost trimis un raport al matematicianului american de origine maghiară John von Neumann, „Raport preliminar asupra mașinii Advak”, care conținea conceptul de stocare a instrucțiunilor computerului în propria memorie internă.

Pe 21 iunie 1948, la Universitatea din Manchester (Marea Britanie), pe mașina Mark-1 a fost executat primul program din lume stocat în memoria mașinii - căutarea celui mai mare factor dintr-un anumit număr.

În 1949, sub conducerea lui Maurice Wilks, a fost creat computerul Edsack. Designerii Edsac au introdus un sistem de notație mnemonică, în care fiecare instrucțiune de mașină era reprezentată de una majusculăși automatizează setarea subrutinelor într-o anumită locație din memorie. Maurice Wilks a numit circuitul mnemonic și biblioteca de subrutine un sistem de asamblare - de unde și cuvântul „asamblator”.

În 1949, în Philadelphia (SUA), sub conducerea lui John Mauchly, a fost creat „Short Code” – primul interpret primitiv al unui limbaj de programare.

În 1951, programatorul american Grace Hopper a dezvoltat primul program de difuzare la Remington Rand. Hopper l-a numit compilator (compilator - linker).

În 1957, la etajul 20 al sediului IBM de pe Madison Avenue din New York, s-a născut limba Fortran (FORmula TRANslation - traducerea formulelor). Echipa de dezvoltare a fost condusă de matematicianul John Backus, în vârstă de 30 de ani. Fortran este primul dintre limbajele „adevărate” de nivel înalt.

În 1972, Dennis Ritchie, un programator de sisteme în vârstă de 31 de ani la Bell Labs, a dezvoltat limbajul de programare C.

În 1984, matematicianul și saxofonistul francez Philip Kahn a fondat Borland International.

C a fost dezvoltat inițial ca limbaj de programare pentru sistemul de operare Unix.

Curând a început să se răspândească la programatorii practici. La sfârșitul anilor '70, au fost dezvoltați traducători C pentru microcalculatoare sistem de operare SR/M.

După apariția PC-ului IBM, au început să apară și compilatoarele C (pentru acest computer sunt acum mai mult de 20).

În 1983, Institutul American de Standarde (ANSI) a format Comitetul Tehnic X3J11 pentru a crea un standard pentru limbajul C. Limbajul C++ al lui Borland, care a apărut pe piață, respectă majoritatea cerințelor standardului.

În esență, C este un limbaj de funcții. Programarea în C se face prin scrierea de funcții și apelarea funcțiilor de bibliotecă. Majoritatea funcțiilor returnează o valoare care poate fi folosită în alte instrucțiuni.

Printre numeroasele avantaje ale limbajului C, trebuie remarcate principalele:


Universalitate (utilizată pe aproape toate computerele existente);

Compactitatea și universalitatea codului;

Viteza de execuție a programului;

Flexibilitatea limbii;

Structură înaltă.


Capitolul 1 C Noțiuni de bază

1.1. Alfabet

Alfabetul limbii este format din următoarele caractere:

Litere mari și minuscule latină literele A-Z, a-z și subliniere. Numerele de la 0 la 9. Personaje speciale + - * / = > < . ; , : { } () # $.

Caracterele space, tab, line feed, carriage return se numesc spatii albe.

Un program C++ este o secvență de caractere ACSII care reprezintă textul său sursă.

1.2. Construcții de bază C

Considera un program simplu imprimarea pe ecran a frazei „Bună ziua de pe computer”.

#include

// program

printf("Bună ziua de pe computer\n");

Luați în considerare structura programului

Comanda #include include fișierul stdio.h în programul nostru. Fișierul conține informații despre funcțiile I/O.

Fișierul numit stdio.h conține informații despre I/O.

Simbolul # indică faptul că, înainte de a traduce programul, este necesar să includeți în el funcții din fișierul stdio.h - aceasta este așa-numita procesare preprocesor, care efectuează o procesare preliminară a textului programului înainte de compilare.

Linia main() conține numele funcției cu care programul începe întotdeauna. Parantezele goale indică faptul că aceasta este o funcție, dar nu are parametri.

Caracterele // sunt urmate de comentarii (pentru o singură linie), (caracterele dintre /* și */ se mai numesc și comentarii).

Bretele() marchează începutul și sfârșitul corpului unui program sau funcție. Ele sunt, de asemenea, folosite pentru a grupa mai multe instrucțiuni de program într-un bloc.

Linia printf ("Bună ziua de la computer\n") conține funcția standard de imprimare C. Șirul de caractere cuprins între paranteze (argument) este informația transmisă funcții printf() de la noi functie principala principal(). Când funcția se termină, controlul revine la programul original. Simbolul \n indică un avans de linie către linie nouă după tipărire.

Considera exemplul următor Scrieți un program pentru a converti metri în centimetri.

#include

#include

printf("M?\n");

printf(" %d M conține %d cm\n", I,J);

Acest program definește două variabile întregi I și J.

A introdus funcția scanf("%d",&I); care vă permite să intrați numar decimal de la tastatură și atribuiți valoarea variabilei I, apoi prin comanda J=100*I; calcul în curs 4.

Rândul următor printf(" %d M conține %d cm\n", I,J); imprimă o frază. Primul %d (d este o variabilă întreagă) este înlocuit cu valoarea I, al doilea %d este înlocuit cu valoarea J.

Funcția getch() vă permite să păstrați o imagine pe ecran și necesită orice caracter pentru a finaliza lucrarea.

Să luăm în considerare un alt exemplu. Să scriem o funcție și să o apelăm din programul nostru.

#include

#include

printf("M-ai sunat?\n");

printf("Apel funcția de supervizor.\n");

printf("Da. Vezi ce elevi dorm si trezeste-i.\n");

Fundamentele și subtilitățile limbajului de programare C++. Sarcini practice si teste. Vrei să înveți cum să programezi? Atunci ești la locul potrivit. Indiferent dacă aveți sau nu experiență în programare, aceste lecții vă vor ajuta să începeți să creați, să compilați și să depanați programe C++ în diferite medii de dezvoltare: Studio vizual, Code::Blocks, Xcode, Eclipse și alte IDE-uri. O mulțime de exemple și explicatii detaliate. Perfect atât pentru începători (manichini), cât și pentru cei mai avansați. Totul este explicat de la zero până la cel mai mic detaliu. Aceste lecții (200+) vă vor oferi o bază/fundație bună în înțelegerea programării nu numai în C++, ci și în alte limbi. Și este absolut gratuit!

Tot ce ai nevoie este o dorință, o dorință de a învăța. Toate celelalte le puteți găsi aici.

Pentru repost +20 la karma și recunoștința mea!

Capitolul numărul 0. Introducere. Începutul lucrării

Capitolul numărul 1. Bazele C++

Capitolul numărul 2. Variabile și tipuri de date de bază în C++

Capitolul numărul 3. Operatori în C++

Capitolul numărul 4. Domeniul de aplicare și alte tipuri de variabile în C++

Aceste tutoriale sunt pentru toată lumea, indiferent dacă sunteți nou în programare sau aveți deja o experiență vastă de programare în alte limbi! Acest material pentru cei care doresc să învețe C/C++ de la elementele sale de bază până la cele mai complexe structuri.

C++ este un limbaj de programare, cunoașterea acestui limbaj de programare vă va permite să vă controlați computerul cel mai inalt nivel. În mod ideal, puteți face computerul să facă tot ce doriți. Site-ul nostru vă va ajuta să învățați limbajul de programare C++.

Instalarea /IDE

Primul lucru pe care ar trebui să-l faceți înainte de a începe să învățați C++ este să vă asigurați că aveți un IDE - un mediu de dezvoltare integrat (programul în care veți programa). Dacă nu ai un IDE, atunci ești aici. Când decideți alegerea IDE-ului, instalați-l și exersați crearea de proiecte simple.

Introducere în C++

Limbajul C++ este un set de comenzi care spun computerului ce trebuie să facă. Acest set de instrucțiuni este de obicei numit sursă sau doar cod. Comenzile sunt fie „funcții”, fie „cuvinte cheie”. Cuvintele cheie (cuvinte rezervate C/C++) sunt blocurile de bază ale limbajului. Funcțiile sunt blocuri complexe, deoarece sunt scrise în termeni de mai mult funcții simple- veți vedea acest lucru în primul nostru program, care este prezentat mai jos. Această structură de funcții seamănă cu conținutul unei cărți. Cuprinsul poate arăta capitolele cărții, fiecare capitol din carte poate avea propriul cuprins format din paragrafe, fiecare paragraf poate avea propriile subparagrafe. Deși C++ oferă multe funcții comuneși cuvinte rezervate pe care le puteți folosi, mai este nevoie să vă scrieți propriile funcții.

În ce parte a programului ați început? Fiecare program din C++ are o funcție, se numește principal sau principal-funcție, execuția programului începe cu această funcție. Din funcția principală, puteți apela și orice alte funcții, indiferent dacă sunt scrise de noi sau, așa cum am menționat mai devreme, furnizate de compilator.

Deci, cum accesați aceste funcții standard? A accesa specificații standard care vin cu compilatorul, trebuie să vă conectați fișier antet folosind directiva preprocesor - #include . De ce este eficient? Să ne uităm la un exemplu program de lucru:

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

Să aruncăm o privire mai atentă asupra elementelor programului. #include este o directivă „preprocesor” care îi spune compilatorului să pună codul din fișierul antet iostream în programul nostru înainte de a crea executabilul. Prin includerea unui fișier antet în programul dvs., aveți acces la multe funcții diferite pe care le puteți utiliza în programul dvs. De exemplu, declarația cout necesită un iostream . Linia folosind namespace std; spune compilatorului să folosească un grup de funcții care fac parte din biblioteca standard standard. Această linie permite programului să folosească operatori precum cout . Punctul și virgulă face parte din sintaxa C++. Îi spune compilatorului că acesta este sfârșitul comenzii. Veți vedea puțin mai târziu că punctul și virgulă este folosit pentru a termina majoritatea comenzilor în C++.

Următoarea linie importantă a programului este int main() . Această linie îi spune compilatorului că există o funcție numită main și că funcția returnează un număr întreg tastați int. Acoladele ( și ) semnalează începutul ( și sfârșitul ) unei funcții. Acoladele sunt folosite și în alte blocuri de cod, dar ele indică întotdeauna același lucru - începutul și, respectiv, sfârșitul blocului.

În C++, obiectul cout este folosit pentru a afișa text (pronunțat „cout”). El folosește personaje<< , известные как «оператор сдвига», чтобы указать, что отправляется к выводу на экран. Результатом вызова функции cout << является отображение текста на экране. Последовательность \n фактически рассматривается как единый символ, который обозначает новую строку (мы поговорим об этом позже более подробно). Символ \n перемещает курсор на экране на следующую строку. Опять же, обратите внимание на точку с запятой, её добавляют в конец, после каждого оператора С++.

Următoarea comandă este cin.get() . Acesta este un alt apel de funcție care citește datele din fluxul de date de intrare și așteaptă apăsarea tastei ENTER. Această comandă împiedică închiderea ferestrei consolei până când este apăsată tasta ENTER. Acest lucru vă oferă timp să vă uitați la rezultatul programului.

La atingerea sfârșitului funcției principale (acolada de închidere), programul nostru va returna valoarea 0 pentru sistemul de operare. Această valoare returnată este importantă deoarece, analizând-o, sistemul de operare poate judeca dacă programul nostru a fost finalizat cu succes sau nu. O valoare returnată de 0 înseamnă succes și este returnată automat (dar numai pentru tipul de date int, alte funcții vă cer să returnați valoarea manual), dar dacă am dori să returnăm altceva, cum ar fi 1, ar trebui să o facem manual .

#include folosind namespace std; int main() ( cout<<"Моя первая программа на С++\n"; cin.get(); return 1; }

Pentru a consolida materialul, introduceți codul programului în IDE-ul dvs. și rulați-l. După ce programul a rulat și ați văzut rezultatul, experimentați puțin cu declarația cout. Acest lucru vă va ajuta să vă obișnuiți cu limba.

Asigurați-vă că comentați programele dvs.!

Adăugați comentarii la cod pentru a fi mai clar nu numai pentru dvs., ci și pentru ceilalți. Compilatorul ignoră comentariile atunci când execută codul, ceea ce permite utilizarea oricărui număr de comentarii pentru a descrie codul real. Pentru a crea un comentariu, utilizați fie // , care spune compilatorului că restul liniei este un comentariu, fie /* urmat de */ . Când învățați să programați, este util să puteți comenta anumite secțiuni de cod pentru a vedea cum se modifică rezultatul programului. Puteți citi în detaliu despre tehnica de comentare.

Ce să faci cu toate aceste tipuri de variabile?

Uneori poate fi confuz să existe mai multe tipuri de variabile atunci când pare că unele tipuri de variabile sunt redundante. Este foarte important să folosiți tipul corect de variabilă, deoarece unele variabile necesită mai multă memorie decât altele. De asemenea, din cauza modului în care numerele în virgulă mobilă sunt stocate în memorie, tipurile de date float și double sunt „imprecise” și nu ar trebui folosite atunci când trebuie stocată o valoare întreagă exactă.

Declararea variabilelor în C++

Pentru a declara o variabilă, utilizați tipul de sintaxă<имя>; . Iată câteva exemple de declarații de variabile:

int num; caracter; float num_float;

Este permisă declararea mai multor variabile de același tip într-o singură linie, pentru aceasta fiecare dintre ele trebuie despărțită prin virgulă.

int x, y, z, d;

Dacă te-ai uitat îndeaproape, este posibil să fi văzut că o declarație de variabilă este întotdeauna urmată de un punct și virgulă. Puteți citi mai multe despre convenție - „despre denumirea variabilelor”.

Greșeli frecvente la declararea variabilelor în C++

Dacă încercați să utilizați o variabilă care nu este declarată, programul dvs. nu se va compila și veți primi o eroare. În C++, toate cuvintele cheie, toate funcțiile și toate variabilele sunt sensibile la majuscule și minuscule.

Utilizarea variabilelor

Deci acum știi cum să declari o variabilă. Iată un exemplu de program care demonstrează utilizarea unei variabile:

#include folosind namespace std; int main() ( număr int; cout<< "Введите число: "; cin >>număr; cin.ignore(); cout<< "Вы ввели: "<< number <<"\n"; cin.get(); }

Să aruncăm o privire la acest program și să studiem codul său, rând cu linie. Cuvântul cheie int spune că numărul este un număr întreg. Funcția cin >> citește valoarea în număr, utilizatorul trebuie să apese enter după numărul introdus. cin.ignore() este o funcție care citește un caracter și îl ignoră. Ne-am organizat intrarea în program, după introducerea unui număr, apăsăm tasta ENTER, caracterul care se trece și el fluxului de intrare. Nu avem nevoie de el, așa că îl aruncăm. Rețineți că variabila a fost declarată ca număr întreg, dacă utilizatorul încearcă să introducă un număr zecimal, acesta va fi trunchiat (adică partea zecimală a numărului va fi ignorată). Încercați să introduceți un număr zecimal sau o secvență de caractere când rulați programul exemplu, răspunsul va depinde de valoarea introdusă.

Rețineți că ghilimelele nu sunt folosite la imprimarea dintr-o variabilă. Absența ghilimelelor spune compilatorului că există o variabilă și, prin urmare, că programul trebuie să verifice valoarea variabilei pentru a înlocui numele variabilei cu valoarea acesteia atunci când este executată. Mai mulți operatori de schimb de pe aceeași linie sunt perfect acceptabili și ieșirea se va face în aceeași ordine. Trebuie să separați literalele de șir (șiruri între ghilimele) și variabile, oferindu-le fiecăruia un operator de schimbare diferit<< . Попытка поставить две переменные вместе с одним оператором сдвига << выдаст сообщение об ошибке . Не забудьте поставить точку с запятой. Если вы забыли про точку с запятой, компилятор выдаст вам сообщение об ошибке при попытке скомпилировать программу.

Schimbarea și compararea valorilor

Desigur, indiferent de tipul de date pe care îl utilizați, variabilele sunt de puțin interes, cu excepția cazului în care valoarea lor poate fi modificată. Următoarele arată câțiva dintre operatorii utilizați împreună cu variabile:

  • * înmulțire,
  • - scădere,
  • + plus,
  • / Divizia,
  • = sarcina,
  • == egalitate,
  • > mai mult
  • < меньше.
  • != nu este egal
  • >= mai mare sau egal
  • <= меньше или равно

Operatorii care efectuează funcții matematice trebuie folosiți în dreapta semnului de atribuire, pentru a atribui rezultatul variabilei din stânga.

Aici sunt cateva exemple:

A = 4 * 6; // folosește comentariul de linie și punct și virgulă, a este 24 a = a + 5; // este egal cu suma valorii inițiale și cinci a == 5 // nu i se atribuie cinci, bif și egal cu 5 sau nu

Veți folosi adesea == în constructe, cum ar fi instrucțiunile condiționate și bucle.

A< 5 // Проверка, a менее пяти? a >5 // Verificați dacă a este mai mare decât cinci? a == 5 // Verificați dacă a este cinci? a != 5 // Verificați dacă a nu este egal cu cinci? a >= 5 // Verificați dacă a este mai mare sau egal cu cinci? A<= 5 // Проверка, a меньше или равно пяти?

Aceste exemple nu arată foarte clar utilizarea semnelor de comparație, dar când vom începe să studiem operatorii de selecție, veți înțelege de ce este necesar.

Departamentul: Automatizări și Tehnologii Informaționale

BAZELE C

Introducere

Capitolul 1 C Noțiuni de bază

1.1. Alfabet

1.2. Construcții de bază C

1.3. Intrare ieșire.

1.3.1. Concluzie

1.4. Tipuri de date C de bază

1.4.1. Identificatori.

1.4.2. Constante tipizate

1.4.3. Variabile

1.4.3.1. Tipuri întregi

1.4.3.2. Tipuri reale

1.4.3.3. Tipuri de caractere

1.4.4. Tip de date șir

1.4.5. structurilor

1.4.5.1. Matrice

1.4.5.2. Intrări

1.4.6 Domeniul de aplicare și durata de viață a variabilelor

1.5. Operatori principali

1.6. Preprocesor

1.7. Programe. Funcții

1.8. Indicatori

1.9. Indicatori și funcții

1.10. Fișiere

1.11. Funcții suplimentare C

1.11.1. Funcții de conversie

Funcții de conversie a șirurilor de caractere: atoi(), atof(). 37s.

1.11.3. Funcții șiruri

1.12. Caracteristicile programării C

1.12.1. Module. Programare multimodule

1.12.2. Modele de memorie

1.12.3. Programare în DOS și Windows

1.12.4. Utilizarea limbajului de asamblare în programele C

Capitolul 2 C Exemple

2.1. Triere

2.2. Algoritmi recursivi

2.3. Sarcina „Turnurile din Hanoi”

Capitolul 3 Bazele C++

3.1. Diferențele dintre C++ și C

3.2. Programare orientată pe obiecte în C++

3.2.1. Clase

3.2.2. Supraîncărcarea funcției

3.2.3. Constructorii

3.2.4. Distructori

3.2.5. Constructori cu parametri

3.2.6. Introducere în moștenire

3.2.7. Funcții virtuale

3.2.8. Indicatori către obiecte

Capitolul 4. Fundamentele programării C++Builder

4.1. Caracteristica C++Builder

4.2. Componentele VCL. Proprietăți. Evenimente. Metode

4.2.1. Tipuri de componente

4.2.2. Ierarhia claselor VCL

4.3. Structura fișierului în C++Builder

4.4. Componente vizuale (VCL)

4.5. Programe, management de evenimente, excepții

4.6. Strategia de depanare pentru programe Windows

4.7. Utilizarea componentelor VCL în dezvoltarea programului

4.8. Componente grafice.

4.9. Multimedia

4.10. Grafică sprite

4.11. Tehnologia obiectelor OLE2

4.12. DLL-uri.

4.13. Dezvoltarea componentelor vizuale

4.14. Introducere în programarea CGI

3.15. Programarea bazelor de date.

3.16. Pachete

Concluzie

Literatură

Anexa N1


Introducere

În 1804, inventatorul francez Joseph Marie Jacquard a creat un răzbătut „controlat de program”. Pentru a controla mașina, s-au folosit cărți perforate conectate între ele sub formă de bandă. Știfturile de lemn ale „cititorului” mașinii, prin amplasarea găurilor din cardul perforat, au determinat ce fire trebuie ridicate și care trebuie coborâte pentru a obține modelul dorit.

În 1890, în Statele Unite, inventatorul Herman Hollerith a dezvoltat o mașină de calcul electromecanică - un tabulator controlat de cărți perforate a fost folosit pentru a compila tabele cu rezultatele recensământului din SUA. Compania de tabulator fondată de Hollerith a devenit mai târziu Corporation International Business Machines (IBM).

În 1936, un student în vârstă de douăzeci și cinci de ani de la Universitatea din Cambridge, englezul Alan Turing, a publicat un articol „On Computable Numbers”, care considera un dispozitiv ipotetic („Mașină Turing”), potrivit pentru rezolvarea oricărui lucru matematic sau rezolvabil. problemă logică - un prototip de computer programabil.

În 1941, inginerul german Konrad Zuse a construit un computer Z3 funcțional care folosea sistemul de numere binar. Programele au fost înregistrate pe bandă perforată.

În 1945, la Școala Tehnică Superioară a Universității din Pennsylvania (SUA), fizicianul John Mauchly și inginerul Prosper Eckert au construit o mașină Eniac complet electronică. Programarea a necesitat setarea manuală a mii de comutatoare și conectarea sutelor de prize în prizele panoului de contact.

La 1 iunie 1945, a fost trimis un raport al matematicianului american de origine maghiară John von Neumann, „Raport preliminar asupra mașinii Advak”, care conținea conceptul de stocare a instrucțiunilor computerului în propria memorie internă.

Pe 21 iunie 1948, la Universitatea din Manchester (Marea Britanie), pe mașina Mark-1 a fost executat primul program din lume stocat în memoria mașinii - căutarea celui mai mare factor dintr-un anumit număr.

În 1949, sub conducerea lui Maurice Wilks, a fost creat computerul Edsack. Designerii lui Edsac au introdus un sistem de notație mnemonică, în care fiecare instrucțiune de mașină era reprezentată printr-o singură literă majusculă și au automatizat setarea subrutinelor într-o anumită locație din memorie. Maurice Wilks a numit circuitul mnemonic și biblioteca de subrutine un sistem de asamblare - de unde și cuvântul „asamblator”.

În 1949, în Philadelphia (SUA), sub conducerea lui John Mauchly, a fost creat „Short Code” – primul interpret primitiv al unui limbaj de programare.

În 1951, programatorul american Grace Hopper a dezvoltat primul program de difuzare la Remington Rand. Hopper l-a numit compilator (compilator - linker).

În 1957, la etajul 20 al sediului IBM de pe Madison Avenue din New York, s-a născut limba Fortran (FORmula TRANslation - traducerea formulelor). Echipa de dezvoltare a fost condusă de matematicianul John Backus, în vârstă de 30 de ani. Fortran este primul dintre limbajele „adevărate” de nivel înalt.

În 1972, Dennis Ritchie, un programator de sisteme în vârstă de 31 de ani la Bell Labs, a dezvoltat limbajul de programare C.

În 1984, matematicianul și saxofonistul francez Philip Kahn a fondat Borland International.

C a fost dezvoltat inițial ca limbaj de programare pentru sistemul de operare Unix.

Curând a început să se răspândească la programatorii practici. La sfârșitul anilor 1970, translatoarele C pentru microcalculatoare au fost dezvoltate pentru sistemul de operare CP/M.

După apariția PC-ului IBM, au început să apară și compilatoarele C (pentru acest computer sunt acum mai mult de 20).

În 1983, Institutul American de Standarde (ANSI) a format Comitetul Tehnic X3J11 pentru a crea un standard pentru limbajul C. Limbajul C++ al lui Borland, care a apărut pe piață, respectă majoritatea cerințelor standardului.

În esență, C este un limbaj de funcții. Programarea în C se face prin scrierea de funcții și apelarea funcțiilor de bibliotecă. Majoritatea funcțiilor returnează o valoare care poate fi folosită în alte instrucțiuni.

Printre numeroasele avantaje ale limbajului C, trebuie remarcate principalele:


Universalitate (utilizată pe aproape toate computerele existente);

Compactitatea și universalitatea codului;

Viteza de execuție a programului;

Flexibilitatea limbii;

Structură înaltă.


Capitolul 1 C Noțiuni de bază

1.1. Alfabet

Alfabetul limbii este format din următoarele caractere:

Litere mari și mici scrisori A-Z, a-z și subliniere. Numere de la 0 la 9. Caractere speciale + - * / =>

Caracterele space, tab, line feed, carriage return se numesc spatii albe.

Un program C++ este o secvență de caractere ACSII care reprezintă textul său sursă.

1.2. Construcții de bază C

Luați în considerare un program simplu pentru a tipări pe ecran expresia „Bună ziua de pe computer”.

// program

printf("Bună ziua de pe computer");

Luați în considerare structura programului

Programul C
# Directive preprocesor
Principal
Operatori
Funcția 1()
Operatori
funcția n()
Operatori
Descrieri
Sarcini
Funcții
Birou
gol

Comanda #include include fișierul stdio.h în programul nostru. Fișierul conține informații despre funcțiile I/O.

Fișierul numit stdio.h conține informații despre I/O.

Simbolul # indică faptul că, înainte de a traduce programul, este necesar să includeți în el funcții din fișierul stdio.h - aceasta este așa-numita procesare preprocesor, care efectuează o procesare preliminară a textului programului înainte de compilare.

Linia main() conține numele funcției cu care programul începe întotdeauna. Parantezele goale indică faptul că aceasta este o funcție, dar nu are parametri.

Caracterele // sunt urmate de comentarii (pentru o singură linie), (caracterele dintre /* și */ se mai numesc și comentarii).

Acolade () marchează începutul și sfârșitul corpului unui program sau funcție. Ele sunt, de asemenea, folosite pentru a grupa mai multe instrucțiuni de program într-un bloc.

Linia printf ("Bună ziua de la computer") conține funcția standard de imprimare C. Șirul de caractere cuprins între paranteze (argumentul) este informația transmisă funcției printf() din funcția noastră main(). Când funcția este finalizată, controlul revine la programul original. Caracterul - denotă un avans de linie la o nouă linie după imprimare.

Luați în considerare următorul exemplu - scrieți un program pentru a converti metri în centimetri.

printf(" %d M conține %d cm ", I, J);

Acest program definește două variabile întregi I și J.

A introdus funcția scanf("%d",&I); care vă permite să introduceți un număr zecimal de la tastatură și să atribuiți o valoare variabilei I, apoi prin comanda J=100*I; calcul în curs 4.

Rândul următor printf(" %d M conține %d cm ", I, J); imprimă o frază. Primul %d (d este o variabilă întreagă) este înlocuit cu valoarea I, al doilea %d este înlocuit cu valoarea J.

Funcția getch() vă permite să păstrați o imagine pe ecran și necesită orice caracter pentru a finaliza lucrarea.

Să luăm în considerare un alt exemplu. Să scriem o funcție și să o apelăm din programul nostru.

printf("M-ai sunat?");

printf("Apel funcția de supervizor. ");

printf("Da. Vezi ce elevi dorm si trezeste-i.");

Mai întâi, descriem funcția supervisor() și apoi ne referim la ea în programul principal folosind comanda supervisor();. Rezultatul este un dialog:

Sun funcția de supervizor.

M-ai sunat?

Da. Vezi ce elevi dorm și trezește-i.

1.3 I/O
Pentru a rezolva o problemă în orice zonă cu probleme, este necesar să scrieți un program în care să existe comenzi care să permită:
- aloca spatiu pentru stocarea datelor;

Introduceți datele inițiale;

Procesează datele inițiale conform algoritmului;

Ieșire de ieșire.

C conține funcțiile necesare pentru a efectua aceste acțiuni. Vom lua în considerare toate funcțiile cu exemple și vom începe cu funcțiile de intrare-ieșire.

1.3.1. Concluzie

Ieșirea se realizează pe ecran, imprimantă, hard disk (dischete), port. Să ne uităm la funcțiile de afișare.

Funcția printf este concepută în acest scop. Format: printf([,argument1],...).

Formatul este un șir cu ghilimele duble care este imprimat pe ecran. Înainte de ieșire, printf înlocuiește toate obiectele din șir conform specificațiilor argumentului. De exemplu, printf(" %d M conține %d cm ", I, J); %d din șirul de format este specificația argumentului.

Specificațiile argumentului încep cu un semn de procent (%) și o singură literă care indică tipul de date.

%d folosit în specificație indică faptul că este de așteptat un număr întreg. Iată câteva alte specificații de format utilizate în mod obișnuit:

- %d întreg;

- %u întreg fără semn;

- %ld întreg lung;

- %p valoarea pointerului;

- %f număr în virgulă mobilă;

- %e număr în virgulă mobilă în formă exponențială;

- caracterul %c;

- %s șir;

- %x întreg în format hexazecimal.

Puteți seta lățimea câmpului, de exemplu %6d - lățimea câmpului 6.

Valoarea va fi tipărită deplasată la dreapta (spații înainte), astfel încât lățimea totală a câmpului este de 6.

Pentru formatul numerelor reale, puteți specifica o parte fracțională, de exemplu %8.4f - un câmp cu o lățime de 8, o parte zecimală de 4.

La sfârșitul șirului de format, puteți pune caractere:

traducere de linie;.

f (conversia formatului sau ștergerea ecranului)

(fila)

xhhh (inserați caracterul cu codul ASCII hhh, unde hhh conține 1 până la 3 cifre hexadecimale)

Pentru ieșire, puteți utiliza funcțiile: puts și putchar.

Funcția puts tipărește un șir pe ecran. De exemplu:

puts("Bună studentă");

Funcția putchar imprimă un singur caracter pe ecran.

1.3.2 Intrare

Introducerea în C se face în principal de la tastatură, din fișier și port.

Funcția scanf este similară cu printf. Formatul său este scanf([,argument1],...). scanf folosește aceiași specificatori de format ca printf. Trebuie remarcat faptul că scanf are o particularitate: argumentele care urmează șirului de format trebuie să fie adrese, nu valori (acest lucru nu se aplică variabilelor de caractere). Mai devreme în exemple, am văzut că la introducerea unui număr întreg, funcția a fost scrisă după cum urmează:

scanf("%d", &a);

& este operatorul de adresă, care transmite adresele către scanf.

Când introduceți mai multe variabile separate prin virgulă, puteți utiliza o virgulă în format. Exemplu:

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

Acum puteți introduce, de exemplu, 23.56.

Există dificultăți la introducerea unui șir de caractere de mai multe cuvinte - vor fi introduse doar date până la primul spațiu. Există o funcție gets pentru a rezolva această problemă.

printf("Care este numele tau: ");

printf("Bună %s", nume);

Funcția gets citește orice este tastat până când se apasă Enter.

În C++, I/O se poate face nu numai cu funcții, ci și cu operații. Operare de ieșire >.

Format de ieșire a ecranului: cout

Format de intrare de la tastatură: cin

Când utilizați operațiuni I/O, fișierul iostream.h trebuie inclus în program.

I/O de mai multe valori este posibilă (separate printr-un spațiu).


1.4 Tipuri de date C de bază

1.4.1 Identificatori

Numele date constantelor, tipurilor de date, variabilelor și funcțiilor se numesc identificatori. În C, următoarele reguli pentru crearea identificatorilor: trebuie să înceapă cu o literă (a...z,A...Z) sau subliniere (_), restul identificatorului trebuie să fie format din litere, liniuțe de subliniere și/sau cifre ( 0...9).

1.4.2 Constante tipizate

C folosește constante, care sunt un nume dat unei valori. Identificatorul numelui poate avea orice lungime, dar primele 32 de caractere sunt recunoscute. Identificatorul începe cu o literă latină sau liniuță de subliniere, caracterele ulterioare pot fi cifre, litere latine și liniuțe de subliniere.

Compilatorul C tratează literele mari și mici ca caractere diferite.

Constantele tipizate sunt: ​​numere întregi, virgulă mobilă, constante de caractere și șiruri de caractere.

Constantele sunt reprezentate ca numere întregi zecimale, octale sau hexazecimale.

Descrierea constantelor începe cu cuvânt cheie const, apoi tastați și valoare, de exemplu const int Nalog=2.

1.4.3 Variabile

O variabilă este o valoare numită a cărei valoare se poate modifica în timpul execuției programului. Variabila aparține unui anumit tip.


1.4.3.1 Tipuri întregi

Numerele întregi sunt reprezentate prin tipuri de numere întregi. Un tip întreg este un tip generic a cărui reprezentare depinde de sistemul de operare și tipul procesorului.

Luați în considerare principalele tipuri de numere întregi:

Să luăm în considerare un exemplu simplu.

const int Tax= 2;

Symma = Rata * Taxă;

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

Exemplul declară o constantă și două variabile de tip întreg.

1.4.3.2 Tipuri reale

Tipul real este folosit pentru a stoca numere cu o parte fracționară.

În C++, există următoarele tipuri principale de numere reale:

Luați în considerare următorul exemplu.

const float Tax= 0,7;

Symma = Rata * Taxă;

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

V acest exemplu tipul real este reprezentat de variabila Symma.

1.4.3.3 Tipuri de caractere

Tipul de caracter -Char este conceput pentru a stoca un caracter, astfel încât dimensiunea acestuia este de un octet.

Luați în considerare un exemplu:

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

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

În acest exemplu, variabila A este setată la „D^, variabila B este setată la „!^”, iar variabila C este setată la „*^”.

1.4.4 Tip de date șir

Pentru a reprezenta un șir de caractere în C, sunt folosite matrice de tip char.

Luați în considerare un exemplu.

charA; /* lungimea poate fi de până la 256 de caractere */

strcpy(A,"IBM PC Pentium");

strcpy(B,"Windows 95");

strcpy(C,""); /* șterge variabila */ printf("A= %s ",A);

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

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

În acest exemplu, există trei șiruri de caractere A, B, C.

Prin comandă, de exemplu, strcpy (A,„IBM PC Pentium”); linia A conține textul IBM PC Pentium.

În plus față de exemplul de mai sus, puteți folosi un indicator către caractere pentru a defini șiruri. Exemplu:

msg = „Bună student”;

Asteriscul dinaintea msg înseamnă că msg este un indicator de caracter - adică. msg poate stoca adresa unui simbol. Cu toate acestea, acest lucru nu alocă memorie pentru caractere adaptate.

Comanda msg = "Bună, student" atribuie adresa de pornire a acestui șir - (adresa caracterului U) variabilei msg. Comanda puts(msg) afișează caractere până când întâlnește un caracter nul, indicând sfârșitul șirului.

1.4.5 Structuri

Un set de date interconectate plasate în memorie reprezintă o structură. În C, sunt luate în considerare următoarele structuri: matrice, înregistrări și combinații ale acestora.

1.4.5.1 Matrice

O colecție numită de date omogene se numește matrice. Fiecare element de matrice este stocat într-o zonă de memorie separată și are propriul său număr (începând de la zero).

Luați în considerare un exemplu.

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

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

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

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

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

În exemplul considerat, este definită o matrice B, constând din patru elemente întregi. Elementele matricei pot fi manipulate ca variabile obișnuite.

Există matrice multidimensionale, de exemplu:

Matricea A este o matrice bidimensională (constă din patru rânduri și trei coloane):

Matricea A este o matrice cu patru dimensiuni.

Luați în considerare un exemplu de lucru cu o matrice bidimensională.

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 Intrări

Spre deosebire de matrice, o înregistrare vă permite să stocați date de diferite tipuri. Intrarea începe după cuvântul cheie struct. Să luăm în considerare un exemplu - informațiile despre elevi sunt stocate într-o înregistrare: nume de familie, anul nașterii, numărul grupului.

typedef struct A (

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

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

printf("Dumnezeu = %d ",B.Doamne);

În exemplul considerat, înregistrarea are următoarea structură:

struct A ( /* Un nume de înregistrare) */

charFio; /* 1 câmp de înregistrare */

intDumnezeu; /* 2 câmpuri de înregistrare */

Tasta typedef dă un nume structurilor.

Exemplul poate fi rescris după cum urmează.

typedef struct (

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

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

printf("Dumnezeu = %d ",B.Doamne);

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

În exemplu, am luat în considerare o singură înregistrare, dar în viața reală, nu poate exista un student într-un grup, așa că putem combina o matrice și o înregistrare și să creăm o matrice de înregistrări. Luați în considerare un exemplu.

typedef struct A (

WGruppa.God = 1977;

WGruppa.Gruppa = 384;

WGruppa.God = 1978;

WGruppa.Gruppa = 384;

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

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

printf("Gruppa2 = %d ",WGruppa.Gruppa);

Am definit inițial structura A și apoi am folosit-o când am declarat structura WGruppa ca o matrice de 12 intrări în structura B.

Acum, pentru adresare, trebuie să specificăm numărul elementului de matrice și numele câmpului.

Există opțiuni când o intrare conține o altă intrare, de exemplu, adăugarea unei adrese la intrarea pentru student discutată mai sus. Exemplu.

typedef struct Adresa(

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,"Lenina 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("God1 = %d",WGruppa.God);

printf("Gruppa1 = %d ",WGruppa.Gruppa);

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

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

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

printf("Gruppa2 = %d ",WGruppa.Gruppa);

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

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

1.4.6 Domeniul de aplicare și durata de viață a variabilelor

După sfera de aplicare, variabilele din C pot fi împărțite în trei grupuri:

1. Variabilă definită în toate modulele (fișierele) programului. O astfel de variabilă este definită folosind cuvântul cheie extern. Această variabilă va fi vizibilă în toate punctele din program. O astfel de variabilă este globală pentru întregul program.

2. O variabilă definită într-unul dintre module (fișier) înaintea textelor tuturor funcțiilor. O astfel de variabilă va fi globală pentru acest modul, adică. poate fi utilizat în toate punctele acestui modul.

3. Variabila definita in aceasta functie. Această variabilă poate fi utilizată numai în cadrul acestei funcții. Vom numi o astfel de variabilă locală.

În funcție de durata de viață, toate variabilele pot fi împărțite în două grupe:

1. Variabile care trăiesc în timpul programului.

2. Variabile care sunt distruse după părăsirea funcției.

Variabilele globale sunt de primul tip în ceea ce privește durata de viață. Variabilele locale sunt distruse atunci când funcția iese. În cazul în care dorim să facem o variabilă locală de lungă durată, se folosește cuvântul static. Variabilele locale de acest tip trăiesc din momentul primului apel al funcției și până la sfârșitul programului. Totuși, în sensul vizibilității, aceste variabile rămân locale. Scrieți int static i=0; Înseamnă că variabila este inițializată la zero la prima intrare în funcție, dar la intrările ulterioare în funcție, valoarea ei este păstrată în funcție de acțiunile care au fost efectuate asupra acesteia.

Compilatoarele C moderne traduc programul în așa fel încât să își optimizeze performanța cât mai mult posibil. O optimizare este stocarea variabilelor, atunci când este posibil, în registre în loc de locații de memorie. În cazurile în care doriți să împiedicați o anumită variabilă să fie stocată în registre, utilizați modificatorul volatil. O astfel de nevoie poate apărea dacă variabila se așteaptă să se schimbe ca urmare a influențelor externe (de exemplu, întreruperi).

Și ultima remarcă. Memoria alocată dinamic, oriunde o alocați, trăiește până când o eliberați.

1.5 Operatori majori

operatiune de atribuire.

Cea mai comună operație este atribuirea, de exemplu c= a/b. În C, atribuirea este notată cu semnul egal=, prin care valoarea din dreapta semnului egal este atribuită variabilei din stânga. De asemenea, este posibil să se utilizeze atribuiri secvențiale, de exemplu: c = a = b.

Operatori aritmetici.

În C, se efectuează următoarele grupuri de operații aritmetice:

1.Binar: adunare(+), scădere (-), înmulțire(*), împărțire(/), împărțire întregă (%) (pentru tipul int obținerea restului).

2. Unar: unar plus (+), unar minus (-), adresare (&), adresare indirectă (*), determinarea dimensiunii memoriei tip (sizeof).

3. Logic: și (&&), sau (!!), nu (!=).

4. Relații:

a) este egal (==), nu este egal (!>);

b) mai mic decât (), mai mic sau egal cu (=);

5. Crește (++) și descrește (--). De exemplu, i++ înseamnă i=i+1 și i-- înseamnă i=i-1.

6.Operații cu biți - vă permit să efectuați operații pe biți.

7. Operații combinate. Turbo-C are comenzi rapide pentru scrierea expresiilor care conțin mai multe operații:

a = a + b prescurtat la a += b;

a = a - b; prescurtat la a -= b;

a = a * b; prescurtat la a *= b;

a = a / b; prescurtat la a /= b;

a = a % b; redus la a %= b;

8. Operațiuni cu adresa:

1. Operația de determinare a adresei (&) 2. Operația de accesare a adresei (*).

Operatorul & returnează adresa variabilei date; dacă X este o variabilă int, atunci &X este adresa (locația de memorie) a acelei variabile. Pe de altă parte, dacă msg este un pointer pentru a tasta char, atunci *msg este caracterul indicat de msg. Luați în considerare un exemplu:

msg = "bună ziua";

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

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

Când este tipărită, prima funcție imprimă două valori: valoarea lui X 7 și adresa lui X (atribuită de compilator). A doua funcție afișează și două valori: caracterul indicat de msg (P) și valoarea msg, care este adresa acelui caracter (de asemenea, atribuită de compilator).

Precedenta operatiilor in C corespunde prioritatii operatiilor in matematica.

Operatorul virgulă.

Operatorul virgulă este folosit pentru a organiza mai multe expresii în paranteze. Expresia din paranteze este evaluată de la stânga la dreapta, iar întreaga expresie capătă valoarea care a fost evaluată ultima dată. De exemplu:

(X=Y, Y=getch())

atribuie variabilei X valoarea Y, apoi citește caracterul introdus de la tastatură și îl stochează în Y. Rezultatul întregii expresii, în final, va fi valoarea caracterului introdus de la tastatură.

Operatori de control.

Instrucțiunea If... face posibilă, în funcție de condiție, executarea uneia sau a altei ramuri a programului. Sintaxa operatorului este următoarea:

If condition expression1 else expression2;

Condiția trebuie să fie evaluată la o valoare booleană adevărată sau falsă. Expresia1 va fi executată dacă condiția este adevărată. Expresia2 va fi executată dacă condiția este falsă.

Există o versiune prescurtată a operatorului:

dacă expresia condiției1

Exemplu. Determinați dacă numărul introdus este o zi a săptămânii, de ex. dacă numărul este în intervalul de la 1 la 7.

printf("Eroare %d", A);

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

Expresia condiției (A 7) va fi evaluată la TRUE dacă A 7 este executat - în acest caz, printf("Eroare", A); ramura este executată, în caz contrar printf("OK ",A); ramura este executată.

Există o altă modalitate de a scrie instrucțiunea If.... Exemplu:

y=(t>0)? t*10: t-10; /* dacă t>0 y=t*10 altfel y=t-10;*/

printf("OK %d", y);

În această versiune, tipul de operator este afișat în comentarii.

Declarația switch... case este folosită atunci când este necesară analizarea unei variabile și efectuarea anumitor acțiuni în funcție de valoarea acesteia. Luați în considerare un exemplu. Literele alfabetului latin sunt introduse de la tastatură. În funcție de scrisoare, efectuați anumite acțiuni.

case "c": printf(" mic %c ",A); pauză; /* blocați ieșirea */

caz „G”: printf(„mare %c”, A);

implicit: printf("Eroare %c", A);

În acest exemplu, dacă este introdus caracterul c, atunci se introduce printf(" mic %c ",A); dacă sunt introduse litere mari F sau G, atunci printf(" mare %c ",A); este executat, dacă niciunul dintre caracterele considerate nu este introdus, atunci printf("Eroare %c ",A); este executat.

Pentru a repeta un set de comenzi de mai multe ori, puteți utiliza instrucțiunea do... while. Luați în considerare un exemplu.

printf("Zifra?");

printf("Eroare %d", A);

) în timp ce (!(A == 9));

printf("OK %d", A);

Se introduce un număr de la tastatură. Instrucțiunea printf("Eroare %d ",A); este executată. Urmează analiza - numărul 9 este egal sau nu, dacă nu este egal, corpul buclei este executat din nou:

printf("Zifra?");

printf(„Eroare %d”, A).

Dacă numărul este 9, atunci instrucțiunea printf("OK %d ",A); este executată. iar bucla se termină.

Caracteristica principală a instrucțiunii do... while este faptul că corpul buclei cuprins între instrucțiunile do și while este executat cel puțin o dată, i.e. se execută mai întâi corpul buclei, apoi se analizează condiția.

Astfel, semnificația operatorului în cauză este următoarea: „Execută corpul buclei până când condiția este adevărată”.

Instrucțiunea while..., spre deosebire de do... while, analizează mai întâi condiția și apoi execută corpul buclei.

printf("Zifra?");

printf("Eroare %d", A);

printf("OK %d", A);

În acest exemplu, variabila A:=0; este inițializată. Acest lucru se face deoarece analiza este mai întâi dacă este 9 sau nu. Dacă nu este egal, atunci corpul buclei este executat. Semnificația operatorului considerat este următoarea:

„Atâta timp cât condiția este adevărată, executați corpul buclei”.

Instrucțiunea for... este folosită atunci când se știe de câte ori trebuie executat corpul buclei, dar această instrucțiune este mult mai flexibilă în comparație cu Pascal. Luați în considerare un exemplu.

printf("Zifra %d", A);

În acest exemplu, A stochează starea contorului buclei. Inițial A:=1. Instrucțiunea printf("Zifra %d ",A) este executată. Apoi valoarea lui A este incrementată cu unu. A se analizează

În exemplul următor, luați în considerare opțiunea pentru declarație... când valoarea inițială a variabilei este mai mare decât valoarea finală, iar variabila este decrementată cu unu în timpul buclei.

pentru (A = 5; A >= 1; A--) /* A-- înseamnă A=A-1 */

printf("Zifra %d", A);

Există multe modificări la declarația for..., de exemplu:

Declarație goală - pentru întârziere:

; /* declarație goală */

Folosind o înălțime diferită:

Modificarea variabilelor:

Luați în considerare un exemplu în care două variabile sunt inițializate și fiecare dintre ele se modifică după iterația buclei:

Declarația goto vă permite să transferați controlul către orice linie a programului. În acest scop este folosită o etichetă. Exemplu.

label_1:/* label */ printf("?");

if (A != "y") merge la label_1; )

Puteți folosi instrucțiunea break pentru a rupe bucla de o anumită condiție. Exemplu.

i (A == „y”) pauză;

Pentru a întrerupe iterația buclei și a trece la următoarea iterație, utilizați Continuați declarația. Exemplu.

dacă (A == „y”) continuă;

printf("Se lucrează %c ",A);

Instrucțiunile return() și exit() sunt, de asemenea, folosite pentru a termina programul.

1.6. Preprocesor

Preprocesorul limbajului C vă permite să includeți fragmente de programe scrise separat de cel principal în program înainte de a începe traducerea.

#define directivă.

Directiva #define poate apărea oriunde în program, iar definiția pe care o dă este valabilă din acel punct până la sfârșitul programului.

#define RĂSPUNS TRI*TRI

#define OT printf("RASPUNSUL este %d. ",OTWET)

#define jd cin >>C;

După executarea programului, veți obține:

RĂSPUNSUL este 9

În prima linie a programului, TRI este definiția macro și este egal cu 3, unde 3 este șirul de înlocuire.

În a doua linie, macro-ul OTWET are șirul de înlocuire TRI*TRI și așa mai departe. Fiecare linie are trei părți. Prima este directiva #define, urmată de definiția macro. Macro-urile nu trebuie să conțină spații în interiorul lor. Și în cele din urmă vine șirul (numit „șir de înlocuire”) pe care macro-ul îl reprezintă. Când preprocesorul găsește una dintre definițiile macro în program, o înlocuiește cu un șir de înlocuire. Acest proces de trecere de la definiția macro la șirul final de înlocuire se numește „extindere macro”.

Directiva #include.

Când preprocesorul „recunoaște” directiva #include, caută numele fișierului care o urmează și îl include în programul curent. Directiva vine sub două forme:

#include numele fișierului în paranteze unghiulare

#include numele fișierului „my.h” între ghilimele duble

Parantezele unghiulare îi spun preprocesorului să caute fișierul în unul sau mai multe dintre directoarele standard ale sistemului. Ghilimele îi spun să caute mai întâi în directorul de lucru și apoi să caute în locurile „standard”.

Directive: #undef, #ifdef, #else, #endif

Aceste directive vă permit să suspendați definițiile anterioare.

Directiva #undef suprascrie cea mai recentă definiție a macrocomenzii numite.

#undef TRI /* TRI este acum nedefinit */

#define F 10 /* F redefinit ca 10 */

#undef F /* F este din nou 5 */

#undef F /* F este acum nedefinit */

Să luăm în considerare un alt exemplu.

#include "otw.h" /* va fi executat dacă OTW este definit */

#include "w.h" /* se va executa dacă OTW nu este definit */

Directiva ifdef spune că dacă un identificator OTW ulterior este specificat de către preprocesor, atunci toate directivele ulterioare sunt executate până la prima apariție a lui #else sau #endif. Când există un #else într-un program, programul de la #else la #endif va fi executat dacă identificatorul nu este definit.

1.7 Programe. Funcții

După cum am văzut mai devreme, un program C are un segment rădăcină care începe cu directivele preprocesorului și cuvântul cheie principal.

Secțiunile utilizate frecvent ale programului sunt evidențiate în funcție. Fiecare funcție începe, de asemenea, cu directive de preprocesor și un nume urmat de paranteze ( ).

Luați în considerare un exemplu de program pentru desenarea scărilor.

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

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

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

Acum să scriem acest program folosind funcția Lestniza.

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

După cum puteți vedea din program, funcția este apelată de trei ori. Pentru a depăși acest neajuns, reelaborăm programul și introducem argumente formale și reale:

Lestnisa(int B)/* B - argument formal */

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

scara(3); /* 3 -argument actual */

În această funcție, B este un argument formal (valoarea finală a operatorului for to). Pentru a-i atribui o anumită valoare, se folosește argumentul real, care este transmis funcției atunci când este apelat în programul principal.

Dacă mai mulți parametri sunt trecuți unei funcții, atunci aceștia trebuie să fie trecuți în ordinea în care sunt scrieți în funcție.

Luați în considerare o funcție care returnează valoarea sa folosind exemplul de pătrare a unui număr.

float Kwadrat (float A)

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

După cum puteți vedea din exemplu - numele funcției este Kwadrat - calculează pătratul unui număr. În linia printf("Kwadrat = %8.2f ",Kwadrat(B)); această funcție este numită - valoarea (numărul de intrare) este dată ca intrare și, ca rezultat, obținem rezultatul - pătratul numărului, care este returnat programului prin comanda return.

Să luăm în considerare încă o variantă de lucru cu o funcție care returnează o valoare fără comanda return.

Kwadrat(float A, float *B)

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

1.8. Indicatori

Un pointer este o variabilă care conține adresa datelor, nu valoarea acesteia. Se folosește indicatorul:

1. Pentru conectarea structurilor independente între ele.

2. Pentru alocarea dinamică a memoriei.

3.Pentru a accesa diverse elemente structurilor.

Luați în considerare următorul program:

printf("Valoarea directă Z: %d", Z);

printf("Valoarea Z obtinuta prin pointer: %d",*Y);

printf(" Adresa Z prin adresă de obținere: %p ",&Z);

printf("Adresa Z prin pointer: %p", Y);

În acest exemplu, Y este un pointer către o variabilă întreagă și conține adresa acesteia. La rândul său, & vă permite să obțineți adresa la care se află valoarea variabilei Z. În acest program:

Adresa variabilei Z este atribuită lui Y;

Valoarea întreagă 100 este atribuită lui Z;

Operatorul & vă permite să obțineți adresa,

pe care este plasată valoarea Z.

Rezultatul programului:

Valoarea Z directă: 100

Valoarea Z primită prin indicator: 100

Adresa Z prin adresa de obținere: 85B3:0FDC

Adresă Z prin indicator: 85B3:0FDC

Pointerii sunt, de asemenea, folosiți pentru alocarea optimă a memoriei.

Luați în considerare un exemplu de indicator către un număr de tip char.

char*str; /* indicator către variabila caracter */

str = (char*)malloc(10);

strcpy(str, „bună ziua”);

printf("Șirul este %s", str);

Mai întâi, la comanda char *str; este creat tipul str, care este un pointer către variabila de tip char(* înseamnă „indicator”). Prin comanda str = (char *)malloc(10); alocam 10 octeti de memorie pentru variabila str (tip sir). Prin comanda strcpy(str, „Bună ziua”); se efectuează - „scrieți în zona de memorie indicată de str, șirul de caractere „Bună ziua”. Prin comanda printf(„Șirul este %s”, str); „printați pe ecran spre ce indică str. comandă liberă(str); eliberează memoria indicată de str.

Luați în considerare mai mult exemplu complex accesarea unei înregistrări folosind un pointer.

); /* sfârșitul înregistrării */

struct Student *A;

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

printf("Memorie epuizată");

strcpy(A.Fio, „Ivanov”);

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

strcpy(A.Fio, „Petrow”);

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

Un pointer poate fi folosit și pentru a obține un pointer indirect către o structură.

Fie poit un pointer către o structură și fie elem elementul definit de șablonul de structură. Apoi punct->elem definește elementul care este referit. Luați în considerare exemplul anterior.

struct Student ( /* intrare Student */

charFio; /* câmp de înregistrare Fio */

grup int; /* Câmp de înregistrare grup */

); /* sfârșitul înregistrării */

Acum putem accesa câmpurile structurii în mai multe moduri. Tratament echivalent:

Student.Group=236;

punct->Gruppa=236;

Notăm unul caracteristică importantă indicatoare în C. Traducatorul ia în considerare automat tipul indicatorului în operațiile aritmetice pe acesta. De exemplu, dacă i este un pointer către o variabilă întreagă (adică pe doi octeți), atunci acțiunea de tip i++ înseamnă că pointerul este incrementat nu cu unul, ci cu doi octeți, de exemplu. va indica următoarea variabilă sau element de matrice. Din acest motiv, un pointer poate fi folosit în loc de indici de matrice. De exemplu, dacă A este un pointer către o matrice de tip întreg, atunci în loc de A[i] puteți scrie *(A+i). Mai mult decât atât, folosirea pointerilor în loc de indexuri permite compilatorului să producă cod mai slab și mai rapid.

1.9 Indicatori și funcții

Pointerii pot fi utilizați și ca parametri formali ai funcției. Luați în considerare un exemplu.

Funcția swap declară doi parametri formali x și y ca pointeri către date int. Aceasta înseamnă că funcția de swap operează pe adresele variabilelor întregi (mai degrabă decât pe valorile acestora). Prin urmare, datele ale căror adrese sunt transmise funcției în timpul apelului către aceasta vor fi procesate. Funcția main() apelează swap.

swap(int *x, int *y)

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

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

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

După ce programul este executat, valorile lui i și j vor fi schimbate. Trebuie remarcat faptul că, deși pointerii economisesc memorie, ele folosesc mult mai mult timp procesor.

Astfel, sunt luate în considerare principalele elemente ale limbajului C.

1.10 Fișiere

Un fișier este o colecție de date înregistrate pe un anumit mediu. Puteți crea un fișier, scrie date în el, șterge date, actualiza date, adăuga date. I/O la un fișier se face folosind metode de acces direct sau secvenţial.

Luați în considerare mai întâi modul de acces secvenţial.

I/O este tamponat. Aceasta înseamnă că programul scrie și citește în buffer; datele sunt schimbate între buffer și fișier dacă memoria tampon este plină, sau fișierul este închis sau înainte de a părăsi programul.

printf("fisier sursa");

printf("fișier de ieșire");

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

printf(„Nu se poate deschide fișierul sursă”); întoarcere 1;

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

printf("Nu se poate deschide fișierul de ieșire"); întoarcere 1;

în timp ce (!feof(în))

fputc(fgetc(in), out);

șir FILE *in, *out; definește un pointer către două fișiere. Numele fișierului poate fi orice - în cazul nostru, în este fișierul sursă, afară este ieșirea.

V rândul următor char n1, n2; definiți două variabile n1 și n2 pentru a stoca numele fișierelor. Următoarele patru rânduri vă permit să introduceți numele fișierelor de intrare și de ieșire și să atribuiți aceste nume variabilelor n1 și n2. Înainte de a putea începe să lucrați cu un fișier, acesta trebuie să fie deschis. Pentru a face acest lucru, există o funcție fopen () în care primul parametru conține numele fișierului, iar al doilea - tipul de lucru, de exemplu "rt" - citește fișierul.

Comanda in = fopen(n1, "rt" va face ca fișierul stocat în variabila n1 să fie deschis pentru citire, iar programul va returna indicatorul in la acest fișier, pe care (pointerul) îl vom folosi când citim caractere din Dacă fișierul nu există, atunci fp va fi NULL, fprintf(stderr, „Nu se poate deschide fișierul de ieșire „); returnează 1; iar programul se va închide.

Funcția out = fopen(n2, „wt”, doar acum out este un fișier de ieșire, iar modul de operare „wt” este scrierea într-un fișier) funcționează în mod similar.

Această comandă creează un fișier cu numele stocat în variabila n2.

Citirea dintr-un fișier se face apelând fgetc(in). Citește un caracter din fișierul asociat cu indicatorul de intrare.

Prin comanda fputc(fgetc(in), out); caracterul citit este scris în fișier. Pentru a citi informații din întregul fișier, utilizați constructul while (!feof(in)).

fputc(fgetc(in), out);.

Funcția feof(in) returnează o valoare diferită de zero dacă este în poziția finală și zero în caz contrar. Până când se întâlnește zero, datele de la fișier sursă citește și scrie în ziua liberă.

Fișierul este închis când funcția fclose() este apelată. Dacă fișierul a fost deschis pentru scriere în același timp, este afișat conținutul buffer-ului asociat cu acest fișier. Legătura dintre indicator și fișier este întreruptă.

În mod similar, funcția fgetc(string,n,fp) citește un șir din fișierul asociat cu fp și îl pune în șir. Caracterele sunt citite până când se primește un caracter „ ” sau până când fișierul este epuizat sau până când sunt citite (n-1) caractere.

Modul acces direct mai flexibil, pentru că vă permite să accesați direct orice intrare din fișier. Intrarea minimă pentru un fișier cu acces direct este un octet. Mai jos vom lua în considerare cazul unui fișier cu acces direct cu o înregistrare egală cu un octet. Astfel de fișiere sunt numite binare. Fișierele cu acces direct sunt indispensabile atunci când scrieți programe care trebuie să funcționeze cu cantități mari de informații stocate dispozitive externe. Procesarea DBMS se bazează pe fișiere cu acces direct.

Să subliniem pe scurt principalele prevederi ale lucrului cu fișiere cu acces direct.

unu). Fiecare intrare din fișierul de acces direct are un număr. Înregistrările sunt numerotate de la 0 la N-1, unde N este numărul de înregistrări din fișier. Pentru fisier binar N este lungimea fișierului în octeți. Pentru deschide fișierul una dintre înregistrări este cea curentă - se spune că indicatorul este setat la această intrare. Puteți muta indicatorul folosind funcția lseek.

2). La deschiderea (sau la crearea unui fișier) indicatorul este plasat automat la început (înregistrarea 0). Când efectuați operațiuni de citire sau scriere, indicatorul trece automat peste ultima înregistrare de citire (scriere).

3). Puteți modifica dimensiunea fișierului (mărește sau trunchia) folosind funcția chsize. Când dimensiunea fișierului crește, înregistrările completate cu codurile 0 sunt adăugate la acesta.

Mai jos este un program care demonstrează cum să lucrezi cu fișierele.

int h; /*mânerul fișierului de creat*/

char * s="Acest șir va fi plasat într-un fișier";

charbuf; /*buffer de citit din fișier*/

Fmode=O_BINARY; /*lucrează cu fișiere binare*/

if((h=creat("proba.txt",S_IREAD |S_IWRITE))==-1) /*creează fișier*/

printf("Nu s-a putut deschide fișierul!");

scrie(h,s,strlen(s)); /* scrie șirul s în fișier*/

lseek(h,4,SEEK_SET); /*al patrulea octet de la începutul fișierului*/

tampon=0; /*marca sfârșitul liniei*/

aproape(h); /*închide fișierul*/

printf("%s",buf); /*tipărește linia de citire*/

Programul nostru este destul de complet comentat, așa că dăm suficient scurte explicații. Programul creează un fișier cu acces direct și scrie acolo o secvență de octeți (șir). Apoi există un acces direct la un subșir al acestui șir direct în fișier. Când analizăm textul programului, atragem cititorii la câteva puncte:

1.Procesarea erorii de creare a fișierului. Într-adevăr, deschiderea unui fișier poate eșua și un program bun ar trebui să se ocupe de astfel de situații.

2. Dacă fișierul este deschis cu succes, i se atribuie un descriptor (un număr unic), prin care puteți accesa apoi fișierul.

3. În sfârșit, nu uitați că un șir va deveni un șir doar atunci când se termină cu cod

Top articole similare