Vežbe iz Osnova programiranja

1. Napisati C program koji na standardni izlaz ispisuje poruku Zdravo, svete u jednom redu.

#include <stdio.h>
main()
{
/*iskazi f-je main su zatvoreni u zagrade */
   printf("Zdravo, svete\n"); /*poziv f-je printf da odstampa poruku*/
}
 

2. Napisati C program (skraćeno NCP) koji na standardni izlaz ispisuje poruku Zdravo, svete, štampa prazan red i u narednom redu ispisuje poruku Bonjour, Monde.

#include <stdio.h>
main()
{
         printf("Zdravo, svete"); /*poziv f-je printf da odstampa poruku na srpskom*/
         printf("\n\n"); /*prelaz u sledeci red i stampanje praznog reda*/
         printf("Bonjour, Monde\n"); /*poziv f-je printf da odstampa poruku na francuskom*/
}
 

3. Napisati C program (skraćeno NCP) koji zadaje vrednosti dve celobrojne promenljive i na standardni izlaz ispisuje njihovu razliku.

#include <stdio.h>
     main()
      {
             /*deklaracija vise promenljivih istog tipa */
           int rez,pom1,pom2;
            /*rezultat oduzimanja pom1-pom2 -> rez*/
             pom1=20;
              pom2=15;
             rez=pom1-pom2;

            /*ispisivanje rezultata*/
             printf("Rezultat je %d-%d=%d\n",pom1,pom2,rez);
      }


4. Napisati C program (skraćeno NCP) koji na standardni izlaz ispisuje malo slovo Z u polju širine tri, a u sledećem redu veliko slovo Z u polju širine pet.

    Tabela ASCII kôdova

 


#include <stdio.h>
main()
  {
       printf("Slova:\n%3c\n%5c\n", 'z' , 'Z');
  }

Izlaz iz programa:
Slova
     z
        Z
 

5. Napisati C program (skraćeno NCP) koji na standardni izlaz ispisuje malo i veliko slovo A i njihovu vrednost u standardnom setu karaktera.

    Tabela ASCII kôdova

 


#include <stdio.h>
main()
{
   int vrednost;
   vrednost='A';
    printf("%s\nkarakter=%3c\nvrednost=%3d\n","Veliko slovo",vrednost,vrednost);

   vrednost='a';
   printf("%s\nkarakter=%3c\nvrednost=%3d\n","Malo",vrednost,vrednost);
}



    

 

ZA RAZMIŠLJANJE I UVEŽBAVANJE: ASCII kôd ZADACI

 

6. NCP koji sadržaj standardnog ulaza štampa znak po znak na standardni izlaz sve do markera kraja ulaza.

#include <stdio.h>
main()
{
   int znak;

   znak=getchar(); /*promenljivoj znak se dodeljuje znak sa ulaza */
    while( znak !=EOF)
     {
          putchar(znak); /*dodeljeni znak se kopira na izlaz */
          znak=getchar();
     }
}

Izlaz kod baferovanog ,npr;
  1<enter>
  1
  ^Z
 

II nacin:
#include <stdio.h>
main()
{
    int znak;
       while( (znak=getchar() ) !=EOF) putchar(znak);
}
 

7. Korišćenjem makrozamene za protivrednost jednog evra u dinarima, NCP koji ispisuje na standardni izlaz dinarsku vrednost za četiri evra. Kako bi ispisali dinarsku protivvrednost jednog evra sa 0 decimala?

#include <stdio.h>
#define EURO 60.0477
main()
{
   printf("4 eura ima vrednost %f dinara\n", 4*EURO);
   /*printf("1 euro ima vrednost %.0f dinara\n",EURO);*/
}
 

8. NCP koji zadaje vrednosti dve realne promenljive i korišćenjem makrozamene naći kvadrat prve i maksimum njihovih vrednosti. Rezultat ispisati na standardni izlaz.

#include <stdio.h>
#define KVADRAT(x) ( (x)*(x) )
#define MAX(x,y) ( ( (x)>(y)) ? (x) : (y) )
main()
{
     float w=3.2,y=8.8 ;
     printf("KVADRAT(%.2f)=%.2f\n",w,KVADRAT( w));
    printf("MAX(%.2f , %.2f)=%.2f\n",w,y,MAX(w,y));
}



9. NCP koji će na standardni izlaz ispisati prvih 15 Fibonačijevih brojeva u 5 kolona (po 3 broja u vrsti).

  #include <stdio.h>
    #define BROJ 15
    main()
    {
      int i; /*brojac u petlji */
      int fibonaci[BROJ]; /*niz koji cuva vrednosti iz f-lacije */

       /*inicijalizacije */
        fibonaci[0]=0;
        fibonaci[1]=1;

      /*formiranje vrednosti clana niza u zavisnosti od vrednosti prethodnika */
      for  (i=2;i<BROJ;++i)  fibonaci[i]=fibonaci[i-2]+fibonaci[i-1];

      /*ispis vrednosti clanova niza u zahtevanom formatu */
         for  (i=0;i<BROJ;++i)
                 printf("%c%5d",  (i%3==0) ? '\n' : ' ', fibonaci[i]);
}
 

10. Šta je rezultat rada sledećeg programa?

#include <stdio.h>
main()
 {
     int x=506, y=3, z=21, t=2;
     printf("x=%d y=%d\n",x,y);
     printf("z - t=%d\n", z-t);
     printf("z / t =%d\n",z / t);
     printf("-x=%d\n",- x);
     printf("x %% y=%d\n", x%y);
}

11. Šta je rezultat rada sledećeg programa?

#include <stdio.h>
main()
{
   int a=21,d=5; float c=8.953, b=6.0;
   printf("d=%d c=%f\n",d,c);
   printf("a + d/c + b=%f\n",a+ d/c + b);
   printf("|%5f |%5.3f| %5.0f|%5.1f\n",c,c,c,c);
}

12. Ispisati na standardni izlaz ukupan broj karaktera standardnog ulaza do markera kraja. Pretpostaviti da je za ukupan broj karaktera dovoljan opseg double promenljive.



#include <stdio.h>
main()
{
  double br;
   for( br=0; getchar()!=EOF; ++br ) ;
   printf("Karaktera: %.0f\n",br);
}

13. NCP koji će ispisati na standardni izlaz ukupan broj karaktera standardnog ulaza do markera kraja, kao i broj prelazaka u novi red. Pretpostaviti da je za ukupan broj karaktera i ukupan broj prelazaka u novi red dovoljan opseg long promenljivih.



#include <stdio.h>
main()
{
   int znak; /*prihvata znak sa ulaza */
   long linije=0 ; /*brojac linija */
    long br_znak=0; /*brojac znakova na ulazu */

   while ( (znak=getchar() ) != EOF)
     { br_znak++;
         if (znak=='\n') linije ++;
     }

    printf("Prelazaka u novi red: %ld, karaktera: %ld \n",linije,br_znak);
}


 

14. NCP koji će ispisati na standardni izlaz broj pojava blanko znaka, broj pojava horizontalnog tabulatora, broj prelazaka u novi red u tekstu koji dolazi sa standardnog ulaza do markera kraja. Pretpostaviti da je za evidenciju broja pojava dovoljan opseg int promenljivih.







#include <stdio.h>
main()
{
 int znak; /*prihvata znak sa ulaza */
 int Blanks=0; /*brojac blankova */
  int Tabs=0; /*brojac horizontalnih tabulatora */
   int NewLines=0; /*brojac linija */

 while( (znak=getchar())!=EOF ) /*ucitavanje karakter do markera kraja fajla i ...*/

        if( znak==' ' ) ++Blanks; /* ... brojanje blankova */
       else if( znak=='\t' ) ++Tabs; /* ... brojanje tab-ova */
              else if( znak=='\n' ) ++NewLines;

/*UOCITI: blok naredbi while ciklus NIJE OGRADJEN viticastim zagradama*/

/*izdavanje rezultata na standardni izlaz*/
printf("Blankova: %d. Tabulatora: %d. Prelazaka u novi red: %d\n", Blanks, Tabs, NewLines);

}

Efekat tastera TAB
123456     1234     123      1234
1234567891234567891234567891234


 

15. NCP koji će tekst sa standardnog ulaza ispisati na standardni izlaz tako da se umesto horizontalnog tabulatora ispiše \t, umesto znaka prelaza u novu red ispiše \n, umesto backslah (znaka obrnute kose crte) ispiše \\.

ulaz (stdin, getchar()) izlaz (stdout, putchar())
123[tab]45
abcd[tab]efg\123
[enter]
^D
123\t45
abcd\tefg\\123
\n
^D

#include <stdio.h>
main()
{
    int znak;
    znak=getchar();
    while( znak!=EOF )
      {
       if( znak=='\t' ) /*uciniti tab vidljivim */
              { putchar('\\'); putchar('t'); }
       else if( znak=='\n' ) /*uciniti new line vidljiv */
              { putchar('\\'); putchar('n'); putchar('\n'); }
          else if( znak=='\\' ) /*backslash udvojiti */
              { putchar('\\'); putchar('\\'); }
          else putchar(znak);

          znak=getchar();
        } /* while( znak!=EOF ) */

} /*main() */

Za razmišljanje
kôd efekat kôda
putchar('\\'); 
putchar('t'); 
putchar('\t'); 
printf("Za %d ispisujem %c", '\\', '\\'); 
printf("\n\n\\n\\\n\\\\n\n"); 

 

16. NCP koji će tekst sa standardnog ulaza ispisati na standardni izlaz tako da se višestruke uzastopne pojave blanko znaka zamene jednim blankom. (sažimanje).

#include <stdio.h>
#define GRANICA '0'
main()
{
   int znak; /*tekuci znak sa ulaza*/
   int preth; /*znak koji prethodi tekucem */
   preth=GRANICA;
     while ( (znak=getchar() ) !=EOF)
       {
         if (znak !=' ' || preth != ' ') putchar(znak);
            preth=znak;
        }
}
 

 17. NCP koji će u tekstu sa standardnog ulaza prebrojati koliko puta se pojavila svaka cifra dekadnog brojnog sistema, koliko puta su se pojavile beline (blanko, horizontalni tab, prelaz u novi red) i koliko puta su se pojavili ostali znaci. Rezultat ispisati na standardni izlaz.

    Tabela ASCII kôdova

 


#include <stdio.h>
main()
{
  int znak, br; /* znak sa ulaza, brojac u petlji*/
int  White, Ostali; /*brojac belih i ostalih znakova na ulazu */
  int cifra[10];  /* za i=0..9 i-ti clan niza cuva broj pojava cifre i */

/* inicijalizacije */
  White=Ostali=0;

for(br=0; br<10; ++br)
  cifra[br]=0;
 

/* prebrojavanje */
 while( (znak=getchar())!=EOF )

  if( znak >='0' && znak<='9' )     /*da li je cifra */

   ++cifra[znak-'0'];

  else if ( znak==' ' || znak=='\n' || znak=='\t' )
   ++White;
  else
   ++Ostali;

/* prikaz rezultata */
 for( br=0; br<10; ++br )
  printf( "Cifra %d se pojavljuje %d puta\n", br,cifra[br] );
 printf("\nBelina ima: %d Ostalih: %d\n", White, Ostali);
}

Par napomena


 


Jelena Grmuša Osnovi programiranja

e-mail: Jelena Grmuša


Copyright © 2002, Jelena Grmusa
Poslednja izmena: novembar 2005.
URL: http://www.matf.bg.ac.yu/~jelenagr/op/