ßçûê Ñè - ðóêîâîäñòâî äëÿ íà÷èíàþùèõ.
5. Îïåðàöèè, âûðàæåíèÿ è îïåðàòîðû.
ÎÏÅÐÀÖÈÈ È ÎÏÐÀÒÎÐÛ. ÂÛÏÎËÍÅÍÈÅ ÀÐÈÔÌÅÒÈ×ÅÑÊÈÕ ÎÏÅÐÀÖÈÉ. ÈÑÏÎËÜÇÎÂÀÍÈÅ ÎÏÅÐÀÒÎÐÀ while. ÂÛÐÀÆÅÍÈß. ÏÐÎÑÒÛÅ ÑÎÑÒÀÂÍÛÅ ÎÏÅÐÀÒÎÐÛ. ÏÐÅÎÁÐÀÇÎÂÀÍÈß ÒÈÏÎÂ. ÊËÞ×ÅÂÛÅ ÑËÎÂÀ. While. ÎÏÅÐÀÖÈÈ. + - * / % ++ -- (òèï).
ÂÂÅÄÅÍÈÅ.
 ãë. 3 è 4 ìû ãîâîðèëè î òèïàõ äàííûõ, èñïîëüçóåìûõ â ÿçûêå Ñè. Çäåñü æå ìû ðàññìîòðèì ñïîñîáû îáðàáîòêè äàííûõ - äëÿ ýòîãî ÿçûê Ñè èìååò øèðîêèé íàáîð âîçìîæíîñòåé. Íà÷íåì ñ îñíîâíûõ àðèôìåòè÷åñêèõ îïåðàöèé ñëîæåíèÿ, âû÷èòàíèÿ, óìíîæåíèÿ è äåëåíèÿ. ×òîáû ñäåëàòü íàøè ïðîãðàììû áîëåå èíòåðåñíûìè è ïîó÷èòåëüíûìè, ìû âïåðâûå â ýòîé ãëàâå êîñíåìñÿ öèêëîâ. À ïîêà, ÷òîáû ââåñòè âàñ â êóðñ äåëà, ïðèâåäåì ïðîñòóþ ïðîãðàììó, âûïîëíÿþùóþ íåñëîæíûå àðèôìåòè÷åñêèå äåéñòâèÿ:
/* ðàçìåðîáóâè1 */
#define OFFSET 7 64.
#define SCALE 0 325.
Main( ).
{
/* ïåðåñ÷åò ðàçìåðà îáóâè â ðàçìåð íîãè â äþéìàõ */
float shoe, foot;
Shoe =90;
Foot = SCALE*shoe + OFFSET;
Printf(" Ðàçìåð îáóâè (ìóæñêîé) ðàçìåð íîãè\n");
Printf(" %10 lf %13 2f äþéì\n" , shoe, foot);
}
Çäîðîâî, â íàøåé ïðîãðàììå âûïîëíÿåòñÿ óìíîæåíèå è ñëîæåíèå, ò.å. áåðåòñÿ âàø ðàçìåð îáóâè (åñëè âû íîñèòå ðàçìåð 9), à âàì ñîîáùàåòñÿ äëèíà ñòîïû â äþéìàõ. Âû ñêàæåòå, ÷òî ìîãëè áû ðåøèòü äàííóþ çàäà÷ó â óìå çà ìåíüøåå âðåìÿ, ÷åì ïîòðåáîâàëîñü äëÿ ââîäà ñàìîé ïðîãðàììû â ìàøèíó. Ýòî, êîíå÷íî, ïðàâèëüíî. Ñîçäàíèå ïðîãðàììû, ñïîñîáíîé îïåðèðîâàòü òîëüêî îäíèì ðàçìåðîì îáóâè, âûãëÿäèò êàê íåíóæíàÿ òðàòà âðåìåíè è óñèëèé. Ìû ìîãëè áû ïðèäàòü ïðîãðàììå áîëüøóþ ýôôåêòèâíîñòü, ñäåëàâ åå äèàëîãîâîé, íî è ýòî îêàæåòñÿ íåïðîèçâîäèòåëüíûì èñïîëüçîâàíèåì âîçìîæíîñòåé ìàøèíû.
Íàì íóæíî ëèøü êàêèì òî îáðàçîì çàñòàâèòü êîìïüþòåð âûïîëíèòü ïîâòîðÿþùèåñÿ âû÷èñëåíèÿ. Âîîáùå ãîâîðÿ, èìåííî ýòà ïîÿâëÿåòñÿ îäíîé èç ãëàâíûõ ïðè÷èí èñïîëüçîâàíèÿ ìàøèí. Äëÿ âûïîëíåíèÿ àðèôìåòè÷åñêèõ âû÷èñëåíèé. ßçûê Ñè ïðåäëàãàåò íåñêîëüêî ñïîñîáîâ ðåàëèçàöèè ïîâòîðÿþùèõñÿ âû÷èñëåíèé, ñåé÷àñ îáñóäèì îäèí èç íèõ. Äàííûé ñïîñîá, íàçûâàåìûé "while", äàåò âîçìîæíîñòü èñïîëüçîâàòü îïåðàòîðû ÿçûêà áîëåå èíòåðåñíûì îáðàçîì. Íèæå ïðèâîäèòñÿ ìîäèôèêàöèÿ íàøåé ïðîãðàììû, çàíèìàþùåéñÿ ïåðåñ÷åòîì ðàçìåðîâ îáóâè.
/* ðàçìåð îáóâè2 */
#define OFFSET 7 64.
#define SCALE 0 325.
Main().
{
/* ïåðåñ÷åò ðàçìåðà îáóâè â ðàçìåð íîãè â äþéìàõ */
float shoe, foot;
Printf("Ðàçìåð îáóâè (ìóæñêîé) ðàçìåð íîãè\n");
Shoe = 3.0;
While(shoe < 18.5).
{
foot = SCALE *shoe + OFFSET;
printf(" %10 lf %13 2f %l6 2f äþéìà\n" , shoe, foot);
shoe = shoe + 1.0;
}
Printf("Åñëè ýòà îáóâü ãîäèòñÿ âàì, íîñèòå åå \n");
}
Âîò ðåçóëüòàò ðàáîòû ïðîãðàììû, ðàçìåð îáóâè2, ïðèâåäåííûé â ñîêðàùåííîì âèäå:
Ðàçìåð îáóâè (ìóæñêîé) Ðàçìåð íîãè.
3.01 8.61 äþéìà.
4.0 8.94 äþéìà.
... ...
... ...
17.0 13.16 äþéìà.
18.0 13.46 äþéìà.
Åñëè ýòà îáóâü ãîäèòüñÿ âàì, íîñèòå åå.
(Çíà÷åíèÿ êîíñòàíò äëÿ äàííîé ïðîãðàììû ïåðåñ÷åòà áûëè ïîëó÷åíû âî âðåìÿ íàøåãî âèçèòà èíêîãíèòî â îáóâíîé ìàãàçèí.  åäèíñòâåííîì îáíàðóæåííîì òàì êëàññèôèêàòîðå ðàçìåðîâ ïðèâîäèëèñü äàííûå òîëüêî îòíîñèòåëüíî ìóæñêîé îáóâè. Ëèöà, èíòåðåñóþùèåñÿ ðàçìåðàìè æåíñêîé îáóâè, äîëæíû ïîñåòèòü îáóâíîé ìàãàçèí ñàìè).
Öèêë while ðàáîòàåò ñëåäóþùèì îáðàçîì. Êîãäà ïðîãðàììà â ïðîöåññå âûïîëíåíèÿ âïåðâûå äîñòèãàåò îïåðàòîðà while, îñóøåñòâëÿåòñÿ ïðîâåðêà èñòèííîñòè óñëîâèÿ, çàêëþ÷åííîãî â êðóãëûå ñêîáêè.  ýòîì ñëó÷àå ñîîòâåòñòâóþùåå âûðàæåíèå èìååò âèä:
Shoe < 18.5.
Ãäå ñèìâîë < îçíà÷àåò "ìåíüøå". Âíà÷àëå ïåðåìåííàÿ shoe áûëà èíèöèàëèçèðîâàíà çíà÷åíèåì 3.0, êîòîðîå, êàê âèäíî, ìåíüøå 18.5. Ïîýòîìó äàííîå óñëîâèå èñòèííî, è îñóùåñòâëÿåòñÿ ïåðåõîä ê ñëåäóþùåìó îïåðàòîðó, êîòîðûé ïåðåâîäèò ðàçìåð îáóâè â äþéìû. Ïîñëå ýòîãî ðåçóëüòàòû âûâîäÿòñÿ íà ïå÷àòü. Ñëåäóþùèé îïåðàòîð:
Shoe = shoe + 1.0;
Óâåëè÷èâàåò çíà÷åíèå ïåðåìåííîé shoe íà 1.0, äåëàÿ åãî ðàâíûì 4.0.  ýòîì ìåñòå ïðîãðàììû ïðîèñõîäèò âîçâðàò ê íà÷àëó ôðàãìåíòà while, ãäå âûøåóïîìÿíóòîå óñëîâèå ïðîâåðÿåòñÿ âíîâü. Ïî ÷åìó èìåííî çäåñü? Ýòî ïðîèñõîäèò ïîòîìó, ÷òî ñëåäóþùåé ñòðîêîé ïðîãðàììû ÿâëÿåòñÿ çàêðûâàþùàÿ ôèãóðíàÿ ñêîáêà } - òåëî öèêëà while çàêëþ÷åíî â ôèãóðíûå ñêîáêè. Îïåðàòîðû, ðàñïîëî æåííûå ìåæäó íèìè, ÿâëÿþòñÿ òîé ÷àñòüþ ïðîãðàììû, êîòîðàÿ ìîæåò âûïîëíÿòüñÿ ïîâòîðíî. Òåïåðü äàâàéòå âåðíåìñÿ ê íàøåé ïðîãðàììå: 4 ìåíüøå 18.5 ? Áåçóñëîâíî Ïîýòîìó âåñü íàáîð îïåðàòîðîâ, çàêëþ÷åííûé â ôèãóðíûå ñêîáêè è ñëåäóþùèé çà êëþ÷åâûì ñëîâîì while, âûïîëíèòñÿ îïÿòü. (Ñïåöèàëèñòû ïî âû÷èñëèòåëüíîé òåõíèêå â ýòîì ñëó÷àå ãîâîðÿò, ÷òî ïðîãðàììà âûïîëíÿåò ýòè îïåðàòîðû "â öèêëå"). Ýòî ïðîäîëæàåòñÿ, ïîêà çíà÷åíèå ïåðåìåííîé shoe íå äîñòèãíåò âåëè÷èíû 19.0. Êîãäà óñëîâèå.
Shoe < 18.5.
Ñòàíåò ëîæíûì, ïîñêîëüêó 19.0 íå ìåíüøå 18.5. Ïðè ýòîì ïðîèçîéäåò ïåðåäà÷à óïðàâëåíèÿ îïåðàòîðó, ñëåäóþùåìó ñðàçó çà òåëîì öèêëà while.  íàøåì ñëó÷àå èì ÿâëÿåòñÿ çàâåðøàþùèé îïåðàòîð printf().
Âû ìîæåòå ëåãêî ìîäèôèöèðîâàòü ýòó ïðîãðàììó, ÷òîáû îíà îñóùåñòâëÿëà äðóãèå ïðåîáðàçîâàíèÿ. Íàïðèìåð, çàìåíèòå çíà÷åíèå êîíñòàíòû SCALE íà 1.8, à êîíñòàíòû OFFSET - íà 32.0, è âû èçó÷èòå ïðîãðàììó, êîòîðàÿ ïåðåâîäèò òåìïåðàòóðó ïî Öåëüñèþ â òåìïåðàòóðó ïî Ôàðåíãåéòó. Åñëè çàìåíèòü çíà÷åíèå SCALE íà 0.6214, a OFFSET íà 0, òî ïðîãðàììà áóäåò ïåðåâîäèòü ìèëè â êèëîìåòðû. Ïðîèçâîäÿ ýòè èçìåíåíèÿ, âû, ïîâèäèìîìó, âî èçáåæàíèå ïóòàíèöû äîëæíû áóäåòå ïîìåíÿòü òàêæå è ïå÷àòàåìûå ñîîáùåíèÿ.
Öèêë while ñëóæèò óäîáíûì è ãèáêèì ñðåäñòâîì óïðàâëåíèÿ âûïîëíåíèÿ ïðîãðàììû. Âåðíåìñÿ òåïåðü ê îáñóæäåíèþ íàáîðà îñíîâíûõ îïåðàöèé, êîòîðûå ìû ìîæåì èñïîëüçîâàòü â ïðîãðàììàõ.
ÎÑÍÎÂÍÛÅ ÎÏÅÐÀÖÈÈ.
"Îïåðàöèè" â ÿçûêå Ñè ïðèìåíÿþòñÿ äëÿ ïðåäñòàâëåíèÿ àðèôìåòè÷åñêèõ äåéñòâèé. Íàïðèìåð, âûïîëíåíèå îïåðàöèè + ïðèâîäèò ê ñëîæåíèþ äâóõ âåëè÷èí, ñòîÿùèõ ñëåâà è ñïðàâà îò ýòîãî çíàêà. Åñëè ñëîâî "îïåðàöèÿ" êàæåòñÿ âàì ñòðàííûì, ïîäóìàéòå òîãäà, êàê íàçâàòü ýòè ïîíÿòèÿ. Íàì ñëîâî "îïåðàöèÿ" ïðåäñòàâëÿåòñÿ ëó÷øèì òåðìèíîì, ÷åì, ñêàæåì, "àðèôìåòè÷åñêèå òðàíçàêòîðû" ìû ðàññìîòðèì îïåðàöèè =, +, -, * è /. ( ÿçûêå Ñè íåò îïåðàöèè âîçâåäåíèÿ â ñòåïåíü.  îäíîé èç ñëåäóþùèõ ãëàâ áóäåò ïðåäñòàâëåíà ïðîãðàììà, ðåàëèçóþùàÿ äàííóþ ôóíêöèþ).
Îïåðàöèÿ ïðèñâàèâàíèÿ: =
 ÿçûêå Ñè çíàê ðàâåíñòâà íå îçíà÷àåò "ðàâíî". Îí îçíà÷àåò îïåðàöèþ ïðèñâàèâàíèÿ íåêîòîðîãî çíà÷åíèÿ. Ñ ïîìîùüþ îïåðàòîðà.
Bmw = 2002,
Ïåðåìåííîé ñ èìåíåì bmw ïðèñâàèâàåòñÿ çíà÷åíèå 2002, ò.å. ýëåìåíò ñëåâà îò çíàêà = - ýòî èìÿ ïåðåìåííîé, à ýëåìåíò ñïðàâà - åå çíà÷åíèå. Ìû íàçûâàåì ñèìâîë = "îïåðàöèåé ïðèñâàèâàíèÿ". Åùå ðàç õîòèì îáðàòèòü âàøå âíèìàíèå íà òî, ÷òî ñìûñë óêàçàííîé ñòðîêè íå âûðàæàåòñÿ ñëîâàìè "bmw ðàâíî 2002". Âìåñòî ýòîãî íóæíî ãîâîðèòü òàê "ïðèñâîèòü ïåðåìåííîé bmw çíà÷åíèå 2002".  ýòîé îïåðàöèè äåéñòâèå âûïîëíÿåòñÿ ñïðàâà íàëåâî.
Âîçìîæíî, ðàçëè÷èå ìåæäó èìåíåì ïåðåìåííîé è åå çíà÷åíèåì ïîêàæåòñÿ âàì íåçíà÷èòåëüíûì.  òàêîì ñëó÷àå äàâàéòå ðàññìîòðèì ñëåäóþùèé ñðàâíèòåëüíî ÷àñòî èñïîëüçóåìûé ïðè ïðîãðàììèðîâàíèè îïåðàòîð.
I =i + 1;
Ñ ìàòåìàòè÷åñêîé òî÷êè çðåíèÿ ýòî áåññìûñëèöà. Åñëè âû ïðèáàâëÿåòå åäèíèöó ê êîíå÷íîìó ÷èñëó, ðåçóëüòàò íå ìîæåò áûòü ðàâåí èñõîäíîìó ÷èñëó. Íî êàê îïåðàòîð ïðèñâàèâàíèÿ äàííàÿ ñòðîêà èìååò âïîëíå îïðåäåëåííûé ñìûñë, êîòîðûé ìîæíî âûðàçèòü, íàïðèìåð, òàêîé äëèííîé ôðàçîé "Âçÿòü çíà÷åíèå ïåðåìåííîé ñ èìåíåì i, ê íåìó ïðèáàâèòü 1, à çàòåì ïðèñâîèòü íîâîå çíà÷åíèå ïåðåìåííîé ñ èìåíåì i".
I = i + 1,
ÐÈÑ. 5.1.
Îïåðàòîð âèäà.
2002 = bmw,
Íà ÿçûêå Ñè íå èìååò ñìûñëà, ïîñêîëüêó 2002 - ÷èñëî. Âû íå ìîæåòå ïðèñâîèòü êîíñòàíòå êàêîå-òî çíà÷åíèå; åå çíà÷åíèåì ÿâëÿåòñÿ îíà ñàìà. Ïîýòîìó, ñèäÿ çà êëàâèàòóðîé, ïîìíèòå, ÷òî ýëåìåíò, ñòîÿùèé ñëåâà îò çíàêà =, âñåãäà äîëæåí áûòü èìåíåì ïåðåìåííîé.
Òåì èç âàñ, êòî ïðåäïî÷èòàåò çíàòü ïðàâèëüíûå íàçâàíèÿ ïîíÿòèé, ñêàæåì, ÷òî âìåñòî èñïîëüçîâàííîãî ðàíåå òåðìèíà "ýëåìåíò" îáû÷íî óïîòðåáëÿþò ñëîâî "îïåðàíä". Îïåðàíäû - ýòî òî, íàä ÷åì âûïîëíÿþòñÿ îïåðàöèè. Íàïðèìåð, âû ìîæåòå îïèñàòü ïðîöåññ "ïîåäàíèÿ" ãàìáóðãåðà êàê ïðèìåíåíèå îïåðàöèè "ïîåäàíèå" ê îïåðàíäó "ãàìáóðãåð".
Îïåðàöèÿ ïðèñâàèâàíèÿ â ÿçûêå Ñè ïðåäñòàâëÿåòñÿ íåñêîëüêî áîëåå èíòåðåñíîé, ÷åì â áîëüøèíñòâå äðóãèõ ÿçûêîâ. Ïîïðîáóéòå âûïîëíèòü ïðèâåäåííóþ íèæå êîðîòêóþ ïðîãðàììó.
/* òàáëèöà ðåçóëüòàòîâ òóðíèðà ïî ãîëüôó */
Main( ) {
Int Jane, tarzan, cheeta, cheeta = tarzan = jane = 68;
Printf("cheeta tarzan jane\n");
Printf("Ñ÷åòïåðâîéïàðòèè%4d %8d %8d \n", cheeta, tarzan, jane);
}
 òî âðåìÿ êàê ìíîãèå ÿçûêè çàïðåùàþò ïðèìåíÿòü òàêîå òðîèíîå ïðèñâàèâàíèå, ïðèñóòñòâóþùåå â äàííîé ïðîãðàììå, äëÿ Ñè ýòî îáû÷íàÿ ïðàêòèêà. Ïðèñâàèâàíèÿ âûïîëíÿþòñÿ ñïðàâà íàëåâî ñíà÷àëà ïåðåìåííàÿ jane ïîëó÷àåò çíà÷åíèå 68, çàòåì ïåðåìåííàÿ tarzan è íàêîíåö ïåðåìåííàÿ cheeta. Ðåçóëüòàò âûãëÿäèò òàê:
Cheeta tarzan jane.
Ñ÷åò ïåðâîé ïàðòèè 68 68 68.
 ÿçûêå Ñè èìååòñÿ íåñêîëüêî äðóãèõ îïåðàöèè ïðèñâàèâàíèÿ, êîòîðûå îòëè÷àþòñÿ îò îïåðàöèè, îïèñàííîé â äàííîì ðàçäåëå, è ìû îáåùàåì ðàññêàçàòü î íèõ â ñëåäóþùåé ãëàâå.
Îïåðàöèÿ ñëîæåíèÿ: +
Âûïîëíåíèå îïåðàöèè + ïðèâîäèò ê ñëîæåíèþ äâóõ âåëè÷èí, ñòîÿùèõ ñëåâà è ñïðàâà îò ýòîãî çíàêà. Íàïðèìåð, â ðåçóëüòàòå ðàáîòû îïåðàòîðà.
Printf(" %d", 4 + 20);
Íà ïå÷àòü áóäåò âûâåäåíî ÷èñëî 24, à íå âûðàæåíèå 4 + 20.
Îïåðàíäû ìîãóò áûòü êàê ïåðåìåííûìè, òàê è êîíñòàíòàìè. Ïîýòîìó ïðè âûïîëíåíèè îïåðàòîðà.
Income = salary + bribes;
Êîìïüþòåð âîçüìåò çíà÷åíèÿ äâóõ ïåðåìåííûõ, ñòîÿùèõ â ïðàâîé ÷àñòè, ñëîæèò èõ è ïðèñâîèò çàòåì ïîëó÷åííóþ ñóììó ïåðåìåííîé income.
Îïåðàöèÿ + íàçûâàåòñÿ "áèíàðíîé", èëè "äèàäè÷åñêîé". Ýòè íàçâàíèÿ îòðàæàþò òîò ôàêò, ÷òî îíà èìååò äåëî ñ äâóìÿ îïåðàíäàìè.
Îïåðàöèÿ âû÷èòàíèÿ: -
Âûïîëíåíèå îïåðàöèè âû÷èòàíèÿ ïðèâîäèò ê âû÷èòàíèþ ÷èñëà, ðàñïîëîæåíîãî ñïðàâà îò çíàêà -, èç ÷èñëà, ñòîÿùåãî ñëåâà îò ýòîãî çíàêà. Îïåðàòîð.
Takehome = 224.00 - 24.00;
Ïðèñâàèâàåò ïåðåìåííîé takehome çíà÷åíèå 200.
Îïåðàöèÿ èçìåíåíèÿ çíàêà: -
Çíàê ìèíóñ èñïîëüçóåòñÿ òàêæå äëÿ óêàçàíèÿ èëè èçìåíåíèÿ àëãåáðàè÷åñêîãî çíàêà íåêîòîðîé âåëè÷èíû. Íàïðèìåð, â ðåçóëüòàòå âûïîëíåíèÿ ïîñëåäîâàòåëüíîñòè îïåðàòîðîâ.
Rocky = -12;
Smokey = -rocky;
Ïåðåìåííîé smokey áóäåò ïðèñâîåíî çíà÷åíèå 12.
Êîãäà çíàê ìèíóñ èñïîëüçóåòñÿ ïîäîáíûì îáðàçîì, äàííàÿ înåðàöèÿ íàçûâàåòñÿ "óíàðíîé". Òàêîå íàçâàíèå óêàçûâàåò íà òî, ÷òî îíà èìååò äåëî òîëüêî ñ îäíèì îïåðàíäîì.
ÐÈÑ. 5.2. Óíàðíûå è áèíàðíûå îïåðàöèè.
Îïåðàöèÿ óìíîæåíèÿ: *
Îïåðàöèÿ óìíîæåíèÿ îáîçíà÷àåòñÿ çíàêîì *. Ïðè âûïîëíåíèè îïåðàòîðà.
Cm = 2.54 * in;
Çíà÷åíèå ïåðåìåííîé in óìíîæàåòñÿ íà 2.54, è ðåçóëüòàò ïðèñâàèâàåòñÿ ïåðåìåííîé cm.
Âû õîòèòå èìåòü òàáëèöó êâàäðàòîâ íàòóðàëüíûõ ÷èñåë?  ÿçûêå Ñè íåò ôóíêöèè, îñóùåñòâëÿþùåé âîçâåäåíèå â êâàäðàò; âìåñòî ýòîãî ìû ìîæåì èñïîëüçîâàòü óìíîæåíèå.
/* êâàäðàòû ÷èñåë */
Main( ) /* ïîëó÷åíèå òàáëèöû êâàäðàòîâ */
{
int num = 1;
while(num < 21) {
printf("%10d %10d", n, n*n);
n = n + 1;
}
Ýòà ïðîãðàììà âûâîäèò íà ïå÷àòü ïåðâûå 20 öåëûõ ÷èñåë è èõ êâàäðàòû, â ÷åì âû ñàìè ëåãêî ìîæåòå óáåäèòüñÿ. Òåïåðü äàâàéòå ðàññìîòðèì áîëåå èíòåðåñíûé ïðèìåð. Âû, íàâåðíîå, ñëûøàëè èñòîðèþ î òîì, êàê îäèí ìîãóùåñòâåííûé ïðàâèòåëü îáåùàë íàãðàäèòü ó÷åíîãî, îêàçàâøåãî åìó áîëüøóþ óñëóãó. Ó÷åíûé, êîãäà åãî ñïðîñèëè, ÷òî áû îí õîòåë ïîëó÷èòü â íàãðàäó, óêàçàë íà øàõìàòíóþ äîñêó è ïðîìîëâèë: "Ïîëîæèòå îäíî ïøåíè÷íîå çåðíî íà ïåðâóþ êëåòêó, äâà - íà âòîðóþ, ÷åòûðå íà òðåòüþ, âîñåìü íà ñëåäóþùóþ è ò. ä.". Ïðàâèòåëü, êîòîðîìó ÿâíî íåäîñòàâàëî ìàòåìàòè÷åñêîé ýðóäèöèè, áûë ïîðàæåí, óñëûøàâ òàêóþ ñêðîìíóþ ïðîñüáó,- âåäü îí óæå ïðèãîòîâèë áîãàòûå äàðû. Ïðîãðàììà, ïðèâåäåííàÿ íèæå, ïîêàçûâàåò, â êàêîå ñìåøíîå ïîëîæåíèå ïîïàë ïðàâèòåëü.  íåé âû÷èñëÿåòñÿ êîëè÷åñòâî çåðåí, êîòîðîå íàäî ïîëîæèòü íà êàæäóþ êëåòêó, à òàêæå ïðîìåæóòî÷íûå ðåçóëüòàòû (ñóììû çåðåí ïî ÷èñëó êëåòîê). Ïîñêîëüêó âû, âîçìîæíî, íå çíàêîìû ñ óðîæàÿìè ïøåíèöû, ìû, êðîìå òîãî, ñðàâíèâàåì ïðîìåæóòî÷íûå ñóììû çåðåí ñ ïðèáëèçèòåëüíûìè öèôðàìè ãîäîâîãî óðîæàÿ ïøåíèöû â ÑØÀ.
/* ïøåíèöà */
#define SQUARES 64 /* ÷èñëî êëåòîê íà øàõìàòíîé äîñêå */
#define CROP 7E14 /* óðîæàé ïøåíèöû â ÑØÀ, âûðàæåííûé â ÷èñëå çåðåí */
Main( ) {
Double current, total, int count = 1;
Printf(" êëåòêà ÷èñëî çåðåí ñóììà çåðåí äîëÿ\n");
Printf("îò óðîæàÿ â ÑØÀ\n"),
Total = current = 1.0; /* íà÷èíàåì ñ îäíîãî çåðíà */
Printf("%4d %15.2å%13.2å%12.2e\n", count, current, total, total/CROP);
While (count < SQUARES){
Count = count + 1;
Current =2.0 * current; /* ó äâîåíèå ÷èñëà çåðåí íà ñëåäóþùåé êëåòêå*/
Total = total + current; /* êîððåêöèÿñóììû*/
Printf(" %4d %15.2å%13.2å%12 2e\n" , count, current, total, total/CROP); }.
}
Âíà÷àëå ðåçóëüòàòû ðàáîòû ïðîãðàììû âûãëÿäÿò äîâîëüíî áåçîáèäíî.
Íà ïåðâûõ 10 êëåòêàõ îêàçàëîñü ÷óòü áîëåå òûñÿ÷è çåðåí ïøåíèöû. Íî äàâàéòå ïîñìîòðèì, ñêîëüêî çåðåí íà ïÿòèäåñÿòè êëåòêàõ.
Äîáû÷à ó÷åíîãî ïðåâûñèëà âåñü ãîäîâîé óðîæàé ïøåíèöû â ÑØÀ. Åñëè âû çàõîòèòå óçíàòü, ÷òî îêàæåòñÿ íà 64 êëåòêàõ, âûïîëíèòå ïðîãðàììó ñàìè.
Ýòîò ïðèìåð èëëþñòðèðóåò ôåíîìåí ýêñïîíåíöèàëüíîãî ðîñòà âîçðàñòàíèå íàñåëåíèÿ çåìíîãî øàðà è èñïîëüçîâàíèå íàìè ýíåðãåòè÷åñêèõ ðåñóðñîâ ïîä÷èíÿþòñÿ òîìó æå çàêîíó.
Îïåðàöèÿ äåëåíèÿ: /
 ÿçûêå Ñè ñèìâîë / óêàçûâàåò íà îïåðàöèþ äåëåíèÿ. Âåëè÷èíà, ñòîÿùàÿ ñëåâà îò ýòîãî çíàêà, äåëèòñÿ íà âåëè÷èíó, ðàñïîëîæåííóþ ñïðàâà îò íåãî. Íàïðèìåð, â ðåçóëüòàòå âûïîëíåíèÿ îïåðàòîðà:
Four = 12.0/3.0;
Ïåðåìåííîé four áóäåò ïðèñâîåíî çíà÷åíèå 4.0. Çàìåòèì, ÷òî íàä äàííûìè öåëîãî òèïà îïåðàöèÿ äåëåíèÿ ïðîèçâîäèòñÿ íå òàê, êàê íàä äàííûìè ñ ïëàâàþùåé òî÷êîé â ïåðâîì ñëó÷àå ðåçóëüòàò áóäåò öåëûì ÷èñëîì, à âî âòîðîì - ÷èñëîì ñ ïëàâàþùåé òî÷êîé. Ó öåëîãî ÷èñëà íåò äðîáíîé ÷àñòè, ÷òî äåëàåò äåëåíèå 5 íà 3 çàòðóäíèòåëüíûì, ïîñêîëüêó ðåçóëüòàò íå ÿâëÿåòñÿ öåëûì.  ÿçûêå Ñè ïðèíÿòî ïðàâèëî, ñîãëàñíî êîòîðîìó äðîáíàÿ ÷àñòü ó ðåçóëüòàòà äåëåíèÿ öåëûõ ÷èñåë îòáðàñûâàåòñÿ. Ýòî äåéñòâèå íàçûâàåòñÿ "óñå÷åíèåì".
Ïîïðîáóéòå âûïîëíèòü ïðèâåäåííóþ íèæå ïðîãðàììó, ÷òîáû ïîñìîòðåòü, êàê îñóùåñòâëÿåòñÿ óñå÷åíèå ðåçóëüòàòà è ÷åì äåëåíèå ÷èñåë îòëè÷àåòñÿ îò äåëåíèÿ ÷èñåë ñ ïëàâàþùåé òî÷êîé.
/*Ïðèìåðû äåëåíèÿ */
Main().
{
printf(" äåëåíèå öåëûõ: 5/4 ýòî %d \n" , 5/4);
Printf(" äåëåíèå öåëûõ 6/3 ýòî %d \ï" , 6/3);
Printf(" äåëåíèå öåëûõ 7/4 ýòî %d \ï" , 7/4);
Printf(" äåëåíèå ÷èñåë ñ ïëàâàþùåé òî÷êîé 7 /4 ýòî %2.2f \n", 7 /4 );
Printf(" ñìåøàííîå äåëåíèå 7 /4 ýòî %2.2f \n" , 7 /4);
}
Ìû âêëþ÷èëè â íàøó ïðîãðàììó òàêæå ñëó÷àé "ñìåøàííûõ" òèïîâ, îñóùåñòâëÿÿ äåëåíèå âåùåñòâåííîãî ÷èñëà íà öåëîå. ßçûê Ñè ìåíåå ñòðîãî "ïîäõîäèò" ê ïîäîáíûì âîïðîñàì, ÷åì íåêîòîðûå äðóãèå ÿçûêè, è ïîçâîëÿåò âûïîëíÿòü òàêèå îïåðàöèè, íî, âîîáùå ãîâîðÿ, ñìåùåíèÿ òèïîâ ñëåäóåò èçáåãàòü. Âîò ðåçóëüòàòû âûïîëíåíèÿ óêàçàííîé ïðîãðàììû. Îáðàòèòå âíèìàíèå íà òî, ÷òî ðåçóëüòàò äåëåíèÿ öåëûõ ÷èñåë îêðóãëÿåòñÿ íå äî áëèæàéøåãî öåëîãî, à âñåãäà äî ìåíüøåãî öåëîãî ÷èñëà. Êîãäà ìû ñìåøèâàåì öåëûå ÷èñëà è ÷èñëà ñ ïëàâàþùåé òî÷êîé, ðåçóëüòàò áóäåò òàêèì æå, êàê åñëè áû îáà îïåðàíäà áûëè ÷èñëàìè ñ ïëàâàþùåé òî÷êîé, ïîñêîëüêó â ýòîì ñëó÷àå ïåðåä äåëåíèåì öåëîå ïðåîáðàçóåòñÿ â ÷èñëî ñ ïëàâàþùåé òî÷êîé.
Óêàçàííûå ñâîéñòâà îïåðàöèè äåëåíèÿ öåëûõ ÷èñåë îêàçûâàþòñÿ äîâîëüíî óäîáíûìè ïðè ðåøåíèè íåêîòîðûõ çàäà÷. Î÷åíü ñêîðî ìû ïðèâåäåì ñîîòâåòñòâóþùèé ïðèìåð. Íàì îñòàëîñü ðàññìîòðåòü åùå îäèí âàæíûé âîïðîñ, ÷òî ïðîèñõîäèò â òåõ ñëó÷àÿõ, êîãäà â îäíîì îïåðàòîðå èñïîëüçóåòñÿ íåñêîëüêî îïåðàöèé? Ýòî è ïîñëóæèëî íàì òåìîé îáñóæäåíèÿ, ïðèâåäåííîãî íèæå.
Ïîðÿäîê âûïîëíåíèÿ îïåðàöèé.
Ðàññìîòðèì ñëåäóþùóþ ñòðîêó:
Butter = 25.0 + 60.0 * n / SCALE;
 ýòîì îïåðàòîðå èìåþòñÿ îïåðàöèè ñëîæåíèÿ, óìíîæåíèÿ è äåëåíèÿ. Êàêàÿ îïåðàöèÿ áóäåò âûïîëíåíà ïåðâîé? Áóäåò ëè 25.0 ñêëàäûâàòüñÿ ñ 60.0, çàòåì ðåçóëüòàò 85.0 óìíîæàòüñÿ íà n, à ïðîèçâåäåíèå äåëèòüñÿ íà çíà÷åíèå êîíñòàíòû SCALE? Èëè 60.0 óìíîæàåòñÿ íà n, ðåçóëüòàò ñêëàäûâàåòñÿ ñ 25.0, à ñóììà çàòåì äåëèòñÿ íà âåëè÷èíó SCALE? Èëè æå ñóùåñòâóåò êàêîé-òî äðóãîé ïîðÿäîê âûïîëíåíèÿ îïåðàöèé? Ïóñòü ïåðåìåííàÿ n ðàâíà 6.0, à êîíñòàíòà SCALE - 2.0. Åñëè âû âûïîëíèòå äàííûå îïåðàöèè, èñïîëüçóÿ ýòè çíà÷åíèÿ, âû íàéäåòå, ÷òî ïðè ïåðâîì ñïîñîáå âû÷èñëåíèÿ ðåçóëüòàò ðàâåí 255, à ïðè âòîðîì - 192.5. Ïðè âûïîëíåíèè äàííîé Ñè ïðîãðàììû íà ìàøèíå ðåàëèçóåòñÿ, ïî-âèäèìîìó, êàêîé-òî äðóãîé ïîðÿäîê âû÷èñëåíèé, ïîñêîëüêó íà äåëå ïåðåìåííàÿ butter ïîëó÷èò çíà÷åíèå 205.0.
Ñîâåðøåííî î÷åâèäíî, ÷òî èçìåíåíèå ïîðÿäêà âûïîëíåíèÿ äåéñòâèé ìîæåò ïðèâîäèòü ê ðàçëè÷íûì ðåçóëüòàòàì, ïîýòîìó ÿçûê Ñè íóæäàåòñÿ â íàáîðå íåïðîòèâîðå÷èâûõ ïðàâèë, óêàçûâàþùèõ, êàêîå äåéñòâèå îñóùåñòâëÿòü ïåðâûì. ßçûê Ñè äåëàåò ýòî, çàäàâàÿ ïðèîðèòåò òîé èëè èíîé îïåðàöèè. Êàæäîé îïåðàöèè íàçíà÷àåòñÿ óðîâåíü ñòàðøèíñòâà. Óìíîæåíèå è äåëåíèå èìåþò áîëåå âûñîêèé óðîâåíü, ÷åì ñëîæåíèå è âû÷èòàíèå, ïîýòîìó îíè âûïîëíÿþòñÿ ïåðâûìè. Åñëè æå äâå îïåðàöèè èìåþò îäèí è òîò æå óðîâåíü ñòàðøèíñòâà, îíè âûïîëíÿþòñÿ â òîì ïîðÿäêå, â êîòîðîì ïðèñóòñòâóþò â îïåðàòîðå. Äëÿ áîëüøèíñòâà îïåðàöèé îáû÷íûé ïîðÿäîê - ñëåâà íàïðàâî. (Îïåðàöèÿ = ÿâëÿåòñÿ èñêëþ÷åíèåì èç ýòîãî ïðàâèëà.) Ïîýòîìó â îïåðàòîðå.
Butter = 25.0 + 60.0 * n / SCALE;
Ïîðÿäîê îïåðàöèé ñëåäóþùèé:
60.0 * n - ïåðâîå óìíîæåíèå (èëè, âîçìîæíî, äåëåíèå) (åñëè n = 6, òî 60.0 * n = 360.0).
360.0/SCALE - âòîðîå óìíîæåíèå (èëè, âîçìîæíî, äåëåíèå) è íàêîíåö (ïîñêîëüêó SCALE = 2.0):
25.0 + 180.0 - ïåðâîå ñëîæåíèå (èëè, âîçìîæíî, âû÷èòàíèå) äàåò 205.0.
Ìíîãèå ïðîãðàììèñòû ïðåäïî÷èòàþò ïðåäñòàâëÿòü ïîðÿäîê âû÷èñëåíèé ñ ïîìîùüþ äèàãðàììû ñïåöèàëüíîãî âèäà, íàçûâàåìîé "ïðàâîì âûðàæåíèÿ". Íèæå ïðèâîäèòñÿ ïðèìåð òàêîé äèàãðàììû. Äèàãðàììà ïîêàçûâàåò, êàê èñõîäíîå âûðàæåíèå ñâîäèòñÿ ê îäíîìó çíà÷åíèþ.
Åñëè âû çàõîòèòå, ñêàæåì, ÷òîáû ñëîæåíèå âûïîëíÿëîñü ïåðåä äåëåíèåì, òîãäà âû äîëæíû äåëàòü òî æå, ÷òî è ìû â ïðèâåäåííîé íèæå ñòðîêå:
Hour = (25.0 + 60.0 * n) / SCALE;
 ïåðâóþ î÷åðåäü âûïîëíÿåòñÿ âñå, ÷òî çàêëþ÷åíî â ñêîáêè; âíóòðè äåéñòâóþò îáû÷íûå ïðàâèëà.  äàííîì ïðèìåðå ñíà÷àëà âû óìíîæåíèå, à çàòåì ñëîæåíèå. Ñ ïîìîùüþ ýòèõ äåéñòâèé âû÷èñëÿåòñÿ âûðàæåíèå â ñêîáêàõ, è òîëüêî ïîòîì ðåçóëüòàò äåëèòñÿ íà çíà÷åíèå êîíñòàíòû SCALE.
Ðèñ. 5.3. Äåðåâüÿ âûðàæåíèé, ïîñòðîåííûå íà îñíîâå îïåðàöèè è îïåðàíäîâ, è ïîðÿäîê âû÷èñëåíèè.
Ìû ìîæåì ñîñòàâèòü òàáëèöó ïðàâèë, êàñàþùèõñÿ óæå èñïîëüçîâàííûõ íàìè îïåðàöèè. (Â ïðèëîæåíèè Â â êîíöå êíèãè ïðèâåäåíà òàáëèöà, ãäå ñîäåðæàòñÿ ïðàâèëà, îòíîñÿùèåñÿ êî âñåì îïåðàöèÿì ÿçûêà Ñè.).
Òàáëèöà 5.1. Îïåðàöèè â ïîðÿäêå óìåíüøåíèÿ óðîâíÿ ñòàðøèíñòâà.
| ÎÏÅÐÀÖÈÈ | ÏÎÐßÄÎÊ ÂÛ×ÈÑËÅÍÈß |
|---|---|
| ( ) | ñëåâà íàïðàâî |
| -(óíàðíûé) | ñëåâà íàïðàâî |
| * / | ñëåâà íàïðàâî |
| + -(âû÷èòàíèå) | ñëåâà íàïðàâî |
| = | ñëåâà íàïðàâî |
Çàìåòèì, ÷òî äâà ðàçëè÷íûõ ïî ñìûñëó óïîòðåáëåíèÿ çíàêà ìèíóñ èìåþò ðàçíûå ïðèîðèòåòû (óðîâíè ñòàðøèíñòâà). Ñòîëáåö "ïîðÿäîê âû÷èñëåíèÿ" óêàçûâàåò, êàê îïåðàöèÿ ñâÿçàíà ñî ñâîèìè îïåðàíäàìè. Íàïðèìåð, óíàðíûé çíàê ìèíóñ ñâÿçàí ñ âåëè÷èíîé, ñòîÿùåé ñïðàâà îò íåãî, à ïðè äåëåíèè ëåâûé îïåðàíä äåëèòñÿ íà ïðàâûé.
Ïîïûòàåìñÿ ïðèìåíèòü ýòè ïðàâèëà íà áîëåå ñëîæíîì ïðèìåðå.
/* ïðèìåíåíèå ïðàâèë ñòàðøèíñòâà */
Main( ).
{
int top, score;
Top = score = -(2 + 5)*6 + (4 + 3*(2 + 3));
Printi("top = %d \n", top);
}
Êàêîå çíà÷åíèå áóäåò âûâåäåíî íà ïå÷àòü â ðåçóëüòàòå ðàáîòû äàííîé ïðîãðàììû? Âíà÷àëå âû÷èñëèòå åãî ñàìè, à çàòåì âûïîëíèòå ïðîãðàììó èëè ïðî÷èòàéòå íèæåñëåäóþùåå îáúÿñíåíèå, ÷òîáû ïðîâåðèòü ñâîé îòâåò. (Íàäååìñÿ, ÷òî âû ïîëó÷èòå ïðàâèëüíûé ðåçóëüòàò.).
Èòàê, âûðàæåíèÿ, ñòîÿùèå â ñêîáêàõ, èìåþò íàèâûñøèé ïðèîðèòåò. Äâèãàÿñü ñëåâà íàïðàâî, âñòðå÷àåì ïåðâîå âûðàæåíèå ñêîáêàõ (2+5). Âû÷èñëÿÿ åãî, ïîëó÷àåì:
Top = score = -7*6 + (4 + 3*(2 + 3)).
Ñëåäóùåå âûðàæåíèå â ñêîáêàõ - ýòî (4 + 3*(2 + 3)). Îòáðàñûâàåì ñêîáêè, ïîëó÷àåì 4 + 3*(2 + 3). Âîò êàê! Åùå îäíè ñêîáêè! Òîãäà ïåðâûì øàãîì ÿâëÿåòñÿ íàõîæäåíèå ñóììû 2+3. Âûðàæåíèå ïðèìåò âèä:
Top = score = -7*6 + (4 + 3*5).
Ìû äîëæíû åùå çàâåðøèòü âû÷èñëåíèå âûðàæåíèÿ â ñêîáêàõ. Ïî-ñêîëüêó óìíîæåíèå * èìååò ïðèîðèòåò áîëåå âûñîêèé, ÷åì ñëîæåíèå, âûðàæåíèå òåïåðü âûãëÿäèò òàê.
Top = score = -7*6 + (4 + 15).
Èìååì.
Top = score = -7*6 + 19.
×òî æå äàëüøå? Åñëè âû ïðåäïîëàãàåòå, ÷òî íóæíî íàéòè ïðîèçâåäåíèå 7*6, òî âû îøèáàåòåñü. Çàìåòèì, ÷òî óíàðíûé ìèíóñ (èçìåíåíèå çíàêà) èìååò áîëåå âûñîêèé ïðèîðèòåò, ÷åì óìíîæåíèå *. Ïîýòîìó ñíà÷àëà ÷èñëî 7 çàìåíÿåòñÿ íà -7, à çàòåì -7 óìíîæàåòñÿ íà 6. Ñòðîêà ïðèìåò âèä:
Top = score = -42 + 19.
Ïîñëå ýòîãî â ðåçóëüòàòå ñëîæåíèÿ ïîëó÷èì.
Tîð = score = -23.
Çàòåì ïåðåìåííîé score ïðèñâàèâàåòñÿ çíà÷åíèå -23, è, íàêîíåö, ïåðåìåííàÿ top ïîëó÷àåò òî æå çíà÷åíèå -23. Íàïîìíèì, ÷òî îïåðàöèÿ = âûïîëíÿåòñÿ ñïðàâà íàëåâî.
ÍÅÊÎÒÎÐÛÅ ÄÎÏÎËÍÈÒÅËÜÍÛÅ ÎÏÅÐÀÖÈÈ.
 ÿçûêå Ñè èìååòñÿ îêîëî 40 îïåðàöèé, íî íåêîòîðûå èç íèõ èñïîëüçóþòñÿ ãîðàçäî ÷àùå, ÷åì äðóãèå. Òå îïåðàöèè, êîòîðûå ìû òîëüêî ÷òî ðàññìîòðåëè, ÿâëÿþòñÿ íàèáîëåå îáùåóïîòðåáèòåëüíûìè. Êðîìå òîãî, íàì õîòåëîñü áû ïðèâåñòè åùå òðè ïîëåçíûå îïåðàöèè.
Îïåðàöèÿ äåëåíèÿ ïî ìîäóëþ: %
Îïåðàöèÿ äåëåíèÿ ïî ìîäóëþ èñïîëüçóåòñÿ â öåëî÷èñëåííîé àðèôìåòèêå. Åå ðåçóëüòàòîì ÿâëÿåòñÿ îñòàòîê îò äåëåíèÿ öåëîãî ÷èñëà, ñòîÿùåãî ñëåâà îò çíàêà îïåðàöèè, íà ÷èñëî, ðàñïîëîæåííîå ñïðàâà îò íåãî. Íàïðèìåð, 13 % 5 (÷èòàåòñÿ êàê "13 ïî ìîäóëþ 5") èìååò çíà÷åíèå 3, ïîñêîëüêó ñïðàâåäëèâî ðàâåíñòâî 13 = 2*5 + 3.
Íå ïûòàéòåñü ïðîèçâîäèòü äàííóþ îïåðàöèþ íàä ÷èñëàìè ñ ïëàâàþùåé òî÷êîé îíà ïðîñòî íå áóäåò âûïîëíÿòüñÿ.
Íà ïåðâûé âçãëÿä ýòà îïåðàöèÿ ìîæåò ïîêàçàòüñÿ íåêîòîðûì ýêçîòè÷åñêèì ñðåäñòâîì, èñïîëüçóåìûì ëèøü ìàòåìàòèêàìè, íî íà ñàìîì äåëå îíà ïðèìåíÿåòñÿ íà ïðàêòèêå è äîâîëüíî óäîáíà ïðè ïðîãðàììèðîâàíèè ðÿäà çàäà÷. Îäíî øèðîêî ðàñïðîñòðàíåííîå ïðèìåíåíèå - ñîäåéñòâèå ïîëüçîâàòåëþ â óïðàâëåíèè õîäîì ïðîãðàììû. Ïðåäïîëîæèì, íàïðèìåð, ÷òî âû ïèøèòå ïðîãðàììó îáðàáîòêè ñ÷åòîâ, êîòîðàÿ äîëæíà ïðåäóñìàòðèâàòü äîïîëíèòåëüíóþ ïëàòó ðàç â òðè ìåñÿöà. Äëÿ ýòîãî íóæíî òîëüêî âû÷èñëèòü îñòà òîê îò äåëåíèÿ íîìåðà ìåñÿöà íà 3 (ò.å. month % 3), ïðîâåðèòü, ðàâåí ëè ðåçóëüòàò 0, è, åñëè ðàâåí, äîáàâèòü ê ñ÷åòó âåëè÷èíó äîïîëíèòåëüíîé ïëàòû. Ïîñëå òîãî êàê âû ïîçíàêîìèëèñü ñ "îïåðàòîðîì if", âû ñìîæåòå ëó÷øå ïðåäñòàâèòü ñåáå, êàê âñå ýòî ðàáîòàåò.
Ïðèâåäåì ïðèìåð ïðîãðàììû, èñïîëüçóþùåé îïåðàöèþ %
/* ñåêóíäû â ìèíóòû */
/* ïåðåâîäèò ñåêóíäû â ìèíóòû è ñåêóíäû */
#define SM 60 /* ÷èñëî ñåêóíä â ìèíóòå */
Main( ).
{
Int sec, mm, left;
Printf(" Ïåðåâîä ñåêóíä â ìèíóòû è ñåêóíäû ! \n");
Printf(" Óêàæèòå ÷èñëî ñåêóíä, êîòîðîå âû õîòåëè áû ïåðåâåñòè â ìèíóòû \n" );
Scanf(" %d", &sec); /* ââîä ÷èñëà ñåêóíä */
Mm = sec % SM; /* ÷èñëî ìèíóò */
Left = sec % SM; /* îñòàâøååñÿ ÷èñëî ñåêóíä */
Printf(" %d ñåêóíäû ýòî %d ìèíóòû, %d ñåêóíäû \n", sec, mm, left);
}
Âîò ðåçóëüòàò åå ðàáîòû.
Ïåðåâîä ñåêóíä â ìèíóòû è ñåêóíäû!
Óêàæèòå ÷èñëî ñåêóíä, êîòîðîå âû õîòåëè áû ïåðåâåñòè â ìèíóòû.
234.
234 ñåêóíäû ýòî 3 ìèíóòû 54 ñåêóíäû.
Íåäîñòàòêîì ýòîé äèàëîãîâîé ïðîãðàììû ÿâëÿåòñÿ òî, ÷òî îíà îáðàáàòûâàåò òîëüêî îäíó âõîäíóþ âåëè÷èíó. Ñóìååòå ëè âû ñàìè èçìåíèòü ïðîãðàììó òàê, ÷òîáû îíà ïðåäëàãàëà âàì ââîäèòü íîâûå çíà÷åíèÿ? Ìû âåðíåìñÿ ê ýòîé çàäà÷å â ðàçäåëå âîïðîñîâ â êîíöå ãëàâû, íî, åñëè âû íàéäåòå ñâîå ñîáñòâåííîå ðåøåíèå, ìû áóäåì î÷åíü ðàäû.
Îïåðàöèè óâåëè÷åíèÿ è óìåíüøåíèÿ: ++ è --
Îïåðàöèÿ óâåëè÷åíèÿ îñóùåñòâëÿåò ñëåäóþùåå ïðîñòîå äåéñòâèå: îíà óâåëè÷èâàåò çíà÷åíèå ñâîåãî îïåðàíäà íà åäèíèöó. Ñóùåñòâóþò äâå âîçìîæíîñòè èñïîëüçîâàíèÿ äàííîé îïåðàöèè, ïåðâàÿ:
êîãäà ñèìâîëû ++ íàõîäÿòñÿ ñëåâà îò ïåðåìåííîé (îïåðàíäà), - "ïðåôèêñíàÿ" ôîðìà,
È âòîðàÿ:
êîãäà ñèìâîëû ++ ñòîÿò ñïðàâà îò ïåðåìåííîé, - "ïîñòôèêñíàÿ" ôîðìà.
Ýòè äâå ôîðìû óêàçàííîé îïåðàöèè ðàçëè÷àþòñÿ ìåæäó ñîáîé òîëüêî òåì, â êàêîé ìîìåíò îñóùåñòâëÿåòñÿ óâåëè÷åíèå îïåðàíäà. Ñíà÷àëà ìû îáñóäèì ñõîäñòâî óêàçàííûõ äâóõ ôîðì, à çàòåì âåðíåìñÿ ê ðàçëè÷èÿì. Êîðîòêèé ïðèìåð, ïðèâåäåííûé íèæå, ïîêàçûâàåò, êàê âûïîëíÿåòñÿ äàííàÿ îïåðàöèÿ.
/*âûïîëíåíèå ñëîæåíèÿ */
Main( ) /*óâåëè÷åíèå ïðåôèêñíàÿ è ïîñòôèêñíàÿ ôîðìû */
{
Int ultra = 0, super = 0;
while (super < 6).
{
super++;
++ultra;
printf(" super = %d, ultra = %d\n", super, ultra);
}
}
Ðåçóëüòàòû ðàáîòû ïðîãðàììû "âûïîëíåíèå ñëîæåíèÿ" âûãëÿäÿò ñëåäóþùèì îáðàçîì.
Super = 1, ultra = 1.
Super = 2, ultra = 2.
Super = 3, ultra = 3.
Super = 4, ultra = 4.
Super = 5, ultra = 5.
Âîò ýòî äà! Ìû äîñ÷èòàëè äî 5! Äâàæäû! Îäíîâðåìåííî! (Åñëè âû çàõîòèòå ñ÷èòàòü äàëüøå, âàì íåîáõîäèìî áóäåò òîëüêî èçìåíèòü ïàðàìåòð, îïðåäåëÿþùèé âåðõíèé ïðåäåë ñ÷åòà â îïåðàòîðå while).

Ïðèçíàåìñÿ, ÷òî ìû ìîãëè áû ïîëó÷èòü òîò æå ðåçóëüòàò, çàìåíèâ äâà îïåðàòîðà óâåëè÷åíèÿ ñëåäóþùèìè îïåðàòîðàìè ïðèñâàèâàíèÿ.
Super = super + 1, ultra = ultra + 1,
Äàííûå îïåðàòîðû âûãëÿäÿò äîñòàòî÷íî ïðîñòûìè.  ñâÿçè ñ ýòèì âîçíèêàåò âîïðîñ, çà÷åì íóæåí åùå îäèí äîïîëíèòåëüíûé îïåðàòîð, íå ãîâîðÿ óæå î äâóõ, äà åùå â ñîêðàùåííîé ôîðìå?
Âî-ïåðâûõ, êîìïàêòíàÿ ôîðìà äåëàåò âàøè ïðîãðàììû áîëåå èçÿùíûìè è ëåãêèìè äëÿ ïîíèìàíèÿ. Ýòè îïåðàöèè ïðèäàþò èì áëåñê, ÷òî ïðèÿòíî ñàìî ïî ñåáå.
Íàïðèìåð, ìû ìîæåì ïåðåïèñàòü ÷àñòü ïðîãðàììû "ðàçìåð îáóâè2" ñëåäóþùèì îáðàçîì.
Size = 3.0;
While(size < 18.5) {foot = SCALE*size + OFFSET;printf("%10.1f %20.2f äþéìîâ\n", size, foot);++size;}.
Ïðè ýòîì ñïîñîáå ìû åùå íå âîñïîëüçîâàëèñü âñåìè ïðåèìóùåñòâàìè îïåðàöèè óâåëè÷åíèÿ. Ìû ìîæåì ñîêðàòèòü äàííûé ôðàãìåíò òàê.
Size = 2.0;while(++size < 18.5) {
Foot = SCALE *size + OFFSET;
Printf( %10.1f %20.2f äþéìà\n" , size, foot);
}
Çäåñü ìû îáúåäèíèëè â îäíîì âûðàæåíèè îïåðàöèþ óâåëè÷åíèÿ ïåðåìåííîé íà 1 è ïðîâåðêó èñòèííîñòè óñëîâèÿ â îïåðàöèè while. Ïîäîáíîãî òèïà êîíñòðóêöèÿ íàñòîëüêî ÷àñòî âñòðå÷àåòñÿ â ÿçûêå Ñè, ÷òî çàñëóæèâàåò áîëåå ïîäðîáíîãî ðàññìîòðåíèÿ. Âî-ïåðâûõ, êàê îíà ðàáîòàåò. Î÷åíü ïðîñòî çíà÷åíèå ïåðåìåííîé size óâåëè÷èâàåòñÿ íà åäèíèöó, à çàòåì ñðàâíèâàåòñÿ ñ 18.5. Åñëè îíî ìåíüøå, òî âûïîëíÿþòñÿ îïåðàòîðû, çàêëþ÷åííûå â ôèãóðíûå ñêîáêè. Ïîñëå ýòîãî ïåðåìåííàÿ size óâåëè÷èâàåòñÿ íà åäèíèöó îäèí ðàç è ò. ä. Äàííûé öèêë ïîâòîðÿåòñÿ äî òåõ ïîð, ïîêà çíà÷åíèå ïåðåìåííîé size íå ñòàíåò ñëèøêîì áîëüøèì. Ìû èçìåíèëè çíà÷åíèå ïåðåìåííîé size ñ 3.0 íà 2.0, ÷òîáû ñêîìïåíñèðîâàòü óâåëè÷åíèå ïåðåìåííîé size ïåðåä åå ïåðâîíà÷àëüíûì èñïîëüçîâàíèåì äëÿ âû÷èñëåíèÿ ïåðåìåííîé foot.
ÐÈÑ. 5.4. Âûïîëíåíèå îäíîãî øàãà öèêëà.
Âî-ïåðâûõ, ÷åì íàñ ïðèâëåêàåò ýòîò ñïîñîá? Ñâîåé êîìïàêòíîñòüþ. Êðîìå òîãî (÷òî åùå áîëåå âàæíî), ñ åãî ïîìîùüþ ìîæíî îáúåäèíèòü â îäíîì âûðàæåíèè äâà ïðîöåññà, óïðàâëÿþùèå öèêëîì. Ïåðâûé ïðîöåññ - ýòî ïðîâåðêà, ìîæíî ïðîäîëæàòü èëè íåò?  äàííîì ñëó÷àå ïðîâåðÿåòñÿ, ìåíüøå ëè ðàçìåð îáóâè 18.5. Âòîðîé ïðîöåññ çàêëþ÷àåòñÿ â èçìåíåíèè ïåðåìåííîé, çíà÷åíèå êîòîðîé ïðîâåðÿåòñÿ, - â äàííîì ñëó÷àå ðàçìåð îáóâè óâåëè÷èâàåòñÿ íà 1. Ïðåäïîëîæèì, ìû çàáûëè èçìåíèòü åå çíà÷åíèå. Òîãäà ïåðåìåííàÿ size âñåãäà áóäåò ìåíüøå 18.5, è âûïîëíåíèå öèêëà íèêîãäà íå çàêîí÷èòñÿ. Ïðè âûïîëíåíèè ïðîãðàììû êîìïüþòåð, "ïîéìàííûé â áåñêîíå÷íûé öèêë", áóäåò âûâîäèòü íà ïå÷àòü îäíó çà äðóãîé èäåíòè÷íûå ñòðîêè.  êîíöå êîíöîâ âû ìîæåòå ïîòåðÿòü èíòåðåñ, îæèäàÿ ðåçóëüòàòîâ, è äîëæíû áóäåòå êàêèì-òî îáðàçîì ïðåêðàòèòü âûïîëíåíèå ïðîãðàììû. Íàëè÷èå ïðîâåðêè è èçìåíåíèÿ ïàðàìåòðà öèêëà â îäíîì âûðàæåíèè ïîìîãàåò ïðîãðàììèñòàì íå çàáûâàòü ââîäèòü â ïðîãðàììó êîððåêöèþ ïàðàìåòðà öèêëà.
Äîïîëíèòåëüíîå ïðåèìóùåñòâî èñïîëüçîâàíèÿ îïåðàöèè óâåëè÷åíèÿ çàêëþ÷àåòñÿ â òîì, ÷òî îáû÷íî â ðåçóëüòàòå êîìïèëÿöèè ïîëó÷àåòñÿ íåñêîëüêî áîëåå ýôôåêòèâíûé îáúåêòíûé êîä, ïîñêîëüêó îíà èäåíòè÷íà ñîîòâåòñòâóþùåé ìàøèííîé êîìàíäå.
È, íàêîíåö, ýòè îïåðàöèè èìåþò åùå îäíó îñîáåííîñòü, êîòîðóþ ìîæíî èñïîëüçîâàòü â ðÿäå çàòðóäíèòåëüíûõ ñèòóàöèé. ×òîáû óçíàòü, ÷òî ýòî çà îñîáåííîñòü, ïîïðîáóéòå âûïîëíèòü ñëåäóþùóþ ïðîãðàììó:
Main( ).
{
Int a = 1, b = 1;
Int aplus, plusb;
Aplus = a++; /* ïîñòôèêñíàÿôîðìà*/
Plusb = ++b; /* ïðåôèêñíàÿôîðìà*/
Printf(" a aplus b plusb \n");
Printf("%5d %5d %5d %5d\n", a, aplus, b, plusb);
}
Åñëè âû âñå ñäåëàëè ïðàâèëüíî, òî, íàñêîëüêî ìû ïîìíèì, â êà÷åñòâå ðåçóëüòàòà âû äîëæíû ïîëó÷èòü ñëåäóþùèå ñòðîêè.
À aplus b plusb.
2 1 2 2.
Êàê è ïðåäïîëàãàëîñü, çíà÷åíèÿ îáåèõ ïåðåìåííûõ, à è b, óâåëè÷èëèñü íà 1. Îäíàêî ïåðåìåííîé aplus çíà÷åíèå à áûëî ïðèñâîåíî ïåðåä èçìåíåíèåì à, â òî âðåìÿ êàê ïåðåìåííîé plusb çíà÷åíèå b áûëî ïðèñâîåíî ïîñëå èçìåíåíèÿ b.  ýòîì è çàêëþ÷àåòñÿ ðàçíèöà ìåæäó ïðåôèêñíîé è ïîñòôèêñíîé ôîðìàìè.
Aplus = à++ - ïîñòôèêñ: ïåðåìåííàÿ à èçìåíÿåòñÿ ïîñëå òîãî êàê åå çíà÷åíèå èñïîëüçóåòñÿ.
Plusb = ++b - ïðåôèêñ: ïåðåìåííàÿ b èçìåíÿåòñÿ ïåðåä òåì êàê åå çíà÷åíèå èñïîëüçóåòñÿ.
ÐÈÑ. 5.5. Ïðåôèêñíàÿ è ïîñòôèêñíàÿ ôîðìû.
 òåõ ñëó÷àÿõ, êîãäà îäíà èç ýòèõ îïåðàöèé óâåëè÷åíèÿ èñïîëüçóåòñÿ ñàìà ïî ñåáå, êàê, íàïðèìåð, â îïåðàòîðå ego++, íå èìååò çíà÷åíèÿ, êàêîé ôîðìîé âû ïîëüçóåòåñü. Âûáîð ïðèîáðåòàåò ñìûñë, êîãäà îïåðàöèÿ, è åå îïåðàíä ÿâëÿþòñÿ ÷àñòüþ íåêîòîðîãî "âûñøåãî" âûðàæåíèÿ, êàê, íàïðèìåð, â îïåðàòîðàõ ïðèñâàèâàíèÿ, êîòîðûå ìû òîëüêî ÷òî ðàññìàòðèâàëè.  ïîäîáíîé ñèòóàöèè íåîáõîäèìî èìåòü ïðåäñòàâëåíèå î ðåçóëüòàòå, êîòîðûé âàì õîòåëîñü áû ïîëó÷èòü. Íàïîìíèì, íàïðèìåð, ñëåäóþùèé îïåðàòîð:
While(++size < 18.5).
Ïðè åãî èñïîëüçîâàíèè ìû ïîëó÷èëè òàáëèöó ïåðåâîäà âïëîòü äî ðàçìåðà 18. Íî, åñëè áû ìû âìåñòî ýòîãî çàïèñàëè îïåðàöèþ óâåëè÷åíèÿ â âèäå size++, â òàáëèöó ïîïàë áû è ðàçìåð 19, ïîñêîëüêó çíà÷åíèå ïåðåìåííîé size óâåëè÷èâàëîñü áû ïîñëå ñðàâíåíèÿ, à íå äî ýòîãî.
Êîíå÷íî, âû ìîãëè áû èñïîëüçîâàòü ìåíåå êðàñèâûé ñïîñîá - îïåðàòîð ïðèñâàèâàíèÿ.
Size = size +1;
Òîãäà íèêòî íå ïîâåðèò âàì, ÷òî âû óìååòå ïî-íàñòîÿùåìó ïðîãðàììèðîâàòü íà ÿçûêå Ñè.
Äóìàåì, ÷òî ïðè ÷òåíèè êíèãè âû óæå îáðàòèëè âíèìàíèå íà ïðèâåäåííûå ïðèìåðû èñïîëüçîâàíèÿ îïåðàöèé óâåëè÷åíèÿ. Êàê âû äóìàåòå, ìîãëè ëè ìû âñåãäà ïîëüçîâàòüñÿ ëþáîé èç íèõ èëè âíåøíèå óñëîâèÿ äèêòîâàëè íàì êîíêðåòíûé âûáîð? Ãîâîðÿ î ïðèìåðàõ, íàì íåîáõîäèìî ïðèâåñòè åùå îäèí.
Ñïÿò ëè êîãäà-íèáóäü êîìïüþòåðû? Êîíå÷íî, ñïÿò, íî îíè îáû÷íî íå ðàññêàçûâàþò íàì îá ýòîì. Ïðîãðàììà, ïðèâåäåííàÿ íèæå ïîêàçûâàåò, ÷òî ïðîèñõîäèò â äåéñòâèòåëüíîñòè.
/* îâöû */
#define MAX 40.
Main( ).
{
int count = 0,
Printf(" ß ñ÷èòàþ îâåö, ÷òîáû óñíóòü \n");
While(++ count < MAX).
Printf(" %d ìèëëèîíîâ îâåö, à ÿ åùå íå óñíóë \n", count);
Printf(" %d ìèëëèîíîâ îâåö, à ÿ õð-ð-ð ð \n" , count);
}
Ïîïðîáóéòå âûïîëíèòü åå è ïîñìîòðèòå, ðàáîòàåò ëè îíà òàê, êàê äîëæíà ïî âàøåìó ìíåíèþ. Êîíå÷íî, çíà÷åíèå êîíñòàíòû ÌÀÕ äëÿ âàøåãî êîìïüþòåðà ìîæíî âçÿòü äðóãèì. (Êñòàòè, ÷òî ïðîèçîéäåò ïðè çàìåíå ïðåôèêñíîé ôîðìû îïåðàöèè óâåëè÷åíèÿ ïîñòôèêñíîé ôîðìîé?).
Îïåðàöèÿ óìåíüøåíèÿ: --
Êàæäîé îïåðàöèè óâåëè÷åíèÿ ñîîòâåòñòâóåò íåêîòîðàÿ îïåðàöèÿ óìåíüøåíèÿ, ïðè ýòîì âìåñòî ñèìâîëîâ ++ ìû èñïîëüçóåì --
-- count, /* ïðåôèêñíàÿ ôîðìà îïåðàöèè óìåíüøåíèÿ */
Count --, /* ïîñòôèêñíàÿ ôîðìà îïåðàöèè óìåíüøåíèÿ */
Íèæå ïðèâîäèòñÿ ïðèìåð, èëëþñòðèðóþùèé, êàê ìàøèíû ìîãóò áûòü çàêîí÷åííûìè ëèðèêàìè.
/* áóòûëêè*/
#define MAX 100.
Main( ).
{
Int count = MAX + 1;
While(-- count > 0).
{
printf(" %d áóòûëîê ïèâà íà ïîëêå, %d áóòûëîê ïèâà!\n", count, count);
printf(" Ñíèìè îäíó è ïóñòè åå ïî êðóãó, \n");
printf("%d áóòûëîê ïèâà! \n \n", count-1); }}.
Íà÷àëüíûå ðåçóëüòàòû âûãëÿäÿò òàê:
100 áóòûëîê ïèâà íà ïîëêå, 100 áóòûëîê ïèâà!
Ñíèìè îäíó è ïóñòè åå ïî êðóãó,
99 áóòûëîê ïèâà!
99 áóòûëîê ïèâà íà ïîëêå, 99 áóòûëîê ïèâà!
Ñíèìè îäíó è ïóñòè åå ïî êðóãó,98 áóòûëîê ïèâà!
Ïîñòåïåííî êîëè÷åñòâî áóòûëîê ñõîäèò íà íåò, è ïðîãðàììà çàâåðøèò ñâîþ ðàáîòó ñëåäóþùèì îáðàçîì.
1 áóòûëîê ïèâà íà ïîëêå, 1 áóòûëîê ïèâà!
Ñíèìè îäíó è ïóñòè åå ïî êðóãó,
0 áóòûëîê ïèâà!
Ïî-âèäèìîìó, ó íàøåãî çàêîí÷åííîãî ëèðèêà èìåþòñÿ òðóäíîñòè ñî ñêëîíåíèåì ñóùåñòâèòåëüíûõ ñ êîëè÷åñòâåííûìè ÷èñëèòåëüíûìè, íî ýòî ìîæíî óñòðàíèòü, èñïîëüçóÿ óñëîâíûå îïåðàòîðû, ïîêàçûâàåìûå â ãë. 7. Íåîáõîäèìî çàìåòèòü, ÷òî ñìûñë îïåðàöèè > ñëîâàìè âûðàæàåòñÿ êàê "áîëüøå". Òàê æå êàê è îïåðàöèÿ <, îíà ÿâëÿåòñÿ "îïåðàöèåé îòíîøåíèÿ". Ïîäðîáíåå îïåðàöèè îòíîøåíèÿ ìû ðàññìîòðèì âíèçó.
Ñòàðøèíñòâî îïåðàöèé.
 ñîîòâåòñòâèè ñ ïðèíÿòûì â ÿçûêå Ñè ïîðÿäêîì âû÷èñëåíèé îïåðàöèè óâåëè÷åíèÿ è óìåíüøåíèÿ èìåþò î÷åíü âûñîêèé óðîâåíü ñòàðøèíñòâà; òîëüêî êðóãëûå ñêîáêè îáëàäàþò áîëåå âûñîêèì ïðèîðèòåòîì. Ïîýòîìó âûðàæåíèå x*y++ îçíà÷àåò (x)*(y++), à íå (x*y)++, ÷òî î÷åíü óäîáíî, ïîñêîëüêó ïîñëåäíåå âûðàæåíèå ñìûñëà íå èìååò. (Îïåðàöèè óâåëè÷åíèÿ è óìåíüøåíèÿ ïðèìåíÿþòñÿ ê ïåðåìåííîé, â òî âðåìÿ êàê ïðîèçâåäåíèå õ*ó ñàìî ïî ñåáå íå ÿâëÿåòñÿ ïåðåìåííîé â îòëè÷èå îò ñîìíîæèòåëåé).
Íå ïóòàéòå òîëüêî ñòàðøèíñòâî ýòèõ îïåðàöèé ñ ïîðÿäêîì âû÷èñëåíèé. Ïðåäïîëîæèì, ó íàñ åñòü ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ:
Y = 2;
N = 3;
Nextnum = (ó + n ++ )*6;
Êàêîå çíà÷åíèå ïðèìåò ïåðåìåííàÿ nextnum? Ïîäñòàâëÿÿ â âûðàæåíèå ñîîòâåòñòâóþùèå çíà÷åíèÿ, ïîëó÷àåì.
Nextnum = (2 + 3)*6= 5*6 = 30.
Òîëüêî ïîñëå òîãî êàê âûðàæåíèå âû÷èñëåíî, çíà÷åíèå ïåðåìåííîé n óâåëè÷èâàåòñÿ äî 4. Ñòàðøèíñòâî îïåðàöèé ãîâîðèò, ÷òî îïåðàöèÿ ++ èìååò îòíîøåíèå òîëüêî ê n; êðîìå òîãî, îíî óêàçûâàåò, êîãäà çíà÷åíèå ïåðåìåííîé n èñïîëüçóåòñÿ ïðè âû÷èñëåíèè âûðàæåíèÿ, íî ìîìåíò èçìåíåíèÿ çíà÷åíèÿ n îïðåäåëÿåòñÿ ñåìàíòèêîé äàííîé îïåðàöèè.
Íå áóäüòå ñëèøêîì óìíûìè.
Âû ìîæåòå ïîïàñòü â ãëóïîå ïîëîæåíèå, åñëè ïîïûòàåòåñü èñïîëüçîâàòü îïåðàöèþ óâåëè÷åíèÿ â íåïîäõîäÿùèõ ñëó÷àÿõ. Íàïðèìåð, âû ìîãëè áû çàõîòåòü óëó÷øèòü íàøó ïðîãðàììó âûâîäà íà ïå÷àòü öåëûõ ÷èñåë è èõ êâàäðàòîâ, çàìåíèâ èìåþùèéñÿ òàì öèêë while ñëåäóþùåé êîíñòðóêöèåé :
While (num < 21).
{
Printf("%10d %10d\n", num*num++);
}
Ýòà ìîäèôèêàöèÿ âûãëÿäèò ðàçóìíîé. Ìû ïå÷àòàåì ÷èñëî num, óìíîæàåì åãî ñàìî íà ñåáÿ, ÷òîáû ïîëó÷èòü åãî êâàäðàò, à çàòåì óâåëè÷èâàåì çíà÷åíèå num íà åäèíèöó. Íà íåêîòîðûõ ìàøèíàõ ýòà ïðîãðàììà äàæå ìîæåò ðàáîòàòü. Íî íå íà âñåõ. Ïðîáëåìà ñîñòîèò â òîì, ÷òî ïðè âûïîëíåíèè ôóíêöèè printf(), êîãäà îïðåäåëÿþòñÿ ïå÷àòàåìûå çíà÷åíèÿ, âû÷èñëåíèå ïîñëåäíåãî àðãóìåíòà ìîæåò âûïîëíèòüñÿ ñíà÷àëà, è ïðèðàùåíèå ïåðåìåííîé n ïðîèçîéäåò äî òîãî, êàê áóäåò îïðåäåëåí ïåðâûé àðãóìåíò. Ïîýòîìó, âìåñòî, ñêàæåì, òàêîé ñòðîêè.
5.
Áóäåò íàïå÷àòàíî.
6.
Ïðàâèëà ÿçûêà Ñè ïðåäîñòàâëÿþò êîìïèëÿòîðó âîçìîæíîñòü âûáðàòü, êàêîé àðãóìåíò ôóíêöèè âû÷èñëÿòü ïåðâûì, ýòî ïîâûøàåò ýôôåêòèâíîñòü ðàáîòû êîìïèëÿòîðà, íî ìîæåò ïðèâîäèòü è ê íåêîòîðûì ïðîáëåìàì, åñëè îïåðàöèÿ óâåëè÷åíèÿ âûïîëíÿåòñÿ íàä îäíèì èç àðãóìåíòîâ ôóíêöèè.
Äðóãèì âîçìîæíûì èñòî÷íèêîì íåïðèÿòíîñòåé ñëóæèò îïåðàòîð âèäà.
Ans = num/2 + 5*(1 + num++);
Îïÿòü ïðîáëåìà çàêëþ÷àåòñÿ â òîì, ÷òî êîìïèëÿòîð ìîæåò âûïîëíÿòü äåéñòâèÿ íå â òîì ïîðÿäêå, êîòîðûé âû îæèäàëè. Âû ìîæåòå ñ÷èòàòü, íàïðèìåð, ÷òî ñíà÷àëà îí îïðåäåëèò çíà÷åíèå num/2, à çàòåì ïåðåéäåò ê äðóãîé ÷àñòè âûðàæåíèÿ. Íî êîìïèëÿòîð ìîæåò âû÷èñëèòü ñíà÷àëà ïîñëåäíèé ÷ëåí, óâåëè÷èòü ïåðåìåííîþ num, à çàòåì èñïîëüçîâàòü íîâîå çíà÷åíèå ïðè íàõîæäåíèè num/2. Íèêàêîé ãàðàíòèè â ýòîì ñëó÷àå íå ñóùåñòâóåò.
Èçáåæàòü ýòè òðóäíîñòè äîñòàòî÷íî ïðîñòî:
1. Íå ïðèìåíÿéòå îïåðàöèè óâåëè÷åíèÿ èëè óìåíüøåíèÿ ê ïåðåìåííîé ïðèñóòñòâóþùåé â áîëåå ÷åì îäíîì àðãóìåíòå ôóíêöèè.
2. Íå ïðèìåíÿéòå îïåðàöèè óâåëè÷åíèÿ èëè óìåíüøåíèÿ ê ïåðåìåííîé, êîòîðàÿ âõîäèò â âûðàæåíèå áîëåå îäíîãî ðàçà.
ÂÛÐÀÆÅÍÈß È ÎÏÅÐÀÒÎÐÛ.
Ìû èñïîëüçîâàëè òåðìèíû "âûðàæåíèå" è "îïåðàòîð" íà ïðîòÿæåíèè âñåõ ïåðâûõ ãëàâ; òåïåðü íàñòàëî âðåìÿ èçó÷èòü èõ áîëåå ïîäðîáíî. Îïåðàòîðû ñëóæàò îñíîâíûìè ýëåìåíòàìè, èç êîòîðûõ ñòðîèòñÿ ïðîãðàììà íà ÿçûêå Ñè; áîëüøèíñòâî æå îïåðàòîðîâ ñîñîñòîèò èç âûðàæåíèé. Èñõîäÿ èç ýòîãî, âíà÷àëå ðàçóìíî ðàññìîòðåòü âûðàæåíèÿ, ÷òî ìû è ñäåëàåì.
Âûðàæåíèÿ.
Âûðàæåíèå ïðåäñòàâëÿåò ñîáîé îáúåäèíåíèå îïåðàöèé è îïåðàíäîâ. (Íàïîìíèì, ÷òî îïåðàíäîì íàçûâàåòñÿ òî, íàä ÷åì âûïîëíÿåòñÿ îïåðàöèÿ.) Ïðîñòåéøåå âûðàæåíèå ñîñòîèò èç îäíîãî îïåðàíäà, îòòàëêèâàÿñü îò íåãî, âû ìîæåòå ñòðîèòü áîëåå ñëîæíûå êîíñòðóêöèè. Ïðèâåäåì íåñêîëüêî âûðàæåíèé.
4.
-64+21.
A*(b + c/d)/20.
Q = 5*2.
Õ = ++q % 3 q > 3.
Íåòðóäíî çàìåòèòü, ÷òî îïåðàíäû ìîãóò áûòü êîíñòàíòàìè, ïåðåìåííûìè èëè èõ ñî÷åòàíèÿìè. Íåêîòîðûå âûðàæåíèÿ ñîñòîÿò èç ìåíüøèõ âûðàæåíèé, êîòîðûå ìû ìîæåì íàçâàòü ïîäâûðàæåíèÿìè. Íàïðèìåð, ñ/d - ýòî ïîäâûðàæåíèå â íàøåì ÷åòâåðòîì ïðèìåðå.
Âàæíûì ñâîéñòâîì ÿçûêà Ñè ÿâëÿåòñÿ òî, ÷òî êàæäîå âûðàæåíèå â Ñè èìååò çíà÷åíèå. ×òîáû îïðåäåëèòü ýòî çíà÷åíèå, ìû âûïîëíÿåì îïåðàöèè â ïîðÿäêå, îïðåäåëÿåìîì óðîâíÿìè ñòàðøèíñòâà. Çíà÷åíèÿ ïåðâûõ íåñêîëüêèõ âûðàæåíèé î÷åâèäíû, íî ÷òî ìîæíî ñêàçàòü îòíîñèòåëüíî âûðàæåíèé ñî çíàêîì = ? Îíè ïðîñòî èìåþò òå æå çíà÷åíèÿ, ÷òî è ïåðåìåííàÿ, ñòîÿùàÿ ñëåâà îò çíàêà =. Ýòà ïåðåìåííàÿ ïîëó÷àåò åãî â ðåçóëüòàòå âû÷èñëåíèÿ âûðàæåíèÿ, ñòîÿùåãî ñïðàâà îò çíàêà. À âûðàæåíèå q > 0? Ïîäîáíîå âûðàæåíèå, ñâÿçàííîå ñ îïåðàöèåé îòíîøåíèÿ, èìååò çíà÷åíèå 1, åñëè îíî èñòèííî, è 0, åñëè îíî ëîæíî. Ïðèâåäåì íåñêîëüêî âûðàæåíèè è èõ çíà÷åíèÿ.
Âûðàæåíèå Çíà÷åíèå.
-4+6 2.
Ñ = 3 + 8 11.
5 > 3 1.
6 + (ñ = 3 + 8) 17.
Ïîñëåäíèé ïðèìåð âûãëÿäèò äîâîëüíî ñòðàííî. Íî îí ïîëíîñòüþ ñîîòâåòñòâóåò ïðàâèëàì ÿçûêà Ñè, ïîñêîëüêó äàííîå âûðàæåíèå ïðåäñòàâëÿåò ñîáîé ñóììó äâóõ ïîäâûðàæåíèè, êàæäîå èç êîòîðûõ èìååò çíà÷åíèå.
Îïåðàòîðû.
Îïåðàòîðû ñëóæàò îñíîâíûìè ñòðîèòåëüíûìè áëîêàìè ïðîãðàììû. Ïðîãðàììà ñîñòîèò èç ïîñëåäîâàòåëüíîñòè îïåðàòîðîâ ñ äîáàâëåíèåì íåáîëüøîãî êîëè÷åñòâà çíàêîâ ïóíêòóàöèè. Îïåðàòîð ÿâëÿåòñÿ çàêîí÷åííîé èíñòðóêöèåé äëÿ êîìïüþòåðà.  ÿçûêå Ñè óêàçàíèåì íà íàëè÷èå îïåðàòîðà ñëóæèò ñèìâîë "òî÷êà ñ çàïÿòîé", ñòîÿùèé â êîíöå íåãî. Ïîýòîìó.
Legs = 4.
Ýòî âñåãî ëèøü âûðàæåíèå (êîòîðîå ìîæåò áûòü ÷àñòüþ áîëüøåãî âûðàæåíèÿ), íî.
Legs = 4;
ßâëÿåòñÿ îïåðàòîðîì. ×òî äåëàåò èíñòðóêöèþ çàêîí÷åííîé? Îíà äîëæíà âûïîëíÿòü íåêîòîðîå äåéñòâèå ïîëíîñòüþ. Âûðàæåíèå.
2 + 2.
Íå ÿâëÿåòñÿ çàêîí÷åííîé èíñòðóêöèåé, à ñëóæèò óêàçàíèåì êîìïüþòåðó ñëîæèòü 2 è 2, íî íå ãîâîðèò, ÷òî äåëàòü ñ ðåçóëüòàòîì.
Kids = 2 + 2;
Ñëóæèò óêàçàíèåì êîìïèëÿòîðó (à çàòåì êîìïüþòåðó) ïîìåñòèòü ðåçóëüòàò (4) â ÿ÷åéêó ïàìÿòè, ïîìå÷åííóþ èìåíåì kids. Ïîñëå çàïèñè â ïàìÿòü ÷èñëà 4 êîìïüþòåð ìîæåò ïðèñòóïèòü ê âûïîëíåíèþ ñëåäóþùèõ äåéñòâèé.
Äî ñèõ ïîð ìû ïîçíàêîìèëèñü ñ ÷åòûðüìÿ òèïàìè îïåðàòîðîâ. Äàëåå ïðèâîäèòñÿ êðàòêèé ïðèìåð, â êîòîðîì èñïîëüçóþòñÿ âñå ÷åòûðå òèïà.
/ * ñóììà */
Main( ) /* íàõîæäåíèå ñóììû ïåðâûõ 20 öåëûõ ÷èñåë */
{
Int count, sum; /* îïåðàòîð îïèñàíèÿ */
Count = 0; /* îïåðàòîð ïðèñâàèâàíèÿ */
sum = 0; /* òî æå ñàìîå */
while(count++ < 20) /* while */
sum = sum + count; /* îïåðàòîð*/
Printf (" sum = %d\n" , sum); /* âûçîâôóíêöèè*/
}
Äàâàéòå îáñóäèì ýòîò ïðèìåð. Ê äàííîìó ìîìåíòó îïåðàòîð îïèñàíèÿ äîëæåí áûòü âàì óæå äîâîëüíî õîðîøî çíàêîì. Òåì íå ìåíåå ìû íàïîìíèì, ÷òî ñ åãî ïîìîùüþ îïðåäåëÿþòñÿ èìåíà è òèïû ïåðåìåííûõ è èì îòâîäÿòñÿ ÿ÷åéêè ïàìÿòè.
Îïåðàòîð ïðèñâàèâàíèÿ - ýòî îñíîâíàÿ ðàáî÷àÿ ñèëà áîëüøèíñòâà ïðîãðàìì ñ åãî ïîìîùüþ ïåðåìåííîé ïðèñâàèâàåòñÿ íåêîòîðîå çíà÷åíèå. Îí ñîñòîèò èç èìåíè ïåðåìåííîé, çà êîòîðûì ñëåäóåò çíàê îïåðàöèè ïðèñâàèâàíèÿ (=), à çàòåì âûðàæåíèå, îêàí÷èâàþùååñÿ ñèìâîëîì "òî÷êà ñ çàïÿòîé". Îòìåòèì, ÷òî îïåðàòîð while âêëþ÷àåò â ñåáÿ îïåðàòîð ïðèñâàèâàíèÿ. Îïåðàòîð âûçîâà ôóíêöèè ïðèâîäèò ê âûïîëíåíèþ ïîñëåäîâàòåëüíîñòè îïåðàòîðîâ, îáðàçóþùèõ òåëî ôóíêöèè.  íàøåì ïðèìåðå ôóíêöèÿ printf( ) âûçûâàåòñÿ äëÿ òîãî, ÷òîáû âûâåñòè íà ïå÷àòü ðåçóëüòàòû ðàáîòû ïðîãðàììû.
Îïåðàòîð while ñîñòîèò èç òðåõ ðàçëè÷íûõ ÷àñòåé: ýòî êëþ÷åâîå ñëîâî while, çàòåì ïðîâåðÿåìîå óñëîâèå, çàêëþ÷åííîå â êðóãëûå ñêîáêè, è, íàêîíåö, îïåðàòîð, êîòîðûé âûïîëíÿåòñÿ â òîì ñëó÷àå åñëè óñëîâèå èñòèííî. Òåëî öèêëà ñîñòîèò èç îäíîãî îïåðàòîðà. Îí ìîæåò áûòü ïðîñòûì, êàê â äàííîì ïðèìåðå (ïðè÷åì â ýòîì ñëó÷àå íå òðåáóåòñÿ çàêëþ÷àòü åãî â ôèãóðíûå ñêîáêè), èëè ñîñòàâíûì êàê â íåêîòîðûõ ïðåäûäóùèõ ïðèìåðàõ (òîãäà ôèãóðíûå ñêîáêè àáñîëþòíî íåîáõîäèìû). Âû ñìîæåòå ïðî÷åñòü î ñîñòàâíûõ îïåðàòîðàõ ÷óòü ïîçæå.
ÐÈÑ. 5.6. Ñòðóêòóðà ïðîñòîãî öèêëà while.
Îïåðàòîð while ïðèíàäëåæèò ê êëàññó îïåðàòîðîâ, èíîãäà íàçûâàåìûõ "ñòðóêòóðèðîâàííûìè îïåðàòîðàìè", ïîñêîëüêó îíè îáëàäàþò ñòðóêòóðîé áîëåå ñëîæíîé, ÷åì ñòðóêòóðà ïðîñòîãî îïåðàòîðà ïðèñâàèâàíèÿ.  ñëåäóþùèõ ãëàâàõ ìû ïîçíàêîìèìñÿ ñ äðóãèìè òèïàìè ñòðóêòóðèðîâàííûõ îïåðàòîðîâ.
Ñîñòàâíûå îïåðàòîðû (áëîêè).
"Ñîñòàâíîé îïåðàòîð" ïðåäñòàâëÿåò ñîáîé äâà èëè áîëåå îïåðàòîðîâ, îáúåäèíåííûõ ñ ïîìîùüþ ôèãóðíûõ ñêîáîê; îí íàçûâàåòñÿ òàêæå "áëîêîì".  íàøåé ïðîãðàììå ðàçìåð îáóâè 2 ìû èñïîëüçîâàëè òàêîé îïåðàòîð, ÷òîáû èìåòü âîçìîæíîñòü âêëþ÷èòü â îïåðàòîð while íåñêîëüêî ïðîñòûõ îïåðàòîðîâ. Ñðàâíèòå ìåæäó ñîáîé ôðàãìåíòû ïðîãðàììû:
/* ôðàãìåíò1 */
Index = 0;
While (index ++ < 10) sam = 10 * index + 2;
Printf(" sam = %d\n", sam);
/* ôðàãìåíò2*/
Index = 0;
While(index ++ < 10) {
Sam = 10*index + 2;
Printf(" sam = %d\n", sam);
}
 ôðàãìåíòå 1 â öèêë while âêëþ÷åí òîëüêî îïåðàòîð ïðèñâàèâàíèÿ. (Ïðè îòñóòñòâèè ôèãóðíûõ ñêîáîê îáëàñòü äåéñòâèÿ îïåðàòîðà while ðàñïðîñòðàíÿåòñÿ îò êëþ÷åâîãî ñëîâà while äî ñëåäóþùåãî ñèìâîëà "òî÷êà ñ çàïÿòîé".) Ïå÷àòü äàííûõ áóäåò ïðîèçâåäåíà òîëüêî îäèí ðàç - ïîñëå çàâåðøåíèÿ öèêëà.
 ôðàãìåíòå 2 íàëè÷èå ôèãóðíûõ ñêîáîê ãàðàíòèðóåò, ÷òî îáà îïåðàòîðà ÿâëÿþòñÿ ÷àñòüþ öèêëà while, è ïå÷àòü ðåçóëüòàòîâ áóäåò èçâîäèòüñÿ íà êàæäîì øàãå ðàáîòû öèêëà. Âåñü ñîñòàâíîé îïåðàòîð ðàññìàòðèâàåòñÿ êàê îäèí îïåðàòîð, ÿâëÿþùèéñÿ ñîñòàâíîé ÷àñòüþ îïåðàòîðà while.

ÐÈÑ. 5.7. Öèêë while ñ ñîñòàâíûì îïåðàòîðîì.
Äàâàéòå îïÿòü ïîñìîòðèì íà ôðàãìåíòû, ñîäåðæàùèå öèêë while, è îáðàòèì âíèìàíèå íà òî, êàê ìû èñïîëüçîâàëè îòñòóïû îò ïîëÿ â ñòðîêàõ äëÿ âûäåëåíèÿ òåëà öèêëîâ while. Äëÿ êîìïèëÿòîðà îòñòóïû â ñòðîêå íå èìåþò íèêàêîãî çíà÷åíèÿ; ðåøåíèÿ âîïðîñà î òîì, êàê èíòåðïðåòèðîâàòü íàøè èíñòðóêöèè, îí èñïîëüçóåò ôèãóðíûå ñêîáêè è ñâîå "çíàíèå" ïðàâèë ôîðìèðîâàíèÿ ñòðóêòóðû öèêëà while. Îòñòóïû â ñòðîêàõ ïðåäíàçíà÷åíû äëÿ íàñ, ÷òîáû ñ ïåðâîãî âçãëÿäà ìîæíî áûëî ïîíÿòü, êàê óñòðîåíà ïðîãðàììà. Ðàíåå ìû ïîêàçàëè âàì îäèí ïîïóëÿðíûé ñïîñîá ðàññòàíîâêè ôèãóðíûõ ñêîáîê, ñëóæàùèé äëÿ óêàçàíèÿ áëîêà èëè ñîñòàâíîãî îïåðàòîðà. Äðóãîé, òîæå äîâîëüíî ðàñïðîñòðàíåííûé ñïîñîá âûãëÿäèò ñëåäóþùèì îáðàçîì.
While(index++ < 10) {
sam = 10 * index + 2;
Printf(" sam = %d\n", sam);
}
Ýòîò ñïîñîá àêöåíòèðóåò âíèìàíèå íà òîì, ÷òî äàííûå îïåðàòîðû îáðàçóþò áëîê, â òî âðåìÿ êàê ñïîñîá, îáñóæäàâøèéñÿ âûøå, óêàçûâàåò íà ïðèíàäëåæíîñòü áëîêà îïåðàòîðó while. Çàìåòèì ñíîâà, ÷òî ïîñêîëüêó äåëî êàñàåòñÿ êîìïèëÿòîðà, îáå ôîðìû ÿâëÿþòñÿ àáñîëþòíî èäåíòè÷íûìè. Ïîäâîäÿ èòîãè, ñêàæåì, ïðèìåíÿéòå îòñòóïû îò ïîëÿ â ñòðîêàõ, ÷òîáû ñäåëàòü ñòðóêòóðó ïðîãðàììû íàãëÿäíîé.
Ðåçþìå: âûðàæåíèÿ è îïåðàòîðû.
Âûðàæåíèå ñîñòîèò èç îïåðàöèé è îïåðàíäîâ. Ïðèìåðàìè ïðîñòåéøèõ âûðàæåíèé ÿâëÿþòñÿ êîíñòàíòû èëè ïåðåìåííûå (îïåðàöèÿ îòñóòñòâóåò), òàêèå, êàê 22 èëè beebop. Áîëåå ñëîæíûå âûðàæåíèÿ - ýòî 55 + 22 è vap = 2*(vip + (mgx = 4 )).
Îïåðàòîð ñëóæèò êàìàíäîé êîìïüþòåðó. Îïåðàòîðû áûâàþò ïðîñòûìè è ñîñòàâíûìè. Ïðîñòûå îïåðàòîðû îêàí÷èâàþòñÿ ñèìâîëîì "òî÷êà ñ çàïÿòîé". Ïðèìåðû:
1. Îïåðàòîðû îïèñàíèÿ int toes;
2. Îïåðàòîðû ïðèñâàèâàíèÿ toes = 12;
3. Îïåðàòîðû âûçîâà ôóíêöèè printf(" %d\n", toes);
4. Óïðàâëÿþùèå îïåðàòîðû while (toes < 20) toes = toes + 2;
5. Ïóñòîé îïåðàòîð ;
Ñîñòàâíûå îïåðàòîðû, èëè áëîêè, ñîñòîÿò èç îäíîãî èëè áîëåå îïåðàòîðîâ (êîòîðûå â ñâîþ î÷åðåäü ñàìè ìîãóò áûòü ñîñòàâíûìè), çàêëþ÷åííûõ â ôèãóðíûå ñêîáêè. Îïåðàòîð while, ïðèâåäåííûé íèæå, ñîäåðæèò, íàïðèìåð, ñîñòàâíîé îïåðàòîð:
While(years < 100) {
Wisdom = wisdom + 1;
Printf(" %d %d\n" , years, wisdom);
}
ÏÐÅÎÁÐÀÇÎÂÀÍÈÅ ÒÈÏÎÂ
 îïåðàòîðàõ è âûðàæåíèÿõ, âîîáùå ãîâîðÿ, äîëæíû èñïîëüçîâàòüñÿ ïåðåìåííûå è êîíñòàíòû òîëüêî îäíîãî òèïà. Åñëè âñå æå âû ñìåøàåòå òèïû â îäíîì âûðàæåíèè, òî êîìïèëÿòîð ñ ÿçûêà Ñè íå ñ÷èòàåò ïðîãðàììó íåïðàâèëüíîé, êàê ýòî ïðîèçîøëî áû ïðè ïðîãðàììèðîâàíèè íà Ïàñêàëå. Âìåñòî ýòîãî êîìïèëÿòîð èñïîëüçóåò íàáîð ïðàâèë äëÿ àâòîìàòè÷åñêîãî ïðåîáðàçîâàíèÿ òèïîâ. Ýòî î÷åíü óäîáíî, íî ìîæåò îêàçàòüñÿ è îïàñíûì, îñîáåííî åñëè âû äîïóñòèëè ñìåøåíèå òèïîâ íå÷àÿííî. (Íàïðèìåð, ïðîãðàììà lint, ðàáîòàþùàÿ â îïåðàöèîííîé ñèñòåìå UNIX, ïðîâåðÿåò íåñîîòâåòñòâèå òèïîâ.) Íàì ïðåäñòàâëÿåòñÿ ðàçóìíûì ïðèâåñòè íåñêîëüêî îñíîâíûõ ïðàâèë, êàñàþùèõñÿ ïðåîáðàçîâàíèÿ òèïîâ:
1. Åñëè îïåðàöèÿ âûïîëíÿåòñÿ íàä äàííûìè äâóõ ðàçëè÷íûõ òèïîâ, îáå âåëè÷èíû ïðèâîäÿòñÿ ê "âûñøåìó" èç äâóõ òèïîâ. Ýòîò ïðîöåññ íàçûâàåòñÿ "ïîâûøåíèåì" òèïà.
2. Ïîñëåäîâàòåëüíîñòü èìåí òèïîâ, óïîðÿäî÷åííûõ îò "âûñøåãî" ê "íèçøåìó", âûãëÿäèò òàê: double, float, long, int, short è char. Ïðèìåíåíèå êëþ÷åâîãî ñëîâà unsigned ïîâûøàåò ðàíã ñîîòâåòñòâóþùåãî òèïà äàííûõ ñî çíàêîì.
3.  îïåðàòîðå ïðèñâàèâàíèÿ êîíå÷íûé ðåçóëüòàò âû÷èñëåíèÿ âûðàæåíèÿ â ïðàâîé ÷àñòè ïðèâîäèòñÿ ê òèïó ïåðåìåííîé, êîòîðîé äîëæíî áûòü ïðèñâîåíî ýòî çíà÷åíèå. Äàííûé ïðîöåññ ìîæåò ïðèâåñòè ê "ïîâûøåíèþ" òèïà, êàê îïèñàíî âûøå, èëè ê "ïîíèæåíèþ, ïðè êîòîðîì âåëè÷èíà ïðèâîäèòñÿ ê òèïó äàííûõ, èìåþùåìó áîëåå íèçêèé ïðèîðèòåò.
Ïîâûøåíèå" òèïà îáû÷íî ïðîèñõîäèò ãëàäêî, â òî âðåìÿ êàê ïîíèæåíèå" ìîæåò ïðèâåñòè ê çàòðóäíåíèÿì. Ïðè÷èíà ýòîãî ïðîñòà: âñå ÷èñëî öåëèêîì ìîæåò íå ïîìåñòèòüñÿ â ýëåìåíòå äàííûõ íèçøåãî òèïà. Ïåðåìåííàÿ òèïà char ìîæåò èìåòü öåëîå çíà÷åíèå 101, íî íå 22334. Ïðèìåð, ïðèâåäåííûé íèæå, èëëþñòðèðóåò ïðèìåíåíèå ýòèõ ïðàâèë.
/* Ïðåîáðàçîâàíèÿ*/
Main().
{
Char ch;
Int i;
Float fl;
Fl = i = ch = 'À'; /* ñòðîêà8 */
Printf(" ch = %c, i = %d, fl = %2.2f\n", ch, i, fl);
Ch = ch + 1; /* ñòðîêà10 */
I = fl + 2*ch; /* ñòðîêà11 */
Fl = 2.0*ch + 1; /* ñòðîêà12*/
Printf(" ch = %c, i = %d, fl = %2.2f\n", ch, i, fl);ch = 2.0e30; /* ñòðîêà 14 */
Printf(" Òåïåðü ch = %ñ \n" , ch);
}
Âûïîëíèâ ïðîãðàììó "ïðåîáðàçîâàíèÿ", ïîëó÷èì ñëåäóþùèå ðåçóëüòàòû:
Ch =A, i = 65, fl = 65.00.
Ch =B, i = 197, fl = 329.00.
Òåïåðü ch =
Âîò ÷òî ïðîèñõîäèò â ïðîãðàììå.
Ñòðîêè 8 è 9: Âåëè÷èíà ' À' ïðèñâàèâàåòñÿ ñèìâîëüíîé ïåðåìåííîé ch. Ïåðåìåííàÿ i ïîëó÷àåò öåëîå çíà÷åíèå, ÿâëÿþùååñÿ ïðåîáðàçîâàíèåì ñèìâîëà ' À' â öåëîå ÷èñëî, ò. å ' 65'. È íàêîíåö, ïåðåìåí íàÿ fl ïîëó÷àåò çíà÷åíèå 65.00, ÿâëÿþùååñÿ ïðåîáðàçîâàíèåì ÷èñëà 65 â ÷èñëî ñ ïëàâàþùåé òî÷êîé.
Ñòðîêè 10 è 13: Çíà÷åíèå ñèìâîëüíîé ïåðåìåííîé 'À' ïðåîáðàçóåòñÿ â öåëîå ÷èñëî 65, ê êîòîðîìó çàòåì äîáàâëÿåòñÿ 1. Ïîñëå ýòîãî ïîëó÷èâøååñÿ â ðåçóëüòàòå ÷èñëî 66 ïðåîáðàçóåòñÿ â êîä ñèìâîëà  è ïîìåùàåòñÿ â ïåðåìåííóþ ch.
Ñòðîêè 11 è 13. Ïðè óìíîæåíèè íà 2 çíà÷åíèå ïåðåìåííîé ch ïðåîáðàçóåòñÿ â öåëîå ÷èñëî (66). Ïðè ñëîæåíèè ñ âåëè÷èíîé ïåðåìåííîé fl ïîëó÷èâøååñÿ â ðåçóëüòàòå ÷èñëî (132) ïðåîáðàçóåòñÿ â ÷èñëî ñ ïëàâàþùåé òî÷êîé. Ðåçóëüòàò (197.00) ïðåîáðàçóåòñÿ â ÷èñëî öåëîãî òèïà è ïðèñâàèâàåòñÿ ïåðåìåííîé i.
Ñòðîêè 12 è 13. Ïåðåä óìíîæåíèåì íà 2.0 çíà÷åíèå ïåðåìåííîé ch(' Â') ïðåîáðàçóåòñÿ â ÷èñëî ñ ïëàâàþùåé òî÷êîé. Ïåðåä âûïîëíåíèåì ñëîæåíèÿ âåëè÷èíà ïåðåìåííîé i(197) ïðåîáðàçóåòñÿ â ÷èñëî ñ ïëàâàþùåé òî÷êîé, à ðåçóëüòàò îïåðàöèè (329.00) ïðèñâàèâàåòñÿ ïåðåìåííîé fl.
Ñòðîêè 14 è 15: Çäåñü ïðîèçâîäèòñÿ ïîïûòêà îñóùåñòâèòü ïðåîáðàçîâàíèå òèïîâ â ïîðÿäêå óáûâàíèÿ ñòàðøèíñòâà - ïåðåìåííàÿ ch ïîëàãàåòñÿ ðàâíîé ñðàâíèòåëüíî áîëüøîìó ÷èñëó. Ðåçóëüòàòû îêàçûâàþòñÿ íåóòåøèòåëüíûìè. Íåçàâèñèìî îò ïåðåïîëíåíèÿ è óñå÷åíèÿ, êîòîðûå èìåþò ìåñòî, â èòîãå íà íàøåé ñèñòåìå ìû ïîëó÷èëè êîä, ñîîòâåòñòâóþùèé êàêîìó-òî íåïå÷àòàåìîìó çíàêó.
Íà ñàìîì äåëå ñóùåñòâóåò åùå îäèí âèä ïðåîáðàçîâàíèÿ òèïîâ. Äëÿ, ñîõðàíåíèÿ òî÷íîñòè âû÷èñëåíèé ïðè àðèôìåòè÷åñêèõ îïåðàöèÿõ âñå âåëè÷èíû òèïà float ïðåîáðàçóþòñÿ â äàííûå òèïà double. Ýòî ñóùåñòâåííî óìåíüøàåò îøèáêó îêðóãëåíèÿ. Êîíå÷íûé ðåçóëüòàò, åñòåñòâåííî, ïðåîáðàçóåòñÿ îáðàòíî â ÷èñëî òèïà float, åñëè ýòî äèêòóåòñÿ ñîîòâåòñòâóþùèì îïåðàòîðîì îïèñàíèÿ. Âàì íåò íåîáõîäèìîñòè çàáîòèòüñÿ î âûïîëíåíèè ïîäîáíûõ ïðåîáðàçîâàíèé, íî äîëæíî áûòü ïðèÿòíî ñîçíàâàòü, ÷òî êîìïèëÿòîð ñòîèò íà ñòðàæå âàøèõ èíòåðåñîâ.
Îïåðàöèÿ ïðèâåäåíèÿ.
Ñàìîå ëó÷øåå - ýòî âîîáùå èçáåãàòü ïðåîáðàçîâàíèÿ òèïîâ îñîáåííî â ïîðÿäêå óáûâàíèÿ ðàíãà. Íî èíîãäà îêàçûâàåòñÿ óäîáíûì ïðèìåíÿòü òàêèå ïðåîáðàçîâàíèÿ ïðè óñëîâèè, ÷òî âû ÿñíî ïðåäñòàâëÿåòå ñåáå ñìûñë âûïîëíÿåìûõ äåéñòâèé. Ïðåîáðàçîâàíèÿ òèïîâ, êîòîðûå ìû îáñóæäàëè äî ñèõ ïîð, âûïîëíÿëèñü àâòîìàòè÷åñêè. Êðîìå òîãî, ñóùåñòâóåò âîçìîæíîñòü òî÷íî óêàçûâàòü òèï äàííûõ, ê êîòîðîìó íåîáõîäèìî ïðèâåñòè íåêîòîðóþ âåëè÷èíó.
Ýòîò ñïîñîá íàçûâàåòñÿ "ïðèâåäåíèåì" òèïîâ è èñïîëüçóåòñÿ ñëåäóþùèì îáðàçîì: ïåðåä äàííîé âåëè÷èíîé â êðóãëûõ ñêîáêàõ çàïèñûâàåòñÿ èìÿ òðåáóåìîãî òèïà. Ñêîáêè è èìÿ òèïà âìåñòå îáðàçóþò îïåðàöèþ ïðèâåäåíèÿ".  îáùåì âèäå îíà çàïèñûâàåòñÿ òàê.
(òèï).
Ãäå ôàêòè÷åñêîå èìÿ òðåáóåìîãî òèïà ïîäñòàâëÿåòñÿ âìåñòî ñëîâà "òèï".
Ðàññìîòðèì äâå íèæåñëåäóþùèå ñòðîêè, ãäå mice - ýòî ïåðåìåííàÿ òèïà int. Âòîðàÿ ñòðîêà ñîäåðæèò äâå îïåðàöèè ïðèâåäåíèÿ.
Mice = 1.6 + 1.7;mice = (int)1.6 + (int)l.7;
 ïåðâîì ïðèìåðå èñïîëüçóåòñÿ àòîìàòè÷åñêîå ïðåîáðàçîâàíèå òèïîâ. Ñíà÷àëà ÷èñëà 1.6 è 1.7 ñêëàäûâàþòñÿ - ðåçóëüòàò ðàâåí 3.3. Çàòåì ïóòåì îòáðàñûâàíèÿ äðîáíîé ÷àñòè ïîëó÷åííîå ÷èñëî ïðåîáðàçóåòñÿ â 3 äëÿ ñîãëàñîâàíèÿ ñ òèïîì int ïåðåìåííîé mice. Âî âòîðîì ïðèìåðå 1.6 è 1.7 ïðåîáðàçóþòñÿ â öåëûå ÷èñëà 1, òàê ÷òî ïåðåìåííîé mice ïðèñâàèâàåòñÿ çíà÷åíèå, ðàâíîå 1+1, èëè 2.
Âîîáùå ãîâîðÿ, âû íå äîëæíû ñìåøèâàòü òèïû; âîò ïî÷åìó â íåêîòîðûõ ÿçûêàõ ýòî çàïðåùåíî. Íî áûâàþò ñèòóàöèè, êîãäà ýòî îêàçûâàåòñÿ ïîëåçíûì. Ôèëîñîôèÿ ÿçûêà Ñè çàêëþ÷àåòñÿ â òîì, ÷òîáû íå óñòàíàâëèâàòü áàðüåðîâ íà âàøåì ïóòè, íî ïðè ýòîì âîçëîæèòü íà âàñ âñþ îòâåòñòâåííîñòü çà çëîóïîòðåáëåíèå ïðåäîñòàâëåííîé ñâîáîäîé.
Ðåçþìå: îïåðàöèè â ÿçûêå Ñè.
Íèæå ïåðå÷èñëåíû îïåðàöèè, êîòîðûå ìû óæå îáñóäèëè.
= Ïðèñâàèâàåò âåëè÷èíó ñïðàâà îò çíàêà ïåðåìåííîé ñëåâà îò íåãî.
+ Ïðèáàâëÿåò âåëè÷èíó ñïðàâà îò çíàêà ê âåëè÷èíå ñëåâà îò íåãî.
- Âû÷èòàåò âåëè÷èíó ñïðàâà îò çíàêà èç âåëè÷èíû ñëåâà îò íåãî.
- Óíàðíàÿ îïåðàöèÿ, èçìåíÿåò çíàê âåëè÷èíû ñïðàâà îò çíàêà.
* Óìíîæàåò âåëè÷èíó ñïðàâà îò çíàêà íà âåëè÷èíó ñëåâà îò íåãî.
/ Äåëèò âåëè÷èíó ñëåâà îò çíàêà íà âåëè÷èíó ñïðàâà îò íåãî.
Ðåçóëüòàò óñåêàåòñÿ, åñëè îáà îïåðàíäà öåëûå ÷èñëà.
% Äàåò îñòàòîê ïðè äåëåíèè âåëè÷èíû ñëåâà îò çíàêà íà âåëè÷èíó.
ñïðàâà îò íåãî (òîëüêî äëÿ öåëûõ ÷èñåë).
++ Ïðèáàâëÿåò 1 ê çíà÷åíèþ ïåðåìåííîé ñëåâà îò çíàêà (ïðåôèêñíàÿ ôîðìà).
èëè ê çíà÷åíèþ ïåðåìåííîé ñïðàâà îò çíàêà (ïîñòôèêñíàÿ ôîðìà).
-- Àíàëîãè÷íàÿ îïåðàöèè ++, íî âû÷èòàåò 1.
Sizeof Äàåò ðàçìåð îïåðàíäà, ñòîÿùåãî ñïðàâà, â áàéòàõ.
Îïåðàíä ìîæåò áûòü ñïåöèôèêàöèåé òèïà, çàêëþ÷åííîãî â êðóãëûå ñêîáêè,
êàê, íàïðèìåð, sizeof (float), èëè èìåíåì êîíêðåòíîé ïåðåìåííîé,
ìàññèâà è ò. ï., íàïðèìåð sizeof foo.
(òèï) Îïåðàöèÿ ïðèâåäåíèÿ: ïðèâîäèò âåëè÷èíó, ñòîÿùóþ ñïðàâà, ê òèïó,
îïðåäåëÿåìîìó êëþ÷åâûì ñëîâîì (èëè ñëîâàìè) â ñêîáêàõ. Íàïðèìåð,
(float)9 ïðåîáðàçóåò öåëîå ÷èñëî 9 â ÷èñëî ñ.
ïëàâàþùåé òî÷êîé 9.0.
ÏÐÈÌÅÐ ÏÐÎÃÐÀÌÌÛ.
Íà ðèñ. 5.8 ïðèâåäåíà ïðîãðàììà, êîòîðàÿ ìîæåò îêàçàòüñÿ ïîëåçíîé òåì, êòî çàíèìàåòñÿ áåãîì, è êîòîðàÿ èëëþñòðèðóåò íåêîòîðûå ïîëîæåíèÿ äàííîé ãëàâû. Îíà âûãëÿäèò äîâîëüíî äëèííîé, íî âñå âû÷èñëåíèÿ â íåé âûïîëíÿþòñÿ øåñòüþ îïåðàòîðàìè, ïîìåùåííûìè â êîíöå. Áîëüøåé ÷àñòüþ ïðîãðàììà çàíèìàåòñÿ îðãàíèçàöèåé äèàëîãà ìåæäó ìàøèíîé è ïîëüçîâàòåëåì. Ìû ââåëè â ïðîãðàììó äîñòàòî÷íî áîëüøîå ÷èñëî êîììåíòàðèåâ, ÷òîáû ñäåëàòü åå ïî÷òè ñàìîäîêóìåíòèðóåìîé. Ïðîñìîòðèòå åå, à çàòåì ìû îáúÿñíèì íåêîòîðûå åå ìîìåíòû.
/* áåã */
# define SM 60 /* ÷èñëî ñåêóíä â ìèíóòå */
# define SH 3600 /* ÷èñëî ñåêóíä â ÷àñå */
# define ÌÊ 0.62137 /* ÷èñëî ìèëü â êèëîìåòðå */
Main().
{
Float distk, distm; /* äèñòàíöèÿ â êì è ìèëÿõ */
Float rate; /* ñðåäíÿÿ ñêîðîñòü â ìèëÿõ â ÷àñ */
Int min, sec; /* âðåìÿ áåãà â ìèíóòàõ è ñåêóíäàõ */
Int time; /* âðåìÿ áåãà â ñåêóíäàõ */
Float mtime; /* âðåìÿ ïðîáåãà îäíîé ìèëè â ñåêóíäàõ */
Int mmin, msec; /* âðåìÿ ïðîáåãà îäíîé ìèëè â ìèíóòàõ è ñåêóíäàõ */
Printf(" Ýòà ïðîãðàììà ïåðåñ÷èòûâàåò âàøå âðåìÿ ïðîáåãà äèñòàíöèè, âûðàæåííîé â êì, \n");
Printf(" âî âðåìÿ, òðåáóåìîå äëÿ ïðîáåãà îäíîé ìèëè, è âàøó ñðåäíþþ \n");
Printf(" ñêîðîñòü â ìèëÿõ â ÷àñ,\n");
Printf(" Óêàæèòå, ïîæàëóéñòà, äèñòàíöèþ â êèëîìåòðàõ.\n");
Scanf(" %f ", &distk);
Printf(" Ââåäèòå çàòåì âðåìÿ â ìèíóòàõ è ñåêóíäàõ. \n ");
Printf(" Íà÷íèòå ñ ââîäà ìèíóò. \n");
Scanf(" %d", &min);
Printf(" Òåïåðü ââîäèòå ñåêóíäû. \n");
Scanf(" %d", &sec);time = SM * mm + sec; /* ïåðåâîäèò âðåìÿ â ñåêóíäû */
Distm = MK * distk; /* ïåðåâîäèò êèëîìåòðû â ìèëè */
Rate = distm / time*SH; /* ÷èñëî ìèëü â ñåê * ÷èñëî.
ñåê â ÷àñ = ÷èñëî ìèëü â ÷àñ */
Mtime = (float)time / distm; /* âðåìÿ/äèñòàíöèÿ = âðåìÿ íà ìèëþ */
Mmin = (int)mtime / SM; /* íàõîäèò öåëîå ÷èñëî ìèíóò */
Msec = (int)mtime % SM; /* íàõîäèò îñòàòîê â ñåêóíäàõ */
Printf("Âû ïðîáåæàëè %1.2f KM (%1.2f ìèëè) çà %d ìèí %d ñ \n",distk, distm, mm, sec);
Printf(" Ýòà ñêîðîñòü ñîîòâåòñòâóåò ïðîáåãó ìèëè çà %d : ìèí", mmin);
Printf("%d c.\n Âàøà ñðåäíÿÿ ñêîðîñòü %l.2f ìèëü/÷ \n", msec, rate);
}
ÐÈÑ. 5. 8. Ïðîãðàììà, ïîëåçíàÿ äëÿ òåõ, êòî çàíèìàåòñÿ áåãîì.
Çäåñü ìû ïðèìåíèëè òîò æå ïîäõîä, êîòîðûé èñïîëüçîâàëè â ïðîãðàììå ñåêóíäû â ìèíóòû äëÿ ïåðåâîäà âðåìåíè, âûðàæåííîãî â ñåêóíäàõ, â ìèíóòû è ñåêóíäû. Êðîìå òîãî, íàì ïðèøëîñü âîñïîëüçîâàòüñÿ ïðåîáðàçîâàíèÿìè òèïîâ. Ïî÷åìó? Ïîòîìó ÷òî äëÿ òîé ÷àñòè ïðîãðàììû, êîòîðàÿ çàíèìàåòñÿ ïåðåâîäîì ñåêóíä â ìè íóòû, íàì òðåáóþòñÿ àðãóìåíòû öåëîãî òèïà, à ïðè ïðåîáðàçîâàíèè èç ìåòðè÷åñêîé ñèñòåìû â ìèëè èñïîëüçóþòñÿ ÷èñëà ñ ïëàâàþùåé òî÷êîé. Ìû ïðèìåíèëè îïåðàöèþ ïðèâåäåíèÿ äëÿ òîãî, ÷òîáû ñäåëàòü ýòè ïðåîáðàçîâàíèÿ ÿâíûìè.
×åñòíî ãîâîðÿ, íàøó ïðîãðàììó ìîæíî áûëî áû íàïèñàòü, èñïîëüçóÿ òîëüêî àâòîìàòè÷åñêîå ïðåîáðàçîâàíèå òèïîâ. Ìû òàê è äåëàëè, ïðèìåíÿÿ îïåðàöèþ ïðèâåäåíèÿ ïåðåìåííîé mtime ê òèïó int, ÷òîáû ïðè âû÷èñëåíèè âðåìåíè âñå îïåðàíäû áûëè öåëîãî òèïà. Îäíàêî òàêàÿ âåðñèÿ êîìïèëÿòîðà ðàáîòàåò âñåãî íà îäíîé èç äâóõ äîñòóïíûõ íàì ñèñòåì. Èñïîëüçîâàíèå îïåðàöèè ïðèâåäåíèÿ íå òîëüêî ïðîÿñíÿåò âàø çàìûñåë ÷åëîâåêó, çíàêîìÿùåìóñÿ c âàøåé ïðîãðàììîé, íî è óïðîùàåò åå êîìïèëÿöèþ.
Âîò ðåçóëüòàò ðàáîòû äàííîé ïðîãðàììû.
Ýòà ïðîãðàììà ïåðåñ÷èòûâàåò âàøå âðåìÿ ïðîáåãà äèñòàíöèè, âûðàæåííîé â êì,âî âðåìÿ, òðåáóåìîå äëÿ ïðîáåãà îäíîé ìèëè, è âàøó ñðåäíþþ ñêîðîñòü, â ìèëÿõ â ÷àñ.
Óêàæèòå, ïîæàëóéñòà äèñòàíöèþ â êèëîìåòðàõ.10,0.Ââåäèòå çàòåì âðåìÿ â ìèíóòàõ è ñåêóíäàõ.
Íà÷íèòå ñ ââîäà ìèíóò.36.Òåïåðü ââåäèòå ñåêóíäû.23Âû ïðîáåæàëè 10,00 êì (6,21 ìèëè) çà 36 ìèí. 23 ñ.
Ýòà ñêîðîñòü ñîîòâåòñòâóåò ïðîáåãó ìèëè çà 5 ìèí 51 ñ.
Âàøà ñðåäíÿÿ ñêîðîñòü 10.25 ìèëü/÷.
×ÒÎ ÂÛ ÄÎËÆÍÛ ÁÛËÈ ÓÇÍÀÒÜ Â ÝÒÎÉ ÃËÀÂÅ.
Êàê èñïîëüçîâàòü îïåðàöèè: +,-,*,/,%,++, --, (type).
×òî òàêîå îïåðàíä: ýòî - âåëè÷èíà, íàä êîòîðîé âûïîëíÿåòñÿ îïåðàöèÿ.
×òî òàêîå âûðàæåíèå: ñîâîêóïíîñòü îïåðàöèé è îïåðàíäîâ.
Êàê âû÷èñëÿòü çíà÷åíèå âûðàæåíèÿ: â ñîîòâåòñòâèè ñ ïîðÿäêîì ñòàðøèíñòâà.
Êàê ðàñïîçíàòü îïåðàòîð: ïî ñèìâîëó.
Âèäû îïåðàòîðîâ: îïåðàòîðû îïèñàíèÿ, ïðèñâàèâàíèÿ, while, ñîñòàâíîé.
Êàê ñôîðìèðîâàòü ñîñòàâíîé îïåðàòîð: çàêëþ÷èòü ïîñëåäîâàòåëüíîñòü îïåðàòîðîâ â ôèãóðíûå ñêîáêè {}.
Êàê ñôîðìèðóåòñÿ îïåðàòîð while: while (ïðîâåðêà óñëîâèÿ) îïåðàòîð.
Êàê âû÷èñëÿþòñÿ âûðàæåíèÿ ñî ñìåøàííûìè òèïàìè äàííûõ: ñ ïîìîùüþ àâòîìàòè÷åñêîãî ïðåîáðàçîâàíèÿ òèïîâ.
ÂÎÏÐÎÑÛ È ÎÒÂÅÒÛ
Âîïðîñû.
1. Ïðåäïîëîæèì, âñå ïåðåìåííûå èìåþò òèï int. Îïðåäåëèòå çíà÷åíèå êàæäîé èç ïîñëåäóþùèõ ïåðåìåííûõ:
à. õ = (2+3)*6,
á. õ = (12+6)/2*3,
â. y = x = (2+3)/4,
ã. y = 3 + 2*(x = 7/2 ),
ä. x = (int)3.8 + 3.3,
2. Ìû ïîäîçðåâàåì, ÷òî â ïðîãðàììå, ïðèâåäåííîé íèæå, èìååòñÿ íåñêîëüêî îøèáîê. Ñóìååòå ëè âû ïîìî÷ü íàì èõ îáíàðóæèòü?
Main( ).
{
Int i = 1,
Float n;
printf(" Âíèìàíèå! Ñåé÷àñ ïîÿâèòñÿ íåñêîëüêî äðîáåé. \n");
While (i < 30).
n = 1/ i;
printf(" %f", n);
Printf(" Âîò è âñå! Êîíåö! \n"),
}
3. Íèæå ïðèâåäåíà ïåðâàÿ ïîïûòêà ñäåëàòü ïðîãðàììó "ñåêóíäû â ìèíóòû" äèàëîãîâîé. Ïðîãðàììà íàñ íå óäîâëåòâîðÿåò. Ïî÷åìó? Êàê åå óëó÷øèòü?
#define SM 60.
Main( ).
{
Int sec, mm, left,
Printf( Ýòà ïðîãðàììà ïåðåâîäèò ñåêóíäû â ìèíóòû è ñåêóíäû \n );
Printf( 'Óêàæèòå ÷èñëî ñåêóíä \n ),
Printf( Äëÿ îêîí÷àíèÿ ðàáîòû ïðîãðàììû íåîáõîäèìî ââåñòè 0 \n);
While (sec < 0).
{
Scanf( %d", &sec),mm = sec/SM,left = sec % SM,
Printf("%d ñ ýòî % d ìèí %d ñ \n", sec, mm, left),
Printf(" Ââåäèòå ñëåäóþùåå çíà÷åíèå \n"),
}
Printf( Äî ñâèäàíèÿ!\n ),
}
Îòâåòû.
1. à. 30.
á. 27(à íå 3). Ðåçóëüòàò 3 ìîæíî ïîëó÷èòü â ñëó÷àå (12 + 6)/(2*3).
â. õ = 1, ó = 1 (äåëåíèå öåëûõ ÷èñåë).
ã. õ = 3 (äåëåíèå öåëûõ ÷èñåë) è ó = 9.
ä. õ = 6, òàê êàê (int)3.8=3.3 + 3.3 = 6.3, ýòî ÷èñëî áóäåò ïðåîáðàçîâàíî â ÷èñëî 6, ïîñêîëüêó õ èìååò òèï int.
2. Ñòðîêà 3: äîëæíà îêàí÷èâàòüñÿ òî÷êîé ñ çàïÿòîé, à íå çàïÿòîé.
Ñòðîêà 7: îïåðàòîð while ïðåäñòàâëÿåò ñîáîé áåñêîíå÷íûé öèêë, ïîòîìó ÷òî âåëè÷èíà ïåðåìåííîé i îñòàåòñÿ ðàâíîé 1 è âñåãäà áóäåò ìåíüøå 30. Ïî âñåé âèäèìîñòè, ìû ñîáèðàëèñü íàïèñàòü while(i+ + < 30).
Ñòðîêè 7-9: îòñòóïû â ñòðîêàõ ïîäðàçóìåâàþò, ïî âèäèìîìó, ÷òî èç îïåðàòîðîâ, ðàñïîëîæåíûõ â ñòðîêàõ 8 è 9, ìû íàìåðåâàëèñü ñôîðìèðîâàòü áëîê, íî îòñóòñòâèå ôèãóðíûõ ñêîáîê îçíà÷àåò, ÷òî öèêë while âêëþ÷àåò â ñåáÿ òîëüêî îïåðàòîð, ðàñïîëîæåííûé íà ñòðîêå 8; ïîýòîìó ôèãóðíûå ñêîáêè äîëæíû áûòü îáÿçàòåëüíî äîáàâëåíû.
Ñòðîêà 8: ïîñêîëüêó 1 è i - îáà öåëîãî òèïà, ðåçóëüòàò äåëåíèÿ áóäåò ðàâåí 1 ïðè i, ðàâíîì 1, è 0 - äëÿ âñåõ áîëüøèõ çíà÷åíèé. Íåîáõîäèìî ïèñàòü òàê n = 1.0/i; ïåðåä äåëåíèåì çíà÷åíèå ïåðåìåííîé i áóäåò ïðèâåäåíî ê òèïó äàííûõ ñ ïëàâàþùåé òî÷êîé è áóäåò ïîëó÷åí íåíóëåâîé ðåçóëüòàò.
Ñòðîêà 9: ìû îïóñòèëè ñèìâîë "íîâàÿ ñòðîêà" â óïðàâëÿþùåé ñòðîêå; ýòî ïðèâåäåò ê òîìó, ÷òî ÷èñëà áóäóò ïå÷àòàòüñÿ íà îäíîé ñòðîêå, åñëè òàê äîïóñêàåòñÿ óñòðîéñòâîì âûâîäà.
3. Îñíîâíàÿ òðóäíîñòü ëåæèò â ñîãëàñîâàíèè ìåæäó îïåðàòîðîì, âûïîëíÿþùèì ïðîâåðêó (âåëè÷èíà ïåðåìåííîé sec áîëüøå 0 èëè íåò?), è îïåðàòîðîì scanf( ), îñóùåñòâëÿþùèì ââîä çíà÷åíèÿ ïåðåìåííîé sec.  ÷àñòíîñòè, êîãäà ïðîâåðêà âûïîëíÿåòñÿ ïåðâûé ðàç, ïåðåìåííàÿ sec â ïðîãðàììå åùå íå ïîëó÷àåò ñâîåãî çíà÷åíèÿ, è ïîýòîìó ñðàâíåíèå áóäåò ïðîèçâîäèòüñÿ ñ íåêîòîðîé ñëó÷àéíîé âåëè÷èíîé (ìóñîðîì"), êîòîðàÿ ìîæåò îêàçàòüñÿ â ñîîòâåòñòâóþùåé ÿ÷åéêå ïàìÿòè. Îäíî ðåøåíèå, õîòÿ è íåêðàñèâîå, çàêëþ÷àåòñÿ â èíèöèàëèçàöèè ïåðåìåííîé sec, ñêàæåì âåëè÷èíîé 1, â ðåçóëüòàòå ÷åãî ïåðâûé ðàç ñðàâíåíèå âûïîëíèòñÿ. Íî çäåñü îáíàðóæèâàåòñÿ âòîðàÿ ïðîáëåìà. Êîãäà ïðè îêîí÷àíèè ðàáîòû ìû íàáèðàåì âåëè÷èíó 0, ÷òîáû îñòàíîâèòü ïðîãðàììó, îêàçûâàåòñÿ, ÷òî çíà÷åíèå ïåðåìåííîé sec ïðîâåðÿåòñÿ òîëüêî ïîñëå çàâåðøåíèÿ øàãà öèêëà è ïðîèñõîäèò âûâîä íà ïå÷àòü ðåçóëüòàòîâ äëÿ 0 ñåêóíä. Íà ñàìîì äåëå íàì õîòåëîñü áû, ÷òîáû îïåðàòîð scanf( ) âûïîëíÿëñÿ ïåðåä òåì, êàê îñóùåñòâëÿåòñÿ ïðîâåðêà â îïåðàòîðå while. Ýòîãî ìîæíî äîñòè÷ü ïóòåì ñëåäóþùåé ìîäèôèêàöèè ñðåäíåé ÷àñòè ïðîãðàììû.
Scanf(" %d," &sec);
While(sec > 0){
Mm = sec / SM;
Left = sec % SM;
Printf(" %d ñýòî%d ìèí%d ñ\n", sec, mm, left);
Printf(" Ââåäèòå ñëåäóþùåå çíà÷åíèå \n");
Scanf(" %d ", &sec);
}
 ïåðâûé ðàç ââîä óêàçàííîé âåëè÷èíû â ïðîãðàììó îñóùåñòâëÿåòñÿ ôóíêöèåé scanf( ), ïîìåùåííîé ïåðåä öèêëîì, à ââîä êàæäîé ïîñëåäóþùåé âåëè÷èíû áóäåò âûïîëíÿòüñÿ ôóíêöèåé scanf â êîíöå öèêëà (è, ñëåäîâàòåëüíî, êàê ðàç ïåðåä òåì, êàê íà÷íåòñÿ âûïîëíåíèå î÷åðåäíîãî øàãà öèêëà). Ýòîò ïîäõîä ÿâëÿåòñÿ îáùèì ñïîñîáîì ðåøåíèÿ ïðîáëåì ïîäîáíîãî ñîðòà.
ÓÏÐÀÆÍÅÍÈß.
Íèæå ïðèâîäÿòñÿ çàäà÷è, ðåøåíèÿ êîòîðûõ ìû íå äàåì. ×òîáû óçíàòü, ðàáîòàåò ëè âàøà ïðîãðàììà, íåîáõîäèìî âûïîëíèòü åå íà âàøåé ìàøèíå.
1. Èçìåíèòå íàøó ïðîãðàììó "ñóììà" òàê, ÷òîáû îíà îïðåäåëÿëà ñóììó ïåðâûõ 20 ÷èñåë. (Åñëè õîòèòå, ìîæåòå ñ÷èòàòü, ÷òî ýòà ïðîãðàììà âû÷èñëÿåò, ñêîëüêî äåíåã âû ïîëó÷èòå çà 20 äíåé, åñëè â ïåðâûé äåíü âû ïîëó÷èòå 1 äîëë , âî âòîðîé - 2, â òðåòèé - 3 è ò.ä.). Ìîäèôèöèðóéòå ïîòîì ñâîþ ïðîãðàììó òàêèì îáðàçîì, ÷òîáû âû ìîãëè â äèàëîãîâîì ðåæèìå óêàçàòü åé, äî êàêîãî äíÿ ñëåäóåò âåñòè ðàñ÷åò, ò. å. çàìåíèòå êîíñòàíòó 20 ïåðåìåííîé, çíà÷åíèå êîòîðîé ïðèñâàèâàåòñÿ â ðåçóëüòàòå îïåðàöèè ââîäà.
2. À òåïåðü ìîäèôèöèðóéòå ñâîþ ïðîãðàììó òàê, ÷òîáû îíà âû÷èñëÿëà ñóììó êâàäðàòîâ öåëûõ ÷èñåë (Èëè, åñëè âàì òàê áîëüøå íðàâèòñÿ, ñêîëüêî âû âñåãî ïîëó÷èòå äåíåã, åñëè â ïåðâûé äåíü âàì çàïëàòÿò 1 äîëë , âî âòîðîé - 4, â òðåòèé - 9 è ò. ä. Ýòî ãîðàçäî áîëåå ïðèáûëüíîå äåëî!) Ó÷òèòå, ÷òî â ÿçûêå Ñè íåò ôóíêöèè âîçâåäåíèÿ â êâàäðàò, íî âû ìîæåòå èñïîëüçîâàòü òîò ôàêò, ÷òî êâàäðàò ÷èñëà n - ýòî ïðîñòî n*n.
3. Èçìåíèòå ñâîþ ïðîãðàììó òàê, ÷òîáû ïîñëå çàâåðøåíèÿ âû÷èñëåíèé îíà çàïðàøèâàëà ó âàñ íîâîå çíà÷åíèå ïåðåìåííîé è âûïîëíÿëà âû÷èñëåíèÿ ïîâòîðíî. Îêîí÷àíèå ðàáîòû ïðîãðàììû äîëæíî ïðîèñõîäèòü ïðè ââîäå 0. (Óêàçàíèå, èñïîëüçóéòå òàêóþ êîíñòðóêöèþ, êàê öèêë â öèêëå Ñì òàêæå âîïðîñ 3 è ðåøåíèå ê íåìó ).
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
- 101.
- 102.
- 103.
- 104.
- 105.
- 106.
- 107.
- 108.
- 109.
- 110.
- 111.
- 112.
- 113.
- 114.
- 115.
- 116.
- 117.
- 118.
- 119.
- 120.
- 121.
- 122.
- 123.
- 124.
- 125.
- 126.
- 127.
- 128.
- 129.
- 130.
- 131.
- 132.
- 133.
- 134.
- 135.
- 136.
- 137.
- 138.
- 139.
- 140.
- 141.
- 142.
- 143.
- 144.
- 145.
- 146.
- 147.
- 148.
- 149.
- 150.
- 151.
- 152.
- 153.
- 154.
- 155.
- 156.
- 157.
- 158.
- 159.
- 160.
- 161.
- 162.
- 163.
- 164.
- 165.
- 166.
- 167.
- 168.
- 169.
- 170.
- 171.
- 172.
- 173.
- 174.
- 175.
- 176.
- 177.
- 178.
- 179.
- 180.
- 181.
- 182.
- 183.
- 184.
- 185.
- 186.
- 187.
- 188.
- 189.
- 190.
- 191.
- 192.
- 193.
- 194.
- 195.
- 196.
- 197.
- 198.
- 199.
- 200.
- 201.
- 202.
- 203.
- 204.
- 205.
- 206.
- 207.
- 208.
- 209.
- 210.
- 211.
- 212.
- 213.
- 214.
- 215.
- 216.
- 217.
- 218.
- 219.
- 220.
- 221.
- 222.
- 223.
- 224.
- 225.
- 226.
- 227.
- 228.
- 229.
- 230.
- 231.
- 232.
- 233.
- 234.
- 235.
- 236.
- 237.
- 238.
- 239.
- 240.
- 241.
- 242.
- 243.
- 244.
- 245.
- 246.
- 247.
- 248.
- 249.
- 250.
- 251.
- 252.
- 253.
- 254.
- 255.
- 256.
- 257.
- 258.
- 259.
- 260.
- 261.
- 262.
- 263.
- 264.
- 265.
- 266.
- 267.
- 268.
- 269.
- 270.
- 271.
- 272.
- 273.
- 274.
- 275.
- 276.
- 277.
- 278.
- 279.
- 280.
- 281.
- 282.
- 283.
- 284.
- 285.
- 286.
- 287.
- 288.
- 289.
- 290.
- 291.
- 292.
- 293.
- 294.
- 295.
- 296.
- 297.
- 298.
- 299.
- 300.
- 301.
- 302.
- 303.
- 304.
- 305.
- 306.
- 307.
- 308.
- 309.
- 310.
- 311.
- 312.
- 313.
- 314.
- 315.
- 316.
- 317.
- 318.
- 319.
- 320.
- 321.
- 322.
- 323.
- 324.
- 325.
- 326.
- 327.
- 328.
- 329.
- 330.
- 331.
- 332.
- 333.
- 334.
- 335.
- 336.
- 337.
- 338.
- 339.
- 340.
- 341.
- 342.
- 343.
- 344.
- 345.
- 346.
- 347.
- 348.
- 349.
- 350.
- 351.
- 352.
- 353.
- 354.
- 355.
- 356.
- 357.
- 358.
- 359.
- 360.
- 361.
- 362.
- 363.
- 364.
- 365.
- 366.
- 367.
- 368.
- 369.
- 370.
- 371.
- 372.
- 373.
- 374.
- 375.
- 376.
- 377.
- 378.
- 379.
- 380.
- 381.
- 382.
- 383.
- 384.
- 385.
- 386.
- 387.
- 388.
- 389.
- 390.
- 391.
- 392.
- 393.
- 394.
- 395.
- 396.
- 397.
- 398.
- 399.
- 400.
- 401.
- 402.
- 403.
- 404.
- 405.
- 406.
- 407.
- 408.
- 409.
- 410.
- 411.
- 412.
- 413.
- 414.
- 415.
- 416.
- 417.
- 418.
- 419.
- 420.