Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
protosorg
0 / 0 / 0
Регистрация: 02.09.2018
Сообщений: 3
1

Не могу разобраться в присвоении начального значения переменной по умолчанию.

02.09.2018, 03:12. Просмотров 1023. Ответов 8
Метки нет (Все метки)

Взял пример из книги:
Не могу разобраться в присвоении начального значения переменной по умолчанию.



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
int main()
{
    double tmp[5] = {36.6, 36.9, 37.3, 38.3, 38.5};
    double sum;
 
    for(int i=0; i < 5; i++)
         sum+=tmp[i];
    
    cout << "среднее = " <<sum / 5<<endl;
    return 0;
}
Среда разработки - Code::Blocks
Не могу разобраться в присвоении начального значения переменной по умолчанию.



Почему программа работает правильно, если нет инициализации переменной sum (sum=0)??? По идее ведь в переменной sum без инициализации должна быть неопределённость и результат должен быть не верен???
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2018, 03:12
Ответы с готовыми решениями:

Не могу разобраться с выводом значения переменной
Привет всем. Столкнулся в проблемой при доработке скрипта загрузки файлов на сервер. Задача:...

Ошибка при присвоении значения Range к переменной
Пытаюсь создать массив в котором будут размещены все непустые строки из диапазона А2:102. Sub...

Ошибка при присвоении переменной значения ячейки массива
Ошибку error C2106: '=' : left operand must be l-value выдает на строчке: if (mas!=-1 &amp;&amp; mas!=-1...

Синтаксис команды SET при присвоении переменной значения
Пишу вот так: set /p name = Project5.exe del name ren check.download name start nameТо есть в...

Задание начального значения переменной
Как задать начальное значение переменной - случайный путь из коллекции путей Путиотпр ?

8
Kuzia domovenok
2847 / 2434 / 621
Регистрация: 25.03.2012
Сообщений: 8,673
Записей в блоге: 1
Завершенные тесты: 1
02.09.2018, 03:17 2
и что же тогда по-твоему неопределённость?
"Не могу разобраться Почему программа правильно работает" - вот это вот ею и называется
0
protosorg
0 / 0 / 0
Регистрация: 02.09.2018
Сообщений: 3
02.09.2018, 03:53  [ТС] 3
Неопределённостью я назвал случайное содержимое неинициализированной переменной

Если просто вывести содержимое переменной sum, то там какое-то случайное значение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    double tmp[5] = {36.6, 36.9, 37.3, 38.3, 38.5};
    double sum;
 
    cout << sum;
 
   // for(int i=0; i < 5; i++)
   //      sum+=tmp[i];
 
   // cout << "среднее = " <<sum / 5<<endl;
    return 0;
}
Не могу разобраться в присвоении начального значения переменной по умолчанию.


Почему это число не участвует в подсчёте суммы?
0
Kuzia domovenok
2847 / 2434 / 621
Регистрация: 25.03.2012
Сообщений: 8,673
Записей в блоге: 1
Завершенные тесты: 1
02.09.2018, 04:29 4
ну, во-первых это число 10 в -307й степени, что не так далеко от истины - ноль
во-вторых, ну чего теперь рассусоливать, ну не написали ноль, ну надо написать, напиши и проехали как говорится!
1
02.09.2018, 04:29
zss
Модератор
Эксперт С++
8782 / 7675 / 4744
Регистрация: 18.12.2011
Сообщений: 20,427
Завершенные тесты: 1
02.09.2018, 07:02 5
Цитата Сообщение от protosorg Посмотреть сообщение
double sum;
Означает только объявление переменной sum, начальное значение не присваивается.
Соответственно в sum может оказаться все, что угодно.
Надо
C++
1
double sum=0.0;
1
_stanislav
(50 / 50 || 80 / 20) ?
1148 / 823 / 324
Регистрация: 16.08.2014
Сообщений: 3,334
Завершенные тесты: 2
02.09.2018, 07:32 6
protosorg, такие книги вредно читать, особенно начинающим.
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
5775 / 2776 / 758
Регистрация: 18.10.2014
Сообщений: 4,994
02.09.2018, 08:53 7
Лучший ответ Сообщение было отмечено protosorg как решение

Решение

Цитата Сообщение от protosorg Посмотреть сообщение
Почему программа работает правильно, если нет инициализации переменной sum (sum=0)???
Поведение вашей программы не определено. Это, однако, не означает, что она обязана выдавать какие-то "случайные числа". Вам просто повезло, что начальное значение sum оказалось нулевым и программа "как будто" работала правильно. Никакого "почему" тут нет и быть не может. Сегодня ваша программа "работает", завтра - перестанет.
1
protosorg
0 / 0 / 0
Регистрация: 02.09.2018
Сообщений: 3
02.09.2018, 16:45  [ТС] 8
Спасибо огромное всем ответившим! Разобрался. Значит в книге ошибка. Вопрос задал потому что везде пишут, что начальные значения надо ОБЯЗАТЕЛЬНО присваивать, а в этом примере не присвоено, а результат верен.

Просто мне повезло, что переменной sum присвоилось случайное значение очень близкое к 0. Попробовал изменить тип переменной sum на integer - и ошибка стала явной:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
 
int main()
{
   setlocale(LC_ALL, "Russian");
 
   int sum;
 
   double tmp[3] = {7, 12, 3};
 
   for (int i = 0; i < 3; i++)
    sum = sum + tmp[i];
 
    cout << sum << endl;
 
    return 0;
}
Не могу разобраться в присвоении начального значения переменной по умолчанию.
0
rat0r
262 / 155 / 19
Регистрация: 16.02.2018
Сообщений: 609
02.09.2018, 17:10 9
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вам просто повезло, что начальное значение sum оказалось нулевым
В стандарте написано, что оно должно было оказаться неопределённым (indeterminate):
Цитата Сообщение от http://eel.is/c++draft/dcl.init#12
If no initializer is specified for an object, the object is default-initialized.
When storage for an object with automatic or dynamic storage duration is obtained, the object has an indeterminate value, and if no initialization is performed for the object, that object retains an indeterminate value until that value is replaced ([expr.ass]).
Как оно могло оказаться нулевым, если сменить своё значение оно могло только в результате присваивания?
1
02.09.2018, 17:10
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2018, 17:10

Изменение начального значения переменной в некотором файле
Помогите разобраться с одной проблемкой. У меня есть файл к примеру index.class.php. Там я создал...

Не могу разобраться с объявлением переменной на Java
Всем привет! Помогите, пожалуйста, разобраться с объявлением переменной: CommConnection cc =...

Не могу разобраться с использованием глобальной переменной
Есть два класса Class1 и Class2 соответственно. В Class1 объявляю глобальную переменную и пытаюсь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.