Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекція № 4. 1. Програма на C++ включає оголошення, які можуть знаходитися в різних файлах




Вправи

Резюме

1. Програма на C++ включає оголошення, які можуть знаходитися в різних файлах. Кожна функція знаходиться на зовнішньому або глобальному рівні; оголошення функцій не може бути вкладеним. Файли початкового тексту виступають модулями і можуть компілюватися окремо.

2. Функція main () служить в якості точки входу в програму. Вона підкоряється правилам C++ для оголошення функцій.

3. Для перетворення програми з попереднього формату в чистий синтаксис C++ використовується препроцесор, оброблювальний набір директив, таких як директива include. Подібні директиви упереджаються символом #.

4. Уведення-виведення в C++ забезпечується зовнішньою стандартною бібліотекою. Інформація, необхідна програмі для використання цієї бібліотеки, знаходиться у файлі iostream.h.

5. Основними простими типами C++ є bool, double, int, char і wchar_t.

6. У C++ багато різних типів інструкцій. Крапка з комою використовується для позначення кінця інструкції. Існує також інструкція-вираження. Наприклад, інструкція привласнення в C++ синтаксично є вираженням привласнення з наступною крапкою з комою.

7. У загальному вигляді інструкція if виглядає так:

if (умова)

інструкція

Якщо умова істинна, то виконується інструкція, інакше інструкція пропускається. Після того, як інструкція if виконана, управління передається наступній інструкції.

8. Загальний вигляд інструкції whilе:

while (умова)

інструкція

Спочатку обчислюється умова. Якщо воно істинне, то виконується інструкція, і управління передається назад в початок циклу while. В результаті тіло циклу while, а саме інструкція, виконується кілька разів, до тих пір, поки умова не стане помилкова. З цієї миті управління передається наступній інструкції.

9. Щоб перервати нормальне виконання циклу, програміст може використовувати дві спеціальні інструкції

break; і continue;

10. Інструкція break окрім використання в циклах може застосовуватися в інструкції switch. Вона викликає вихід з тіла циклу або інструкції switch.

11. Інструкція goto — найбільш примітивний спосіб зміни нормального ходу виконання програми. Це безумовний перехід до довільної поміченої інструкції в тілі функції. Інструкція goto розглядається як шкідлива конструкція, її краще уникати.

1. Наступний фрагмент коду — правильний і робочий, але написаний погано.

2. Перерахуєте усі недоліки.

//Погано написана функція визначення

//найбільшого загального дільника

int foo(int q1, int q2){int q3;

while(q2){q3=q1%q2;q1=q2;q2 =q3;}return

q1; }

3. Напишіть функцію main(), зухвалу функцію gcd(). Запропонуєте користувачеві ввести два цілі числа, вичисліть і надрукуйте результат. Вихід з програми повинен здійснюватися після обчислення п'яти найбільших загальних дільників.

4. Перепишіть програму gcd так, щоб прочитувати значення змінної how_many (скільки), в якій зберігається кількість найбільших загальних дільників, що підлягають обчисленню. Змінна how_many використовуватиметься для виходу з циклу for.

5. У більшості систем стандартний потік введення може бути перемкнутий на файл. Допустимо, програма gcd була скомпільована у виконуваний файл з ім'ям gcd. Команда

gcd < gcd.dat

приймає введення з файлу gcd.dat і записує відповіді на екран. Перевірте це, використовуючи файл, що містить:

4 4 6 6 21 8 20 15 20

У більшості систем вивід також може бути перенаправлений у файл. Команда

gcd > gcd.ans

помістить результат у файл, приймаючи введення з клавіатури. Введіть ті ж дані і перевірте файл gcd.ans щоб переконатися, що в нім міститься чотири правильні відповіді. Можна скомбінувати два перенаправлення:

gcd < gcd.dat > gcd.ans

Тут введення приймається з файлу gcd.dat, а вивід спрямовується у файл gcd.ans. Перевірте це на своїй системі.

6. На машині, що підтримує кодову таблицю ASCII, напишіть програму з використанням циклу for, яка друкувала б по черзі усі прописні і рядкові букви.

7. Обчислення за короткою схемою — важливу властивість C++. Наступний фрагмент ілюструє це на типовому прикладі:

//Знаходження коренів рівняння: а*х*х+b*х+с

cin >> а >> b >> с;

discr = b*b - 4*а*с;

if ((discr > 0) && (sq_disc = sgrt (discr))){

root1 = {-b + sq_disc} / {2*a);

root1 = {-b - sq_disc} / {2*a);

}

else if (discr < 0){//комплексні корені

……….

}

else

root1 = root2 = - b / (2*a);

Функція sqrt () викличе помилку при негативних значеннях, але обчислення за короткою схемою захищає програму від цієї помилки. Закінчите цю програму, вичисливши і надрукувавши корені рівняння при наступних початкових значеннях:

а =1.0, b = 4.0, c = 3.0

а =1.0, b = 2.0, c = 1.0

а =1.0, b = 1.0, з = 1.0

8. Інструкція C++ switch допускає виконання двох і більше case для одного значення, шляхом «спуску» по тілу switch.

 

switch (і){ //"спускаємося"; оцінки:

case 0: case 1: ++hopeless; //безнадійно,

case 2: case 3: ++weak; // слабо,

case 4: case 5: ++fails; break; //незадовільно,

case 6: case 7: ++c_grades; break; //задовільно,

case 8: ++b_grades; break; //добре

case 9: ++a_grades; break; //відмінно

default: cout << "невірна оцінка" << i << еndl;

}

Відтворіть вручну роботу цієї інструкції для і, рівного 1.

9. Деякі теоретики програмування не визнають семантику «спуску», вважаючи, що вона приводить до помилок в управлінні логікою програми. Перепишіть switch з попередньої вправи так, щоб уникнути «спуску».

10. Наступна програма на C підраховує різні символи в ASCII -файлі. Запишіть цю програму у файл count.c. Відкомпілюйте її і перевірте, використовуючи перемикання введення на файл count.c.

/* Підрахунок пропусків, цифр, букв,

перекладів рядка і інших символів

*/

#include <stdio.h>

int main()

{

int blank_cnt = 0, c, digit_cnt = 0, //пропуски, цифри

letter_cnt = 0, nl_cnt = 0, other_cnt = 0;

//букви, переклади рядка, усі інші символи

while ((с = getchar())!= EOF)

if (с = = ' ')

++blank_cnt;

else if (с >= '0' && с <= '9')

++digit_cnt;

else if (c >= 'a' && с <= 'z' | | с >= 'A' &&

с < = ' Z ')

++letter_cnt;

else if (c = = '\n')

++nl_cnt;

else

++other_cnt;

printf("%10s% 10s% 10s% 10s% 10s% 10s\n\n",

"blanks", "digits", "letters", "lines"

"others", "total");

printf("%10d% 10d% 10d% 10d% 10d% 10d\n\n",

blank_cnt, digit_cnt, letter_cnt, nl_cnt, other_cnt, blank_cnt + digit_cnt + letter_cnt + nl_cnt + other_cnt);

}

Функція getchar () прочитує один символ із стандартного введення. У більшості систем константа EOF (End Of File) має значення - 1. Це системне значення прочитується, коли досягається кінець файлу.

11. Змініть попередній приклад так, щоб в нім використовувалася бібліотека iostream.h. Багато хто як і раніше вважає за краще користуватися stdio.h, оскільки вона дуже гнучка і перевірена роками, проте вона ненадійна з точки зору типів. У оголошенні

int printf(const char* cntrl_str,...)

використовується эліпсичний[3] аргумент, що означає, що функція може бути викликана з довільним списком фактичних параметрів невизначених типів. Такий змінюваний список аргументів легко може привести до помилок на етапі виконання.

12. Змініть код, щоб в нім використовувалася інструкція switch.

/* Підрахунок пропусків, цифр, букв,

перекладів рядка і інших символів

*/

#include <stdio.h>

int main()

{

int blank_cnt = 0, c, digit_cnt = 0, //пропуски, цифри

letter_cnt = 0, nl_cnt = 0, other_cnt = 0;

//букви, переклади рядка, усі інші символи

while ((с = getchar())!= EOF)

if (с = = ' ')

++blank_cnt;

else if (с >= '0' && с <= '9')

++digit_cnt;

else if (c >= 'a' && с <= 'z' | | с >= 'A' &&

с < = ' Z ')

++letter_cnt;

else if (c = = '\n')

++nl_cnt;

else

++other_cnt;

printf("%10s% 10s% 10s% 10s% 10s% 10s\n\n",

"blanks", "digits", "letters", "lines"

"others", "total");

printf("%10d% 10d% 10d% 10d% 10d% 10d\n\n",

blank_cnt, digit_cnt, letter_cnt, nl_cnt, other_cnt, blank_cnt + digit_cnt + letter_cnt + nl_cnt + other_cnt);

}

 

13. Переробіть код, щоб за допомогою assert перевірялася правильність підрахунків. Тобто загальне число символів повинно дорівнювати сумі злічених символів усих видів.

/* Підрахунок пропусків, цифр, букв,

перекладів рядка і інших символів

*/

#include <stdio.h>

int main()

{

int blank_cnt = 0, c, digit_cnt = 0, //пропуски, цифри

letter_cnt = 0, nl_cnt = 0, other_cnt = 0;

//букви, переклади рядка, усі інші символи

while ((с = getchar())!= EOF)

if (с = = ' ')

++blank_cnt;

else if (с >= '0' && с <= '9')

++digit_cnt;

else if (c >= 'a' && с <= 'z' | | с >= 'A' &&

с < = ' Z ')

++letter_cnt;

else if (c = = '\n')

++nl_cnt;

else

++other_cnt;

printf("%10s% 10s% 10s% 10s% 10s% 10s\n\n",

"blanks", "digits", "letters", "lines"

"others", "total");

printf("%10d% 10d% 10d% 10d% 10d% 10d\n\n",

blank_cnt, digit_cnt, letter_cnt, nl_cnt, other_cnt, blank_cnt + digit_cnt + letter_cnt + nl_cnt + other_cnt);

}

 

14. Використовуйте оператор sizeof для визначення кількості байт, потрібного у вашій системі для зберігання: bool, char, short, int, long, float, double, long double. Tе ж саме виконайте для типів, що перераховують:

enum bounds { 1b = - 1, ub = 511. };

enum suit { clubs, diamonds, hearts, spades };

15. За допомогою наступної програми з'ясуєте граничні значення у вашій системі:

#include <iostream.h>

#include <limits>

using namespace std;

int main()

{

numeric_limits<double> dbl_typ;

cout << "Граничні значення double: "

<< dbl_typ.min() << ", "

<< dbl_typ.max() << endl;

}

Замість double можуть бути записані інші типи. Це частина нової стандартної бібліотеки шаблонів.

16. Змініть попередню програму так, щоб вона друкувала діапазони усіх основних числових типів.

17. Напишіть програму для перекладу температури зі шкали Цельсія в шкалу Фаренгейта. У програмі повинні використовуватися цілі значення, і результати, що виводяться, також повинні округлятися до цілих. Нагадаємо, що 0 за Цельсієм складає 32 за Фаренгейтом. А в одному градусі за Цельсієм — 1.8 градуса за Фаренгейтом.

18. Напишіть програму, що розуміє на вході значення температури і за Цельсієм, і за Фаренгейтом, і що виводить значення в іншій шкалі. Наприклад, на вході ОС — на виході 32F; на вході 212F — на виході 100С.

19. Додайте перевірку тверджень (assert) до програми перетворення Цельсій- Фаренгейт, для того, щоб перевіряти коректність вхідних (передумова) і вихідних (постумова) значень. Постумова може перевірятися за допомогою зворотного перетворення, щоб переконатися в тому, що ви отримали спочатку введене значення. Не забудьте взяти до уваги округлення і машинні помилки точності.

 

Література

23. Катаев М.Ю. Объектно-ориентированное программирование: Учебное пособие. - Томск: Томский межвузовский центр дистанционного образования, 2000. - 145 с.

24. Кент Рейсдорф и Кен Хендерсон BORLAND C++BUILDER. ОСВОЙ САМОСТОЯТЕЛЬНО

25. Лафоре Р. Обьектно–ориентированное программирование в С++. 4-е изд.: – СПб: Питер, 2004 – 902 с.

26. Львов М.С., Співаковський О.В. Вступ до об’єктно-орієнтоване програмування. Навчальний посібник. - Херсон: ХГПУ, 2000.- 238 с.:іл.

27. М.С. Львов. О.В. СпіваковськийВступ до об’єктно-орієнтоване програмування. Навчальний посібник. - Херсон: ХГПУ, 2000.- 238 с.:іл.

28. Шилдт Герберт. Искусство программирования на С++. Санкт-Питербург, 2005.-496 с., ил.

29. Шилдт, Герберт. C++: руководство для начинающих, 2-е издание.: Пер. с англ. — М.: Издатель- ский дом "Вильяме", 2005. — 672 с.: ил. — Парал. тит. англ.

30. Эккель Брюс. Философия С++. Введение в стандартный С++ (2-е издание). - СПб: Питер, 2004 – 573 с.

31. Эккель Брюс. Философия С++. Практическое программирование (2-е издание). - СПб: Питер, 2004 – 610 с., ил.

32. Юркова Т. А., Ушаков Д. М., Паскаль для школьников. — СПб.: Питер, 2010. — 256 с.: ил.

33. Visual Studio 2010 и введение в.NET 4.0 и для профессионалов. Макки, Алекс: Пер. с англ. — М.: ООО И. Д. Вильямс". 2010. — 416 с.: ил. — Парал, тит. англ.

 

 

Тема 4. Загальні поняття програмування С++




Поделиться с друзьями:


Дата добавления: 2013-12-14; Просмотров: 302; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.048 сек.