Подготовили студенты группы 4133 Гусарова Екатерина, Сухова Анастасия, Замалетдинова Эльвина, Хасанов Мурат
ayto case const continue default do double else enum float for goto int long registr return short signed sizeof static struct switch typedef void unsigned union volatile while if char break extern Идентификаторы
Модификаторы
Правила языка С – две глобальные переменные не могут иметь одинаковые имена; – локальная переменная одной функции может иметь такое же имя, как локальная переменная другой функции (или формальный параметр другой функции); – две локальные переменные в одном блоке не могут иметь одинаковые имена, в том числе формальный параметр функции не должен совпадать с локальным параметром, объявленным в функции.
Язык C является чувствительным к регистру: Имена COLOR, Color и color определяют три различных имени переменных Комментарий - это часть программы, которая игнорируется компилятором и служит для удобочитаемости текста программы;
Исходный текст (source code) - текст программы на языке программирования; Объектный код (object code) - текст программы на машинном языке который не может выполняться компьютером получается после компиляция исходного текста файла или программы;
Компоновщик (linker) – программа, строящая выполняемый модуль из объектных модулей собирает откомпилирован текст программы и функции из стандартных библиотек языка С в одну выполняемую программу; Библиотека (library) - набор функций, включая стандартные, предопределенных переменных и констант которые могут быть использованы в программе и хранятся в откомпилированном виде;
Время компиляции (compiler time) – период, во время которого происходит компиляция программы, обнаруживаются синтаксические ошибки, сделанные при составлении текста программы; Время выполнения (run time) – период, во время которого происходит выполнение программы;
Указатель – это переменная, которая предназначена для хранения и использования в программе адреса некоторого объекта. Здесь имеется ввиду адрес в памяти компьютера. Адрес представляет собой простое целое число, но его нельзя трактовать как переменную или константу целого типа. Операция & соответствует по смыслу операции взятия (определения) адреса. Операция * является по смыслу операцией взятия (определения) значения по указанному адресу.
Локальные переменные – это переменные, объявленные внутри блока, в частности внутри функции. Формальные параметры – это переменные, объявленные при описании функции как ее аргументы. Область действия переменной – это правила, которые устанавливают, какие данные доступны из данного места программы.
Рекурсивная функция – это функция, в теле которой имеется вызов самой себя. Поля битов – это специальный тип членов структуры, в котором определено, из скольких бит состоит каждое поле Перечислимый тип ( enumeration ) – это множество поименованных целых констант. Перечислимый тип определяет все допустимые значения которые могут иметь переменные этого типа
Глобальные переменные – это переменные, объявленные вне какой-либо функции. Использование глобальных переменных имеет свои недостатки: – они занимают память в течение всего времени работы программы; – использование глобальных переменных делает функции менее общими и затрудняет их использование в других программах; – использование внешних переменных делает возможным появление ошибок из-за побочных явлений. Эти ошибки, как правило, трудно отыскать
Классы памяти register Тип памяти указывается модификатором – ключевым словом, стоящим перед указанием типа переменной. Например, static int sum; register int plus. Если ключевое слово перед спецификацией типа локальной переменной при ее объявлении нет, то по умолчанию она принадлежит классу auto.
Классы памяти register Автоматические переменные хранятся в оперативной памяти, точнее в той области памяти, которая отводится под стек. Регистровые (registr) переменные хранятся в регистрах процессора, доступ к которым значительно быстрее, чем к автоматическим переменным. Внешняя переменная (extern) относится к глобальным переменным. Она может быть объявлена как вне, так и внутри тела функции Область действия локальной статической переменной является вся программа. Место в памяти под локальные статические переменные выделяется в начале работы программы в разделе глобальных и статических переменных.
Типы данных – структуры (structure), – объединения (union), – перечисляемый тип (enumeration), – поля битов (bit fields), – с помощью оператора typedef создать новое имя (псевдоним) для уже существующего типа.
Массивы Одна из наиболее простых и часто используемых структур данных. Под массивом понимают набор данных одного и того же типа, собранных под одним именем. Каждый элемент массива определяется именем массива и порядковым номером элемента, который называется индексом. Индекс в языке С всегда целое число.
Массивы (Символьные) Массивы типа char – символьные массивы – занимают особое место. Во многих языках программирования есть специальный тип данных – строка символов (string). В языке С такого типа нет, а работа со строками реализована путем использования одномерных массивов типа char. Есть два простых способа ввести строку с клавиатуры. Первый способ – воспользоваться функцией scanf() со спецификатором ввода %s. Надо помнить, что функция scanf() вводит символы до первого пробельного символа. Второй способ – воспользоваться функцией gets(), объявленной в файле stdio.h. Функция gets() позволяет вводить строки, содержащие пробелы. Ввод заканчивается нажатием клавиши Enter.
String.h Strcpy() strcat() strcmp() strcpy(s1,s2). Эта функция используется для копирования содержимого строки s2 в строку s1 strcat(s1,s2). Эта функция присоединяет строку s2 к строке s1 и помещает ее в массив, где находится строка s1, при этом строка s2 не изменяется strcmp(s1,s2). Эта функция сравнивает строки s1 и s2 и возвращает значение ноль, если строки равны, т. е. содержат одно и то же число одинаковых символов. strlen() возвращает длину строки s, при этом завершающий нулевой байт не учитывается.
Операции Арифметические Логические Присваивания Вычитание и унарный минус, сложение, умножение, деление, деление по модулю, увеличение на единицу, уменьшение на единицу Меньше, меньше или равно, больше, больше или равно, равно, не равно, а также и, или, не Обозначается значком = и используется для реализации оператора присваивания
В языке С имеется возможность многократного присваивания, например: a=b=c=x+y. Здесь сначала вычисляется значение x+y, затем оно присваивается переменной c, потом b, и лишь затем a. В левой части оператора присваивания должно стоять выражение, которому можно присвоить значение. В языке С имеются дополнительные операции присваивания +=, -=, /=, *=, %=. Вместо выражения a=a+7 можно использовать выражение a+=7. Здесь += аддитивная операция присваивания. Дополнительные операции присваивания имеют тот же приоритет, что и операция =, т. е. ниже, чем приоритет арифметических операций. Необходимо отметить, что операция a+=7 выполняется быстрее, чем операция а=а+7. Операция присваивания
Main Строка main() определяет имя функции. Любая программа на языке C включает одну или более функций. Выполнение программы начинается с функции main(). Поэтому каждая программа на языке C должна содержать эту функцию. Printf Выводит на экран некоторую информацию. Эта строка состоит из двух частей: имени функции printf() и двух ее аргументов Сейчас %d год\n и year, разделенных запятой. Функция printf() является универсальной функцией форматного вывода.
Scanf Ввод с клавиатуры значения. Первый аргумент функции scanf() %d указывает, что будет вводится целое десятичное число. Второй аргумент – имя переменной, которой будет присвоено введенное значение. Символ & (амперсанд) перед именем переменной необходим для правильной работы функции scanf()
Функции Некоторая логически законченная совокупность операторов языка, которая выполняет определенную конкретную задачу, и может быть вызвана для своего выполнения Return() Hемедленный выход из текущей функции и возврат в вызывающую программу Mожет использоваться для возврата значения функции
Для использования функций ввода-вывода необходимо директивой #include включить файл stdio.h, содержащий объявления функций ввода-вывода, а также определение констант, типов и структур, используемых этими функциями. Открытие потока осуществляется функцией fopen. Параметрами функции fopen являются строка, указывающая путь к файлу и его имя, и строка, определяющая тип доступа к потоку. Литерал типа доступа может иметь значения: r – для чтения, w – для записи, a - для записи в конце потока, r+ – для чтения и записи, w+ – пустой поток для чтения и записи, a+ – для чтения и записи в конце потока. Закрытие потока осуществляется функцией fclose. Указатель потока можно позиционировать на любое место в потоке. Для получения текущей позиции в потоке используются функции ftell и fgetpos, для изменения позиции указателя – fseek и fsetpos. Ввод\Вывод
stdin – стандартный ввод(клавиатура), stdout – стандартный вывод(дисплей), stdprn – стандартная печать, stderr– стандартный вывод сообщений об ошибках. Кроме того, функции ввода-вывода на терминал (getc, putc и т.п.) не требуют указатель потока, так как используют stdin и stdout. Существуют также функции, реализующие ввод-вывод в текущее окно экрана монитора путем прямой записи в видеопамять ( getch, getche, putch, cprintf и т.д.). Эти функции требуют подключения директивой #include файла conio.h. Ввод\Вывод (Stdio.h)
Ввод\Вывод (Функции для работы с файлами) fopen – открывает поток, связанный с файлом filename и типом доступа type. fclose – закрывает поток stream. fcloseall – закрывает все открытые потоки. remove – удаляет файл с именем filename. rename – переименовывает файл oldname в файл newname. ftell – возвращает положение указателя текущей позиции файла, связанного с потоком stream. long int ftell( FILE *stream); fseek – устанавливает адресный указатель файла, соответствующий потоку stream, в новую позицию, которая расположена по смещению offset относительно места в файле, определенного параметром fromtwhere. fgetpos – сохраняет позицию указателя файла, связанного с потоком stream, в месте, указываемом параметром pos. fsetpos - устанавливает указатель текущей позиции файла, связанного с потоком stream в новую позицию, которая определяется значением, получаемым предшествующим вызовом функции fgetpos.
Ввод\Вывод (Функции неформатированного ввода-вывода) fgetc – получает символ из потока stream. fgetchar – получает символ из потока stdin. fgets – получает строку s длиной не более n символов из потока stream. fputc – выводит символ с в поток stream. fputchar - выводит символ c в поток stdout. fputs – выводит строку символов string в поток stream. gets – получает строку символов s из потока stdin. getc – выводит из потока stream символ этого потока. getchar – выводит символ из потока stdin. putc – выводит символ c в поток stream. putchar – выводит символ с в поток stdout. puts – выводит строку s в поток stdout. putw – помещает в поток stream целое значение w. getw – вводит из потока stream целое число.
Ввод\Вывод (Функции блочного ввода-вывода) fread – считывает n элементов данных длиной size из потока stream по адресу ptr. fwrite – записывает n элементов данных длиной size из ptr и поток stream.
Ввод\Вывод (Функции форматированного ввода-вывода) printf – производит форматированный вывод в stdout. scanf – выполняет форматированный вывод из потока stdin. fprintf – посылает форматированный вывод в поток stream. fscanf – выполняет форматированный ввод из потока stream. sprintf – производит форматированный вывод в сстроку buffer. sscanf – выполняет форматированный ввод из строки buffer.
Ввод\Вывод (Функции форматированного ввода-вывода) cprintf – осуществляет форматированный вывод на экран getch – читает один символ с консоли без вывода его на экран. getche – cчитывает один символ с консоли и отображает его в текущем текстовом окне экрана. putch – выводит символ на экран.
Файлы и их значение
Даны вершины треугольника. Проверить, находится ли эта точка внутри этого треугольника. { float x1, x2, x3, x4, y1, y2, y3, y4, a1, a2, a3, b1, b2, b3; printf (Введите первую вершину треугольника); scanf(%f%f, &x1&y1); printf(Введите вторую вершину треугольника); scanf(%f%f, %x2&y2); printf(Введите третью вершину треугольника); scanf(%f%f, &x3&y3); printf(Введите координаты произвольной точки); scanf(%f%f, &x4&y4); a1 = (y2-y1)/(x2-x1); #include main()
Даны вершины треугольника. Проверить, находится ли эта точка внутри этого треугольника. b1 = y1 – a1*x1; a2 = (y3 – y2)/(x3 – x2); b2 = y2 – a2*x2; a3 = (y3 – y1)/(x3 – x1); b3 = y3 – a3*x3; if ( y4 >= a1*x1 + b1 && y4 <= a2*x4 + b2 && y4 <= a3*x4 + b3) printf (Точка %f%f находится внутри треугольника, x4&y4); else printf (Точка %f%f находится вне треугольника, x4, y4); }
С клавиатуры вводится последовательность символов. Посчитать количество цифр в последовательности. { int l=0; char c= ; char ch; printf(Введите последовательность символов\n); for (;;) { ch = getchar(); if (ch == ) break; if (isidigit(ch)) l++; else printf(%c\n, c); printf(%d\n, l); } #include main()
Необходимо найти площадь пятиугольника с вводимых с клавиатуры значений.
Спасибо за внимание!