#c #arrays #random
#c #массивы #Случайный
Вопрос:
Итак, я практикую кодирование перед началом занятий снова, и я хотел создать случайный массив из 10 целых чисел и хотел найти, какие два числа при сложении вместе равны больше 100.
Когда я запускаю приведенный ниже код
int arr[9];
for(int i = 0; i<=9; i ){
arr[i]=(rand()%100) 1;
cout<<arr[i]<<endl;
}
cout<<endl;
for(int k = 0; k<=9; k ){
for (int j = k 1; j<=9; j ){
if((arr[k] arr[j])>100){
cout<<arr[k]<<" "<<arr[j]<<" "<<"over 100"<<endl;
}
else{
cout<<arr[k]<<" "<<arr[j]<<" "<<"under 100"<<endl;
}
}
}
return 0;
Я замечаю, что значение arr [9] равно одному числу, но в программе для него есть другое число.
Например: созданный массив является
[42 68 35 1 70 25 79 59 63 65]
но мой вывод показывает 9 как arr [9]
42 68 больше 100
42 35 меньше 100
42 1 меньше 100
42 70 на 100
42 25 меньше 100
42 79 из 100
42 59 больше 100
42 63 больше 100
42 9 меньше 100
(Я просто включу первый цикл, чтобы больше этого не делать)
Куда делись мои 65??
Откуда взялось 9??
Я написал что-то не так??
Спасибо
Комментарии:
1.
for(int i = 0; i<=9; i )
Это слишком много для одной итерации. Массив содержит только 9 элементов.2. Если быть, возможно, жестоко честным, проблема, похоже, в том, что вы пропустили важную часть вашего учебника, руководства или класса. Пожалуйста, вернитесь назад, чтобы посмотреть, что там говорится о размерах массива и индексах.
Ответ №1:
Я замечаю, что значение arr [9] равно одному числу, но в программе для него есть другое число.
Подсчет в компьютерах начинается с 0
и заканчивается на одно число меньше общего размера. Для int arr[9]
- девятый индекс равен
arr[8]
- первый индекс равен
arr[0]
- второй индекс равен
arr[1]
Когда вы это делаете arr[9]
, вы пересекаете границу (доступ к элементу, которого нет в диапазоне), что приводит к неопределенному поведению.
В результате ваш цикл должен остановиться на i < 9
:
for(int i = 0; i < 9; i ) // i < 9 now vs i <=9
Те же изменения необходимо o внести в циклы под первым.