Skip to content

Работа с переменными разных типов. Часть 2

Сегодня мы продолжаем говорить о работе с переменными на языке Си и знакомится с примерами будем в уже привычном вам формате «марафон» =). Особое внимание уделим работе с файлами. Что же, вперёд!

Для двух целых и одной дробной переменной задать случайные значения из диапазона [-72; -63]. Вывести переменные и их значения в файл output.txt в строчку.

И вот код:

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

int main(void) {
	int x, y;
	double z;
	x = -72 + rand() % (-63 + 72 + 1);
	y = -72 + rand() % (-63 + 72 + 1);
	z = -72 + rand() % (-63 + 72 + 1);
	FILE * output;
	output = fopen("output.txt", "w");
	fprintf(output, "%d,%d,%lf", x, y, z);
	fclose(output);
	return EXIT_SUCCESS;
}

Новые команды и выражения:
-72 + rand() % (-63 + 72 + 1) — выражения для задания «рандомного» значения в промежутке от -72 до -63. Что бы лучше понять как задаётся период, советую самим поэкспериментировать.

FILE * output; — если точно, то создаётся ссылка на файл, тип ссылки FILE, но проще — объявим переменную, которой назовём рабочий файл.

fopen(,) — с помощью этой команды (как вы догадались) открываем файл, который у нас называется «output.txt». Через запятую указывается параметр (в нашем случае «w»). «w» и «r» — два основных параметра, один для записи, другой для чтения. Более детально о функции и параметрах тут.

fclose() — команда закрытия файла, не забывайте её прописывать после работы с файлом.

Побежали дальше!

В файле data.txt на первой строке записаны пять символов, на второй строке — три целых числа. Объявить необходимое количество переменных и записать в них значения из файла. Вывести на экран в строчку все переменные и их значения. Найти и вывести на экран среднее арифметическое значение всех целых переменных.

Код:

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

int main(void) {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
	FILE * data;
    data=fopen("data.txt", "r");
	char sim1, sim2, sim3, sim4, sim5;
	int ch1, ch2, ch3, arf;
	fscanf(data, "%c%c%c%c%c%d%d%d", &sim1, &sim2, &sim3, &sim4, &sim5, &ch1, &ch2, &ch3);
	printf("%c\t%c\t%c\t%c\t%c\t%d\t%d\t%d\n", sim1, sim2, sim3, sim4, sim5, ch1, ch2, ch3);
				arf= (ch1+ch2+ch3)/3;
	printf("Среднее арифметическое равно %d", arf);
	fclose(data);
	return EXIT_SUCCESS;
}

Сразу скажу что команды SetConsoleCP(1251) и SetConsoleOutputCP(1251) из библиотеки нужны только для того, чтобы консоль поняла кириллицу и вывела не «абра-кадабру», а читабельный текст.

Больше тут нет ничего нового. И алгоритм банален: открываем файл, считываем последовательно символьные переменные, затем считываем числа. Далее выводим в консоль их среднее арифметическое значение. Следует отметить, что среднее арифметическое у нас имеет тип integer (целочисленный).
Файл, из которого выводим, выглядит так:
Снимок1

Следующий пример.

В файле data.txt на первой строке записаны два целых числа, на второй строке — три дробных числа. Прочитав файл, с помощью тернарных операций найти наибольшее из целых чисел и наименьшее из дробных. Результаты вывести на экран.

Код:

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

int main(void) {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
	FILE*data;
	data = fopen("data.txt", "r");
	int max, a, b;
    double min, c, d, e;
    fscanf(data, "%d%d%lf%lf%lf", &a, &b, &c, &d, &e);
	max=(a > b) ? a : b;
	min=(d < e) ? d : e;
	min=(min < c) ? min : c;
	printf("Максимально среди целых равно %d\nМинимально среди дробных равно %lf", max, min);
    fclose(data);
	return EXIT_SUCCESS;
}

Тернарные операции — это своего рода замена условия if
Форма записи тернарной операции в Си : «условие» ? «выражение 1» : «выражение 2». Если условие истинно, то выполняется выражение 1, иначе (условие ложно) выполняется выражение 2. Более говорить об этом примере нечего.

Бежим дальше.

Объявить необходимое количество переменных и задать им начальные значения с клавиатуры. Вычислить результат выражения и вывести его на экран. Учесть допустимости значений переменных.
= * ( −10) / ( −10) + ( / ( +1))

Код:

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

int main(void) {
	int d, z, b, x, y;
	double l;
	scanf("%d%d%d", &d, &z, &b);
	x = (z * (d + 10)) / (abs(b - 10));
	y = (log(b)) / (z = 1);
	l = x + y;
	printf("%.4lf", l);
	return EXIT_SUCCESS;
}

В этом примере мы познакомимся с библиотекой math.h и её двумя командами log() и abs(). log() — натуральный логарифм, abs() — модуль числа. Не думаю, что здесь требуется какое либо объяснение действий. Только замечу что d, z, и b мы задаём в integer, а l в double.

И последнее на сегодня:

Установить соответствия между символами и чувствами. Ввести с клавиатуры символ и вывести на экран соответствующее чувство. ‘%’ — зрение, ‘#’ — осязание, ‘*’ — обоняние, ‘&’ — слух, ‘@’ — вкус. Выполнить программу с использованием оператора switch.

Код:

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

int main(void) {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
	char x;
	scanf("%c", &x);
	switch(x)
	{
	case ('#'): printf("осязание"); break;
	case ('@'): printf("вкус"); break;
	case ('*'): printf("обоняние"); break;
	case ('%'): printf("зрение"); break;
	case ('&'): printf("слух"); break;
	default : ;break;
	}

	return EXIT_SUCCESS;
}

Тут всё тоже несложно. Switch — по результату схож с if else. То есть мы предоставляем ему переменную (x), он её сравнивает с каждым пунктом и выводит, если находит совпадение. default — подразумевает все остальные случаи, кроме описанных выше в case. break — сама по себе эта команда позволяет выйти из цикла, и в данном случае, благодаря ей мы выходим из switch.

Советую вам посмотреть еще и 1 урок по работе с переменными в Си.
Вот и всё. Пишите вопросы, комментируйте, всем ответим.

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

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

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

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

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