Доброго времени суток, сегодня мы поговорим о массивах, разберём некоторые тонкости заполнения массивов в Си. Тема несложная, думаю, легко разберётесь. Итак, давайте начнём.
Заполнить целочисленный массив 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
Будьте первым, кто оставит комментарий