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

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

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

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

    Ваш e-mail не будет опубликован. Обязательные поля помечены *