русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Відлік символів


Дата додавання: 2014-11-28; переглядів: 871.


Наступна програма лічить символи; вона подібна до попередньої програми копіювання.

#include <stdio.h>

 

/* лічить символи вводу; 1-а версія */

main()

{

long nc;

 

nc = 0;

while (getchar() != EOF)

++nc;

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

}

Вираз

++nc;

знайомить нас з новим оператором, ++, який означає «збільшити на одиницю». Ви могли би натомість написати nc = nc + 1, але ++nc стисліший і, часто, ефективніший. Існує також відповідний оператор -- для зменшення на одиницю. Оператори ++ й -- можуть бути префіксними (++nc) та постфіксними (nc++); ці дві форми мають різне значення у виразах, як буде показано в Розділі 2, але ++nc й nc++, обидва, збільшують nc на один. Для наших цілей, ми зупинимось на префіксній формі.

Програма відліку знаків зберігає кількість знаків у змінній типу long замість int. Довгі цілі мають, щонайменше, 32-бітну довжину. Хоч на деяких машинах int та long однакової довжини, на інших int має лише 16 біт, з максимальним значенням 32767, і потрібно дуже мало вводу, щоб переповнити int-лічильник. Вказівник перетворення %ld вказує printf, що відповідний аргумент є довгим цілим.

Ми можемо упоратись і з більшими числами, застосувавши тип double (число з рухомою точкою подвійної точності). Ми також використаємо твердження for замість while, для демонстрації іншого способу написання циклу.

#include <stdio.h>

 

/* лічить символи вводу; 2-а версія */

main()

{

double nc;

 

for (nc = 0; gechar() != EOF; ++nc)

;

printf("%.0f\n", nc);

}

printf використовує %f для обох типів, float і double; %.0f пригнічує вивід десяткової крапки та дробової частини, яку ми вказали як нуль.

Корпус цього циклу порожній, оскільки вся робота вже зроблена у тестовій та інкрементній частині циклу. Але граматичні правила C вимагають, щоб твердження for мало корпус. Поодинока крапка з комою, яку називають «нульовим твердженням» знаходиться там для того, щоб задовольнити це правило. Ми розмістили її на окремому рядку, щоб вона була помітною.

Перед тим як ми покинемо програму-лічильник, зверніть увагу, що якщо ввід не містить жодних знаків, тести while або for зазнають невдачі при першому ж викликові getchar і програма виведе нуль — правильне значення. Це важливо. Однією з гарних рис while або for є те, що вони здійснюють перевірку на вершечку циклу, до переходу до виконання самого корпусу. Якщо робити нічого не треба, нічого й не буде зроблено, навіть якщо це означає не входити жодного разу в корпус циклу. Програми мають поводитись розумно, коли їм надано ввід нульової довжини. Твердження while та for допомагають упевнитися, що програми здійснюють розумні речі з граничними умовами.


<== попередня лекція | наступна лекція ==>
Копіювання файла | Відлік рядків


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн