Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Передача структурных переменных функциям .-
Частным случаем этих операций является передача структурных переменных в функции и возврат их из функций в виде результата. Функцию можно передавать компоненты структурных переменных по отдельности, структурные переменные целиком, а так же указатель на структурную переменную. Main () {struct vect screen; Struct point middle; Struct point makepoint (int,int); Screen.pt1=makepoint(0,0); Screen.pt2=makepoint(xMax,yMax); Middle=makepoint((screen.pt1.x+screen.pt2.x);screen.pt1.y+screen.pt2.y)/2); } Struct point makepoint (int x, int y) {struct point tmp; Tmp.x=x; Tmp.y=y; Return tmp;} Struct point addpoint (struct point p1,struct point p2) {p1.x+=p2.x; P1.y+=p2.y; Return p1;} Как правило при передачи структурных переменных функции используется передача по адресу. Наличие скобок необходима из-за того, что приоритет оператора «.» выше приоритета оператора «*», а запись без () неверна.
Указатели на структурные переменные. При работе с указателем на переменную со структурным типом используют операцию «->». Операторы доступа к компонентам структурных переменных вместе с операторами вызова функции и обращение к элементам массивов занимают самое высокое положение в таблице приоритетов и выполняются раньше других операторов. Struct {int len; Char str; }*p; ++p->len В этом примере на единицу увеличится значение компонента len, а не указателя *p. Массивы структурных переменных. В Си существует возможность описывать массивы переменных того или иного структурного типа. Для работы с такими массивами используют те же механизмы, что и при работе с обычными массивами. Struct key {chfr *word; Int count; }keytab[100]; For (i=0;I<=100;i++) Massiv[i].count++ Struct key *p; For (p=keytab;p<keytab+99;p++) If (p->count>0) Printf(“%d %s\n”,p->count,p->word); Используя массивы структурных переменных средствами языка Си++ можно решать ряд задач обработки таблиц, то есть выполнять часть функций систем управления БД. 5 )Объединения (для экономии памяти) Объединение – переменная, которая может в разные моменты времени содержать в себе объекты различных типов и размеров. Размер памяти таков, что хватило места под самый большой компонент объединения. Синтаксис доступа к компонентам объединения такой же, как и при работе со структурными. Union { Int klasha; Float glasha; Long double sasha; }kreslo; В случае рассогласования типов результат непредсказуем. Объединения могут являться компонентами структурных типов и наоборот объединение может включать в свой состав в качестве компонента структурную переменную.
Поля битов. Средство typedef- Поле битов – несколько переменных, хранящихся рядом внутри одного машинного слова. Синтаксис описания в поле битов и доступа к ним базируется на синтаксисе структурном. Struct {unsigned int a:1; Unsigned int b:1; Unsigned int c:2; }flags Поля могут участвовать как обычные числа, но не могут быть массивами и не имеют адресов. Язык Си предоставляет программисту возможность помимо встроенных типов данных самому заводить новые типы данных подходящие для конкретных задач. Кроме того в языке существует возможность переименовывать любой тип данных, как встроенный, так и определенный программистом. Именно для этой цели служат средства typedef. Дикларация typedef не создает новый тип, а только сообщает новое имя для типа, которое уже существует. Переименование типов делается для того, чтобы давать уже существующим типам имена, максимально отражающие смысл, происходящего в программе. Новое имя типа можно использовать на равнее со старым типом. Например у нас имеется массив[100], указав тип double мы выделили память под каждый элемент этого массива, а используя typedef мы экономим память и выделяем тип как под одно целое. typedef double DArray[100]; ... DArray A, B, C;
Понятие макроподстановки. Понятие макроподстановки – имеет вид: #define_имя_заменяющий текст. Макроподстановки используется для простейшей замены во всех местах, где встречается имя, вместо него будет помешен заменяющий текст. Имена в макроподстановке задаются по тем же правилам, что и имена переменных. Заменяющий текст может быть произвольным. #define PI 3.14 Void main() {printf (“%f\n”,PI); } Обычно заменяющий текст находится в строке, в которой расположено слово #define, но в длинных определениях его можно продолжить на следующих строчках, поставив в конце каждой продолжаемой строки «\» #define matr for (i=1;i<=n;i++)\ For (j=1;j<=m;j++) Область действия имени в макроподстановке простирается от данного определения, до конца файла. В определение макроподстановки могут фигурировать более ранние #define определения. Подстановка осуществляется только для тех имен, которые расположены вне текста, заключенных в «». Макроподстановку можно определить с аргументами, вследствие чего заменяющий текст будет варьироваться в зависимости от задаваемых параметров.
#define max(A,b) ((A>(B)?(A):(B)) Хотя обращение к max выглядит, как обычное к функции оно будет вызывать только текст значений каждый формальный параметр будет заменяться соответствующим аргументом. так строка x=max(a+b,c+d) будет заменена на строку x=((a+b)>(c+d)?(a+b):(c+d)). То, что было в define можно скрыть от предпроцессора с помощью директивы undef_имя. Как правило это делается, чтобы перекрыть макроопределение настройки функции с этим именем. #define vasia A Void main () {int vasia; #undef vasia Vasia () } Vasia (){….} Включение файлов. Директива #include предписывает компилятору поместить на ее место содержимое другого файла. Обычно эта директива применяется в так называемом включенном или заголовочном файле *.h. Однако существует возможность включить в текст программы любой другой исходный файл. #include <имя файла> или #include “имя файла”. Если имя файла не является полным именем, то в первом случае поиск происходит только в пределах специфицированных каталогах включаемых файлов. При использовании кавычек сначала просматривается текущий каталог, а затем каталоги, включающих файлов.
Условная компиляция. В Си существует возможность избирательно компилировать части файла в зависимости от значения некоторого константного выражения или идентификатора. Для этого существуют #if,#endif,#elif,#else. #if (выражение 1) Текст 1 #elif (выражение 2) Текст 2 #else Текст 3 #endif Каждая из этих директив записывается на отдельной строке. Константные выражения в #if и последующий #elif вычисляются по порядку, пока не обнаружится выражение с ненулевым значением. Текст следуемый за строкой с ненулевым значением выбрасывается. Текст, расположенный за директивой с ненулевым значением обрабатывается обычным образом. Под словом текст имеется ввиду любая последовательность строк включая строки предпроцессора, которые не являются частью условия структуры. Если все выражения имеют ненулевые значения и есть строка #else, то следующий за ней текст обрабатывается. #if SYSTEM==BCD #include “bcd.h” #elif SYSTEM==MSDOS #include “msdos.h” #else #include “default.h” #endif
10)Стандартные библиотеки <math.h> и <string.h>. <math.h> (математические функции) 1)Синус Double sin(double x) A=sin(x) 2)Косинус Double cos(double x) 3)Тангенс Double tan(double x) 4)Арксинус Double asin(double x) 5)Арккосинус Double acos(double x) 6)Арктангенс Double atan(double x) 7) Double exp(double x) 8)Натуральный логарифм (x>0) Double log(double x) 9)Десятичный логарифм Double log10(double x) 10)Возведение в степень Double pow(double x,double y) 11) Double sqrt(double x) 12)Округление с избытком Double ceil(double x) 13)Округление с недостатком Double floor(double x) 14)Модуль для целых чисел |x| Int abs(int x) 15)Модуль для вещественных чисел Double fabs(double x) 16)Модуль для длинного целого Long int labs(long int x)
<string.h>( функции обработки строк) 1)char *strcpy(char *s,const char *t) Копирует строчку t в строчку s включая \0 2)char *strcat (char *s,const char *t) Присоединяет строку t к строке s и возвращает s 3)char *strchr (const *s,int c) Возвращает указатель на первое вхождение символа “c” в строку “s” или если такого нет, то возвращает NULL 4) char *strrchr(const char *s,int c) Тоже самое, только на последний символ. 5)int strlen (const char *s)
Возвращает длину строки S, но без \0.
11) Стандартные библиотеки <ctype.h> и <stdlib.h> <ctype.h> (функции проверки класса символов) 1)int isalpha (int c) Возвращает не 0, то есть истину, если с-буква и 0 в противном случае. 2) int isupper (int c) Возвращает не 0, если с-буква верхнего регистра и 0 в противном случае. 3) int islower (int c) Возвращает не 0, если с-буква нижнего регистра и 0 в противном случае. 4) int isdigit (int c) Возвращает не 0, если с-цифра и 0 в противном случае. 5) int isaalnum (int c) Возвращает не 0, если с-буква или цифра и 0 в противном случае. 6) int isspace (int c) Возвращает не 0, если с-пробел и 0 в противном случае. 7) int ispunct (int c) Возвращает не 0, если с-печатаемый символ,кроме пробела, буквы или цифры. 8) int iscntrl (int c) Возвращает не 0, если с-управляемый символ. 9) int tolower (int c) Переводит с на нижний регистр, иначе не меняет. 10) int toupper (int c) Переводит с на верхний регистр, иначе ничего не делает.
<stdlib.h>( функции общего назначения) 1)double afof(const char *s) Переводит строку s в тип double. Рассматривает начальные символы до 1го не подходящего, а пробелы игнорирует. Пример – на входе ______3,78bsdfc на выходе будет 3,78 2)int afoi (const char *s) Переводит строку s в тип int 3)long int afol(const char *s) Переводит в long 4)int rand (coid) Возвращает целое случайное число в диапазоне от 0 до max числа в данной реализации.
|
|||||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 295; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.129.13.201 (0.024 с.) |