Главная страница
Навигация по странице:

  • ЗАМЕЧАНИЕ

  • 45 Работа с файлами в языке Си Для удобства обращения информация в запоминающих устройствах хранится в виде файлов. Файл

  • Каталог

  • Файловой системой

  • вопросы. общие вопросы. Программа ипрограммирование


    Скачать 1.45 Mb.
    НазваниеПрограмма ипрограммирование
    Анкорвопросы
    Дата28.06.2022
    Размер1.45 Mb.
    Формат файлаdocx
    Имя файлаобщие вопросы .docx
    ТипПрограмма
    #619339
    страница10 из 12
    1   ...   4   5   6   7   8   9   10   11   12

    Тело Цикла


    ит1

    Конструкция for может использоваться для задания бесконечного цикла в случае отсутствия инициализирующих действий, условия и итераторов: for (;;);. В этом случае нужно предусмотреть другой способ прерывания исполнения — например, с помощью break, goto или return.




    ит2

    95

    ЗАМЕЧАНИЕ

    Если условие изначально ложно, тело цикла может не выполниться ни разу, в отличие от инициализирующих действий.

    Цикл for часто используется для эмуляции стандартного цикла с параметром – цикла ДЛЯ других языков программирования, хотя им и не является (в строгом смысле слова). Чтобы превратить его в цикл с параметром, необходимо, чтобы инициализирующие действия включали задание начального значения переменной цикла, условие относилось к границе изменения параметра, а действия-итераторы включали изменение значения переменной цикла. Пример:

    /* умножение всех элементов массива на 2*/ for (i=0; i

    Несмотря на частое использование в качестве цикла с параметром, возможности for языка программирования Си гораздо шире. Это иллюстрируют следующие примеры:

    /* пробег сразу двух массивов во встречных направлениях */ for (i=0,j=M; i=0; i++,j--) a[i]=b[j];

    /* тело цикла пустое — все делают итераторы*/ for (i=0;i

    ЗАМЕЧАНИЕ

    Программистам не рекомендуется злоупотреблять подобными трюками, поскольку они затрудняют понимание программы человеком и чреваты внесением трудноуловимых ошибок.

    С помощью цикла for могут быть эмулированы и стандартные циклы вида ПОКА и ДО (читателю предлагается самостоятельно разобраться, каким образом). Несмотря на это отдельные формы этих циклов в языке также присутствуют, примеры можно найти в главе о базовых конструкциях императивных языков.

    В примере используется также условный оператор языка Си. Его синтаксис выглядит следующим образом:

    if (<условие>) <действие 1>

    else

    <действие 2>;

    В случае истинности условия (которое может быть сложным, где фигурируют несколько простых условий, связанных логическими связками И — &&, ИЛИ — ||) выполняются <действия 1>, в качестве которых может выступать один оператор или группа операторов, заключенных в


    операторные скобки (фигурные скобки). Если условие не выполняется, то исполняется <действие 2>. Ветвь ИНАЧЕ (else) может отсутствовать. Этот случай соответствует сокращенному условному выражению, когда в случае ложности условия просто ничего не происходит. Пример:

    if (summa>0 && ostatok>0 && (!ograblenie())) vydat_dengi();

    ЗАМЕЧАНИЕ

    Благодаря наличию в языке Си условного выражения иногда можно обойтись без использования оператора if.

    Кроме оператора if язык Си поддерживает оператор выбора, выглядящий следующим образом:

    switch(<пер>)

    {

    case <зн1>:<действия1>;break; case <зн2>:<действия2>;break; case <зн3>:<действия3>;break;



    [default:<действия_если_ни_одно_не_подошло>]

    }

    В операторе выбора для выбора альтернативной ветви используется значение переменной в скобках после switch (переменная должна быть перечислимого типа, например целочисленная). Если оно совпадет с

    <зн1>, выполняются <действия1>, если со <зн2> — <действия2> и т. д.

    Если действия включают несколько операторов, последние не заключаются в операторные скобки, а лишь записываются один за другим и разделяются точкой с запятой. Строк case столько, сколько важных вариантов должна обработать программа. Иногда в оператор выбора добавляется строка default, содержащая действия, выполняемые, если значение переменной не совпало ни с одним из <знi>. Обработка иллюстрируется рис. 15.

     case1:

    case2:

    switch (){

    case3:

    casen:

     break

     break   break

    break




     defaul

    ЗАМЕЧАНИЕ

    Поскольку ветви case реализованы в языке программирования Си фактически как метки, для того чтобы при входе в каждую из веток и выполнения соответствующих действий автоматически не происходили переход к следующей строке и выполнение строки со следующим case, необходимо каждую ветвь заканчивать оператором break.

    Пример использования switch приводится в лабораторном практикуме (приложение А).

    Помимо простых, или одномерных, массивов в языке Си возможна работа с так называемыми многомерными массивами, то есть массивами, элементы которых также являются массивами. В простейшем случае двумерный массив (аналогом которого в математике является двумерная матрица) может быть описан следующим образом:

    float matr[10][20];

    Здесь объявляется массив из 10 строк по 20 элементов в каждой. Доступ к элементам массива осуществляется очевидным образом:

    y+=matr[i][j];

    ЗАМЕЧАНИЕ

    Обратите внимание на то, что каждое измерение записывается в своих квадратных скобках.

    В примере к переменной y добавляется значение элемента массива matr, находящееся на пересечении i-й строки и j-го столбца матрицы.

    Аналогично выполняется работа с трехмерными и имеющими большее число измерений массивами.

    Важным элементом программирования является возможность задания значений переменной при объявлении. В некоторых языках, например, принадлежащих к Паскаль-семейству, по умолчанию все переменные инициализируются нулем. В Си по умолчанию переменным не присваивается никакого значения, что служит источником трудноуловимых ошибок, ведь значение неинициализированной явным образом переменной соответствует случайному числу, находившемуся в данной ячейке памяти до запуска программы. Причем может оказаться, что 50 раз при запуске там случайно оказывается, например, ноль и программа работает штатно, а затем происходит неожиданный сбой на 51-м запуске, когда в данной ячейке будет иное значение. В связи с этим хорошим тоном в программах на Си является запись вида

    int k=0,b=2; /* инициализация при объявлении */ float z=3.21

    Подобным образом можно инициализировать и массивы:

    int a[7]={-7,0,1,2,15,21,-1}; /* одномерный массив*/ char ima[20]="дядя Ваня"; /* строка — массив символов */

    int mat[2][3]={ {1, 2, 3}, {-1,0, 1}

    };

    Как и в других языках программирования, в Си возможно создание на основе базовых типов данных более сложных конструкций. В некоторых языках подобного рода конгломераты называются записями, в других — структурами и т. д.

    Идея структуры состоит в том, что под одним именем группируются сразу несколько параметров (элементов данных). Можно попытаться описать, например, гоночный автомобиль следующим набором параметров: мощность двигателя (целое число лошадиных сил), изготовитель (строка символов), тип мотора (строка символов), количество передач (целое число), максимальная скорость (число с плавающей точкой). В языке программирования Си возможно объявление соответствующей данному описанию структуры:

    struct

    {

    int Power;

    char Manufacturer[40]; char Motor[40];

    int transmissons; float MaxSpeed;

    } Auto;

    После этого объявления можно обращаться к отдельным элементам данных структуры Auto. Делается это следующим образом, например:

    Auto.Power=340;

    Auto.MaxSpeed=380.2;

    scanf("%s",Auto.Manufacturer);

    Помимо простого объявления структуры в языке Си возможно объявление структуры с определением нового типа данных с именем, совпадающим с именем структуры. Для этого используется ключевое слово typedef. В приведенном примере, например, заголовок мог бы выглядеть следующим образом:

    typedef struct {…} Auto;

    После этого можно объявлять переменные нового типа Auto, например:

    Auto car,car2;

    Дальнейшее обращение к членам данных переменных car и сar2 производится стандартным образом, например: car.Power, car.Motor и т. д.
    45 Работа с файлами в языке Си
    Для удобства обращения информация в запоминающих устройствах хранится в виде файлов.
     
    Файл – именованная область внешней памяти, выделенная для хранения массива данных. Данные, содержащиеся в файлах, имеют самый разнообразный характер: программы на алгоритмическом или машинном языке; исходные данные для работы программ или результаты выполнения программ; произвольные тексты; графические изображения и т. п.
     
    Каталог (папкадиректория) – именованная совокупность байтов на носителе информации, содержащая название подкаталогов и файлов, используется в файловой системе для упрощения организации файлов.
     
    Файловой системой называется функциональная часть операционной системы, обеспечивающая выполнение операций над файлами. Примерами файловых систем являются FAT (FAT – File Allocation Table, таблица размещения файлов), NTFS, UDF (используется на компакт-дисках).
     
    Существуют три основные версии FAT: FAT12, FAT16 и FAT32. Они отличаются разрядностью записей в дисковой структуре, т.е. количеством бит, отведённых для хранения номера кластера. FAT12 применяется в основном для дискет (до 4 кбайт), FAT16 – для дисков малого объёма, FAT32 – для FLASH-накопителей большой емкости (до 32 Гбайт).

     
    Рассмотрим структуру файловой системы на примере FAT32.
     
      1. 1   ...   4   5   6   7   8   9   10   11   12


    написать администратору сайта