Sunteți pe pagina 1din 10

Universitatea Tehnică “Gheorghe Asachi” din Iași

Facultatea de Automatică și Calculatoare

PROGRAMAREA CALCULATOARELOR

Curs nr. 5

Capitolul 2. Elemente de bază ale limbajului C


Operații de I/E

scanf
q Prototipul funcției (din stdio.h):

int scanf (format, adr1, adr2, …);

q unde:
q format - șir de caractere care indică în ce fel trebuie citite datele
q adr1, adr2 – adresele locațiilor de memorie unde se vor stoca
valorile citite (adresa unei variabile: &<nume_variabilă>)

q returnează o valoare

PC Curs nr. 5 - 2018 2

scanf
q Formatul:
q %[lățime][h|l|ll|L]tip_char
q lățime – dimensiunea maximă a câmpului citit
q tip_char: s, d, f, c

q Exemple:
q %4d
q %f
q %lf

q %[…..]
q %[^....]

PC Curs nr. 5 - 2018 3

1
q Citirea se oprește la:
q atingerea lăţimii
q următorul caracter din şir care nu se potriveşte cu formatul
q următorul caracter din şir care nu există în mulţimea de căutare

PC Curs nr. 5 - 2018 4

scanf - exemplu
#include <stdio.h>

int main(void)
{
int nr;
int a=10, b=20, c=30;

nr = scanf("%d%d",&a,&b);
printf("1 nr = %d\n",nr);
printf("1 a = %d, b = %d\n",a,b);

PC Curs nr. 5 - 2018 5

scanf - exemplu
nr = scanf("%c",&c);
printf("2 nr = %d\n", nr);
printf("2 c = %c", c);

return 0;
}

PC Curs nr. 5 - 2018 6

2
scanf
OBSERVAŢII:

Pentru formatul %d, scanf ignoră spaţiile albe din faţa datei şi
pune înapoi în buffer spaţiile albe care au determinat
terminarea unei date(' ', '\t', '\n', '\r')

Nu se amestecă formatele %c şi %s cu formatele %d şi %f sau


scanf(…) cu getchar().

PC Curs nr. 5 - 2018 7

scanf - exemplu
int citireVector2(int a[], int dimMax)
{
int n = 0;
int valoareReturnata;

valoareReturnata = scanf(“%d”, &a[n]);


while(n < dimMax && valoareReturnata != EOF)
{
++n;
valoareReturnată = scanf(“%d”, &a[n]);
}
return n;
}
PC Curs nr. 5 - 2018 8

scanf - exemplu
#include <stdio.h>

int main(void)
{
….........
int a[20];
int n;
n=citireVector2(a,20);
afisareVector(a, n);
...............
return 0;
}

PC Curs nr. 5 - 2018 9

3
printf
q Prototipul funcției:
int printf(format, var1, var2, …);
q unde:
q format este un șir de caractere care specifică modul în care vor fi
scrise informațiile
q var1, var2, … - nume (identificatori) de variabile ale căror valori
vor fi scrise (pe monitor sau într-un fișier)

q returnează o valoare

PC Curs nr. 5 - 2018 10

printf
q Forma generală a formatului:
q %[flags][width][.prec][h|l|ll|L]tip_char

PC Curs nr. 5 - 2018 11

printf - exemplu
x = ( 24, 31, 29)

void afisareVector2(int a[], int n, char den[])


{
int i;
printf("%s=(", den);
for(i=0; i<n-1; i=i+1)
printf("%3d, ", a[i]);
printf("%3d)\n",a[i]);
}

PC Curs nr. 5 - 2018 12

4
Operaţii de intrare – ieşire pentru caractere şi
şiruri de caractere

PC Curs nr. 5 - 2018 13

Funcții de I/E pentru caractere


Prototipuri în stdio.h

int getc(FILE *stream);


int putc(int c, FILE *stream);

int getchar(void);
int putchar(int c);

PC Curs nr. 5 - 2018 14

Funcții de I/E pentru șiruri de caractere


Prototipuri în stdio.h

char *fgets(char s[], int n, FILE *stream);

int puts(char s[]);


int fputs(char s[], FILE *stream);

PC Curs nr. 5 - 2018 15

5
Exemplu
#include <stdio.h>

int main(void)
{
int c;
int numarLinii = 0;
c = getchar();
while(c != EOF)
{

PC Curs nr. 5 - 2018 16

if (c == '\n')
{
numarLinii = numarLinii + 1;
}
c = getchar();
}
printf("S-au introdus %d linii.\n", numarLinii);
return 0;
}

PC Curs nr. 5 - 2018 17

Citire linie cu linie


char temp[81];
………………………
while(fgets(temp,80,stdin) != 0)
{
fputs(temp, stdout);
}
…........................

PC Curs nr. 5 - 2018 18

6
char sir[42];
int lung;
fgets(sir, 41, stdin);
puts(sir);
fputs(sir, stdout);
puts(“Test”);

for(lung=0; sir[lung] != ‘\0’; ++lung)


;

sir[lung-1] = ‘\0’;
puts(sir);
fputs(sir. stdout);
puts(“Test”);
PC Curs nr. 5 - 2018 19

Expresii, operanzi și operatori


q Operand:
q entitate asupra căruia se realizează o operație
q Operator:
q caracter sau grup de caractere care descrie (descriu) operațiile
care se fac asupra unor entități
q pot fi (în funcție de numărul de operanzi):
q unari (sunt pre sau postfixaţi)
q binari (sunt infixaţi)
q ternar (infixat)

q Expresie:
q O secvenţă de operatori şi operanzi
q O expresie are un tip care coincide cu tipul valorii rezultatului.

PC Curs nr. 5 - 2018 20

Operatori
În funcţie de operaţia realizată:
ü aritmetici
ü incremetare şi decrementare
ü relaţionali
ü logici
ü logici la nivel de bit
ü atribuire
ü accesul la date şi dimensiune

PC Curs nr. 5 - 2018 21

7
Expresii și operatori aritmetici
Operanzi:
constante, variabile, funcţii, elemente de tablou, subexpresii,
membrii unei structuri

Operatori:
1. unari (prefixaţi): +, -
2. binari (infixaţi): *, /, %
+, -

PC Curs nr. 5 - 2018 22

Observaţii:
1. dacă cei doi operanzi sunt de acelaşi tip, atunci tipul rezultatului
coincide cu tipul celor doi operanzi
4/3 à ?
4./3. à ?

2. dacă rezultatul este în afara domeniului de definiţie, atunci


rezultatul este eronat (vom considera că un short int este
reprezentat pe 2 octeți)”
short int a, b, c;
a = 31564;
b = 5130;
c = a+b;
printf("c = %d", c);
//c = -28842
PC Curs nr. 5 - 2018 23

Expresii și operatori aritmetici


Reguli de evaluare
1. Dacă apar funcţii, se consideră ca operanzi rezultatele
furnizate de acele funcţii

2. Priorităţi:
+ - à unari
* / %
+ - à binari

3. Când apar operanzi de diverse tipuri, sunt convertiţi implicit


în tipul cel mai prioritar.

PC Curs nr. 5 - 2018 24

8
Conversii
1. implicite
char, enum à int
se face conversia la tipul prioritar
T + long double à long double
T + double à double
T + float à float
T + unsigned long à unsigned long
long + unsigned int à unsigned long
T + long à long
unsigned int + int à int (dacă se poate) sau
unsigned int
à int

PC Curs nr. 5 - 2018 25

https://overiq.com/c-programming
/101/implicit-type-conversion-in-c/

PC Curs nr. 5 - 2018 26

Conversii
2. explicite
Folosirea operatorului de conversie (operatorul cast).
Forma generală:
(tip)operand

Exemplu:
short int a = 31564, b = 5130;
long int c;
c = (long)a + b;
printf("c = %ld",c);
// c = 36694

PC Curs nr. 5 - 2018 27

9
q Acest curs a fost despre:
q funcții de I/E cu dispozitivele standard
q expresii și operatori aritmetici

PC Curs nr. 5 - 2018 28

10