Программа считает значения элементов массива но результат на 2 больше - C (СИ)
Формулировка задачи:
Программа считает значения элементов массива но результат на 2 больше, в чём проблема?
#include <stdio.h>
#include <conio.h>
int main()
{
unsigned int n = 0;
int** mas = NULL;
// ввод массива
printf("Razmer masiva: ");
scanf_s("%d", &n);
mas = new int*[n];
for (unsigned int i = 0; i < n; ++i)
{
mas[i] = new int[n];
for (unsigned int j = 0; j < n; ++j)
{
//printf("mas[%d][%d] = ", i, j);
scanf_s("%d", &mas[i][j]);
}
}
/* подсчёт суммы всех элементов */
unsigned int sum =0;
for (unsigned int i = 0; i < n; ++i)
for (unsigned int j = 0; j < n; ++j)
sum+=mas[i][j];
/* вывод результатов суммы элементов */
printf("Summa elementov massiva: %d", sum);
getch();
// очистка памяти
for (unsigned int i = 0; i < n; ++i)
{
delete[] mas[i];
mas[i] = NULL;
}
delete[] mas;
mas = NULL;
return 0;
}
Так кто-нибудь может подсказать в чём проблема?
Решение задачи: «Программа считает значения элементов массива но результат на 2 больше»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
int main()
{
unsigned int n = 0;
int** mas = NULL;
// ввод массива
printf("Razmer masiva: ");
scanf("%d", &n);
mas = new int*[n];
for (unsigned int i = 0; i < n; ++i)
{
mas[i] = new int[n];
for (unsigned int j = 0; j < n; ++j)
{
//printf("mas[%d][%d] = ", i, j);
scanf("%d", &mas[i][j]);
}
}
/* подсчёт суммы всех элементов */
unsigned int sum =0;
unsigned int j = 0;
for (unsigned int i = 0; i < n; ++i){
for ( j = 0; j < n; ++j){
sum+=mas[i][j];}
j=0;
}
/* вывод результатов суммы элементов */
printf("Summa elementov massiva: %d", sum);
getch();
// очистка памяти
for (unsigned int i = 0; i < n; ++i)
{
delete[] mas[i];
mas[i] = NULL;
}
delete[] mas;
mas = NULL;
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Razmer masiva: Размер массива
- *mas = new int[n];** Выделение памяти под массив указателей на int
- for (unsigned int i = 0; i < n; ++i) Цикл для заполнения массива
- mas[i] = new int[n]; Выделение памяти под массив int
- for (unsigned int j = 0; j < n; ++j) Цикл для заполнения массива
- scanf(
%d, &mas[i][j]); Ввод значения элемента массива - sum += mas[i][j]; Сумма элементов массива
- printf(
Summa elementov massiva: %d, sum); Вывод суммы элементов массива - getch(); Ожидание нажатия клавиши
- for (unsigned int i = 0; i < n; ++i) Цикл для очистки памяти
- delete[] mas[i]; Освобождение памяти
- mas[i] = NULL; Установка значения NULL
- delete[] mas; Освобождение памяти под массив
- mas = NULL; Установка значения NULL
- return 0; Конец программы