- •Управление esc – последовательность (с примерами)
- •4. Определение констант и их характеристика (const,define,enum)
- •5. Форматные потоки в с. Функции fPrintf(), Fscanf(), и модификации (с примерами). Спецификаторы
- •7. Перегруженные операции.
- •8. Инструкция ветвления. (пример)
- •9. Инструкция switch()
- •10. Применение инструкции switch() для создания текстового меню.
- •11. Инструкция цикла.
- •12. Инструкция перехода.
- •13. Указатели. Операции над указателями. Косвенная адресация.
- •14. Ссылки (пример)
- •15. Статические числовые одномерные
- •16. Статические числовые двумерные массивы.
- •17. Динамическая память.
- •18. Выделение памяти под динамический одномерный и двумерный массив.
- •19. Алгоритм удаления и добавления данных в массив.
- •20. Глобальные, локальные, статические, внешние переменные.
- •21. Классы памяти.
- •22. Формальные и фактические параметры.
- •23. Функции.
- •24. Виды передачи параметров в функцию.
- •25.Функции и массивы
- •26. Функции с переменным числом параметров.
- •27. Шаблоны функции.
- •28.Рекурсии. Фреймы.
- •29. Функция Main()
- •30. Стеки.
- •31. Очереди.
- •33. Строки, как массив символов.
- •34. Функции ввода строковых переменных.
- •35.Основные функции обработки строковых переменных.
- •37. Функции преобразования типов.
- •38. Строки типа string.
- •40. Функции работы с памятью. Memcmp - сравнивает две области памяти
- •41. Структуры
- •42. Вложенные структуры.
- •43. Объединения (union)
- •44.Передача переменных определенных пользователем в функцию.
- •50. Функция определения конца файла.
- •51. Файловый поток.
- •52. Функции tellg и ftell
- •53. Установка файлового указателя
- •55. Обработка текстовых файлов.
- •56. Бинарный файл.
56. Бинарный файл.
int readfilebin(man* x,int n,char* namefile)
{FILE* fp;int i;
fp=fopen(namefile,»rb»);
if (fp==0){cout<<»Файл не открыт!»<<’\n’; getch(); return -1; }
else
for(i=0;i<n;i++)
{fread((x+i),sizeof(man),1,fp);} fclose(fp); return 1; }
Вызов данной функции: readfilebin(a,i,namefile), где a=new man[i].
fwrite-записывает данные из данного буфера в поток;
fwrite (const void*p, size_t size,size_t n,FILE*f);
Функция записывает n элементов длиной size байт из буфера,заданного указателем p,в поток f. Возвращает число записанных элементов.
fread-читает данные из потока ввода;
fread (void*buffer,size_t size,size_t count,FILE*stream);
Функция считывает count элементов size байтов в область,заданную указателем buffer,из потока stream.
Функция возвращает количество прочитанных элементов,которое может быть меньше count,если при чтении произошла ошибка или встретился конец файла.
int writef(man* x,int n)
{FILE* fp;int i;
char namefile[11];
cout<<»Введите имя файла»<<’\n’;
cin>>namefile;
fp=fopen(namefile,»wb»);
if (fp==0) {cout<<»Файл не открыт!»<<’\n’; getch(); return -1;}
else
for(i=0;i<=n-1;i++)
{fwrite((x+i),sizeof(man),1,fp); }
fclose(fp) ;return 1;}
Вызов данной функции:
writef(a,i), где a=new man[i].
МАКРОСЫ.
Макрос va_start предназначен для установки аргумента arg_ptr на начало списка необязательных параметров и имеет вид функции с двумя параметрами :
void va_start(arg_ptr,prav_param);
Параметр prav_param должен быть последним обязательным параметром вызываемой функции , а указатель arg_prt должен быть объявлен с предопределением в списке переменных типа va_list в виде:
va_list arg_ptr;
Макрос va_start должен быть использован до первого использования макроса va_arg.
Макрокоманда va_arg обеспечивает доступ к текущему параметру вызываемой функции и тоже имеет вид функции с двумя параметрами
type_arg va_arg(arg_ptr,type);
Эта макрокоманда извлекает значение типа type по адресу, заданному указателем arg_ptr, увеличивает значение указателя arg_ptr на длину использованного параметра (длина type) и таким образом параметр arg_ptr будет указывать на следующий параметр вызываемой функции . Макрокоманда va_arg используется столько раз, сколько необходимо для извлечения всех параметров вызываемой функции .
Макрос va_end используется по окончании обработки всех параметров функции и устанавливает указатель списка необязательных параметров на ноль (NULL).
Рассмотрим применение этих макросов для обработки параметров функции вычисляющей среднее значение произвольной последовательности целых чисел . Поскольку функция имеет переменное число параметров будем считать концом списка значение равное -1. Поскольку в списке должен быть хотя бы один элемент, у функции будет один обязательный параметр.
Пример:
#include
int main()
{ int n;
int sred_znach(int,...);
n=sred_znach(2,3,4,-1);
/* вызов с четырьмя параметрами */
printf("n=%d",n);
n=sred_znach(5,6,7,8,9,-1);
/* вызов с шестью параметрами */
printf("n=%d",n);
return (0);
}
int sred_znach(int x,...);
{
int i=0, j=0, sum=0;
va_list uk_arg;
va_start(uk_arg,x); /* установка указателя uk_arg на */
/* первый необязятельный параметр */
if (x!=-1) sum=x; /* проверка на пустоту списка */
else return (0);
j++;
while ( (i=va_arg(uk_arg,int))!=-1)
/* выборка очередного */
{ /* параметра и проверка */
sum+=i; /* на конец списка */
j++;}
va_end(uk_arg); /* закрытие списка параметров */
return (sum/j);}