Skip to content

Работа с файлами и циклами

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

Вывести в файл каждое пятое число из диапазона [-45; 67]. Числа расположить в строках по восемь чисел в каждой. Вывести на экран в столбик все числа из этого диапазона с последней цифрой равной единице. Выполнить программу с использованием оператора цикла for().

Код:

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

int main(void) {
        FILE*open;
        open = fopen("open.txt","w");
        int n = 67, i = -45, e = 1;
        for (i = -45; i <= n ;i += 5, e++){
                if (e < 8) {
                        fprintf(open,"%d,", i);
                }
                else {
                        e = 0; fprintf(open,"%d,\n", i);
                }
        }
        for (i = -45; i <= n; i ++ ){
                if (i % 10 == 1 || i % 10 == -1) {
                        fprintf(open,"\n%d", i);
                }
        }
        fclose(open);
        return EXIT_SUCCESS;
}

Вывод в файле:
Снимок2

Даже не знаю какой комментарий тут оставить, все команды были разобраны, и алгоритм незамысловатый. =)
Давайте, тогда второй:

Вывести в файл десять случайных чисел кратных семи из диапазона [-578; 832]. Числа выводить в строчку, используя поле для вывода в 5 клеток. Выполнить программу с использованием оператора цикла for().

Код:

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

int main(void) {
        FILE*open;
        open = fopen("open.txt", "w");
        int n = 0, e = 0;
        for (e = 1 ; e <= 10 ; ){
                n = -578 + rand() % (832 + 578 + 1);
                if (n % 7== 0){
                        e++;
                        fprintf(open,"%5d", n);
                }
        }
        fclose(open);
        return EXIT_SUCCESS;
}

Вывод в файле:
Снимок3
Суть этого примера в том, что мы увеличиваем переменную e только в том случаем, если «рандомное» число кратно 7.
К сожалению, больше ничего интересного в этом примере нет.

Ввести с клавиатуры дробное число. Если это число окажется положительным, то циклически отнимать от него 5 до тех пор, пока оно не станет отрицательным. Если оно отрицательное или ноль, то циклически прибавлять к нему случайные дробные числа до тех пор, пока оно не превысит 35. Вывести на экран в столбик промежуточные значения числа в формате «число + случайное_число = результат». Выполнить программу с использованием оператора цикла while или do- while.

Код:

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

int main(void) {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

        double n = 0,t = 0, r = 0;
        scanf("%lf", &n);
        if (n > 0) {
                do {
                        n -= 5;
                }while (n >= 0);
                printf("Число отрицательное, уменьшается до %+.3lf", n);
        }
        else {
                while (n<= 35) {
                        t = rand() % 100 / 10.0;
                        r += n+t;
                        printf("%.3lf + %.3lf = %.3lf\n", n, t, r);
                        n += t;
                }
        }
        return EXIT_SUCCESS;
}

Напомню, что команды SetConsoleCP(1251), SetConsoleOutputCP(1251) из библиотеки windows.h отвечают за корректный вывод кириллицы в консоль. В алгоритме ничего сложного нет. Но, если всё-таки не понятно — пишите в комментариях.
И последний на сегодня:

Ввести с клавиатуры целое число. Вывести на экран произведение четных и нечетных цифр в этом числе. Повторить процедуру для еще десяти таких чисел. Выполнить программу с использованием оператора цикла while для подсчета произведения цифр.

Код:

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

int main(void) {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
        int n = 0, chet = 1, nechet = 1, i=0;
        for (i=1; i <= 10; i++) {
        chet = 1;
        nechet = 1;
                scanf("%d", &n);
                while (n>0){
                        if (n % 10 % 2 == 0) {
                                chet *= n % 10;
                                n /= 10;
                        }
                        else {
                                nechet *= n % 10;
                                n /= 10;
                        }
                }
        printf("Перемножение чётных = %d, перемножение нечётных = %d\n", chet, nechet);
        }

        return EXIT_SUCCESS;
}

Суть алгоритма в отрезании по одной цифре справа числа, с помощью команды % ( деление без остатка ). Определяем чётная цифра или нет, и перемножаем с соответствующей группой. Замечу, что 0 относится к чётным в нашей программе.

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

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

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

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

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