Стефан Дэвис - С++ для чайников .

Здесь есть возможность читать онлайн «Стефан Дэвис - С++ для чайников .» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: Издательский дом Вильямс. Компьютерное издательство Диалектика, Жанр: Технические науки, Программирование, Программы, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

С++ для чайников .: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «С++ для чайников .»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

empty-line
1
empty-line
4

С++ для чайников . — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «С++ для чайников .», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

«Кстати говоря, хотя это и единственное деление, использованное нами в программе, это ещё не означает, что ошибка именно в нём. Компилятор может сгенерировать команду деления в результате обработки некоторой иной инструкции, написанной программистом. Кроме того, делений хватает и в стандартной библиотеке С++.»

[ Советы ]

Давайте посмотрим, чему равно значение nNums перед выполнением деления, изменив код следующим образом:

while ( true )

{

cout << "nNums = " << nNums << endl ;

/* Остальная часть программы остаётся неизменной */

_________________

130 стр. Часть 2. Становимся функциональными программистами

Такое дополнение нашей программы приводит к следующему выводу на экран:

Эта программа содержит ошибки nNums 0 Введите следующее число 1 nNums - фото 149

Эта программа содержит ошибки!

nNums = 0

Введите следующее число: 1

nNums = 0

Введите следующее число: 2

nNums = 0

Введите следующее число: 3

nNums = 0

Введите следующее число:

Как видите, nNums инициализировано нулевым значением, но оно не увеличивается в процессе ввода новых чисел. Это неверно, и именно в этом состоит ошибка в программе. Очевидно, что количество введённых чисел nNums должно увеличиваться, чего можно легко достичь, заменив цикл while циклом for:

for ( int nNums = 0 ; ; nNums++ )

Выявление "жучка" № 2...131

Теперь, когда найдена и исправлена ошибка № 1, можно запустить программу, введя числа, заставившие её в прошлый раз аварийно завершиться. На этот раз сообщение об ошибке не появится и программа вернёт нулевой код выхода, но будет работать не так, как ожидалось. Вместо так горячо ожидаемой двойки будет выведено какое-то нелепое число.

Эта программа содержит ошибки Введите следующее число 1 Введите следующее - фото 150

Эта программа содержит ошибки:

Введите следующее число: 1

Введите следующее число: 2

Введите следующее число: 3

Введите следующее число: -1

Среднее равно: 229523

Очевидно, какая-то из переменных — nNums или nSum ( а возможно, и обе ) содержит неверное значение. Для того чтобы исправить ошибку, необходимо узнать, какая именно из этих переменных содержит неверную информацию. Не помешало бы также знать, что содержится в переменной nValue , поскольку она используется для подсчёта суммы в nSum .

Для этого воспользуемся методом отладочной печати. Чтобы узнать значения nValue , nSum и nNums , перепишите тело цикла for так, как показано в следующем листинге ( версия программы имеется на прилагаемом компакт-диске в файле с именем ErrorProgram2.срр ) .

/* ErrorProgram — эта программа усредняла бы ряд чисел, если бы не содержала как минимум одну фатальную ошибку */

#include

#include

#include

using namespace std ;

int main ( int nNumberofArgs , char* pszArgs[ ] )

{

/* печать кириллицы, если Вы не установите программки gccrus.exe и g++rus.exe */

setlocale (LC_ALL,".1251");

cout << " Эта программа содержит ошибки!"

<< endl ;

/* Суммируем ряд чисел, пока пользователь не введёт отрицательное число, после чего выводим среднее */

int nSum ;

for ( int nNums = 0 ; ; nNums++ )

_________________

131 стр. Глава 10. Отладка программ на С++

{

/* Ввод следующего числа */

int nValue ;

cout << "Введите следующее число:" ;

cin >> nValue ;

cout << endl ;

/* Если введённое число отрицательно... */

if ( nValue < 0 )

{

/* ...выводим результат усреднения */

cout << "\nСреднее равно: "

<< nSum / nNums

<< "\n" ;

break ;

}

/* Вывод отладочной информации */

cout << "nSum = " << nSum << "\n" ;

cout << "nNums= " << nNums << "\n" ;

cout << "nValue= " << nValue << "\n" ;

cout << endl ;

/* Введённое число не отрицательно, суммируем его */

nSum += nValue ;

}

/* Пауза для того, чтобы посмотреть на результат работы программы */

system( "PAUSE" ) ; return 0 ;

}

Обратите внимание на то, что информация о состоянии отслеживаемых переменных nValue , nSum и nNums выводится в каждом цикле.

Ответ программы на ввод уже привычных 1, 2, 3 и -1 приведён ниже. При первом же проходе nSum принимает какое-то несуразное значение, хотя оно должно равняться нулю ( поскольку к этой переменной пока что ничего не прибавлялось ).

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «С++ для чайников .»

Представляем Вашему вниманию похожие книги на «С++ для чайников .» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «С++ для чайников .»

Обсуждение, отзывы о книге «С++ для чайников .» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x