Понятие типа данных. Классификация типов данных. Характеристика стандартных типовДанных
Понятие типа данных. Классификация типов данных. Характеристика стандартных типовДанных
Тип данных - это конструкция языка программирования, которая позволяет описать для данных:размер занимаемой памяти,диапазон допустимых значений, множество разрешенных операций.
Каждый тип данных имеет имя (идентификатор), простое или составное. Заметим, что память не выделяется для типа данных, а выделяется для размещения переменной или константы указанного типа.
В языке C++ выделяют следующие категории типов данных: базовые и производные (см. классификация типов данных языка С++).
Базовые типы данных – это типы данных, которые определены в самом языке программирования. Имена базовых типов являются ключевыми словами языка C++. К базовымтипам данных относятся: скалярные типы данных и пустой тип данных.
Скалярные типы делятся на целочисленные (логический,символьныйи целые )и вещественныетипы.
Производные типы данных - это типы данных, которые определяются на основе других типов данных. Производные типы данных делятся на скалярные и структурные.
Скалярные производные типы данных могут определятся только на основе базовых типов данных. К скалярным производным типам данных относятся: перечисления, указатели, cсылки.
Структурные производные типы данных могут определяться как на основе базовых типов данных, так и на основе структурных типов данных. К структурным типам данных относятся:массивы;структуры ;объединения ;классы.
3. Дайте характеристику этапов процесса создания программы на языке С++
1. Написание и редактирование исходного текста (исходного модуля, ИМ) программы с сохранением ее в файле с расширением .срр. Для выполнения этого этапа программисты используют текстовые редакторы, либо автономные (например, Notepad++ , Geany) , либо встроенные в интегрированные среды программирования (IDE) (например, текстовый редактор, встроенный в IDETurboC++ Explorer).
2. Препроцессорная обработка программы – например, в случае необходимости, к исходному тексту программы присоединяются подключаемые файлы (ПФ) . Результатом препроцессорной обработки программы является модернизированный исходный модуль (ИМ*) программы.
3. Компиляция программы - т. е. получение ее на определенном промежуточном языке с сохранением виде объектного файла (объектного модуля, ОМ) с расширением .obj. Препроцессорную обработку и компиляцию программы выполняют специальные программы, называемые компиляторами. Сначала, на первом проходе, компилятор выполняет препроцессорную обработку программы, а потом – собственно компиляцию программы. Можно использовать как автономные компиляторы с языка С++ , так и компиляторы встроенные в IDE.
4.Компоновка программы-построение исполнимого файла с расширением .ехе (исполняемого модуля, ИсМ) путем сборки полученного объектного модуля программы с другими объектными модулями стандартных и специальных библиотек.
4. Опишите структуру программы на языке С++. Примеры простых программ
Программа на языке C++ состоит из набора функций, описаний и директив препроцессора. Одна из функций должна иметь имя main. С нее начинается выполнение программы.
Директивы препроцессора управляют преобразованием текста программы до ее компиляции и начинается с символа #.
Программа может состоять из нескольких модулей (исходных файлов).
Основные сведения о функциях:Если функция не должна возвращать значение, указывается тип void;Тело функции является блоком и, следовательно, заключается в фигурные скобки;Функции не могут быть вложенными;каждый оператор заканчивается точкой с запятой (кроме составного оператора);
Директивы препроцессораописания
Intf1()
{ //операторы функции f1 }
Intf2()
{ // операторы функции f2 }
Intmain()
{ // операторы главной функции }
Простейшее определение функции:
тип_возвращаемого_значенияимя_функции ([ параметры ])
{ операторы тела функции}
Программа на языке C++ состоит из набора функций, описаний и директив препроцессора. Одна из функций должна иметь имя main. С нее начинается выполнение программы.
Директивы препроцессора управляют преобразованием текста программы до ее компиляции и начинается с символа #.
Программа может состоять из нескольких модулей (исходных файлов).
5. Что такое константа? Типы констант С++. Пример
Константа- некоторая величина, не изменяющая своё значение в рамках рассматриваемого процесса.
Целые константы:десятичные;восьмеричные ( начинаются с 0 ); шестнадцатеричные ( начинаются с 0x )
Например, 10, 016, 0xFF
Вещественные константы:с фиксированной точкой ( [цифры].[цифры] );с плавающей точкой ([цифры][.][цифры]E|e[+|-][цифры] )
Например, 2.5, 0.5E10
Символьные константы– это один или два символа, заключенные в одинарные апострофы.
Например, ‘ c ‘, ‘ A ’ , ‘ 5 ‘ , ‘ \n ‘ и т. д.
Символы, начинающиеся со знака \, называются управляющими, они используются:для представления символов, не имеющих графического отображения (Например, \n – перевод строки, \ t – горизонтальная табуляция);для представления символов: \ ' ? " ( \\ \' \? \" );для представления символов с помощью шестнадцатеричных или восьмеричных кодов (\073, \0хF5);
Строковая константа – это последовательность символов, заключенная в двойные апострофы. Внутри строк также могут использоваться управляющие символы.
6. Понятие переменной. Общий вид оператора описания переменных. Понятие области действия, объявления и определения переменной
Переменная – это именованная область памяти, в которой хранятся данные определенного типа.
Общий вид оператора описания переменных:
[класс памяти][const]тип имя [инициализатор];
Voidmain()
{
intb = 20; // локальная переменная
constintx = 4; // именованная константа x
}
У переменной есть имя и значение. Имя служит для обращения к области памяти, в которой хранится значение. Во время выполнения программы значение переменной можно изменять. Перед использованием любая переменная должна быть описана
Описание переменной может выполняться в форме объявления или определения. Объявление информирует компилятор о типе переменной и классе памяти, а определение содержит, кроме этого, указание компилятору выделить память в соответствии с типом переменной. В С++ большинство объявлений являются одновременно и определениями.
Область действия переменной – это часть программы, в которой ее можно использовать для доступа к связанной с ней области памяти. В зависимости от области действия переменная может быть локальной или глобальной.
При описании переменной можно присвоить начальное значение, это называется инициализацией.
7. Дайте характеристику основных операций языка С++. Понятие оператора – выражения и оператора присваивания
Операции сравнения сравнивают первый операнд со вторым. Операнды могут быть арифметического типа или указателями. Результатом операции являются значения true или false. Любое значение, не равное нулю, интерпретируется как true. Числа сравниваются по величине, у символов сравниваются их коды.(> , <, >=, <=, ==, !=)
Операнды логических операций могут иметь арифметический тип или быть указателями, при этом операнды в каждой операции могут быть различных типов. Преобразований типов не производится, каждый операнд оценивается с точки зрения его эквивалентности нулю (операнд, равный нулю, рассматривается как false, равный нулю – как true).(! , &&, ||)
Результатом логической операции является true или false. Результат операции логическоеИ имеет значение true только если оба операнда имеют значение true. Результат операции логическое ИЛИ имеет значение true, если хотя бы один из операндов имеет значение true. Логические операции выполняются слева направо. Если значения первого операнда достаточно, чтобы определить результат операции, второй операнд не вычисляется.
Первый операнд операции простого присваивания должен быть переменной, второй – выражением. Сначала вычисляется выражение, стоящее в правой части операции, а потом его результат записывается в область памяти, указанную в левой части. То, что раньше хранилось в этой области памяти - теряется. В составные операциях присваивания при вычислении выражения, стоящего в правой части, используется и переменная из левой части. Например, при сложении с присваиванием ко второму операнду прибавляется первый, и результат записывается в первый операнд(= , += , -= , *= , /= , %= , &= , ^= , |= , <<= , >>=)
Операции в выражении выполняются в соответствии с приоритетами. Для изменения порядка выполнения операций используются круглые скобки. Если в одном выражении записано несколько операций одинакового приоритета, унарные операции, условная операция и операции присваивания выполняются справа налево, остальные – слева направо.
Любое выражение, заканчивающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении этого выражения.
Если оператор - выражение содержит операцию присваивания, то он называется оператором присваивания.
Арифметические операции: + - * /
8. Правила преобразования типов в выражениях. Приведите примеры явного и неявного
Int main()
{ int a; cout<< "\n a = ";cin>> a;
cout<< "\n a + a = " << a + a; getch(); return 0;
}
Для ввода/вывода данных в стиле C часто используются функции printf и scanf, которые описываются в библиотечном файле stdio.h.Функция printf() возвращает количество записанных ею символов , а в случае ошибки – отрицательное число.
Форматная строка – это строка символов, заключенных в кавычки, которая показывает, как должны быть напечатаны аргументы. Может содержать:Символы печатаемого текста.Спецификации формата.Управляющие символы (\n – новая строка; \t – табуляция; \a – звуковой сигнал и др.).
stdin | Поток для ввода с клавиатуры |
stdout | Поток для вывода на экран монитора |
stderr | Поток для вывода стандартных ошибок |
#include <conio.h>
#include <stdio.h>
int main() { float a; printf("\n a : "); scanf("%f", &a);
printf("\n a = %10.5f",a); getch(); return 0 }
Опишите чем отличается ввод символа с помощью функций getchar(), getch()и getche().Пример.
Функция getchar() возвращает целое число. В его младшем байте содержится код символа, соответствующего нажатой клавише (старший байт обычно содержит нулевое значение). Это позволяет присвоить полученное целочисленное значение какой-нибудь символьной переменной. Если при вводе произошла ошибка, функция getchar() возвращает константу EOF
После нажатия клавиши функция getch() немедленно возвращает результат, введенный символ на экране не отображается.
Функция getche () аналогична функции getch(), за одним исключением: введенный символ отображается на экране
#include <conio.h>
#include <stdio.h>
Void main()
{ charch;
printf("Vvodchи Enter: "); ch = getchar();
printf("\nВынажали %c\n",ch);
printf("Нажмителюбуюклавишу: "); ch = getch();
printf("\nВынажали %c\n",ch);
printf("Нажмителюбуюклавишу: ");ch = getche();
printf("\nВынажали %c\n",ch);}
11. Оператор if: назначение, синтаксис записи, выполнение, примеры использования
Работает условный оператор следующим образом. Сначала вычисляется значение выражения-условия. Если оно не равно нулю, то есть имеет значение истина (true), выполняется оператор_1. В противном случае, когда значение выражения равно нулю, то есть имеет значение ложь (false), то оператор_2.
if (условие) оператор_1; else оператор_2;
Если в задаче требуется, чтобы в зависимости от значения условия выполнялся не один оператор, а несколько, их необходимо заключать в фигурные скобки, как составной оператор. В этом случае компилятор воспримет группу операторов как один.
В примере применения условного оператора без альтернативной ветки else значение переменной с изменяется только при условии, что а не равно b. Вывод на экран значения переменной с выполняется в любом случае
Условные операторы могут быть вложены друг в друга. При вложениях условных операторов всегда действует правило: ветка else считается принадлежащей ближайшемуif.
Не стоит увлекаться сложными вложенными условными операторами. Проверки условий занимают сравнительно много времени. По возможности лучше использовать логические операции.
12. Оператор switch : назначение, синтаксис записи, выполнение, примеры использования
Оператор переключатель определяет множественный выбор.
При выполнении оператора switch, вычисляется выражение, записанное после switch, оно должно быть целочисленным. Полученное значение последовательно сравнивается с константами, которые записаны следом за case. При первом же совпадении выполняются операторы, помеченные данной меткой.
Если выполненные операторы не содержат оператора перехода, то далее выполняются операторы всех следующих вариантов, пока не появится оператор перехода (break) или не закончится переключатель.
Если значение выражения, записанного после switch, не совпало ни с одной константой, то выполняются операторы, которые следуют за меткой default
13. Понятие цикла. Оператор while: назначение, синтаксис записи, выполнение, примеры
Использования
Цикл – это повторение одних и тех же действий. Последовательность действий, которые повторяются в цикле, называют телом цикла.
Один проход цикла называется итерацией. Переменные, изменяющиеся внутри цикла и влияющие на его окончание, называются параметрами цикла.
При написании циклических программ следует помнить следующее. Во-первых, чтобы цикл имел шанс когда-нибудь закончиться, содержимое его тела должно обязательно влиять на условие продолжения цикла. Во-вторых, условие должно состоять из корректных выражений и значений, определенных еще до первого выполнения тела цикла.
Для удобства в С++ есть три разных оператора цикла – while, dowhile, for.
Цикл с предусловием работает следующим образом. Вычисляется значение выражения (условия продолжения цикла). Если оно истинно (не равно нулю), выполняется оператор (операторы) тела цикла. Если тело цикла состоит более чем из одного оператора, необходимо использовать составной оператор. Если условие продолжения цикла ложно (равно нулю) – цикл заканчивается и управление передается оператору, следующему за телом цикла. Условие продолжения цикла вычисляется перед каждой итерацией цикла. Если при первой проверке оно равно нулю, цикл не выполнится ни разу.
Далее представлен оператор while, который реализует этот алгоритм.
#include <iostream>
#include <conio.h>
#include <math.h>
#define PI 3.14159
Void main()
{ floatx,y;x=0; do{ y=exp(sin(x))*cos(x); cout<< "x = " << x
<< "\t y = " << y << "\n"; x+=0.1;
} while (x<= PI); getch(); }
Операторы while, dowhile и for взаимозаменяемы, но можно привести некоторые рекомендации по выбору наилучшего в каждом конкретном случае.
Оператор dowhileобычно используют, когда цикл требуется обязательно выполнить хотя бы раз (например, если в цикле производится ввод данных).
15. Оператор for: назначение, синтаксис записи, выполнение, примеры использования
Кроме того, в C++ предусмотрен так называемый цикл с параметром, который представлен следующей конструкцией:
for (начальные_присваивания; выражение; приращение) оператор;
Здесь начальные_присваивания- оператор или группа операторов, разделенные запятой, применяются для присвоения начальных значений величинам, используемым в цикле, в том числе параметру цикла, и выполняются один раз до цикла; выражение определяет условие выполнения цикла, если значение выражения истинно (не равно нулю), то цикл выполняется; приращение - оператор или группа операторов, разделенных запятой, которые выполняются после каждой итерации и служат для изменения параметра цикла; оператор - любой оператор языка, представляющий собой тело цикла. Приращение или оператор должны влиять на условие, иначе цикл никогда не закончится. Начальные_присваивания, выражение или приращение в записи оператора for могут отсутствовать, но при этом точки с запятой должны оставаться на своих местах. В случае если тело цикла состоит более чем из одного оператора, необходимо использовать составной оператор.
Алгоритм работы цикла for:
1. Выполняются начальные_присваивани.
2. Вычисляется значение выражения, если оно не равно 0 (true), то выполняется переход к п. 3. В противном случае выполнение цикла завершается.
3. Выполняется оператор.
4. Управление передается оператору приращение, после чего осуществляется переход к п. 2, то есть опять вычисляется значение выражения и т.д.
Понятно, что этот алгоритм представляет собой цикл с предусловием
#include <iostream>
#include <conio.h>
#include <math.h>
#define PI 3.14159
using namespace std;
void main(){ float x,y; for(x=0; x<= PI; x+=0.1){ y=exp(sin(x))*cos(x);
cout<< "x = " << x << "\t y = " << y << "\n";
} getch();}
Напишите фрагмент программы с использованием разных операторов цикла. Рекомендации по выборуоператоровцикла
Конец презентации номер 2
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
charbufRus [256];
char* Rus(char* mes)
{ AnsiToOem (mes, bufRus); return bufRus;} int main()
{ inti, a; for (i =0; i<10; i++)
{ cout<<Rus("Введитечисло"); cin>> a; if (a < 0) break; }
if (i< 10) { cout<<Rus("Первоеотрицательноечисло ");
cout<<Rus("последовательности:") <<a<<endl;}
elsecout<<Rus("В последов-ти нет отрицательных чисел\n");getch();}
17. Операторы передачи управления: назначение и примеры использования
Оператор безусловного перехода goto не относится ни к условным операторам, ни к операторам цикла, однако он тоже позволяет изменить порядок следования операторов в программе и передать управление оператору, помеченному меткой.
Кажущиеся преимущества, которые дает оператор goto, на самом деле весьма сомнительны, так как очень быстро приводят к созданию программ-«спагетти», очень трудно поддающихся отладке и корректировке. Поэтому использование оператора goto считается признаком не слишком хорошего стиля программирования. Тем более что нет никаких оснований к использованию этого оператора.
При необходимости остановить программу можно воспользоваться функцией exit(), прототип которой определен в заголовочном файле stdlib.h .Выполнение оператора ехit(аргумент); немедленно завершает выполнение программы, закрывает все открытые файлы и выполняет некоторые другие завершающие действия. Значение аргумента передается окружающей среде программы и может анализироваться. Как правило, значение аргумента, равное нулю, служит признаком корректного выхода, другие значения являются признаком ошибки и могут служить кодом ошибки
18. Понятие и назначение функции в С(C++). Объявление и определение функций: понятие, назначение, синтаксис записи, примеры. Формальные параметры функций: понятие, синтаксис записи
Функцияв С(С++) - это подпрограмма , т. е. логически завершенный и определенным образом оформленный фрагмент программы, который может быть вызван из других частей программы (других функций).
Функции подразделяют большие вычислительные задачи на более мелкие и дают возможность пользоваться уже написанными подпрограммами, в том числе и другими разработчиками.
При работе с функциями используются такие конструкции, как объявление (прототип) функции, определение функции и вызов функции.
Определение и объявление функции - это конструкция языка программирования для описания функции.
Определение функции состоит из ее заголовка и тела. Заголовок функции включает: тип возвращаемого значения, имя функции (например, f1, f2, main) и в круглых скобках список формальных параметров. Тело функции – это составной оператор.
Объявление (прототип) функции состоит из заголовка функции, который заканчивается ‘;’.
Вызов функции включает имя функции и в круглых скобках список фактических параметров.
Функции в С++ являются внешними, т. е. внутри одной функции нельзя определять другую функцию
Варианты синтаксиса объявления функции:
тип имя_функции(тип имя_пар-ра1, тип имя_пар-ра2, …);или тип имя_функции(тип , тип, …);
Ключевое словоvoid, стоящее перед именем функции в ее объявлении и в заголовке, сообщает программе о том, что функция выполняет некоторые действия, но не имеет возвращаемых значений, т. е. не передает в вызывающую программу никакого конкретного результата. Слово void внутри круглых скобок, где обычно находится список параметров, сообщает компилятору, что функция не требует передачи аргументов. Для вызова такой функции достаточно просто написать ее имя в нужном месте программы и оставить скобки, в которых должны стоять параметры, пустыми.
Формальными называются параметры функции, находящиеся в скобках при объявлении функции и при ее определении, а фактическими - параметры, подставляемые на место формальных при вызове функции. Если для работы функции требуется более одного параметра, то в скобках задается список параметров, разделенных запятыми.
При выходе из функции используют оператор return. При этом если функция не имеет возвращаемого значения, то сразу после слова return стоит точка с запятой. Если функция имеет возвращаемое значение, то после слова returnстоит это возвращаемое значение.
Все функции, которые возвращают значения, должны содержать по крайней мере один оператор return, за которым следует возвращаемое значение объявленного типа.
В общем случае при выходе из функции с типом возвращаемого значения void - оператор return может отсутствовать
19. Понятие и синтаксис объявления указателя в С++. Что понимается под инициализацией и
Разыменовыванием указателя
Доступ к значению переменной можно получить иным способом – определить собственные переменные для хранения адресов памяти. Такие переменные называют указателями.
Итак, указатель – это переменная, значением которой является адрес памяти, по которому храниться объект определенного типа (другая переменная).
Как и любая переменная, указатель должен быть объявлен. При объявлении указателей всегда указывается тип переменной, значение которой будет храниться по данному адресу. Звездочка в описании указателя относиться непосредственно к имени, поэтому, чтобы объявить несколько указателей, ее ставят перед именем каждого из них.
При работе с указателями часто используют операции получения адреса (&) и разыменования (*). Операция получения адреса (&) возвращает адрес своего операнда. Операция разыменования (*) возвращает значение переменной, хранящееся по заданному адресу, то есть выполняет действие, обратное операции получения адреса (&).
C помощью указателей можно передавать адреса фактических параметров функциям и адреса функций в качестве параметров, создавать новые переменные в процессе выполнения программы, обрабатывать массивы, строки и структуры.
charC = '$'; // будет выделена память под переменную С и ей присвоено начальное значение
cout<<C; // из ячейки памяти с именем С будет извлечено значение и выведено на экран
Синтаксис объявления указателя:
тип_данных *имя_переменной;
Пример использования операции получения адреса(&) и операции разыменования (*)
p = &C; //в указатель p записывается адрес переменной С
ch = *p; // в переменную ch записывается символьноезначение, хранящееся по адресу p
20. Понятие, назначение и синтаксис описания ссылок в С++. Примеры
Ссылка на некоторую переменную может рассматриваться как указатель, который при работе с ним всегда разыменовывается. Для ссылки не требуется дополнительного пространства в памяти: она является просто другим именем или псевдонимом переменной. Для определения ссылки применяется унарный оператор &.
Ссылка не создает копию объекта, а лишь является другим именем объекта. Чаще всего ссылки используются для передачи параметров в функции
Формат описания ссылки:тип &идентификатор_1 = идентификатор_2;
Пример
#include<iostream>
#include <conio.h>
using namespace std;
Void main()
{ inta = 5, b = 10;
int&aRef = a; // aRef является ссылкой на а
aRef = b; //аравноbaRef++; //a++;
cout<< "a = " << a <<endl; getch();}
21. Понятие и назначение функции в С(C++). Вызов функции: синтаксис записи, примеры
различных вариантов вызова функций. Фактические параметры функций: понятие, синтаксис записи. Дайте характеристику способов передачи параметров в функции
Передача фактических параметров в функцию может происходить:по значению,по указателю,по ссылке.
При передаче в функцию фактического параметра по значению, соответствующий формальный параметр получит копию значения фактического параметра. Функция работая с копией фактического параметра не может изменить оригинальное значение фактического параметра. Это происходит потому, что копия фактического параметра (формальный параметр) создается в стеке. В момент завершения работы функции стековое пространство, в котором находятся формальные параметры функции, очищается, уничтожая находящиеся в нем данные. При этом значение-оригинал фактического параметра оказывается недоступным для функции.
Если функция в процессе своей работы должна изменить значение фактического параметра, то его нужно передать по указателю или по ссылке.
Для передачи в функцию фактического параметра по указателю необходимо:
-Оформить фактический параметр, либо как указатель ранее инициализированный, либо как обычную переменную к которой применена операция прямой адресации (&);
-Оформить в заголовке функции соответствующий формальный параметр как указатель;
При передаче в функцию фактического параметра по указателюсоответствующий формальный параметр получает адрес фактического параметра и в функции можно применить операцию разыменования (*) формального параметра указателя, получая таким образом доступ к значению фактического параметра и возможность его изменения
Для передачи в функцию фактического параметра по ссылке необходимо:
-Оформить фактический параметр, либо как обычную переменную;
-Оформить в заголовке функции соответствующий формальный параметр как ссылку;
При передаче в функцию фактического параметра по ссылкесоответствующий формальный параметр получает адрес фактического параметра и в функции автоматически выполнятся доступ по адресу к значению фактического параметра и появляется возможность изменения значения фактического параметра
22. Понятие и назначение функции в С(C++). Понятие, достоинства и недостатки рекурсивных функций. Примеры рекурсивных функций.
Рекурсивнойназывается функция, вызывающая сама себя. Рекурсивные функции, которые прямо вызывают сами себя, называются прямо рекурсивными. Если две функции рекурсивно вызывают друг друга, они называются косвенно рекурсивными.
Рекурсивные функции чаще всего используют для компактной реализации рекурсивных алгоритмов. Например, классическими рекурсивными алгоритмами могут быть вычисление факториала, вычисление чисел Фибоначчи, возведение числа в целую положительную степень.
Любой рекурсивный алгоритм можно реализовать без применения рекурсии. Достоинством рекурсии является компактная запись, а недостатком – расход памяти на повторные вызовы функций и передачу параметров, кроме того, существует опасность переполнения памяти.
#include <iostream>
#include <conio.h>
using namespace std;
Longint fact(int n1)
{ if (n1<=1)return 1;
else return (n1*fact(n1-1));}
Void main()
{ int n; cout<< "n="; cin>> n;
cout<<n<<"!="<<fact(n)<<"\n"; getch(); }
23. Понятие и назначение функции в С(C++). Понятие, назначение и синтаксис оформления
Понятие текстовых и бинарных файлов. Открытие файлов в стиле языка С: синтаксис,
семантика, примеры
Текстовые файлы состоят из строк символов и предназначены для чтения человеком. На диске текстовые файлы хранятся в виде сплошной последовательности символов, и их деление на строки становится заметным лишь в момент вывода на экран или на печать, так как именно при выводе управляющие символы (например, \n) начинают выполнять свои функции.
Бинарный файл – это последовательность байтов, однозначно соответствующая последовательности байтов, записанной на внешнем устройстве
При открытии файлов порция информации из дискового файла поступает в буфер и указатель на поток получает адрес буфера.
В языке С файлы открываю с помощью функции fopen(). Функция fopen() имеет два параметра. Первый параметра является строковой константой, которая задает имя файла и путь к нему. Второй параметр – тоже строковая константа – задает режим доступа к файлу. Режим доступа описывает две составляющие: способ доступа (чтение или запись) и тип файла (текстовый или двоичный).
Для работы с текстовым файлом можно к режиму доступа добавить строчную латинскую букву t, но делать это не обязательно, так как файлы открываются в текстовом виде по умолчанию.
Для работы с бинарными файлами обязательно нужно к режиму доступа добавить строчную латинскую букву b.
Таким образом, чтобы открыть файл (например, текстовый файл) для чтения, нужно произвести следующие действия :
-Объявить указатель на поток;
-Открыть файл функцией fopen() (т.е. связать указатель на поток с дисковым файлом и указать режим доступа r).
При попытке открыть существующий файл можно допустить ошибку в его имени или в указании пути к нужному файлу. Это вызывает ошибку выполнения программы. Следует предвидеть подобные ситуации и проводить проверку возможности открытия файла. Такую проверку осуществить довольно легко, так как функция fopen() возвращает значение указателя на поток в случае его успешного открытия и значение NULL (нулевой указатель), если доступ к файлу невозможен
Прошлый вопрос посмотреть
Функции ввода - вывода языка С для обработки текстовых файлов: синтаксис, семантика. Примеры посимвольной обработки текстовых файлов
Функции ввода - вывода для обработки текстовых файлов:
intfscanf (FILE *stream, форматная строка, список аргументов);
intfprintf (FILE *stream, форматная строка, список аргументов);
intfgetс(FILE *stream)
intfputс(char с, FILE *stream)
char *fgets(char *s, int size, FILE *stream)
intfputs(char *s, FILE *stream)
Рассмотрим основные варианты обработки текстовых файлов.
При работе с текстовыми файлами возможна их посимвольная или построчная обработка.
Функции fprintf() и fscanf() , fgetc() и fputc() используют для посимвольной обработки, а функции fgets() и fputs() для построчной обработки текстовых файлов.
Функции ввода-вывода fprintf() и fscanf() работают аналогчно функциям printf() и scanf(), но имеют дополнительный аргумент, являющийся указателем на файловый поток.
Функция fgetc () считывает символ из файла, открытого функцией fopen() в режиме чтения. Параметр stream является указателем на поток, возвращенным функцией fopen(). Функция fgetc() возвращает целочисленную переменную, младший байт которой содержит введенный символ. Если возникла ошибка, старший байт этой переменной равен нулю. Если при чтении обнаруживается конец файла, функция fgetc() возвращает константу EOF.
Функция fputc() записывает символ в файл, открытый с помощью функции fopen(). Параметр stream представляет собой указатель файла, возвращенный функцией fopen(), а аргумент является символом, подлежащим выводу. Указатель stream сообщает функции putc(), в какой именно файл следует произвести запись. Несмотря на то, что параметр имеет тип int, в файл записывается лишь младший байт. Если функция fputc() выполнена успешно, она возвращает символ, записанный ею в файл. В противном случае она возвращает константу EOF.
30. Функции ввода - вывода языка С для обработки бинарных файлов: синтаксис, семантика, примеры использования
Способ хранения данных в бинарных (двоичных) файлах имеет два важных преимущества:
-Увеличивается скорость извлечения из файла данных, не носящих чисто текстового характера, так как не требуется действий по преобразованию их из текстового формата в двоичный.
-Имеет место экономия памяти и дискового пространства, поскольку двоичная кодировка более компактна и нет необходимости в использовании управляющих символов.
Принципиально обработка двоичных файлов не очень сильно отличается от обработки текстовых файлов. В любом случае, прежде чем работать с файлом, следует открыть файл, указав режим доступа. Открыть файл для двоичной обработки можно посредством вызова функции fopen(), но ко всем режимам доступа добавляют строчную латинскую букву b. Режимы доступа одинаковы для текстовых и двоичных файлов. Если после вызова функции fopen() указатель на файловый поток f не равен нулю, его можно использовать в последующих обращениях к функциям работы с двоичными файлами, таким, как fwrite() и fread() . Закрывают двоичные файлы, как и текстовые, функцией fclose().
Функции fwrite() и fread() так же могут быть использованы для работы с текстовыми файлами, хотя чаще их используют для работы с бинарными файлами. Параметры функций:
-ptr – указатель на исходные данные, читаемые из файла (записываемые в файл);
-size – размер в байтах одного элемента данных;
Замечание. size_t – специальный идентификатор типа, который введен для обозначения типа результата, вычисляемого операцией sizeof. На самом деле идентификатор size_t является синонимом unsignedint.
-n – число записываемых в файл элементов данных; stream – указатель на файловый поток.
Существует два способа доступа к элементам двоичных файлов: последовательный и произвольный.
31. Произвольный доступ к элементам двоичных файлов в языке С: синтаксис используемых функций, примеры
Организация произвольного доступа к компонентам файла позволяет считывать значения из любой позиции в файле, а также записывать новую информацию в любое место в файле. Но к файлам с произвольным доступом предъявляется одно жесткое требование: их компоненты должны иметь одинаковую длину. Двоичные файлы позволяют обеспечить удовлетворени