Sunteți pe pagina 1din 9

Lucrarea de laborator nr. 1.

FUNCII DE INTRARE/IEIRE STANDARD

1. Coninutul lucrrii
n lucrare sunt prezentate funciile I/E standard, adic funciile din biblioteca compilatorului C/C++,
care realizeaz citirea/scrierea din/n fiierele standard de I/E.

1. Consideraii teoretice
Terminalul standard este terminalul de la care s-a lansat programul. Terminalului standard i sunt
ataate dou fiiere: de intrare (stdin) i de ieire (stdout). Ele sunt fiiere secveniale.
Funciile din biblioteca compilatorului C/C++ utilizate mai frecvent pentru operaiile de I/E sunt:
- pentru intrare: getch, getche, gets, scanf, sscanf ;
- pentru ieire: putch, puts, printf, sprintf.
la care se mai adaug macrourile getchar pentru intrare i putchar pentru ieire.
2.1.

Funciile getch, getche i putch

Funcia getch citete fr ecou un caracter prin apsarea unei taste. Tasta poate avea un corespondent
ASCII sau o funcie special. n primul caz funcia returneaz codul ASCII al caracterului. n al doilea caz,
funcia se apeleaz de dou ori: prima dat returneaz valoarea zero, iar a doua oar returneaz o valoare
specific tastei acionate.
Funcia getche este analog cu funcia getch, realiznd ns citirea cu ecou.
Apelul funciilor getch i getche conduce la ateptarea apsrii unei taste.
Funcia putch afieaz pe ecranul terminalului un caracter corespunztor codului ASCII transmis ca
parametru. Caracterele imprimabile au codul ASCII n intervalul [32,126]. Pentru coduri n afara acestui
interval se afieaz diferite imagini. Funcia returneaz valoarea parametrului de la apel.
Prototipurile acestor trei funcii se gsesc n fiierul conio.h i sunt:
int getch(void);
int getche(void);
int putch(int ch);
Exemplu de utilizare:
/* Programul L1Ex1.cpp */
#include <conio.h>
main()
{
putch(getch());
getch();
}
2.2.

Funciile gets i puts

Funcia gets citete cu ecou de la terminalul standard un ir de caractere ale codului ASCII, la adresa
specificat drept parametru al funciei. Din funcie se revine la:
- citirea caracterului \n (newline), caracter care este transformat n caracterul \0 (null). n acest
caz funcia returneaz adresa de nceput a zonei de memorie n care se pstreaz caracterele;
- citirea sfritului de fiier (CTRL/Z), funcia returnnd valoarea zero.
Funcia puts afieaz la terminalul standard un ir de caractere corespunznd codului ASCII de la
adresa transmis ca parametru. Caracterul \0 este interpretat ca \n. Funcia returneaz codul ultimului
caracter afiat sau 1 n caz de eroare.
Prototipurile funciilor se gsesc n fiierul stdio.h i sunt:
char *gets (char *s);
int puts (const char *s);
Exemplu de utilizare:
/* Programul L1Ex2.cpp */
#include <stdio.h>
#include <conio.h>
main
{
char s[200];
printf(\nIntroducei un ir de caractere urmat de
ENTER\n);
gets(s);
printf(\nSirul de caractere introdus\n);
puts(s);
getch();
}
2.3. Funciile scanf i printf
Funcia scanf are rolul de a introduce date tastate de la terminalul standard sub controlul unor
formate. Datele introduse sunt convertite din formatele lor externe n formate interne i sunt pstrate la
adresele specificate la apel. Datele introduse se termin cu apsarea tastei ENTER.
Prototipul funciei scanf se gsete n fiierul stdio.h i este:
int scanf(const char *format [,adresa,..]);
Ea returneaz numrul de cmpuri de la intrare introduse corect sau valoarea EOF(-1) n cazul
ntlnirii sfritului de fiier (CTRL/Z).
Formatul este specificat ca un ir de caractere. El conine specificatorii de format, care definesc
conversiile din formate externe n formate interne. Un specificator de format este alctuit din:
- caracterul %;
- opional caracterul *, care indic faptul c data prezent la intrare nu se atribuie nici unei
variabile;
- opional un numr zecimal, care definete lungimea maxim a cmpului controlat de format;
- 1 sau 2 litere, care definesc tipul conversiei.
Cmpul controlat de format ncepe cu primul caracter curent care nu este alb i se termin, dup caz:
a) la caracterul dup care urmeaz un caracter alb;
b) la caracterul care nu corespunde tipului de conversie;

c) la caracterul la care se ajunge la lungimea maxim a cmpului.


Datele se citesc efectiv dup apsarea tastei ENTER. Adresa unei variabile se specific prin
&nume_variabil.
Literele care definesc tipul conversiei sunt:
Litera
c
s
d
o
x, X
u
f
ld, lo, lx, lX
lu
lf/ Lf

Tipul datei citite


char
ir de caractere
ntreg zecimal
ntreg octal
ntreg hexazecimal
unsigned
float
long
unsigned long
double/long double

Funcia printf este folosit pentru afiarea unor date pe ecranul terminalului standard sub controlul
unor formate. Datele sunt convertite din format intern n formatul extern specificat.
Prototipul funciei printf se gsete n fiierul stdio.h i este:
int printf(const char *format [,expresie, ]);
Formatul este dat ca un ir de caractere. El are n structura sa succesiuni de caractere (care se
afieaz) i specificatori de format.
Un specificator de format conine:
- caracterul %;
- opional caracterul minus -, care specific cadrarea datei n stnga cmpului (implicit cadrarea se
face n dreapta);
- opional un numr zecimal, care definete dimensiunea minim a cmpului n care se afieaz
data;
- opional un punct urmat de un numr zecimal, care specific precizia de afiare a datei;
- una sau dou litere, care definesc tipul conversiei. Fa de literele prezentate la scanf apar literele
e i E pentru afiarea datelor float sau double sub form de exponent, g i G pentru afiarea
datelor sub forma de exponent sau nu, astfel ca data afiat s ocupe un numr minim de
caractere.
Funcia returneaz numrul de caractere (octei) afiate la terminal sau 1 n caz de eroare.
Exemple de folosire:
/* Programul L1Ex3.cpp */
#include <stdio.h>
#include <conio.h>
main( )
{
int a;
float b,c;
printf(\nIntroducei o valoare ntreag a=);

scanf(%5d,&a);
printf(\nIntroducei o valoare real b=);
scanf(%5f,&b);
c=a+b;
printf(\nValoarea c=a+b este: %6.3f\n,c);
getch();
}
2.4. Funciile sscanf i sprintf
Fa de funciile scanf i printf, funciile sscanf i sprintf au n plus ca prim parametru adresa unei
zone de memorie care conine caractere ASCII. Funcia sscanf citete caracterele din aceast zon de
memorie n loc de zona tampon corespunztoare fiierului standard de intrare (tastaturii). Funcia sprintf
depune caracterele n aceast zon de memorie n loc de a fi afiate pe ecran.
Prototipurile acestor funcii se gsesc n fiierul stdio.h i sunt:
int scanf (const char *buffer, const char *format [,adresa, ..]);
int sprintf (char *buffer, const char *format [,adresa, );
Exemplu de folosire:
/* Programul L1Ex4.cpp */
#include <stdio.h>
#include <conio.h>
main ( )
{
char s[100], q[100];
int a,b;
float c,d;
printf (\nIntroduceti n acelai rnd valoarea\n\
lui a i b despite ntre ele prin blanc\n\
urmate de ENTER\n);
gets(s);
sscanf(s,%d %f, &a, &c);
printf(\n a=%4d c=%8.3f\n,a,c);
sprintf(q,%4d %8.3f\n,a,c);
sscanf(q,%d %f,&b,&d);
printf(\n b=%5d d=%9.4f\n,b,d);
getch();
}
2.5. Macrourile getchar i putchar
Macroul getchar permite citirea cu ecou a caracterelor codului ASCII, deci nu a celor
corespunztoare tastelor speciale. Caracterele tastate se introduc ntr-o zon tampon pn la acionarea tastei
ENTER. La revenire, se returneaz codul ASCII al primului caracter introdus, iar la un nou apel, al
urmtorului caracter introdus .a.m.d. La ntlnirea sfritului de fiier (CTRL/Z) se returneaz valoare
EOF(-1).
Macroul putchar afieaz caracterul al crui cod ASCII s-a transmis.
Macrourile getchar i putchar sunt definite n fiierul stdio.h i au formatele:
int getchar(void);
int putchar (int c);

i se apeleaz exact ca funciile getch i putch.


Exemplu de utilizare:
/* Programul L1Ex5.cpp */
#include <stdio.h>
#include <conio.h>
main( )
{
putchar(getchar()) ;
putchar(\n);
getch();
}

3. Mersul lucrrii
3.1 Se va face cunotin cu mediul interactiv de programare n C/C++
3.2 Se vor studia funciile i macrourilile principale pentru programarea introducerii i
afirii datelor
3.2. Se vor executa programele date ca exemplu n lucrare i se vor
analiza rezultatele obinute.

Lucrarea de laborator nr. 1.2

EXPRESII

1. Coninutul lucrrii
Scopul lucrrii este prezentarea noiunii de expresie n limbajul C/C++, a operatorilor i a modului
de evaluare a unei expresii.

2. Consideraii teoretice
2.1 Definirea expresiei
O expresie este format dintr-un operand sau mai muli operanzi legai prin operatori.
Un operand poate fi:
- o constant;
- o constant simbolic;
- numele unei variabile simple;
- numele unui tablou;
- numele unei structuri;
- numele unui tip;
- o variabil indexat;
- numele unei funcii;
- referina la elementul unei structuri;
- apelul unei funcii;

expresie inclus n paranteze rotunde.

Unui operand i corespunde o valoare i un tip.


Operatorii pot fi unari sau binari.
La evaluarea unei expresii trebuie s se in seama de:
- prioritile operatorilor;
- asociativitatea operatorilor de aceeai prioritate;
- regula conversiilor implicite.
2.2 Operatori
Operatorii limbajului C/C++ sunt mprii n urmtoarele clase:
-

operatori aritmetici:
- operatori unari: +, - operatori binari multiplicativi: *, /, %
- operatori binari aditivi: +, operatori relaionali: <, <=, >, >=
operatori de egalitate: = =, !=
operatori logici: !, &&, ||
operatori logici pe bii: ~, <<, >>, &, ^, |
operatori de atribuire: =, /=, *=, %=, +=, -=, <<=, >>=, &=, ^=,
|=
operatori de incrementare: ++, -operatori de forare tip: (tip) operand
operatori dimensiune: sizeof
operatori adres: &
operatori parantez: ( ), [ ]
operatori condiionali: ?, :
operatorul virgul: ,
operatorul de derefereniere: *
operatorul de acces la componenta unei structuri: . , ->

Observaie: n limbajul C++ s-au mai introdus civa operatori:


-

operatorul de rezoluie: ::
operatorul pentru tipul referin: &
operatorul de alocare/dealocare dimensiune a memoriei heap:
new/delete

Prioritile operatorilor, n ordine descresctoare, sunt prezentate n tabelul de mai jos:

Prioritile
1
2
3
4
5
6
7
8

Operatori
( ) [ ] ->
+(unar) -(unar) &(unar) *(unar) ++ -- (tip) sizeof
!~
*(binar) / %
+(binar) -(binar)
<< >>
< <= > >=
= = !=
&(binar)

9
10
11
12
13
14
15

^
|
&&
||
? :
= <<= >>= += -= *= /= %= &= ^= |=
,
Operatorii din aceeai linie au aceeai prioritate.

n ceea ce privete asociativitatea operatorilor, se precizeaz c ei se asociaz de la stnga la dreapta


cu excepia operatorilor unari, condiionali i de atribuire, care se asociaz de la dreapta la stnga.
2.3. Regula conversiilor implicite
Regula conversiilor implicite const n urmtoarele:
-

dac un operator binar se aplic la operanzi de acelai tip, atunci rezultatul va avea tipul comun al
operanzilor;
dac un operator binar se aplic la doi operanzi de tipuri diferite, atunci operandul de tip inferior
se convertete implicit spre tipul superior al celuilalt operand, iar rezultatul va avea tipul superior.
Ordinea descresctoare a prioritii tipurilor este urmtoarea:

long double;
double;
float;
unsigned long;
long;
int.

3. Mersul lucrrii
3.1. Conform variantei individuale s se scrie un program pentru calcularea valoarilor
expresiilor date, utiliznd tipurile de date necesare.

Exemplu de program:
De calculate valoarea expresiei

#include <stdio.h>
#include<conio.h>
#include<math.h>
void main()
{

// Declaram variabile acesta este un comentariu


int x, a , b ;
float c, d ;
clrscr() ;

// Curatim ecranul

// Afisam o propozitie de dialog


puts (Culegeti valortile x, a, b !);
scanf(%d%d%d , &x, &a, &b);
//Calculari
c=log(x + 7*sqrt( abs( x+a) / abs(x+b)));
d=1.5*pow( cos(x),2 )/3*tan(x);
//Afisam rezultatele obtinute
printf(Rezultatul: c = %f d=%f, c, d );
//ratinem rezultatul pe ecran
getch();
}

S-ar putea să vă placă și