Skip to content

Работа с массивами. Часть 1

Доброго времени суток, сегодня мы поговорим о массивах, разберём некоторые тонкости заполнения массивов в Си. Тема несложная, думаю, легко разберётесь. Итак, давайте начнём.

Заполнить целочисленный массив array_int[N] (N = 34) числами из диапазона [-83; 90] и массив array_double[N] дробными числами из диапазона [-2.38; 6.57]. Вывести массивы на экран в две строки. Вывести массивы в файл в два столбца в формате «array_int[индекс] = значение; array_double[индекс]= значение».

Код:

#include <stdio.h>
#include <stdlib.h>
#define N 34

int main(void) {
        FILE*file;
        file = fopen("file.txt","w");
        int array_int[N], i, j;
        for (i = 1; i <= N; i++){
                array_int[i] = -83 +rand() % (90 + 83 + 1);
                printf("%d  ", array_int[i]);

        }
        printf("\n");
        double array_double[N],t;
        for (j = 1; j <= N;){
                t = rand() % 8 - 2 + (rand() % 95 - 38) / 100.0;
                if ((t <= 6.57 ) && (t >= -2.38)) {
                array_double[j] = t;
                printf("%.2lf  ", array_double[j]);
                j++;
                }

        }
        for (i = 1; i <= N; i++){
                fprintf(file, "array_int[%d] = %d\t array_double[%d] = %.2lf \n  ", i, array_int[i], i, array_double[i]);
        }
        fclose(file);
        return EXIT_SUCCESS;
}

Вывод:
Снимок
Команд новых нет, но поговорим об изюминке во втором цикле (при заполнении дробного массива):

Чтобы заполнить массив дробными «рандомными» числами из диапазона [-2.38; 6.57], необходимо сначала сгенерировать целые числа rand() % 8 — 2, где 8 сумма целого чисел у границы (-2.38 и 6.57), затем уже сгенерировать дробную часть (rand() % 95 — 38) / 100.0, где 95 сумма границ ( 38 + 57 ).
Мы используем условие if ((t <= 6.57 ) && (t >= -2.38)), чтобы быть точно уверенным, что результат будет именно в этом диапазоне.

А также в этом примере я показал, что у цикла for переменная j может быть изменена не только в объявлении цикла, но и посередине его.
Следующий:

Заполнить массив array[20] степенями числа 2, начиная с минус пятой степени. Вывести массив на экран в строку.

Код:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 20
int main(void) {
        int i,k;
        k = -5;
        double array[N];
        for (i = 0; i < N; i++){
                array[i] = pow(2,k);
                k++;
                printf("%.3lf  ", array[i]);
        }
        return EXIT_SUCCESS;
}

Как видите, ничего сложного. Если вы осилили предыдущие задачи в статьях, то это для вас будет так, пальцы размять =)
Едем дальше.

Заполнить одномерный массив из 15 элементов случайными числами из диапазона [-30; 16]. Вывести на экран массив в строку. Найти первое с конца массива число, которое кратно 7, если таких чисел нет, то вывести сообщение о том, что чисел кратных семи не обнаружено. Использовать оператор break.

#include <stdio.h>
#include <stdlib.h>
#define N 15
int main(void) {
        int mas[N], i, k = 0;
        for (i = 0; i < N; i++){
                mas[i] = - 30 + rand() % (16 + 30 + 1);
                printf("%d  ", mas[i]);
        }
        for (i = N - 1; i >= 0; i--){
                if (mas[i] % 7 == 0) {
                        printf("\n%d", mas[i]);
                        k = 1;
                        break;
                }
        }
        if (k == 0) printf("не найдено");
        return EXIT_SUCCESS;
}

Break — команда прерывания цикла и выход из него, запуск последующих операторов и инструкций. Алгоритм решения примера несложен.
И последний на сегодня:

Заполнить одномерный массив из 20-ти элементов из файла input.txt и вывести его на экран. Изменить элементы массива, умножив четные элементы на 2, а нечетные — на 3. Вывести измененный массив на экран на новой строке.

#include <stdio.h>
#include <stdlib.h>

int main(void) {
        FILE*input;
        input = fopen("input.txt","r");
        int mas[20],i;
        for (i = 1; i <= 20; i++){
                fscanf(input, "%d", & mas[i]);
                printf("%d  ", mas[i]);
        }
        printf("\n");
        for (i = 1; i <= 20; i++){
                if (mas[i] % 2 == 0){
                        mas[i] *= 2;
                }
                else {
                        mas[i] *= 3;
                }
                printf("%d  ", mas[i]);
        }
        fclose(input);
        return EXIT_SUCCESS;
}

Ввод/вывод:
Снимок
Тут тоже ничего особенного, поэтому на этом и закончим.=)

Вот и всё. Пишите вопросы, комментируйте, всем ответим.

Все исходники без файлов txt.
Скачать исходники задачи — 1
Скачать исходники задачи — 2
Скачать исходники задачи — 3
Скачать исходники задачи — 4

Опубликовано вСи

Будьте первым, кто оставит комментарий

    Добавить комментарий