Documente Academic
Documente Profesional
Documente Cultură
Curs 1
Curs 1
Sumar
Generalităţi.
Noţiuni
1
primare C/C++
Introducere în programare
Tipuri de fişiere în C/C++
Erori de sintaxă şi erori logice într-un program
Structura programelor C
Vocabularul limbajului
Operaţii de citire şi scriere de la consolă
Variabile. Tipuri de date. Tipuri standard
Constante
Expresii. Operatori
Funcţii matematice
Aplicaţii rezolvate
Aplicaţii propuse
1. Introducere în programare
Programele de calculator, cunoscute şi sub numele de componente soft, sunt constituite
dintr-o serie de instrucţiuni pe care le execută calculatorul.
În principiu, toate compilatoarele de C++ sunt şi compilatoare de C. Diferenţa
constă în extensia ataşată fişierelor în cauză, şi anume, .cpp în locul lui .c. Prin faptul că
limbajul C++ este o completare a limbajului C, vom spune ca limbajul C este un subset al
limbajului C++, sau, cu alte cuvinte, C++ este un supraset al limbajului C.
Compilarea unui fişier C++ se face asemenea compilării unui fişier C, adică, odată scris
fişierul textual sursă, având extensia .cpp, instrucţiunile recunoscute ale limbajului sunt
convertite în cod maşină, se trece prin editorul de legături, care construieşte programul
executabil prin combinarea instrucţiunilor programului din fişierul sursă cu funcţiile şi
obiectele pe care le deţine compilatorul, ce sunt preluate prin intermediul directivelor de
program.
1
2. Tipuri de fişiere în C/C++
Chiar dacă C este conţinut în C++, există câteva diferenţe minore între cele două
limbaje din punctul de vedere al limbajului C. Din acest motiv, programele în C trebuie
compilate ca programe în C, iar cele în C++, ca programe în C++.
Astfel că, atunci când se scrie un program în C sau C++, se plasează instrucţiunile într un
fişier sursă care are după caz extensiile .c sau .cpp. Dacă programul se compilează cu succes,
compilatorul va crea un fişier executabil, cu extensia .exe.
Multe din programele realizate utilizează aşa numitele fişiere antet, sau fişiere
bibliotecă (acestea au extensia .h), care conţin instrucşiuni utilizate în mod curent. Acestea
sunt introduse prin intermediul unei directive (#include).
Dacă se va examina conţinutul directorului de lucru după ce s-a realizat şi compilat un
program, se va putea constata ca va exista unul sau mai multe fişiere cu extensia .obj. Aceste
fişiere, denumite fişiere obiect, conţin instrucţiuni sub formă de şiruri de 0 şi 1, pe care le
înţelege calculatorul. Totuşi, nu se pot executa aceste fişiere obiect, deoarece conţinutul lor nu
este chiar complet.
Compilatorul de C/C++ pune la dispoziţie rutine (cum ar fi printf), care realizează
operaţiile frecvent utilizate şi reduc numărul de instrucţiuni care trebuie introduse în program.
După ce compilatorul examinează sintaxa programului, el creează un fişier obiect. În cazul
programului nume_fis.c (sau, nume_fis.cpp), compilatorul va crea un fişier obiect denumit
nume_fis.obj. După aceea, un program denumit editor de legături alcătuieşte programul
executabil prin combinarea instrucţiunilor programului din fişierul obiect cu funcţiile pe care
le deţine compilatorul (cum ar fi printf, de exemplu). De cele mai multe ori, atunci când se
apelează compilatorul pentru a examina fişierul sursă, acesta va apela în mod automat editorul
de legături dacă programul s-a compilat cu succes. Figura următoare ilustrează procesul de
compilare şi de realizare a legăturilor unui program.
Scriere
Rulare
DA
nume_fis.c DA
(sau .cpp)
nume_fis.exe
.cpp) succes? NU legături
nume_fis.obj
Compilare Cu
nume_fis.c (sau Cu succes?
Editare
NU Editare
2
3. Erori de sintaxă şi erori logice într-un program Fiecare limbaj de
programare are un set de reguli, denumite reguli sintactice, care trebuie respectate atunci
când sunt introduse instrucţiunile în cadrul programului. Dacă este încălcată o regulă
sintactică, programul nu va fi compilat cu succes. Într-o astfel de situaţie, compilatorul va
afişa pe ecran mesaje de eroare ce precizează linia din program care conţine eroarea, precum
şi o scurtă descriere a acesteia.
Pe măsură ce programele scrise vor deveni mai complexe, pot apărea situaţii în care
programul se compilează cu succes, dar nu execută corect cerea dată de utilizator. Când
programul nu lucrează aşa cum doreşte programatorul, înseamnă că el conţine erori logice,
numite şi bugs. Când programele scrise conţin erori logice trebuie încercată descoperirea şi
corectarea cauzei erorii. Procesul de înlăturare a erorilor logice dintr-un program este numit
depanare.
3
• Cele două paranteze rotunde () se ataşează oricărei funcţii. Între ele se scriu opţional
anumiţi parametri. Un parametru este o informaţie pe care programul o transmite
funcţiei. În acest caz ei lipsesc.
• Cele două acolade {} constituie corpul funcţiei. Între ele se scriu instrucţiunile care o
alcătuiesc. În cazul de faţă mulţimea lor este vidă.
Observaţie 1: Limbajul face distincţie între literele mari şi cele mici. Programul de mai jos dă
eroare de sintaxă, pentru că tipul Void nu este cunoscut.
Void main ()
{
}
Observaţie 2: Nu are importanţă plasarea cuvintelor pe linie, nici spaţiile dintre ele.
Programul mai poate fi scris şi aşa:
void main ( ) { }
Aceasta nu înseamnă că este bine să procedăm astfel. El poate fi rulat, dar este greu de înţeles.
Observaţie 3: Este permis ca tipul funcţiei să lipsească. În acest caz se presupune că funcţia
întoarce un rezultat întreg (de tipul int). De exemplu putem scrie aşa:
main()
{
}
În acest caz, la compilare se primeşte un avertisment. De vreme ce tipul este int, se
aşteaptă ca funcţia să întoarcă un rezultat de acest tip. Dar, ea nu întoarce nimic. Acest
avertisment poate fi ignorat.
5. Vocabularul limbajului
Vocabularul oricărui limbaj este format din:
• setul de caractere;
• identificatori;
• separatori;
• comentarii.
Setul de caractere. Reprezintă ansamblul de caractere cu ajutorul cărora se poate scrie
un program C:
- literele mari şi mici ale alfabetului englez (A – Z, a - z);
- cifrele sistemului de numeraţie în baza 10 (0 - 9);
- caractere speciale: +, –, *, /, =, ^, <, >, (, ), [, ], {, }, ., ,, :, ;, #, $, @, _, şi blank (spatiu)
4
Identificatori. Prin identificatori înţelegem o succesiune de litere, cifre sau caracterul
special ‘_’ din care prima nu trebuie să fie cifră. Cu ajutorul identificatorilor se asociază nume
constantelor, variabilelor, procedurilor, etc.
Exemple de identificatori: numar7, numar, un_numar, _numar.
Contraexemple: 1numar, numar@ (primul începe cu o cifră, iar al doilea conţine un
caracter special).
Separatori şi comentarii. Separatorii sunt, după caz unul sau mai multe blancuri,
caracterul CR, sfârşitul de linie sau caraterul ‘;’. Comentariile se introduc între caracterele ‘/*’
si ‘*/’ pentru mai multe linii ale textului sursă, respectiv ‘//’ ptr. o sigură linie de comentarii
ale textului sursă.
6. Citiri. Scrieri
Funcţiile printf() şi scanf() efectuează ieşiri, respectiv intrări formatate – ele
pot scrie, respectiv citi date în diverse formate. Ambele funcţii ştiu să lucreze cu orice cu
orice tip de date existent, inclusiv caractere, şiruri şi numere. Prototipurile lor sunt:
printf(<format>[,<parametri>]);
scanf(<format>[,<parametri>]);
Cod Format
%c Caracter
%d Nr. întregi în baza 10 cu semn
%i Nr. întregi în baza 10 cu semn
%e Notaţie ştiinţifică (cu litera e mică)
%E Notaţie ştiinţifică (cu litera E mare)
%f Nr. zecimal în virgulă mobilă
%g Foloseşte %e sau %f (care din ele este mai
%G mic) Foloseşte %E sau %F (care din ele este
%o mai mic) Număr în octal fără semn
%s Şir de caractere
%u Numere întregi zecimale fără semn
%x Nr. hexazecimale fără semn (cu litere
%X mici) Nr. hexazecimale fără semn (cu
%p litere mari) Afişează un pointer
%n Argumentul asociat este un pointer de tip întreg
în care a fost plasat numărul de caractere scrise
până
5
atunci
%% Afişează un semn %
De exemplu, ptr. a afişa un număr întreg reţinut într-o variabilă n se foloseşte următoarea
apelare a funcţiei printf():
printf(“%d”, n);
Observaţie: Toate variabilele folosite pentru a primi valori prin scanf() trebuie să fie
transmise prin adresele lor. Aceasta înseamnă că toate argumentele trebuie să fie pointeri la
variabilele care primesc efectiv intrările. De exemplu, pentru a citi un întreg într-o variabilă n
se foloseşte următoarea apelare a funcţiei scanf():
scanf(“%d”, &n);
O variabilă este un nume pe care compilatorul de C/C++ îl asociază cu una sau mai
multe locaţii de memorie. Atunci când se declară o variabilă într-un program, trebuie să se
specifice tipul şi numele ei. Tipul unei variabile specifică genul de valori pe care variabila le
poate păstra şi setul de operaţii pe care programul le poate executa asupra datelor.
Observaţie 1: Limbajul C/C++ lucrează doar cu tipuri de date numerice. Observaţie 2: În
C/C++ nu există tipul boolean a.i. orice valoare diferită de 0, a oricărui tip, este considerată
ca fiind TRUE, iar orice valoare 0, a oricărui tip, este considerată ca fiind FALSE.
Tipurile de date cu care lucrează limbajul C/C++ sunt prezentate în tabelul de mai jos. Există
cinci tipuri mai uzuale, şi anume: char (prin intermediul căruia se pot memora valori
6
ce reprezintă caractere, din tabloul codurilor ASCII), int (întreg), float (în virgulă
mobilă), double (în virgulă mobilă cu dublă precizie) şi void (fără nici o valoare).
8. Constante
Există mai multe tipuri de constante:
1. Constante întregi:
• zecimale: 23, 1239, 56.
• octale (în baza 8) – o constantă în baza 8 se declară percedată de un 0 nesemnificativ: 0123
– reţine numărul 123(8)
• hexazecimale (în baza 16) – acestea sunt precedate de 0X sau 0x: 0X1A2 sau 0x1a2 – reţine
numărul 1A2(16)
2. Constante caracter:
Acestea se trec între două caractere apostrof (‘). Exemple ar fi: ‘a’, ‘A’, ‘1’. Memorarea lor se
face utilizând tipul char. Se memorează codul ASCII al caracterului respectiv. De exemplu,
pentru ‘1’ – 49 (10), respectiv pentru ‘a’ – 97 (10).
3. Constante de tip backslash caracter (sub forma de secvenţă escape): C admite mai
multe coduri backslash speciale a.i. să se poată introduce caracterele respective ca pe nişte
constante.
Coduri backslash
Codul Semnificaţia
\b backspace
\f avans hârtie
\n rând nou
\t spaţiu de tabulare orizontal
7
\” ghilimele duble
\’ ghilimele simple
\0 nul
\\ backslash (linie înclinata spre
\v stânga) spaţiu de tabulare vertical
\a alertă
\N constantă în octal (unde N este constanta în
octal)
\xN constantă în hexazecimal (unde N este o
constantă în hexazecimal)
Exemplu 1: Să se scrie un program care care emite o linie nouă şi un spaţiu de tabulare şi apoi
afişează şirul Acesta este un text.
#include<stdio.h>
void main ()
{
printf("\n\tAcesta este un text");
}
Exemplul 2: Programul de mai jos tipăreşte din mai multe ipostaze caracterul a.
#include<stdio.h>
void main(void)
{
printf("zec=%d, oct=%o, hexa=%x\n",'a','a','a');
printf("%c %c %c %c %c %c\n",'a',97,0141,0x61,'\141','\x61');
}
4. Constante reale:
Exemple: -15.67, 0.3, -2.5E-12(adică, -2.5*10-12)
5. Constante şir de caractere:
Acestea se declară între două caractere ”.
Exemplu: “acesta este un text”.
8
• const float pi=3.14;
Să analizăm ultimul exemplu: dacă const ar fi lipsit am fi avut: float pi=3.14; adică,
am fi declarat o variabilă de tip float iniţializată cu valoarea 3.14. Prezenţa modificatorului
const determină protecţia la modificare a variabilei pi. Cu alte cuvinte, pi este o variabilă
de tip “citeşte numai” (are spaţiu rezervat, reţine o valoare care nu poate fi modificată).
9. Expresii. Operatori
Definiţie: Se numeşte expresie o succesiune de operatori şi operanzi legaţi între ei, după reguli
specifice limbajului, în scopul efectuării unor operaţii (calcule, atribuiri, apelări de funcţii
etc.). Operanzii pot fi: constante, variabile, funcţii.
Precedenţa operatorilor (în ordine descrescătoare)
() [] . ->
++ -- + - * ! ~ sizeof
* / %
+ -
>> <<
== !=
& ^ |
&& ||
?:
= += -= *= /=
,
1. Operatori aritmetici:
În C există următorii operatori aritmetici:
-, + (unare şi binare), *, /, % (unare şi binare)
2. Operatori relaţionali:
<, >, <=, >=.
În C nu există valorile logice TRUE şi FALSE, rezultatul unei operaţii logice fiind 1, în cazul
în care inegalitatea este respectată şi 0 în caz contrar.
3. Operatori de egalitate:
== (pentru egalitate), != (pentru inegalitate).
Ca şi operatorii relaţionali, expresiile de acest tip returnează 0 sau 1 – în funcţie de modul în
care este respectată sau nu egalitatea (inegalitatea). Operanzii pot fi constante, variabile,
funcţii.
4. Operatori de incrementare şi decrementare:
Aceşti operatori sunt unari şi au rolul de incrementa (adună 1) sau decrementa (scad 1).
Operatorii sunt:
9
• ++ pentru incrementare;
• -- pentru decrementare.
Operatorii pot fi prefixaţi (aplicaţi în faţa oparandului) sau postfixaţi (aplicaţi după
operand). Să ne gândim că pot fi expresii care conţin şi alţi operatori în afara celor de
incrementare (decrementare).
🕘 Dacă operatorul este prefixat, variabila este incrementată (decrementată) înainte ca
valoarea reţinută de ea să intre în calcul.
🕘 Dacă operatorul este postfixat, variabila este incrementată (decrementată) după ce
valoarea reţinută de ea intră în calcul.
5. Operatori logici:
! negare logică
&& şi logic
|| sau logic
Aceşti operatori se aplică oricărei variabile şi constante sau expresii din cele mai sus
menţionate.
6. Operatori logici pe biţi:
Limbajul C este dotat cu un set de operatori care permit accesul la bit. Aceştia sunt: <<, >>
operatori de deplasare către stânga/dreapta conţinutul tuturor biţilor din stânga sa, cu un
număr de poziţii egal cu valoarea reţinută de al doilea operand; & şi pe biţi
| sau pe biţi
^ sau exclusiv pe biţi
~ negare pe biţi (operator unar).
7. Operatori de atribuire:
În C avem mai mulţi operatori de atribuire. Operatorul ‘=’se foloseşte într-o expresie de
forma:
v=expresie ,unde v este o variabilă.
Pot exista şi atribuiri multiple de forma:
v=v1=v2=v3=…..=vn=expresie ,unde v,v1,v2,…vn sunt variabile. Pentru
atribuiri se mai pot utiliza şi operatorii: *=, /=, %=, +=, -=, <<=, >>=, &=, ^=,
|=.
Exemplu: Fie declaraţia int a=3; şi expresia a*=2. În urma evaluării a va reţine valoarea 6.
10
8. Operatorul condiţional:
Se foloseşte în expresii de genul:
exp1?exp2:exp3
principiul de execuţie este următorul:
• se evaluează exp1
• dacă aceasta produce o valoare diferită de 0, se evalueză exp2 şi este exp3 ignorată (nu se
evaluează);
• altfel, se evaluează exp3 şi exp2 este ignorată.
În ansamblu, expresia este de tipul lui exp2 sau exp3 şi produce valoarea exp2 sau exp3
(în funţie de cea care se evaluează).
9. Operatorul sizeof
Are rolul de a returna numărul de octeţi pentru memorarea unei valori. Operatorul poate fi
utilizat într-una din cele două forme de mai jos:
sizeof (expresie)
sizeof (tip)
Este de reţinut faptul că expresia nu este evaluată (deci nu apar efecte secundare).
Exemple:
• fie declaraţia int a; sizeof(a)=2 (adică, tipul int ocupă 2 octeţi)
• sizeof(float)=4
• sizeof(++x)=4 (dacă x este de tip float, dar x rămâne nemodificat – expresia ++x
nu a fost evaluată).
11
10. Funcţii matematice
Nume funcţie Fiş. header Forma generală Semnificaţie
abs math.h int abs (int x); întoarce modulul expresiei întregi x ( |x| )
fabs math.h double fabs (double x); are acelaşi rol cu abs, doar că întoarce un nr. real
labs math.h long int labs(long int are acelaşi rol cu abs, numai că întoarce valoarea
x); unui întreg lung
acos math.h double acos (double x); calculează valoarea funcţiei arccos(x)
asin math.h double asin (double x); calculează valoarea funcţiei arcsin(x)
atan math.h double atan (double x); calculează valoarea funcţiei arctangentă(x)
ceil math.h double ceil (double x); rotunjeşte o valoare întreagă cu valoarea întreagă
următoare ex.: ceil(1.12)=2
floor math.h double floor (double x); rotunjeşte o valoare întreagă cu valoarea întreagă
anterioară, adică [x] ex.: floor(1.12)=1
cos math.h double cos (double x); calculează valoarea funcţiei cosinus(x)
sin math.h double sin (double x); calculează valoarea funcţiei sinus(x)
tan math.h double tan (double x); calculează valoarea funcţiei tangenta(x)
log math.h double log (double x); calculează valoarea funcţiei ln(x)=loge(x)
modf math.h double modf (double separă o valoare double în întreg şi real. Funcţia
val, double *parte returnează valoarea părţii fracţionare şi atribuie
_întreagă); partea întreagă unei anumite variabile
sqrt math.h double sqrt (double x); calculează rădăcina pătrată a lui x
fmod math.h double fmod (double returnează restul în virgulă mobilă a împărţirii lui
x, double y); x la y
rand stdlib.h int rand (void); returnează un nr. aleator între 0 şi RAND_MAX
random stdlib.h int random (int limita); returnează o valoare aleatoare între 0 şi o limită
Aplicaţia 1. Sa se scrie din mai multe ipostaze textul reprezentat prin caracterul ”A”.
#include<stdio.h>
void main()
{
printf("%c",'A');
}
b) Să se modifice programul anterior astfel încât mesajul de afişat să fie transmis prin
intermediul unei variabile de un tip corect adaptat.
12
#include<stdio.h>
void main()
{
char a; //declarare
a='A'; //atribuire
//cele doua linii de mai sus ar fi putut fi scrise: char a='A';
void main()
{
char a='A'; //varianta C++
int b='A'; //varianta C, cu posibilitate de prelucrare si in C++
printf("%c\t%c\n",a,b);
}
d) Se va afişa caracterul ‘A’ din mai multe variante de afişare.
#include<stdio.h>
void main(void)
{
printf("zeci = %d\tocta = %o\thexa = %x\n",'A','A','A');
printf("\n%c\t%c\t%c\t%c\t%c\t%c\n",'A',65,0101,0x41,'\101','\x41');
}
#include<stdio.h>
void main()
{
char a;
13
Aplicaţia 2: Să se calculeze suma a două numere întregi, prin mai multe variante.
a) Se dau două valori direct în program memorate la două locaţii de memorie şi se va calcula
suma lor.
#include<stdio.h>
void main()
{
int a=3,b=5;
int c=a+b;
printf("%d + %d = %d\n",a,b,c);
}
void main()
{
int a[]={3,5};
int c;
c=a[0]+a[1];
printf("%d + %d = %d\n",a[0],a[1],c);
}
void main()
{
int a,b,c;
c=a+b;
printf("\n%d + %d = %d\n",a,b,c);
}
void main()
{
int a,b;
float m;
14
scanf("%d",&a);
printf("dati al doilea numar: ");
scanf("%d",&b);
Aplicaţia 3: Din mai multe variante se va afişa pe ecran textul “Salut C!”.
#include<stdio.h>
void main()
{
printf("Salut c!\n");
}
b) Texul se va afişa dintr-o variabilă, declarată astfel încât să poată reţine o asemenea
expresie.
#include<stdio.h>
void main()
{
char s[]="Salut C!";
printf("%s\n",s);
}
c) Texul se va afişa dintr-o variabilă, declarată astfel încât să poată reţine o asemenea expresie
(o altă variantă).
#include<stdio.h>
void main()
{
char* s="Salut C!";
printf("%s\n",s);
}
d) Se va citi orice text dorit, după care, se va face afişarea acestuia pe ecran. Indicaţie: citirea
prin scanf(“%s”) nu permite trecerea prin citire peste caracterul Spaţiu, aşa că nu ne
rămâne de făcut decât să căutăm alte modalităţi de citire.
#include<stdlib.h>
#include<stdio.h>
void main()
{
char* s;
15
printf("Introduceti orice text dorit: ");
s=(char*)malloc(sizeof(char)*255); /*alocam memorie de pastrare in memoria
interna pentru un sir textual de maxim 255 caractere */ gets(s); //se face
citirea sirului
void main()
{
int x,y;
printf("Introduceti numerele\n");
printf("\tprimul numar: ");
scanf("%d",&x);
printf("\tal doilea numar: ");
scanf("%d",&y);
Aplicaţia 5: Se dau trei numere reale a,b,c. Pot reprezenta ele lungimile laturilor unui
triunghi?
#define si &&
#define adevarat ?
#define altfel :
#define afiseaza printf
#define citeste scanf
#define reale float
#include<stdio.h>
void main()
{
reale a,b,c;
16
afiseaza("\nFormeaza triunghi.",a,b,c)
altfel afiseaza("\nNu formeaza triunghi.");
}
val=1;
printf("Utilizare prefix %d\n",++val); //2
printf("Valoarea dupa incrementare %d\n",val); //2
val=1;
printf("Utilizare postfix %d\n",val--); //1
printf("Valoarea dupa decrementare %d\n",val); //0
val=1;
printf("Utilizare prefix %d\n",--val); //0
printf("Valoarea dupa decrementare %d\n",val); //0
}
Aplicaţia 7: Să se calculeze puterea a n-a a lui 2, unde n este un întreg citit de la tastatură.
/* Acest exemplu il putem folosind unul dintre operatorii speciali pe care
ii are C-ul si anume, operatorul de deplasare pe biti spre stanga <<. Fie x
un numar intreg. Prin x<<1 intelegem deplasarea spre stanga a bitilor din
reprezentarea pe biti (in baza 2) a lui x, completandu-se cu 0 in dreapta.
Astfel, de exemplu, daca x=5, adica 101,atunci deplasarea pe spre stanga va
duce la obtinerea numarului x=10, adica 1010. De fapt, o deplasare spre
stanga cu o unitate reprezinta o inmultire a lui x cu 2. O deplasare spre
stanga cu p pozitii a lui x reprezinta o inmultire a lui x cu 2 de p ori.
Folosind aceste artificiu se poate calcula puterea lui 2 a unui numar dat.
*/
#include<stdio.h>
void main()
{
int n,m=1; /* aici se declara atat variabila n, cat si m care se
initializeaza cu 1 */
printf("Dati n:");
scanf("%d",&n);
printf("2^%d=%d\n",n,m=(m<<n));
}
17
Aplicaţia 8: Să se realizeze o rutină care execută lucrul pe biţi.
#include<stdio.h>
void main()
{
unsigned int a=5;
const int b=7;
printf("%d <sau pe biti> %d este %d\n",a,b,a|b);
printf("%d <si pe biti> %d este %d\n",a,b,a&b);
printf("%d <sau exclusiv pe biti> %d este %d\n",a,b,a^b);
printf("5 <complementat pe biti> este %u variabila fiind pe %u
octeti\n",~a,sizeof(a));
}
Aplicaţia 9: Se citeste un număr zecimal si unul in hexa de cel mult 4 cifre fiecare şi se cere
să se afişeze valorile respective în sistemele de numerotaţie cu baza 10, 8, şi 16.
#include<stdio.h>
void main ()
{
unsigned int i,h;
printf("Dati nr. intreg zecimal: ");
scanf("%d",&i);
printf("Dati nr. intreg hexazecimal: ");
scanf("%x",&h);
printf("\nnr. zec:\tBaza 10: %u\tBaza 8: %o\tBaza 16: %x",i,i,i);
printf("\nnr. hex:\tBaza 10: %u\tBaza 8: %#o\tBaza 16: %#X",h,h,h); /* #
este folosit ptr. afisarea unui prefix (0 sau 0x) inaintea valorilor
octale, respectiv hexazecimale */
}
Aplicaţia 11: Să se scrie un program care citeşte valoarea lui x, pozitiv, afişează valorile lui x,
[x], {x}, calculează şi afişează valoarea următoarei expresii: 5*x*[x]-3*{x}+15.
#include<stdio.h>
void main()
{
double x;
int y; // pentru partea intreaga
double z; // pentru partea zecimala
scanf("%lf",&x);
18
printf("x= %g\t",x);
printf("[x]= %d\t",y=x);
printf("{x}= %f\n",z=x-y);
printf("e= %g\n",5*x*y-3*z+15);
}
Aplicaţia 12: Rezolvaţi următoarele teste grilă propuse.
a) Cu ce linie trebuie completat spaţiul punctat, pentru ca afişarea rezultată să fie următoarea:
25_ _:_7.040?
#include<stdio.h>
void main()
{
int a=25;
float b=7.04;
......
}
a) printf("\n%4d:%-10f",a,b);
b) printf("\n%6d:%10f",a,b);
c) printf("\n%-4d:%6.3f",a,b);
d) printf("\n%-4d:%-10.3f",a,b);
e) printf("\n%-d:%-.3f",a,b);
Răspuns final: c)
a) 41
b) 56
c) 61
d) eroare
e) 0
Răspuns final: b)
19
12. Aplicaţii propuse
20