Probleme rezolvate in C++


1. Să se verifice dacă un număr este pozitiv.

#include<iostream.h>

void main()

{

int a;

//citim numarul

cout<<„a=”;cin>>a;

//verificam daca numarul este pozitiv

if(a>=0) cout<<„numar pozitiv”;

else cout<<„numarul negativ”;

}

2. Să se verifice dacă un număr aparţine intervalului [a,b]. a şi b sunt numere reale citite de la tastatură.

#include<iostream.h>

void main()

{float a,b,n;

//citim datele de intrare: a,b si numarul dat

cout<<„a=”;cin>>a;

cout<<„b=”;cin>>b;

cout<<„n=”;cin>>n;

//verificam daca numarul n apartine intervalului [a,b]

if(n>=a and n<=b)cout<<n<<” apartine intervalului [a,b]”;

else cout<<n<<” nu apartine intervalului [a,b]”;

}

3. Să se verifice daca 3 numere citite de la tastatura sunt nule.

#include<iostream.h>

void main()

{float a,b,c;

//citim datele de intrare: a,b si numarul dat

cout<<„a=”;cin>>a;

cout<<„b=”;cin>>b;

cout<<„c=”;cin>>c;

//verificam daca numerele sunt nule

if(a==0 && a==0 && c==0)cout<<” toate numerele sunt nule”;

else cout<<” nu sunt toate nule”;

}
1. Se citesc de la tastatura n elemente. Cate dintre ele fac parte din intervalul [x,y]? x si y se citesc de la tastatura.

#include<iostream.h>

int a[100],n,x,y,c;

void main()

{

cout<<„numarul de elemente: „;cin>>n;

cout<<„elementele\n”;

for(int i=1;i<=n;i++)

{

cout<<„a[„<<i<<„]=”;cin>>a[i];

}

cout<<„\ns-au citit elementele: „;

for(i=1;i<=n;i++) cout<<a[i]<<” „;

cout<<„\nx=”;cin>>x;

cout<<„\ny=”;cin>>y;

//contor pentru numerele cautate

c=0;

for(i=1;i<=n;i++)

if(a[i]>=x&&a[i]<=y)c++;

cout<<„\nnr=”<<c<<endl;\

}

2. Se citesc de la tastatura n numere. Care sunt pozitiile din vector unde se gasesc elemente pare?

#include<iostream.h>

int a[100],n;

void main()

{

cout<<„numarul de elemente: „;cin>>n;

cout<<„elementele\n”;

for(int i=1;i<=n;i++)

{

cout<<„a[„<<i<<„]=”;cin>>a[i];

}

for(i=1;i<=n;i++)

if(a[i]%2==0)cout<<i<<” „;

}

3. Se citesc n elemente reale. Care este suma elementelor aflate pe pozitii impare in vector?

#include<iostream.h>

int a[100],n,s=0;

void main()

{

cout<<„numarul de elemente: „;cin>>n;

cout<<„elementele\n”;

for(int i=1;i<=n;i++)

{

cout<<„a[„<<i<<„]=”;cin>>a[i];

}

//suma elementelor de pe pozitii impare

for(i=1;i<=n;i++)

if(i%2==1)s=s+a[i];

cout<<„s=”<<s;

}

1. Se citeşte un text într-o variabilă de tip string, in care cuvintele se despart prin spaţii. Se cere:
a) Să se afişeze cuvintele în ordine alfabetică;
b) Să se numere cuvintele cu minim 4 vocale distincte

#include <iostream.h>
#include <conio.h>
#include <string.h>
void main()
{
char text[100],*p, separator[]=” „, cuv[10][10], cuvant[10], aux[10] ; int nrv=0,voc, nr, k, i, j;
cout<<„Dati sirul:”;cin.get(text,100);
strcpy(p,text) ;
p=strtok(p,separator) ;
while(p)
{
strcpy(cuv[++nr],p);
p=strtok(NULL,separator);
}
for(i=1;i<nr;i++)
for(j=i+1;j<=nr;j++)
if(strcmp(cuv[i],cuv[j])>0)
{
strcpy(aux,cuv[i]);
strcpy(cuv[i],cuv[j]);
strcpy(cuv[j],aux);
}
for(i=1;i<=nr;i++)
cout<<cuv[i];
for(i=1;i<=nr;i++)
{
voc=0;
strcpy(cuvant,cuv[i]);
k=strlen(cuvant) ;
for(j=0;j<k;j++)
{switch(cuvant[j])
{
case ‘a’:
case ‘e’:
case ‘i’:
case ‘o’:
case ‘u’:{voc++; break;}
}}
if (voc>=4) nrv++ ;
}
cout<<nrv;
getch();
}

2. Fişierele cuv1.txt şi cuv2.txt conţin cuvinte, câte un cuvânt pe linie în ordine alfabetică. Să se construiască fişierul cuv3.txt care să conţină toate cuvintele din cele două fişiere, în ordine alfabetică.

#include <iostream.h>
#include <conio.h>
#include <string.h>
#include<fstream.h>
#include<stdio.h>
void main()
{char a[10], b[10], cuv[10][20], aux[10]; int i,j,nr=0;
clrscr();
fstream f(„cuv1.txt”, ios::in);
while(f.getline(a,10))strcpy(cuv[++nr],a);
ifstream g(„cuv2.txt”);
while(g.getline(b,10))strcpy(cuv[++nr],b);

for(i=1;i<nr;i++)
for(j=i+1;j<=nr;j++)
if(strcmp(cuv[i],cuv[j])>0)
{
strcpy(aux,cuv[i]);
strcpy(cuv[i],cuv[j]);
strcpy(cuv[j],aux);
}
for(i=1;i<=nr;i++)
cout<<cuv[i]<<endl;
getch();}

3. În fişierul date.in sunt scrise mai multe cuvinte câte unul pe fiecare linie din fişier. Se cere:
a) Să se determine numărul de cuvinte din fişier;
b) Să se afişeze cuvintele care încep cu o vocală.

#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<conio.h>
void main()
{
char a[10]; int k, i, nr=0;
clrscr();
fstream f(„date.in”,ios::in);
while(f.getline(a,10))
{if(a[0]==’a’||a[0]==’e’||a[0]==’i’||a[0]==’o’||a[0]==’u’) cout<<a<<endl; nr++;
}
cout<<nr;
}

La o staţie de benzină există mai multe maşini caracterizate prin număr, marcă şi culoare. Se cere:
a) Să se determine numărul maşinilor Dacia;
b) Să se ordoneze maşinile după culoare.

#include<iostream.h>
#include<string.h>
#include<conio.h>
typedef struct
{char marca[20],culoare[20],med[20];
int nr;}masina ;
masina a[20];
int n,x,k;
void citire()
{int i;
cout<<„n=”;cin>>n;
for (i=1;i<=n;i++)
{cout<<„a[i].marca: „;cin>>a[i].marca;
cout<<„a[i].culoare: „;cin>>a[i].culoare;
cout<<„a[i].numar: „;cin>>a[i].nr;
}
}
void nr_dacia()
{ int i;
int nr=0;
for (i=1;i<=n;i++)
{x=strcmp(a[i].marca,”dacia”);
if (x==0) nr=nr+1;}
cout<<„numarul de masini Dacia este „<<nr<<„\n”;
}
void sortare()
{ int i,j;masina aux;

for (i=1;i<=n-1;i++)
for (j=i+1;j<=n;j++)
{x=strcmp(a[i].culoare,a[j].culoare);
if(x>0)
{aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}
for (i=1;i<=n;i++)
cout<<a[i].culoare<<” „<<a[i].marca<<” „<<a[i].nr<<endl;
}

void main()
{
citire();
nr_dacia();
sortare();
}

Pentru evidenţa produselor cosmetice dintr-un depozit, se defineşte o structură cu următoarele informaţii: codul produsului, denumire, preţul produsului. Citiţi informaţiile tuturor produselor şi afişaţi produsele cu noile preţuri (valoarea lui x este 7 dacă codul produsului este mai mic decât 500. Şi 11 în caz contrar). Afişaţi produsele cu cel mai mare preţ după scumpire.

#include<iostream.h>
#include<string.h>
#include<conio.h>
typedef struct
{int cod,c,p,pret;
char den[20];}produse;
produse a[20];
int n,i,c,p;
void citire()
{
cout<<„Dati numarul de produse „;cin>>n;
for (i=1;i<=n;i++)
{cout<<„codul produsului „;cin>>a[i].cod;
cout<<„pretul produsului „;cin>>a[i].pret;
cout<<„denumirea produsului „;cin>>a[i].den;}
}
void rezolvare()
{
for (i=1;i<=n;i++)
if(a[i].cod<500) a[i].pret=7;
else a[i].pret=11;
for (i=1;i<=n;i++)
cout<<„pretul „<<a[i].den<<” este „<<a[i].pret<<„\n”;
cout<<endl;
for (i=1;i<=n;i++)
if(a[i].pret==11) cout<<a[i].den<<„\n”;
}
void main()
{
citire();
rezolvare();
}

Se citesc de la tastatură numele şi media generală a n elevi. Se cere să se afişeze lista elevilor în ordinea descrescătoare a mediilor.

#include<iostream.h>
#include<string.h>
typedef struct elev{
char nume[50];
float medie;
};
elev a[100],aux;
int n;
void citire()
{int i;
cout<<„n=”;cin>>n;
for(i=1;i<=n;i++)
{cout<<„a[i].nume: „;cin>>a[i].nume;
cout<<„a[i].medie: „;cin>>a[i].medie;
}
}
void sortare()
{int i,j;
for(i=1;i<n;i++)
{for(j=i+1;j<=n;j++)
if(a[i].medie<a[j].medie)
{aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}
}
void afisare()
{int i;
for(i=1;i<=n;i++)
cout<<a[i].nume<<” „<<a[i].medie<<endl;

}
void main()
{citire();
cout<<„lista de elevi\n”;
afisare();
sortare();
cout<<„dupa sortare\n”;
afisare();
}

Reclame

Introducere in C++


Elementele de bază ale limbajului de programare

Noţiuni introductive

• Structura programelor

• Vocabularul limbajului

• Tipuri simple de date (standard)

• Constante, variabile, expresii

• Citirea/scrierea datelor

Structuri de control

• Structura liniară

• Structura alternativă

• Structuri repetitive

Mediul limbajului de programare studiat

• Prezentare generală

• Editarea programelor sursă

• Compilare, rulare, depanare

Implementarea unor algoritmi elementari cu aplicabilitate practică

Tipuri structurate de date.

Tipul tablou. Tablouri unidimensionale şi bidimensionale.

Fişiere text.

• Definire.

• Operaţii specific

Algoritmi fundamentali de prelucrare a datelor structurate în tablouri

• căutare secvenţială, căutare binară

• sortare

• interclasare

• prelucrări specifice tablourilor bidimensionale.

Aplicaţii interdisciplinare

Exemple orientative:

• Prelucrări statistice ale unei serii de valori

• Calculul valorii unei expresii algebrice

• Calcule combinatoriale

• Determinarea unor mărimi fizice dintr-un circuit

electric

• Aplicaţii din genetică (legea creşterilor organice, etc.)

Analiza eficienţei unui algoritm

Aplicaţii din viaţa cotidiană

Exemple orientative:

• Determinarea situaţiei şcolare a unui elev (medii

semestriale, medii generale, numărul de absenţe, etc.)

• Balanţa de cheltuieli ale unei familii

• Determinarea salariului unei persoane

• Evidenţa operaţiilor într-un cont bancar
În viața de zi cu zi de foarte multe ori folosim expresii ca:

Dacă plouă merg cu taxi.

sau

Dacă plouă atunci merg cu taxi altfel o să merg pe jos pe traseul stabilit.

Instrucțiunea if urmărește să cuprindă în algoritm tocmai astfel de situații – condiționale.

Pe marginea exemplului de mai sus putem să deducem sitaxa instrucțiunii în pseudocod:

Dacă <condiție>

atunci instrucțiune1

altfel instrucțiune2

Dacă <condiție> atunci instrucțiune1

Prin urmare, observăm că forma lui Dacă poate îmbraca două forme: cu și fără altfel.

În C sintaxa instrucțiunii if este următoarea.

if (<condiție>) instrucțiune1;

else instrucțiune2;

if (<condiție>) then instrucțiune1;

Compilatorul va executa instrucțiunea if în felul următor:

– Evalueză condiția.

– Dacă condiția este adevărată atunci execută instrucțiune1.

– Dacă ramura else există și condiția nu este adevărată se va executa instrucțiune2.

– Se trece la următoarea instrucțiune după if.

De exemplu, dacă dorim să verifică dacă un număr a este nul vom folosi instrucțiunea if in felul următor:

if (a==0) cout<<”numar nul”;

else cout<<”numarul nu e nul”;

Daca a=0 atunci scrie (`numarul e nul`)

altfel scrie (`numarul nu este nul`);

Calculatorul va verifica dacă valoarea lui a este 0. Dacă este, va afișa numar nul. Dacă a are o valoare diferită de 0 se va afișa numărul nu e nul.

De exemplu dacă a=7 se va afișa numarul nu e nul.

Observații:

– Instrucțiunea if este o structură de control

– Instrucțiunea if este o instrucțiune de decizie (condițională) simplă

– Ramura else nu e obligatorie

– Condiția trebuie pusă între ()

In viata de zi cu zi ne intalnim de multe ori cu situatia in care trebuie sa analizam un set de valori de acelasi tip. O astfel de structura se numeste sir iar valorile respective se numesc elementele sirului. De exemplu, rezultatele obtinute de mai multi elevi la un concurs se poate reprezenta ca un sir.

Daca am avea 100 de elevi am putea declara pentru fiecare elev cate o variabila, lucru ce ar fi total ineficient. In plus, algortimii trebuie sa indeplineasca proprietatea ca sunt generali adica nu lucreaza cu seturi de date particulare. Astfel, daca stim ca avem n elevi (n citit de la tastatura sau din fisier) nu putem sa declaram n variabile pentru ca la fiecare rulare a programului valoarea lui n se poate schimba.

Pentru a indeparta acest inconvenient limbajele de programare ofera posibilitatea de a memora toate elementele unui sir intr-o variabila indexata, in care elementele sunt dispuse intr-o anumita ordine, ocupand pozitii successive bine-determinate. In limbajul de specialitate aceste siruri de valori se numesc vectori sau tablouri unidimensionale.

Numim indicele (rangul) elementului pozitia pe care se afla un element in vector.

Pentru a se putea referi un element al vectorului trebuie sa scriem numele tabloului urmat intre paranteze drepte de indicele elementului.

Un program poate avea declarate mai multe elemente de tip tablou.

De exemplu, consideram ca dorim sa aflam media de la informatica. In rubrica de la informatica avem n=4 note si teza.

Cele n note le putem memora intr-o structura de tip unidimensional iar nota de la teza o putem memora intr-o variabila de tip natural (de exemplu unsigned int (pentru C++), byte (pentru pascal)).

Prin urmare n=4. Presupunem ca avem tabloul note:

Note=(5,7,9,7) si teza=7.

Media_notelor = (note[1]+note[2]+note[3]+note[4])/4. Bineinteles, pentru fiecare nota puteam folosi cate o variabila. Insa, daca la un elev sunt 4 note in rubrica, la altul sunt 3, la altul sunt 5 s.a.m.d lucrurile se schimba. In astfel de cazuri trebuie sa citim n (numarul de note) si sa citim notele pe rand.

Dupa ce am putut afla media notelor putem calcula si media de la informatica: (media_notelor*4+teza)/4.

Aceasta problema se poate rezolva si fara a folosi vectori. Astfel, pentru a calcula media_notelor putem citi pe rand notele, sa le adaugam pe fiecare la suma initilizata inainte de a face citirea notelor cu 0 iar la sfarsit sa impartim suma notelor la numarul de note. Astfel de probleme se gasesc la problemele propuse la instructiuni repetitive.

Sa revenim la referirea elementelor tabloului.

In C++, C si C# primul element dintr-un vector are indicile 0 insa, in programare, depinde de utilizator cum foloseste variabilele. Programatorul, pentru a nu se complica cu un indice+1 in cazul in care trebuie sa afiseze, spre exemplu, al catelea element este in vector, poate considera ca elementele au indicia cuprinsi intre 1 si numarul maxim de elemente, pierzand astfel un element din numarul maxim de elemente.

Primul element este 5. Elementul este note[0] iar valoarea lui note[0]=5; pozitia elementului in vector este 0.

Al doilea element este 7. Elementul este nota[2] iar valoarea lui este nota[2]=7; pozitia elementului in vector este 1.

s.a.m.d.

Un fişier este o colecţie de date. Un fișier are un nume care poate fi urmat de punct și de extensie.

Avantajul lucrului cu fisiere este evident: dacă datele se citesc din fișier acestea se scriu o singură date și pe baza acestora programul poate rula de mai multe ori fără a trebui să fie reintroduse. În plus, informațiile rezultate în urma execuției pot fi salvate.

În esenţă, există doua tipuri de fisiere:

– fisiere text

– fisiere binare.

Un fişier text conţine, după cum rezultă din nume, un text format din cifre și caractere.

Un fisier binar poate conţine în plus și imagini, baze de date, etc.

În liceu se studiază fișierele text.

Pentru a putea lucre fişiere text în C++ seste nevoie să se adauge o bibliotecă standard: <fstream.h>. Această bibliotecă lucrează cu fluxuri (stream-uri):

ifstream – pentru intrare, pentru citire din fișier

ofstream – pentru ieșire, pentru afiare într-un fișier

fstream – are ambele caracteristici (ifstream și ofstream)

Opreaţiile care se efectuează, în general, cu fisiere text sunt:

– deschidrea unui fisier text

– închiderea unui fisier text

– citirea datelor dintr-un fisier text

– scrierea datelor intr-un fisier text

– adăugarea datelor într-un fişier text

Pentru a putea efectua operaţii cu un fişier text acesta trebuie mai intâi deschis.

Pentru citire se folosește ifstream în una din formele de mai jos:

ifstream f(„clasa.in”); sau fstream f(„clasa.in”,ios::in);

Pentru a se scrie informațiile în fișier se folosește una din formele.

ofstream f(„cls.out”); sau fstream f(„cls.out”,ios::out);

iar pentru adăugare se folosește

fstream f(„cls.out”,ios::app);

Pentru a se închide un fișier trebuie folosită funcția close().

De exemplu f.close();

Exemplu: Să se realizeze o copie a fișierului numere.in .

#include<fstream.h>

#include<conio.h>

#include<iostream.h>

void main()

{

int i=0,n; char c;

ifstream f(„numere.in”);

ofstream g(„numere.out”);

while(!f.eof()) // cât timp nu s-a ajuns la sfârşitul fisierului text

{

i++;

f>>c; //se citeste din fisier caracter cu character

g<<c;//se afișează în fișier caracterul citit

}

f.close(); g.close();// se închid fisierele

}

Limbajul de programare CC++


C este un limbaj de programare standardizat, compilat, de nivel mediu. Este implementat pe majoritatea platformelor de calcul existente azi, și este cel mai popular limbaj de programare pentru scrierea de software de sistem. Este apreciat pentru eficiența codului obiect pe care îl poate genera, și pentru portabilitatea sa.

A fost dezvoltat la începutul anilor 1970 de Ken Thompson și Dennis Ritchie, care aveau nevoie de un limbaj simplu și portabil pentru scrierea nucleului sistemului de operare UNIX.

Sintaxa limbajului C a stat la baza multor limbaje create ulterior și încă populare azi: C++, Java, JavaScript, C#.

C este un limbaj de programare relativ minimalist ce operează în strânsă legătură cu hardware-ul, fiind cel mai apropiat de limbajul de asamblare față de majoritatea celorlalte limbaje de programare.
Un exemplu de program C („Hello World!”)Următorul exemplu de program a apărut în prima ediție a cărții lui Brian Kernighan și Dennis Ritchie și a devenit un exemplu standard de program introductiv în marea majoritate a cărților de programare, indiferent de limbajul de programare. Programul afișează „Hello, World!“ la ieșirea standard, care este, de obicei, un terminal sau monitor. Poate să fie, totuși, și un fișier sau alt dispozitiv hardware, depinzând de maparea ieșirii standard în momentul execuției programului.
#include <stdio.h>

main()
{
printf(„Hello, World!\n”);
}

Programul prezentat mai sus va fi compilat corect de marea majoritate a compilatoarelor moderne. Totuși, va produce unele mesaje de avertizare dacă va fi compilat de un compilator ce respectă standardul ANSI C. Mai mult, codul nu va fi compilat, returnând mesaje de eroare, dacă se respectă standardele C99, deoarece variabila de întors, de tip int, nu va putea fi dedusă dacă nu a fost specificată în codul sursă. Aceste mesaje pot fi eliminate, aducând câteva schimbări minore programului original:
#include <stdio.h>

int main(void)
{
printf(„Hello, World!\n”);

return 0;
}

Urmează o discuție linie cu linie a programului prezentat mai sus:
#include <stdio.h>

Prima linie a programului reprezintă o directivă preprocesor, #include. Aceasta face ca preprocesorul — primul utilitar ce examinează codul sursă când acesta este compilat — să substituiască linia respectivă cu conținutul unui fișier sau al entității la care se face referire. În acest caz, fișierul header („antet”) stdio.h — care conține definițiile funcțiilor de manipulare a intrării și ieșirii standard — va înlocui acea linie. Parantezele unghiulare ce cuprind stdio.h indică prezența acelui fișier în una din locațiile date preprocesorului prin calea de căutare (engleză search path) a fișierelor header (aceste fișiere se află în directorul „include” al platformei, respectiv compilatorului folosit).
int main(void)

Următoarea linie definește funcția numită main. Funcția main are un loc bine stabilit în programele C. Când un program C este executat, aceasta este prima funcție executată (punctul de intrare în program). Prezența acesteia este obligatorie pentru ca un program să poată fi executat. Porțiunea de cod int indică faptul că valoare întoarsă — valoare pe care funcția main o va întoarce procesului apelant — este un întreg. (void) indică faptul că funcția main nu primește nici un argument la apelare.
{

Paranteza acoladă deschisă indică începutul codului pentru funcția main.
printf(„Hello World\n”);

Aceasta linie apelează — caută și execută codul — funcția printf, care a fost definită în fișierul header stdio.h. În cadrul acestui apel, funcției printf îi este pasat (transmis) un singur argument, șirul de caractere „Hello, World!\n”. Secvența \n este denumită secvență escape (cu semnificație specială), care se traduce prin caracterul EOL (end-of-line, sfârșitul liniei), pentru a muta cursorul pe linia următoare. Valoarea de întoarcere a funcției printf este un întreg int, dar nu este folosită în acest caz (este „ignorată”).
return 0;

Această instrucțiune termină execuția codului funcției main și face ca aceasta să întoarcă valoarea 0 procesului apelant, în cazul acesta sistemului de operare.
}

Paranteza acoladă închisă indică terminarea codului funcției main.

Compatibilitatea totală cu alte compilatoare ce respectă standardul C99 poate fi insă atinsă prin următorul cod:
#include <stdio.h>
#include <stdlib.h>

int main(void) {
printf(„Hello world!\n”);

return EXIT_SUCCESS;
}

Constanta EXIT_SUCCESS este definită în headerul stdlib.h, de aceea a fost necesară includerea sa. Pe majoritatea platformelor această constantă are valoarea zero.Începuturile limbajului de programare C

Etapa inițială de dezvoltare a limbajului de programare C a avut loc în cadrul laboratoarelor AT&T Bell între anii 1969 și 1973. După spusele lui Dennis Ritchie, cea mai creativă perioadă a avut loc în 1972. A fost denumit „C“ deoarece multe din caracteristicile sale au fost derivate din limbajul de programare „B“.

Sunt multe legende despre originea limbajului C și legătura sa cu sistemul de operare Unix, cum ar fi:
Dezvoltarea limbajului C a fost rezultatul dorinței programatorilor de a juca un joc de tipul Asteroids. Aceștia îl jucau pe calculatorul principal al companiei, dar din lipsa de resurse și datorită faptului că acesta trebuia să suporte mai mult de 100 de utilizatori, Thompson și Ritchie, nemulțumiți de controlul pe care îl aveau asupra navei în încercarea de a evita asteroizii, au decis să porteze jocul pe un PDP-7, nefolosit, din birou. Dar această mașină nu avea un sistem de operare, așa că au hotărât să scrie unul. Au decis ca eventual să porteze acest sistem de operare pe mașinile PDP-11 pe care aceștia le foloseau în birou, dar era o muncă destul de dificilă având în vedere că totul era scris în limbaj de asamblare. Așa că au decis să folosească un limbaj portabil de nivel înalt astfel încât sistemul de operare să poată fi portat cu ușurință de pe un computer pe altul. Au încercat folosind limbajul de programare B, dar îi lipseau unele din funcționalitățile care ar fi făcut facilă folosirea unor caracteristici avansate a mașinii PDP-11. Astfel, a apărut un nou limbaj de programare, numit C.
Justificarea pentru obținerea primului computer care a fost utilizat pentru dezvoltarea sistemului de operare Unix a fost acela de a crea un sistem pentru a automatiza completarea autorizațiilor. Prima versiune a sistemului de operare Unix a fost scrisă în limbaj de asamblare. Mai târziu, limbajul de programare C a fost folosit pentru a rescrie sitemul de operare.

Începând cu anul 1973, limbajul de programare C a devenit destul de robust, astfel încât mare parte a kernelului Unix, scris inițial în limbaj de asamblare pentru PDP 11/20, a fost rescris în C. Acesta a fost unul din primele kernele ale unui sistem de operare scris într-un limbaj de programare, altul decât limbajul de asamblare. Încercări anterioare au fost pentru scrierea sistemului Multics (scris în PL/I) și TRIPOS (scris în BCPL).