C/Przykłady z komentarzem: Różnice pomiędzy wersjami

Z Wikibooks, biblioteki wolnych podręczników.
< C
Usunięta treść Dodana treść
poprawki
Linia 62: Linia 62:
int licznik;
int licznik;
/* CHAR_BIT to liczba bitów w bajcie */
/* czwarta potęga dwójki to 8 */
licznik = CHAR_BIT * sizeof(a);
licznik = 4 << sizeof a;
while (--licznik >= 0) {
while (--licznik >= 0) {
putchar(((a >> licznik) & 1)) ? '1' : '0');
putchar(((a >> licznik) & 1)) ? '1' : '0');

Wersja z 07:36, 2 gru 2011

Liczby losowe

Poniższy program generuje wiersz po wierszu macierz o określonych przez użytkownika wymiarach, zawierającą losowo wybrane liczby. Każdy wygenerowany wiersz macierzy zapisywany jest w pliku tekstowym o wprowadzonej przez użytkownika nazwie. W pierwszym wierszu pliku wynikowego zapisano wymiary utworzonej macierzy.

 #include <stdio.h>
 #include <stdlib.h>  /* dla funkcji rand oraz srand */
 #include <time.h>	 /* dla funkcji time */
 
 int main()
 {
   int i, j, n, m;
   float re;
   FILE *fp;
   char fileName[128];
 
   puts("Wprowadz nazwe pliku wynikowego..");
   scanf("%127s",fileName);
 
   puts("Wprowadz po sobie liczbe wierszy i kolumn macierzy oddzielone spacją..");
   scanf("%d %d", &n, &m);
 
            /* jeżeli wystąpił błąd w otwieraniu pliku i go nie otwarto,
             wówczas funkcja fclose(fp) wywołana na końcu programu zgłosi błąd
             wykonania i wysypie nam program z działania, stąd musimy umieścić
             warunek, który w kontrolowany sposób zatrzyma program (funkcja exit;)
            */
   if ( (fp = fopen(fileName, "w")) == NULL )  
   {
     puts("Otwarcie pliku nie jest mozliwe!");
     exit(0);
   }
 
   else  { puts("Plik otwarty prawidłowo..");  }
   
   fprintf(fp, "%d %d\n", n, m);
           /* w pierwszym wierszu umieszczono wymiary macierzy */
 
   srand( time(0) );
   for (i=1; i<=n; ++i)
   {
     for (j=1; j<=m; ++j)
     {
       re = ((rand() % 200)-100)/ 10.0;
       fprintf(fp,"%.1f", re );
       if (j!=m) fprintf(fp,"    ");
     }
   fputc(fp,'\n');
   }  
   fclose(fp);
   return 0;
 }

Zamiana liczb dziesiętnych na liczby w systemie dwójkowym

Zajmijmy się teraz innym zagadnieniem. Wiemy, że komputer zapisuje wszystkie liczby w postaci binarnej (czyli za pomocą jedynek i zer). Spróbujmy zatem zamienić liczbę, zapisaną w "naszym" dziesiątkowym systemie na zapis binarny. Uwaga: Program działa jedynie dla liczb od 0 do maksymalnej wartości którą może przyjąć typ unsigned short int w twoim kompilatorze.

 #include <stdio.h>
 #include <limits.h>
 
 void dectobin (unsigned short a)
 {
   int licznik;      
 
   /* czwarta potęga dwójki to 8 */
   licznik = 4 << sizeof a;
   while (--licznik >= 0) {
     putchar(((a >> licznik) & 1)) ? '1' : '0');
   }
 }
 
 int main (void)
 {
   unsigned short a;
 
   printf ("Podaj liczbę od 0 do %hd: ", USHRT_MAX);
   scanf ("%hd", &a);
   printf ("%hd(10) = ", a);
   dectobin(a);
   printf ("(2)\n");
 
   return 0;
 }