Aplicatii propuse pentru vocabular, tipuri fundamentale, functii de intrare/iesire




1. Pentru cate un intreg citit de la tastatura, sa se afiseze valoarea lui si a opusului in zecimal, hexazecimal, octal; programul se va modifica astfel incat sa permita citirea in zecimal, hexazecimal, respectiv octal.
Incercati sa gasiti valorile care vor fi tiparite inainte de rulare!

La executia programului se vor introduce
- valorile extreme: 32767, -32768
- valori pozitive si negative din domeniul int precum si care depasesc tipul int
- valorile 0, 1, -1.

#include <stdio.h>
void main(void){
 int i;
 printf("i\thexa\toctal\t-i\thexa\toctal\n");
 while(1){ /* ciclu "infinit" din care se iese tastand Ctrl/Break */
  putchar(':');scanf("%d",&i); /* formatul se va modifica la %x, %o */
  printf("%d\t%x\t%o\t%d\t%x\t%o\n",i,i,i,-i,-i,-i);
 }
}

2. Sa se afiseze valorile extreme in zecimal, octal, hexa pentru toate tipurile intregi.

#include <stdio.h>

void main(void){
 char Mc=0x7F,mc=0x80;
 unsigned char Muc=0xFF,muc=0;
 int Mi=0x7FFF,mi=0x8000;
 unsigned Mui=0xFFFF,mui=0;
 long Ml=0x7FFFFFFF,ml=0x80000000;
 long Mul=0xFFFFFFFF,mul=0;

 clrscr();
 printf("tip\tmax\thexa\toctal\tmin\thexa\toctal\n");
 printf("char\t%d\t%x\t%o\t%d\t%x\t%o\n",Mc,Mc,Mc,mc,mc,mc);
 printf("u char\t%u\t%x\t%o\t%u\t%x\t%o\n",Muc,Muc,Muc,muc,muc,muc);
 printf("int\t%d\t%x\t%o\t%d\t%x\t%o\n",Mi,Mi,Mi,mi,mi,mi);
 printf("u int\t%u\t%x\t%o\t%u\t%x\t%o\n",Mui,Mui,Mui,mui,mui,mui);
 printf("l int\t%ld\t%lx\t%lo\t%ld\t%lx\t%lo\n",Ml,Ml,Ml,ml,ml,ml);
 printf("lu int\t%lu\t%lx\t%lo\t%lu\t%lx\t%lo\n",Mul,Mul,Mul,mul,mul,mul);

 getche();
  }

3. Se citesc triplete de numere reale; sa se tipareasca suma si produsul lor.

Se va observa :
- separarea numerelor introduse prin blancuri sau terminator de linie
- tastarea de numerele pozitive sau negative, ca intregi, cu zecimale sau cu exponent
- numarul de cifre semnificative si deci aproximarea numerelor ( de exemplu pentru tastarea numerelor 0.0000001 1 1 )
- daca descriptorii se transforma in %e, numerele pot fi furnizate la fel, tiparirea e diferita.

#include <stdio.h>

void main(void){

 float r1,r2,r3;
 while(1){
   putchar(':');scanf("%e%e%e",&r1,&r2,&r3);
   printf("suma=%e\tprodus=%e\n",r1+r2+r3,r1*r2*r3);
 }
}

4. La rularea programului de mai jos, faceti observatii referitoare la valorile citite, separarea lor, functionarea lui scanf, getchar, getche:

#include <stdio.h>

void main(void){

 int i;
 char c;
 float r;
 while(1){
   printf("i,c,r:");scanf("%d%c%f",&i,&c,&r);
   printf("intreg=%d|car=%c(cod=%d)|real=%f\n",i,c,c,r);
   printf("c,i,r:");scanf("%c%d%f",&c,&i,&r);
   printf("intreg=%d|car=%c(cod=%d)|real=%f\n",i,c,c,r);
   printf("r,i,c:");scanf("%f%d%c",&r,&i,&c);
   printf("intreg=%d|car=%c(cod=%d)|real=%f\n",i,c,c,r);
   printf("r,i,c:");scanf("%f%d",&r,&i);c=getchar();
   printf("intreg=%d|car=%c(cod=%d)|real=%f\n",i,c,c,r);
   printf("r,i,c:");scanf("%f%d",&r,&i);c=getche();
   printf("intreg=%d|car=%c(cod=%d)|real=%f\n",i,c,c,r);
 }
}

5. Ce apare pe ecran la tiparirea ( incercare pe hartie, apoi rulare ):

  int i=5;float r=23.789e-4;c='C';
  printf("\t%cUN\x65!\a\a\n",c-1);
  printf("%d %d %e\n",c+1,i,r);

6. Sa se scrie programul care, apeland o singura data printf, tipareste pe ecran ( analog pentru un apel puts ):

Informatii 100% corecte:
I.Ionescu / 24 ani \ zis "a lu' Vasile"

  printf("Informatii 100%% corecte:\n\
I.Ionescu / 24 ani \\ zis \"a lu' Vasile\"\n");
  puts("Informatii 100% corecte:\n\
I.Ionescu / 24 ani \\ zis \"a lu' Vasile\"");

7. Analog cu 6. pentru ca pe ecran sa apara urmatorul text ( printr-un singur apel printf sau puts ):

Caractere speciale:
slash /; backslash \; procent%;
ghilimele "; apostrof '.

8. Rulati programul de mai jos, observand utilizarea tipurilor enum si declararea tipurilor utilizator cu typedef( ce credeti ca se va tipari ca valoare a variabilei amestec ?) :

#include <stdio.h>
#include <conio.h>

void main(void){

  enum zile_lucr { luni, marti, miercuri, joi, vineri };   /* luni e asociat cu 0, marti cu 1,
             vineri cu 4 */

  enum transport { tren, avion=6, autocar, autoturism };   /* tren e asociat cu 0, autocar cu 6,
             autoturism cu 7 */

  typedef enum zile_lucr Zile_lucr;
 

  typedef enum { inginer=1, profesor, avocat } profesie;

  /* se pot defini variabile de tipurile enum */
  enum zile_lucr zi1=marti;
  Zile_lucr zi2=joi;
  enum transport voi_merge_cu=autocar;
  profesie profesia_mea=inginer; /* definirea variabilei profesia_mea */
  int amestec;

  printf("val zi1=%d\n",zi1);
  printf("val zi2=%d\n",zi2);
  printf("val voi_merge_cu=%d\n",voi_merge_cu);
  printf("val profesia_mea=%d\n",profesia_mea);
  amestec=zi1*zi2+vineri+'d'+avion+voi_merge_cu-'a'+profesia_mea;
  printf("val amestec=%d\n",amestec);
  getch();

}

9. Scrieti programul care citeste repetat de la tastatura cate doua caractere reprezentand initialele unei persoane si anul nasterii, afisand
    Persoana X.Y. are varsta de Z ani

10. Sa se conceapa schema logica, apoi programul C pentru urmatorul enunt:
Se citesc repetat de la tastatura, pana la introducerea lui CTRL/Z, perechi de forma x y reprezentand coordonatele cate unui punct din plan. Sa se afiseze:
- numarul de puncte pentru care s-a facut citirea
- distanta medie a punctelor fata de origine ( radicalul se calculeaza cu functia sqrt, avand prototipul in <math.h> )
- raza cercului cu centrul in origine, care cuprinde pe el sau in interior, toate punctele citite.

Secventa de mai jos citeste pana la CTRL/Z intregi, contorizand numarul de valori citite:

    int ind,x,contor=0;
    ind=scanf("%d",&x);
    while(ind!=EOF){
        contor++;
        ind=scanf("%d",&x);
    }