Содержание
- 2. Язык программирования СИ Си (англ. C) — компилируемый статически типизированный язык программирования общего назначения, разработанный в
- 3. Обзор Язык программирования Си отличается минимализмом. Авторы языка хотели, чтобы программы на нём легко компилировались с
- 4. Ранние разработки Язык программирования Си был разработан в лабораториях Bell Labs в период с 1969 по
- 5. K&R C В 1978 году Ритчи и Керниган опубликовали первую редакцию книги «Язык программирования Си». Эта
- 6. ISO C ANSI C В конце 1970-х годов Си начал вытеснять Бейсик с позиции ведущего языка
- 7. C99 После стандартизации в ANSI спецификация языка Си оставалась относительно неизменной в течение долгого времени, в
- 8. C11 8 декабря 2011 опубликован новый стандарт для языка Си (ISO/IEC 9899:2011). Основные изменения: поддержка многопоточности;
- 9. Связь с C++ Язык программирования С++ произошёл от Си. Однако в дальнейшем Си и C++ развивались
- 10. C++ C++ (произносится «си плас плас», допустимо также русскоязычное произношение «си плюс плюс») — компилируемый статически
- 11. Ключевые слова В С89 есть 32 ключевых слова:
- 12. Приоритет операций
- 13. Приоритет операций
- 14. Базовые типы данных языка С
- 16. Hello в стиле СИ //*********prog1.cpp********* #include void main(void) { printf("Hello\n"); }
- 17. Hello в стиле С++ //*********prog2.cpp********* #include void main(void) { cout }
- 18. Hello в стиле С++ на современных компиляторах //*********prog2.cpp********* #include using namespace std; int main(void) { cout
- 19. Использование переменных Любая переменная, используемая в программе, должна быть описана перед первым её использованием. Описать переменную
- 20. Некоторые функции стандартного ввода-вывода Функции стандартного ввода - вывода описаны в файле stdio.h. printf() - форматный
- 21. %[flags][width][.prec]type
- 22. scanf() - форматный ввод с клавиатуры: int scanf(char *format, ); Первый параметр является символьной строкой, которая
- 23. //*********prog4.cpp********* #include void main(void) { float a,b,c; printf(“input a:”); scanf(“%f”,&a); printf(“input b:”); scanf(“%f”,&b); c=a/b; printf("c=%f\n",c); }
- 24. Вывод значений нескольких переменных //*********prog4.cpp********* #include void main(void) { float a=1.5; int b=7; char c=‘A’; char
- 25. Ввод вывод в С++ //*********prog5.cpp********* #include void main(void) { float a,b,c; cout cin>>a; cout cin>>b; c=a/b;
- 26. Целочисленное деление (оба операнда — целые числа) Деление не целочисленное (операнд 5. - вещественное число)
- 27. Условный оператор if Усл верно Опер 2 Опер 1 Опер 3 Да Нет if(условие) Опер1; else
- 28. Условный оператор if Усл верно Опер 1 Опер 2 Да Нет if(условие)Опер1; Опер 2; Краткая форма
- 29. Логические операции Язык С имеет ровно три логические операции: это && или (AND); || или (OR);
- 30. Таблицы истинности логических операций Операция "&&" называется логическим умножением потому, что выполняется таблица истинности этой операции,
- 31. Операция "||" (ИЛИ) называется логическим сложением потому, что выполняется таблица истинности этой операции, очень напоминающая таблицу
- 32. Пример с полной формой if /* Объявления переменных x и y и ввод исходных данных */
- 33. Пример с краткой формой if /* Объявления переменных “x” и “y” и ввод исходных данных */
- 34. Операции инкремента и декремента Операции инкрементации и декрементации являются унарными операциями, то есть операциями, имеющими один
- 35. Операндом может быть именующее выражение, например, имя переменной. Следующие три строки увеличивают переменную x на 1:
- 36. Префиксная (++x, --x ) и постфиксная (x++ , x--) форма Операции инкрементации и декрементации имеют префиксную
- 37. Сложное присваивание Сложное Аналог присваивание y+=5; y=y+5; y-=5; y=y-5; y*=5; y=y*5; y/=5; y=y/5;
- 40. Заполнение лидирующими нулями
- 41. Операторы циклов for while do …..while
- 42. Оператор for выр2 верно Опер 1 Опер 2 Да Нет for(выр1; выр2;выр3) Опер1; Опер 2; выр3
- 43. Пример int i; for( i=1;i cout На экране увидим: 12345 Переменную i обычно называют счетчиком цикла;
- 45. Оператор while усл верно Опер Да Нет while(условие) Опер; Цикл с предусловием
- 46. Пример int i; i=1; while( i { cout i++; } На экране увидим: 12345
- 47. Оператор do while усл верно Опер Да Нет do { Опер; } while(условие); Цикл с постусловием
- 48. Пример int i; i=1; do { cout i++; } while( i На экране увидим: 12345
- 49. Сравнение операторов циклов
- 50. Задача табулирования
- 51. Задача табулирования //********* for ( format output) **************** #include #include void main(viod) { float x,y,xn,xk,dx; int
- 52. Операторы break continue
- 53. Операторы break и continue Часто при возникновении некоторого события удобно иметь возможность досрочно завершить цикл. Используемый
- 54. #include int main(void) { int i; for(i=1;i { if(i==5) break; printf(“%d” ,i); } return 0; }
- 55. Оператор continue Оператор continue тоже предназначен для прерывания циклического процесса, организуемого операторами for, while, do-while. Но
- 56. #include int main(void) { int i; for(i=1;i { if(i==5) continue; printf(“%d” ,i); } return 0; }
- 57. Переключатель switch Оператор switch (переключатель) предназначен для принятия одного из многих решений. Он выглядит следующим образом:
- 58. При выполнении этого оператора вычисляется выражение, стоящее в скобках после ключевого слова switch, которое должно быть
- 60. Калькулятор (правильный) Пример - калькулятор #include main() { int a,b,c; char op; printf( “ Input a
- 61. Массивы Массив - это упорядоченная совокупность данных одного типа. Можно говорить о массивах целых чисел, массивов
- 62. В случае многомерных массивов показывают столько пар скобок , какова размерность массива, а число внутри скобок
- 63. Элементам массива могут быть присвоены начальные значения: int a[6]={5,0,4,-17,49,1}; приведенная запись обеспечивает присвоения a[0]=5; a[1]=0; a[2]=4
- 65. Расположение массивов в памяти double arr[]={0.1,1.1,2.1,3.1,4.1,5.1,6.1,7.1,8.1,9.1}; for(i=0;i { cout } arr[0]=0.1 addr=0x1ebd0fa8 arr[1]=1.1 addr=0x1ebd0fb0 arr[2]=2.1 addr=0x1ebd0fb8
- 66. Многомерные массивы Многомерные массивы - это массивы с более чем одним индексом. Чаще всего используются двумерные
- 67. В памяти многомерные массивы представляются как одномерный массив, каждый из элементов которого, в свою очередь, представляет
- 68. Программа инициализирует массив и выводит его элементы на экран. #include int main () { int a[3]
- 69. //Ввод массива int a[3] [2]; int i,j; for (i=0; i for(j=0;j { cout cin>> a[i][j]; }
- 70. //обработка массива ( сумма элем.) int s=0; for (i=0; i for(j=0;j s+=a[i][j];
- 71. //вывод на экран for (i=0; i { for(j=0;j cout cout }
- 73. Указатели Указатели — это переменные, которые хранят адрес объекта (переменной) в памяти. Для объявления указателя нужно
- 74. Теперь сделаем так, чтобы указатели на что-нибудь указывали: int some_number=5, some_other_number=10; pNumberOne = &some_number; pNumberTwo =
- 76. #include void main() { // объявляем переменные: int nNumber; int *pPointer; // инициализируем объявленные переменные: nNumber
- 77. Динамическая память Динамическая память позволяет выделять/освобождать память во время работы программы. Код ниже демонстрирует, как выделить
- 78. Освобождение памяти С памятью всегда существуют сложности и в данном случае довольно серьезные, но эти сложности
- 80. Операции с указателями Унарные операции: инкремент и декремент. При выполнении операций ++ и -- значение указателя
- 82. Операции с указателями В бинарных операциях сложения и вычитания могут участвовать указатель и величина типа int.
- 84. Операции с указателями В операции вычитания могут участвовать два указателя на один и тот же тип.
- 86. Операции с указателями Значения двух указателей на одинаковые типы можно сравнивать в операциях ==, !=, ,
- 87. Методы доступа к элементам массивов Для доступа к элементам массива существует два различных способа. Первый способ
- 88. Методы доступа к элементам массивов Второй способ доступа к элементам массива связан с использованием адресных выражений
- 89. Функции Мощность языка программирования С во многом определяется легкостью и гибкостью в определении и использовании функций
- 90. функции При вызове функции ей при помощи аргументов (формальных параметров) могут быть переданы некоторые значения (фактические
- 91. Функции С использованием функций в языке СИ связаны три понятия: определение функции (описание действий, выполняемых функцией)
- 92. Определение функции задает тип возвращаемого значения, имя функции, типы и число формальных параметров, а также объявления
- 93. В языке СИ нет требования, чтобы определение функции обязательно предшествовало ее вызову. Определения используемых функций могут
- 94. Функции В программах на языке СИ широко используются, так называемые, библиотечные функции, т.е. функции предварительно разработанные
- 95. В соответствии с синтаксисом языка СИ определение функции имеет следующую форму: [спецификатор-класса-памяти] [спецификатор-типа] имя-функции ([список-формальных-параметров]) {
- 96. Функции ( возвращаемое значение) Функция возвращает значение если ее выполнение заканчивается оператором return, содержащим некоторое выражение.
- 97. Список-формальных-параметров Список-формальных-параметров - это последовательность объявлений формальных параметров, разделенная запятыми. Формальные параметры - это переменные, используемые
- 98. Формальные параметры Порядок и типы формальных параметров должны быть одинаковыми в определении функции и ее объявлении.
- 99. Передача параметров по значению Параметры функции передаются по значению и могут рассматриваться как локальные переменные, для
- 100. Пример: /* Неправильное использование параметров */ void change (int x, int y) { int k=x; x=y;
- 101. Передача параметров по указателю Однако, если в качестве параметра передать указатель на некоторую переменную, то используя
- 102. /* Правильное использование параметров */ void change (int *x, int *y) { int k=*x; *x=*y; *y=k;
- 103. Передача параметров по ссылке /* Правильное использование параметров */ void change (int &x, int &y) {
- 104. Ввод массива #include void vvod(float mas[],int n) { int i; for(i=0; i { printf("mas[%d]=", i); scanf("%f",
- 105. Вывод массива void vivod(float mas[], int n) { int i; for(i=0; i printf("mas[%d]=%7.3f\n",i,mas[i]); }
- 106. Обработка массива ( функция возвращает сумму отрицательных элементов) float otr(float mas[],int n) { int i; float
- 107. Вызов функций int main() { float s; int n; char c; float a[10]; printf("vvesti razmer\n"); scanf("%d",&n);
- 108. Лаб. Раб. 7 вар 9
- 109. Функция main int main() { int n; char c; float a[100], b[100], c[100], as[100], bs[100], cs[100],
- 110. Функция, возвращающая сумму элементов массива float sum(float mas[],int n) { int i; float s=0; for(i=0; i
- 111. Функция strih void strih(float m[],float ms[],int n) { int i; float s; s=sum(m,n); for(i=0; i ms[i]=m[i]/s;
- 112. Функция calc void calc(float m1[],float m2[],float mrez[],int n) { int i; for(i=0; i mrez[i]=m1[i]+m2[i]; }
- 113. Прототипы функций void vvod(float mas[],int n); void vivod(float mas[], int n); float sum(float mas[],int n); void
- 118. Проекты
- 123. Препроцессор Компилятор Компоновщик func.cpp func.o main.cpp main.o mas2fun_pro.exe библиотеки
- 124. Область действия ( видимость ) переменных #include void main(void) { int a=10; { int a=5; cout
- 125. Автоматические и статические преременные #include int calc() { int a=0; a++; return(a); } void main(void) {
- 126. #include int calc() { static int a=0; a++; return(a); } void main(void) { int x; x=calc();
- 127. Динамические массивы #include void inputarr(int *inarr, int n, char arrname[]) { int i; cout for (i=0;
- 128. void outputarr(int *outarr, int n, char arrname[]) { int i; for (i=0; i cout }
- 129. void createoutarr(int arr1[], int arr2[], int outarr[], int n) { int i; for (i=0; i }
- 130. void main() { int *x,*y,*z,*xy,*xz,*yz; int Size; cout cin>>Size; x =new int[Size]; y =new int[Size]; z
- 131. inputarr(x, Size, "x"); inputarr(y, Size, "y"); inputarr(z, Size, "z"); createoutarr(x, y, xy, Size); createoutarr(x, z, xz,
- 132. Освобождение динамической памяти delete [] x; delete [] y; delete [] z; delete [] xy; delete
- 133. Передача имен функций в качестве параметров Функцию можно вызвать через указатель на нее. Для этого объявляется
- 134. #include #include #include int f(int a ){ return a; } int (*pf)(int); int main(void) { pf
- 135. #include #include #include int f(int a ){ return a; } int (*pf)(int); void fun(int (*pf)(int) ,
- 136. Перегрузка функций Перегрузка функций — это механизм, который позволяет двум родственным функциям иметь одинаковые имена. В
- 138. Аргументы, передаваемые функции по умолчанию В C++ мы можем придать параметру некоторое значение, которое будет автоматически
- 139. Включение в C++ возможности передачи аргументов по умолчанию позволяет программистам упрощать код программ. Чтобы предусмотреть максимально
- 141. Важно понимать, что все параметры, которые принимают значения по умолчанию, должны быть расположены справа от остальных.
- 142. Об использовании аргументов, передаваемых по умолчанию Несмотря на то что аргументы, передаваемые функции по умолчанию, —
- 144. Перегрузка функций и неоднозначность Неоднозначность возникает тогда, когда компилятор не может определить различие между двумя перегруженными
- 145. // Неоднозначность вследствие перегрузки функций. #include using namespace std; float myfunc(float i); double myfunc(double i); int
- 146. Здесь благодаря перегрузке функция myfunc() может принимать аргументы либо типа float, либо типа double. При выполнении
- 149. Возврат ссылок Функция может возвращать ссылку. В программировании на C++ предусмотрено несколько применений для ссылочных значений,
- 151. Рассмотрим эту программу подробнее. Судя по прототипу функции f(), она должна возвращать ссылку на double-значение. За
- 152. программа изменяет значения второго и четвертого элементов массива
- 153. Функция change_it() объявлена как возвращающая ссылку на значение типа double. Говоря более конкретно, она возвращает ссылку
- 154. Создание ограниченного массива Ссылочный тип в качестве типа значения, возвращаемого функцией, можно с успехом применить для
- 156. Независимые ссылки Понятие ссылки включено в C++ главным образом для поддержки способа передачи параметров "по ссылке"
- 158. Функция Си/ C++ - qsort //void qsort(void *base, size_t nelem, //size_t width, int (*fcmp)(const void *,
- 159. #include #include #include int sort_function( const void *a, const void *b); char list[5][4] = { "cat",
- 161. Двумерные динамические массивы Санкт-Петербургский государственный университет телекоммуникаций им. проф. М.А. Бонч-Бруевича
- 162. Вспомним одномерные динамич. массивы
- 163. Работаем с дин. масс. как с обычным массивом
- 164. Освобождаем память
- 165. Двумерный динамический массив
- 166. Недостаток!
- 167. Вывод! Нужно сделать массив указателей динамическим!
- 172. Массив указателей на функции Массив указателей на функции определяется точно также, как и обычный массив –
- 176. Часто указатели на функцию становятся громоздкими. Работу с ними можно упростить, если ввести новый тип. Предыдущий
- 179. Препроцессор C++ Препроцессор C++ подвергает программу различным текстовым преобразованиям до реальной трансляции исходного кода в объектный.
- 180. Директива #define Директива #define используется для определения идентификатора и символьной последовательности, которая будет подставлена вместо идентификатора
- 181. После определения имени макроса его можно использовать как часть определения других макроимен. Например, следующий код определяет
- 182. Если текстовая последовательность не помещается на строке, ее можно продолжить на следующей, поставив обратную косую черту
- 183. Макроопределения, действующие как функции Директива #define имеет еще одно назначение: макроимя может использоваться с аргументами. При
- 184. Макроопределения, действующие как функции, — это макроопределения, которые принимают аргументы. Кажущиеся избыточными круглые скобки, в которые
- 185. // Эта программа работает корректно. #include using namespace std; #define EVEN(a) (a)%2==0 ? 1 : 0
- 186. Директива #еrror Директива #error отображает сообщение об ошибке. Директива #error дает указание компилятору остановить компиляцию. Она
- 187. Директива #include Директива #include включает заголовочный или другой исходный файл. Директива препроцессора #include обязывает компилятор включить
- 188. Директивы условной компиляции Существуют директивы, которые позволяют избирательно компилировать части исходного кода. Этот процесс, именуемый условной
- 189. // Простой пример использования директивы #if. #include using namespace std; #define MAX 100 int main() {
- 190. Поведение директивы #else во многом подобно поведению инструкции else, которая является частью языка C++: она определяет
- 191. Директива #elif эквивалентна связке инструкций else-if и используется для формирования многозвенной схемы if-else-if,представляющей несколько вариантов компиляции.
- 192. Например, в этом фрагменте кода используется идентификатор COMPILED_BY, который позволяет определить, кем компилируется программа. #define JOHN
- 193. Директивы #if и #elif могут быть вложенными. В этом случае директива #endif, #else или #elif связывается
- 194. Директивы #ifdef и #ifndef Директивы #ifdef и #ifndef предлагают еще два варианта условной компиляции, которые можно
- 195. Директива #undef Директива #undef используется для удаления предыдущего определения некоторого макроимени. Ее общий формат таков. #undef
- 196. Использование оператора defined Помимо директивы #ifdef существует еще один способ выяснить, определено ли в программе некоторое
- 197. Директива #line Директива #line изменяет содержимое псевдопеременных _ _LINE_ _ и _ _FILE_ _. Директива #line
- 198. Директива #pragma Работа директивы #pragma зависит от конкретной реализации компилятора. Она позволяет выдавать компилятору различные инструкции,
- 199. Операторы препроцессора "#" и "##" В C++ предусмотрена поддержка двух операторов препроцессора: "#" и"##". Эти операторы
- 200. ## Оператор используется для конкатенации двух лексем. Рассмотрим пример. #include using namespace std; #define concat(a, b)
- 202. Скачать презентацию