Массивы представляют собой фундаментальную структуру данных, и они чрезвычайно полезны. Мы используем массивы для хранения значений одного и того же типа в смежных ячейках памяти. В частности, использование массивов позволяет нам создавать «группы» или «кластеры» переменных без необходимости указывать уникальное имя переменной для каждого, но все же позволяя нам индивидуально индексировать элементы массива. Если вы еще не начали отсчет с нуля, теперь самое время, потому что в C массивы индексируются с нуля, что означает, что первый элемент массива k-элементов находится в индексе под номером 0, а последний элемент находится в индекс под номером k-1.
Нижеприведенный код пытается запустить обратный отсчет с 9 до 0, но, к сожалению, выводится ошибка. Исправьте ошибку!
#include <cs50.h>
#include <stdio.h>
#define COUNT 10
int main(void)
{
int countdown[COUNT] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
for (int i = 0; i <= COUNT; i++)
{
if (i == 9)
printf("%d!\n", countdown[i]);
else
printf("%d..", countdown[i]);
}
}
Вычисление серии чисел Фибоначчи, в которой любое заданное число в ряду является суммой двух предыдущих (например, 0, 1, 1, 2, 3, 5, 8, …), часто делается рекурсивно. Однако это также можно сделать довольно эффективно, используя массив. Напишите код для вычисления и сохранения первых 25 чисел Фибоначчи в массиве. Вам нужно только явно объявить первые два числа, а затем использовать цикл для вычисления и печати остальных.
#include <cs50.h>
#include <stdio.h>
#define N 25
int main(void)
{
// объявляем массив и сохраняем первые два значения
int fibo[N];
fibo[0] = 0;
fibo[1] = 1;
// TODO: вычислить и сохранить следующие 23 значения
// TODO: распечатать всю серию
}
В приведенном ниже коде объявлен массив из 20 int
’ов, некоторые значения установлены, а затем печатается сумма массива. Однако напечатанное значение имеет мало общего с фактическим значением суммы. Почему это может быть? Исправьте ошибку, чтобы распечатать реальную сумму!
#include <cs50.h>
#include <stdio.h>
#define N 20
int main(void)
{
// объявляем массив и сохраняем некоторые значения
int values[N];
values[0] = 1;
values[1] = 10;
values[2] = 5;
values[3] = 12;
values[4] = 3;
// вычислить сумму
int sum = 0;
for (int i = 0; i < N; i++) // Вы не можете изменить эту строку кода!
{
sum += values[i];
}
printf("The sum of 1 + 10 + 5 + 12 + 3 is: %i\n", sum);
}
Перепишите приведенный ниже код, инициализируя два массива - 1-мерный массив размером 10 и 2-мерный массив размером 30x30. Для 1-D массива, пожалуйста, перепишите текущую инициализацию, используя только одну строку (вместо 4х). Для 2-D массива, пожалуйста, инициализируйте его таким образом, чтобы элемент с индексами i
, j
имел значение i * j
. Распечатайте оба массива, чтобы проверить свой код!
#include <cs50.h>
#include <stdio.h>
#define DIM_1 10
#define DIM_2 30
int main(void)
{
// TODO: Перепишите нижние 4 строки, используя только одну строку
int array[DIM_1];
for (int i = 0; i < DIM_1; i++)
{
array[i] = 0;
}
// TODO: Установите каждый из индексов нижнего 2D-массива в значение i * j
int array_2[DIM_2][DIM_2];
// TODO: Распечатайте оба массива, чтобы убедиться, что вы все сделали правильно!
}
Напишите программу, которая предложит пользователю ввести 5 целых чисел. Храните целые числа в массиве и распечатайте их среднее значение (результат можно округлить до двух знаков после запятой).
Пример:
./mean
Give me an integer: 4
Give me an integer: 1
Give me an integer: 5
Give me an integer: 10
Give me an integer: 5
Average: 5.00
#include <cs50.h>
#include <stdio.h>
#define N 5
int main(void)
{
// TODO
}
В приведенном ниже коде 2-мерный целочисленный массив размером 10x8 был захвачен и случайно заполнен 5 минами! Вы хотите «развернуть» массив и распечатать местоположение (координаты в массиве) всех 5 мин. Значение 1 указывает, что мина установлена; в противном случае значение будет равно 0! Вы можете использовать значения координат, которые либо индексируются с 1 (1-10, 1-8), либо с 0 (0-9, 0-7).
#include <cs50.h>
#include <stdio.h>
#include <time.h>
#define HEIGHT 10
#define WIDTH 8
#define MINE_NUM 5
int main(void)
{
// инициализировать поле, которое должно быть пустым, и заполнить 5 минами, случайно расположенными
int field[HEIGHT][WIDTH] = 0;
time_t t;
srand((unsigned) time(&t));
for (int k = 0; k < MINE_NUM; k++)
{
int i = rand() % HEIGHT;
int j = rand() % WIDTH;
// если мина уже была расположена в этом месте, попробовать снова
if (field[i][j] == 1)
k--;
else
field[i][j] = 1;
}
// TODO: распечатайте местоположение мин!
}
Напишите программу, которая предложит пользователю ввести имена пяти Покемонов. Храните эти имена в массиве и произвольно выбирайте их для печати. СОВЕТ: Не изобретайте велосипед - функция уже существует, которая вернет случайное число!
Пример:
./pokemon
Give me a Pokemon: Butterfree
Give me a Pokemon: Clefairy
Give me a Pokemon: Diglett
Give me a Pokemon: Growlithe
Give me a Pokemon: Rapidash
Clefairy, I choose you!
#include <cs50.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
#define MAX 5
int main(void)
{
// TODO
}