ANSI C 8

ANSI C 8



1 ELEMENTARZ

jest wyrażeniem i ma wartość - jest nią wartość lewego argumentu przypisania po wykonaniu tej operacji. Oznacza to, że przypisanie może pojawić się jako część j większego wyrażenia. Jeśli przypisanie znaku zmiennej c zostanie umieszczone w części warunkowej pętli while, to program kopiowania można napisać tak:

#include <stdio.h>    I

/* przepisz wejście na wyjście; wersja 2    */    I

main()    I

{    I

int c;    I

while ((c = getcharO) != EOF)    I

putchar(c);    I

}    I

Pętla while otrzymuje znak, przypisuje go    zmiennej c, a następnie sprawdza, czy to,I

co otrzymała, jest sygnałem końca pliku. Jeśli nie, to wykonuje się treść pętli, w którejj jest wypisywany znak, i wszystko powtarza się od początku. Po osiągnięciu końca-; pliku pętla while kończy działanie, a wraz z nią cały program main.

Wersja ta skupia w jednym miejscu obsługę wejścia - jest tylko jedno odwołanie doj funkcji getchar - oraz skraca tekst programu. Nowa wersja jest bardziej zwarta i, poj przyswojeniu nowego zwrotu języka, bardziej czytelna. Często spotkasz się z takird stylem programowania. (Można także przesadzić i tworzyć programy zupełnie nieczytelne; jest to jednak tendencja, którą usiłujemy zwalczać.)

Nawiasy otaczające przypisanie wewnątrz warunku pętli while są konieczne. Priorytet operatora relacji != jest wyższy niż priorytet operatora przypisania =, co znaczy że przy braku nawiasów sprawdzenie warunku != wykonałoby się przed przypisaniem = Zatem zwrot

c = getchar() != EOF

jest równoważny ze zwrotem    i

c = (getchar() != EOF)    I

co ma zupełnie niepożądany skutek, przypisuje bowiem zmiennej c wartość 0 lu*

1 w zależności od tego, czy funkcja getchar osiągnęła koniec pliku czy nie. (Więce informacji na ten temat znajdziesz w rozdz. 2.)    \

Ćwiczenie 1.6. Sprawdź, że wyrażenie getchar() != EOF może mieć wartość 0 lub 1.

1.5 WEJŚCIE I WYJŚCIE ZNAKOWE Ćwiczenie 1.7. Napisz program wypisujący wartość stałej symbolicznej EOF.


1.5.2 Zliczanie znaków

Następny program zlicza znaki; jest on podobny do programu kopiowania.

#jnclude <stdio.h>

/* zlicz znaki wejściowe; wersja 1 */ main()

{

long nc; nc = 0;

while (getchar() != EOF)

-H-nc;

printf(”%ld\n”, nc);

}

Instrukcja

•H-nc;

prezentuje nowy operator -t-f, który oznacza zwiększenie o jeden. Zamiast tego możesz napisać nc=nc+1, ale -H-nc jest bardziej zwięzłe i często bardziej efektywne. W języku C istnieje także operator zmniejszania o jeden\ oznacza się go symbolem —. Operatory -H- i — mogą występować albo jako operatory przedrostkowe (-H-nc), albo przyrostkowe (nc-H-). Obie formy różnią się wartościami przyjmowanymi w wyrażeniach, co opiszemy w rozdz. 2, jednak -H-nc i nc-H- tak samo zwiększają o jeden wartość nc. Na razie ograniczymy się do formy przedrostkowej.

Program zliczania znaków gromadzi ich liczbę w zmiennej typu long, a nie int. Obiekty całkowite typu long zajmują co najmniej 32 bity. Chociaż typy int i long na pewnych maszynach są tego samego rozmiaru, to na innych typ int zajmuje tylko 16 bitów. Oznacza to maksymalną wartość 32 767, a więc nawet dla względnie krótkiego pliku wejściowego mogłoby powstać przepełnienie licznika typu int. Specyfikacja przekształcenia %ld jest sygnałem dla funkcji printf, że odpowiedni argument jest liczbą całkowitą typu long.

Można sobie poradzić z jeszcze większymi liczbami, stosując typ double (tj. typ float podwójnej precyzji). Ponadto, aby zilustrować inny sposób tworzenia pętli, użyjemy instrukcji for zamiast while.

39


Wyszukiwarka

Podobne podstrony:
ANSI C 8 2 TYPY, OPERATORY I WYRAŻENIA________ -077 jest wyrażeniem stałym, które może być obliczo
Odpowiedzi i wskazówki Zad 8 128 108. Dla każdego 90° < a < 180° wyrażenie ma wartość dodatn
ANSI C 8 1 ELEMENTARZ Zmienne zewnętrzne dla fukcji main, getline i copy są zdefiniowane na począt
skanuj0098 (29) 110 PHP i MySQL dla każdego operacje wykonywane są z wartościami kluczy kolor2 i ko1
ANSI C 2 2 TYPY, OPERATORY I WYRAŻENIA_____— kiej zmiennej, jest poprawną wartością wyliczenia. Zm
skanuj0009 (205) Czego jest za dużo? Znajdź w zbiorze element, którego nie ma na rysunku.
skanuj0369 (2) PHP i MySQL dla każdego 3.    Jeśli val ma wartość 2, jest ustawiana z
Najtrudniejszym elementem jest jednakże prawidłowe wyznaczenie wartości likwidacyjnej aktywów. Warto
Ciulem szarym jest ciało, którego zdolność absorpcyjna ma wartość stalą, tzn. nie zależy od długości
- bark możliwości przechowywania - usługa ma wartość tylko w momencie gdy jest konsumowana ZARZĄDZAN
viewer4 Zadanie 1 Wyznaczyć siły we wszystkich prętach, jeżeli ciężar G ma wartość 20 kN, Q jest rów

więcej podobnych podstron