Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Tipuri fundamentale de date, operatori si expresii

c



+ Font mai mare | - Font mai mic



Tipuri fundamentale de date, operatori si expresii

Probleme rezolvate

P3.1 Urmatorul program ilustreaza utilizarea tipurilor fundamentale de date in C.



#include <stdio.h>

#include <stdlib.h>

int main()

Programul va afisa pe ecran, dupa compilare si executie:

464

x = 12.346800 sau 12.347 sau 1.234680e+001

y = 0.112000 sau 0.1120 sau 1.120000E-001

Codurile ASCII pentru 'b' si 'B' sunt: 98, 66

Dupa 'b' urmeaza 'c'

Majuscula corespunzatoate lui 'm' este 'M'

Discutie

-  Programul are, asa cum se observa, trei parti complet distincte. In prima parte se dau doua exemple de folosire a numerelor intregi. Programul va afisa corect numarul 66000 declarat long int (de fapt, s‑ar fi afisat corect si daca ar fi fost declarat int, deoarece pe majoritatea calculatoarelor curente reprezentarea interna a lui int este pe 32 de biti), insa nu afiseaza corect acelasi numar declarat unsigned short int. Numerele de tipul unsigned short int sunt intotdeauna reprezentate pe 16 biti, gama lor fiind intre 0 si 216-1=65535; de altfel, compilatorul semnalizeaza acest lucru printr‑un mesaj de atentionare (fereastra Compiler). Specificatorii de format %ld si "%hu permit afisarea numerelor intregi zecimale de tipurile long int si respectiv unsigned short int

-  Partea a doua ilustreaza cateva modalitati de afisare a numerelor reale. Variabilele x si y se declara de tipul double si se initializeaza cu doua valori concrete. In principiu, specificatorul de format "%f poate fi folosit cu oricare din tipurile float sau double si afisarea se face uzual cu 6 cifre la partea fractionara. Utilizarea specificatorului "%e" sau "%E conduce la afisarea numarului real in formatul stiintific; formatul "%6.3f" va duce la afisarea lui x cu 6 caractere in total (5 cifre plus punctul zecimal) si 3 cifre precizie pentru partea fractionara (ca atare, numarul se va rotunji la ); in sfarsit, formatul "%8.4f va duce la afisarea lui y sub forma " 0.1120" (deoarece latimea campului de afisare specificata prin format este 8, cu doua unitati mai mare decat este necesar, afisarea se completeaza cu doua spatii libere la stanga numarului).

-  In partea a treia a programului se exemplifica utilizarea si afisarea caracterelor. Cele trei variabile folosite sunt declarate de tipul char; constantele caracter se scriu intre simbolurile apostrof. Compilatorul plaseaza, de exemplu, codul ASCII al lui ,b', 98, la adresa variabilei b_mic; similar pentru celelalte doua variabile. Aceste valori pot fi utilizate, de exemplu, pentru a face diferite calcule aritmetice (dupa cum se arata si in program), si se afiseaza ca numere intregi daca se foloseste specificatorul de format ,%d', sau sunt reconvertite in caracterele corespunzatoare daca este folosit specificatorul ,%c'. Aceasta idee este reluata si in problema urmatoare.

P3.2 Scrieti un program care afiseaza codul ASCII al unui caracter citit de la tastatura.

#include <stdio.h>

#include <stdlib.h>

int main()

Daca se introduce de la tastatura, de exemplu, caracterul ,c', programul va afisa:

Introduceti un caracter: (c)

Caracterul c are codul ASCII 99

Discutie

-  Se declara variabila ch de tip caracter. Functia getch() citeste un caracter de la tastatura, adica asteapta pana cand este apasata o tasta si apoi intoarce codul sau ASCII. Este o varianta a functiei de I/O getche(), dar spre deosebire de aceasta din urma, nu afiseaza automat pe ecran caracterul introdus de la tastatura (se mai spune ca "nu are ecou pe ecran"). Precizam ca functiile getch() si getche() nu sunt functii ANSI. Bibliotecile standard ANSI pun la dispozitia utilizatorului doar functiile getc() si getchar() care insa citesc primul caracter introdus si asteapta validarea scrierii de catre utilizator prin tasta <Enter> Caracterele necitite, inclusiv <Enter>, raman in buffer si vor fi citite de urmatoarele apeluri la getc() sau getchar(). Recomandam folosirea functiilor getch() si getche() care sunt mai flexibile.

-  Specificatorul de format "%3d" defineste dimensiunea minima a campului in care se va afisa numarul intreg (3 in cazul de fata); deoarece codul ASCII al lui ,c este 99 (pentru exemplul considerat anterior), deci necesita doua cifre, se va tipari un spatiu suplimentar la stanga sa. De notat ca daca se indica o latime de camp mai mica decat este necesar, compilatorul va aloca totusi latimea necesara (doar numarul de zecimale precizat prin format va fi respectat intocmai).

P3.3 Scrieti un program care aduna si inmulteste doua numere complexe exprimate sub forma z1 = a + bi , z2 = c + d i (se citesc efectiv a, b, c, d - numere reale).

Indicatie: (a + bi) + (c + d i) = (a + c) + (b + d)i

(a + bi)(c + d i) = (ac - bd) + (ad + bc)i

#include <stdio.h>

#include <stdlib.h>

int main()

Daca se introduc de la tastatura, de exemplu, numerele 1.2 si 2.1, respectiv 3.4 si 4.3, programul va afisa:

Introduceti z1: 1.2 2.1

Ati introdus z1 = 1.200000 + 2.100000i

Introduceti z2: 3.4 4.3

Ati introdus z2 = 3.400000 + 4.300000i

z1 + z2 = 4.600000 + 6.400000i

z1 * z2 = -4.950000 + 12.300000i

P3.4 Urmatorul program ilustreaza utilizarea operatorilor de impartire ( ) si modulo (

#include <stdio.h>

#include <stdlib.h>

int main()

Programul va afisa pe ecran, dupa compilare si executie:

7 / 4 = 1 sau 1.000000

Restul impartirii lui 7 la 4 este 3

P3.5 Urmatorul program ilustreaza utilizarea operatorilor de incrementare si decrementare.

#include <stdio.h>

#include <stdlib.h>

int main()

Programul va afisa pe ecran, dupa compilare si executie:

x = 11, y = 11

z = 14, y = 9

x = 10, y = 11

z = 30, y = 9

P3.6 Urmatorul program ilustreaza utilizarea operatorilor relationali si logici.

#include <stdio.h>

#include <stdlib.h>

int main()

Programul va afisa pe ecran, dupa compilare si executie:

j = 1, k = 0

m = 1

n = 1

b = 7

b = 0, c = 8

b = 1

e = 0

Discutie

-  Sectiunea 1: expresia i > 5 este evaluata "adevarat" (10 > 5), deci va primi valoarea ,1', apoi j = 1; expresia i >= 50 este evaluata "fals", deci va primi valoarea ,0', apoi k = 0

-  Sectiunea 2: se executa mai intai parantezele; 0 && 1 = 0 apoi ; in final m = 1

-  Sectiunea 3: ordinea de evaluare este urmatoarea:

1. (10 < 9) = 0

2.

3. 10 > 5 = 1 3 >= 4 = 0

4. 1 && 1 || 0 s (1 && 1) || 0 = 1 || 0 = 1

5. n = 1

-  Sectiunea 4: operatorii si au aceeasi prioritate si asociativitate de la dreapta spre stanga; prin urmare, ordinea de evaluare este urmatoarea:

1. d += 2 s d = d + 2 = 7

2. b = 7

-  Sectiunea 5: ordinea de evaluare este urmatoarea:

1. c > 7 = 0

2. b = 0

3. c++ = 8

-  Sectiunea 6: are prioritate mai mare decat &&"; ordinea de evaluare este urmatoarea:

1. a == 0 = 1

2. 1 && c = 1

3. b = 1

-  Sectiunea 7: ordinea de evaluare este urmatoarea:

1. !a = 1

2. 1 > c = 0 0 >= 2 = 0

3. e = 0

P3.7 Urmatorul program ilustreaza conversiile implicite de tip in expresii si atribuiri, ca si utilizarea operatorului cast.

#include <stdio.h>

#include <stdlib.h>

int main()

Programul va afisa pe ecran, dupa compilare si executie:

d = 3.333333

u = 10    ch_1 = 230 ch_2 = 4

k = 1.000000 l = 1.000000

m = 1.250000 n = 1.250000 p = 1.250000

(float)(4 * 6) / 5 = 4.800000

Discutie

-  Sectiunea 1: se evalueaza mai intai paranteza; impartirea lui a la b produce un rezultat intreg (3), ambii operanzi fiind intregi; aceasta valoare este apoi convertita la o valoare reala, deoarece tipul lui c este float (chiar daca rezultatul final al unei expresii va fi de tipul cel mai larg, regulile de conversie implicita sunt aplicate operatie dupa operatie).

-  Sectiunea 2: u primeste valoarea intreaga a lui v ch_1 este afisat corect, deoarece numarul intreg 230 intra in gama de reprezentare a tipului unsigned char, adica [0, 255], in schimb ch_2 nu este afisat corect, producandu‑se o pierdere de informatie (numai cei 8 biti inferiori ai lui y sunt copiati in ch_2

Observatie: putem deduce simplu valoarea ce va fi afisata pe ecran in acest ultim caz; numarul intreg 260 exprimat in binar este 100000100, iar ultimii 8 biti codifica practic numarul intreg 4 (numarul 4 reprezentat in binar este 100).

-  Sectiunea 3: alaturi de lucrurile discutate deja pana in acest moment, mai facem doar o precizare: teoretic, este suficient sa fortam tipul unuia dintre cei doi operanzi ce realizeaza o operatie, deoarece cel de‑al doilea operand va fi adus automat la tipul celui dintai.

Probleme propuse

Scrieti un program care calculeaza si afiseaza pe ecran media aritmetica a doua numere intregi citite de la tastatura. Propuneti mai multe variante de a rezolva corect problema, tinand cont de faptul ca media trebuie sa fie un numar real.

Scrieti un program care citeste pe n intreg si afiseaza valoarea expresiei n/(n+1) cu patru zecimale.

Deduceti ce afiseaza urmatorul program:

#include <stdio.h>

#include <stdlib.h>

int main()

Ce este incorect la urmatorul program?

#include <stdio.h>

#include <stdlib.h>

int main()



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 799
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved