Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 383; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.176 (0.007 с.) |