Содержание
- 2. Программирование на языке Си Часть II Тема 1. Массивы © К.Ю. Поляков, 2007-2009
- 3. Массивы Массив – это группа однотипных элементов, имеющих общее имя и расположенных в памяти рядом. Особенности:
- 4. Массивы A массив 2 15 НОМЕР элемента массива (ИНДЕКС) A[0] A[1] A[2] A[3] A[4] ЗНАЧЕНИЕ элемента
- 5. Объявление массивов Зачем объявлять? определить имя массива определить тип массива определить число элементов выделить место в
- 6. Объявление массивов Еще примеры: int X[10], Y[10]; float zz, A[20]; char s[80]; С присвоением начальных значений:
- 7. Что неправильно? int N = 10; float A[N]; const int int X[4.5]; int A[10]; A[10] =
- 8. Массивы Объявление: Ввод с клавиатуры: Поэлементные операции: Вывод на экран: const int N = 5; int
- 9. Программа #include #include main() { const int N = 5; int A[N], i; // ввод элементов
- 10. Задания «4»: Ввести c клавиатуры массив из 5 элементов, найти среднее арифметическое всех элементов массива. Пример:
- 11. Программирование на языке Си Часть II Тема 2. Максимальный элемент массива © К.Ю. Поляков, 2007-2009
- 12. Максимальный элемент Задача: найти в массиве максимальный элемент. Алгоритм: Псевдокод: // считаем, что элемент A[0] –
- 13. Максимальный элемент max = A[0]; // пока A[0]– максимальный iMax = 0; for ( i=1; i
- 14. Заполнение случайными числами RAND_MAX – максимальное случайное целое число (обычно RAND_MAX = 32767) Случайное целое число
- 15. Целые числа в заданном интервале Целые числа в интервале [0,N-1]: Примеры: Целые числа в интервале [a,b]:
- 16. Заполнение случайными числами #include #include main() { const int N = 10; int A[N], i; printf("Исходный
- 17. Программа #include #include main() { const int N = 5; int A[N], i, iMax; // заполнить
- 18. Задания «4»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и найти в нем
- 19. Программирование на языке Си Часть II Тема 3. Обработка массивов © К.Ю. Поляков, 2007-2009
- 20. Реверс массива Задача: переставить элементы массива в обратном порядке (выполнить инверсию). Алгоритм: поменять местами A[0] и
- 21. Как переставить элементы? 2 3 1 Задача: поменять местами содержимое двух чашек. Задача: поменять местами содержимое
- 22. Программа main() { const int N = 10; int A[N], i, c; // заполнить массив //
- 23. Задания «4»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и выполнить инверсию отдельно
- 24. Циклический сдвиг Задача: сдвинуть элементы массива влево на 1 ячейку, первый элемент становится на место последнего.
- 25. Программа main() { const int N = 10; int A[N], i, c; // заполнить массив //
- 26. Задания «4»: Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и выполнить циклический сдвиг
- 27. Программирование на языке Си Часть II Тема 4. Сортировка массивов © К.Ю. Поляков, 2007-2009
- 28. Сортировка Сортировка – это расстановка элементов массива в заданном порядке (по возрастанию, убыванию, последней цифре, сумме
- 29. Метод пузырька Идея – пузырек воздуха в стакане воды поднимается со дна вверх. Для массивов –
- 30. Программа (1-ый проход) сравниваются пары A[N-2] и A[N-1], A[N-3] и A[N-2] … A[0] и A[1] A[j]
- 31. Программа (следующие проходы) 2-ой проход for ( j = N-2; j >= 1 ; j-- )
- 32. Программа main() { const int N = 10; int A[N], i, j, c; // заполнить массив
- 33. Метод пузырька с флажком Идея – если при выполнении метода пузырька не было обменов, массив уже
- 34. Метод пузырька с флажком i = 0; do { flag = 0; // сбросить флаг for
- 35. Метод выбора Идея: найти минимальный элемент и поставить на первое место (поменять местами с A[0]) из
- 36. Метод выбора N for( i = 0; i nMin = i ; for ( j =
- 37. Задания «4»: Заполнить массив из 10 элементов случайными числами в интервале [0..100] и отсортировать его по
- 38. Формирование массива по условию Задача – найти в массиве элементы, удовлетворяющие некоторому условию (например, отрицательные), и
- 39. Формирование массива по условию Решение: ввести счетчик найденных элементов count, очередной элемент ставится на место B[count].
- 40. Задания «4»: Заполнить массив случайными числами и отобрать в другой массив все числа, у которых вторая
- 41. Программирование на языке Си Часть II Тема 5. Поиск в массиве © К.Ю. Поляков, 2007-2009
- 42. Поиск в массиве Задача – найти в массиве элемент, равный X, или установить, что его нет.
- 43. Линейный поиск nX = -1; for ( i = 0; i if ( A[i] == X
- 44. Двоичный поиск X = 7 X 8 4 X > 4 6 X > 6 Выбрать
- 45. Двоичный поиск N-1 nX = -1; L = 0; R = N-1; // границы: ищем от
- 46. Сравнение методов поиска
- 47. Задания «4»: Написать программу, которая сортирует массив ПО УБЫВАНИЮ и ищет в нем элемент, равный X
- 48. Программирование на языке Си Часть II Тема 6. Массивы в процедурах и функциях © К.Ю. Поляков,
- 49. Массивы в процедурах Задача: составить процедуру, которая переставляет элементы массива в обратном порядке. void Reverse (
- 50. Массивы как параметры процедур Особенности: при описании параметра-массива в заголовке функции его размер не указывается (функция
- 51. Массивы в процедурах void Reverse ( int A[], int N ) { ... } main() {
- 52. Задания «4»: Написать процедуру, которая сортирует массив по возрастанию, и показать пример ее использования. «5»: Написать
- 53. Массивы в функциях Задача: составить функцию, которая находит сумму элементов массива. int Sum ( int A[],
- 54. Массивы в процедурах и функциях int Sum ( int A[], int N ) { ... }
- 55. Задания «4»: Написать функцию, которая находит максимальный элемент в массиве. «5»: Написать логическую функцию, которая определяет,
- 56. Программирование на языке Си Часть II Тема 7. Практикум (моделирование) © К.Ю. Поляков, 2007-2009
- 57. Моделирование кипения воды Задача: Построить компьютерную модель кипения воды. Хранение данных: координаты (центров) пузырьков хранятся в
- 58. Структура программы #include #include #include const int N = 100; int X[N], Y[N], r = 3;
- 59. Основная программа Init(); // начальная расстановка while ( 1 ) // зацикливание ??? { Draw (
- 60. Процедура Init void Init() { int i; for ( i = 0; i X[i] = random(600
- 61. Процедуры Draw, Sdvig Рисование и стирание: void Draw ( int color ) { int i; setcolor
- 62. Процедура Zamena Замена вышедших за границы экрана: 400 void Zamena () { int i; for (
- 63. Задания «4»: Моделирование кипения воды в стакане (синий фон, рамка): «5»: Моделирование двустороннего потока: часть частиц
- 64. Программирование на языке Си Часть II Тема 8. Символьные строки © К.Ю. Поляков, 2007-2009
- 65. Чем плох массив символов? char A[4] = { 'A', '3', '[', 'Ж'}; char B[10]; Это массивы
- 66. Символьные строки рабочая часть s[0] s[1] s[2] s[3] char s[80]; признак окончания строки: символ с кодом
- 67. Объявление символьных строк Объявить строку = выделить ей место в памяти и присвоить имя. char s[80];
- 68. Ввод и вывод символьных строк Задача: ввести слово с клавиатуры и заменить все буквы «а» на
- 69. Ввод одного слова: Ввод строки с пробелами: char q[80]; printf ("Введите текст:\n"); scanf ( "%s", q
- 70. Универсальный способ: Только для одной строки: printf ( "Результат: %s", q ); Вывод символьных строк puts
- 71. Задания «4»: Ввести символьную строку и заменить все буквы "а" на буквы "б" и наоборот, как
- 72. Функции для работы со строками Длина строки: strlen (string length) Подключение библиотеки: #include char q[80] =
- 73. Сравнение строк char q1[80], q2[80]; int n; gets ( q1 ); gets ( q2 ); n
- 74. Пример решения задачи Задача: ввести строку и определить, сколько в ней слов. Программа должна работать только
- 75. Проверка пароля #include main() { char secret[] = "123", pass[20]; printf ( "Введите пароль\n" ); gets
- 76. Основная часть программы #include #include main() { char q[80]; int i, len, count = 0; ...
- 77. Подсказка: для вывода одного символа используйте функцию putchar(символ). Например: Задания (везде – с паролем!) «4»: Ввести
- 78. Копирование строк strcpy (string copy) char q1[10] = "qwerty", q2[10] = "01234"; strcpy ( q1, q2
- 79. Копирование строк копирование в середину строки char q1[10] = "qwerty", q2[10] = "01234"; strcpy ( q1+2,
- 80. Копирование строк strncpy – копирование нескольких символов char q1[10] = "qwerty", q2[10] = "01234"; strncpy (
- 81. Копирование строк копирование строки-константы char q1[10] = "qwerty"; strcpy ( q1+1, "ABCD"); q1 char q1[10] =
- 82. Копирование строк копирование внутри одной строки char q[10] = "012345"; strcpy ( q, q+2 ); q
- 83. Объединение строк strcat (string concatenation) = копирование второй строки в конец первой char q1[10] = "qwe",
- 84. что-то другое Проблемы при копировании строк char q1[] = "qwer", q2[10] = "01234"; strcpy ( q1+2,
- 85. Пример решения задачи Задача: ввести имя файла (без пути) и поменять его расширение на ".exe". Пример:
- 86. Программа main() { char fName[80]; int i; printf("Введите имя файла\n"); gets ( fName ); i =
- 87. Задания «4»: Ввести полный адрес файла (возможно, без расширения) и изменить его расширение на «.exe». Пример:
- 88. Поиск в символьных строках Задача: найти заданный символ или сочетание символов (подстроку) в символьной строке. Указатель
- 89. Указатели char *p; // адрес любого символа или строки int *pI; // адрес целого числа float
- 90. Указатели и символьные строки char str[10] = "0123456"; char *p; p = str; *p = 'A';
- 91. Поиск символа strchr: найти первый заданный символ c начала строки strrchr: найти последний заданный символ в
- 92. Поиск подстроки strstr: найти первую подстроку c начала строки char q[10] = "abcdabcd"; char *p; int
- 93. Пример решения задачи Задача: ввести предложение и определить, сколько раз в нем встречается имя «Вася». Проблема:
- 94. Программа main() { char q[80], *start, *p; int count = 0; puts ( "Введите предложение" );
- 95. Задания «4»: Ввести предложение и заменить все имена «Вася» на «Юра». Пример: Введите предложение: Вася, Вася,
- 96. Строки в процедурах и функциях Задача: составить процедуру, которая переставляет символы строки в обратном порядке. Алгоритм:
- 97. Программа void Reverse ( char s[] ) { int len = strlen(s); char c; for (
- 98. Задания «4»: Разработать процедуру, которая переставляет пары соседних символов. Пример: Введите предложение: Вася пошел гулять! Результат:
- 99. Символьные строки в функциях Задача: составить функцию, которая находит количество цифр в строке. int NumDigits (
- 100. Символьные строки в функциях Основная программа int NumDigits ( char s[] ) { ... } main()
- 101. Задания «4»: Разработать функцию, которая определяет, верно ли, что слово – палиндром. Пример: Введите слово: Введите
- 102. Программирование на языке Си Часть II Тема 9. Рекурсивный перебор © К.Ю. Поляков, 2007-2009
- 103. Рекурсивный перебор Задача: Алфавит языка племени «тумба-юмба» состоит из букв Ы, Ц, Щ и О. Вывести
- 104. Рекурсивный перебор 0 K-1 Рекурсия: Решения задачи для слов из К букв сводится к 4-м задачам
- 105. Процедура 0 K-1 p Глобальные переменные: char s[80]; int count, K; s p+1 рекурсивные вызовы окончание
- 106. Процедура void Rec ( int p ) { const char letters[] = "ЫЦЩО"; int i; if
- 107. Программа char s[80]; int K, count = 0; main() { printf ( "Введите длину слов:\n" );
- 108. Задания Алфавит языка племени "тумба-юмба" состоит из букв Ы, Ц, Щ и О. Число K вводится
- 109. Программирование на языке Си Часть II Тема 10. Матрицы © К.Ю. Поляков, 2007-2009
- 110. Матрицы Задача: запомнить положение фигур на шахматной доске. 1 2 3 4 5 6 c6 A[5][2]
- 111. Матрицы Матрица – это прямоугольная таблица однотипных элементов. Матрица – это массив, в котором каждый элемент
- 112. Матрицы Объявление: const int N = 3, M = 4; int A[N][M]; float a[2][2] = {{3.2,
- 113. Матрицы Заполнение случайными числами for ( i = 0; i for ( j = 0; j
- 114. Обработка всех элементов матрицы Задача: заполнить матрицу из 3 строк и 4 столбцов случайными числами и
- 115. Задания Заполнить матрицу из 8 строк и 5 столбцов случайными числами в интервале [-10,10] и вывести
- 116. Операции с матрицами Задача 1. Вывести на экран главную диагональ квадратной матрицы из N строк и
- 117. Операции с матрицами Задача 3. Найти сумму элементов, стоящих на главной диагонали и ниже ее. строка
- 118. Операции с матрицами Задача 4. Перестановка строк или столбцов. В матрице из N строк и M
- 119. Задания Заполнить матрицу из 7 строк и 7 столбцов случайными числами в интервале [-10,10] и вывести
- 120. Программирование на языке Си Часть II Тема 11. Файлы © К.Ю. Поляков, 2007-2009
- 121. Файлы Файл – это область на диске, имеющая имя. Файлы только текст без оформления, не содержат
- 122. Принцип сэндвича I этап. открыть файл (сделать его активным, приготовить к работе) f = fopen("qq.dat", "r");
- 123. Работа с файлами Особенности: имя файла упоминается только в команде fopen, обращение к файлу идет через
- 124. Последовательный доступ при открытии файла курсор устанавливается в начало чтение выполняется с той позиции, где стоит
- 125. Ошибки при открытии файла FILE *f; f = fopen("qq.dat", "r"); if ( f == NULL )
- 126. Пример Задача: в файле input.txt записаны числа (в столбик), сколько их – неизвестно. Записать в файл
- 127. Как определить, что числа кончились? FILE *f; int n, x; f = fopen("input.txt", "r"); ... n
- 128. Программа main() { FILE *f; int n, x, S = 0; f = fopen ( "input.txt",
- 129. Задания В файле input.txt записаны числа, сколько их – неизвестно. «4»: Найти среднее арифметическое всех чисел
- 130. Обработка массивов Задача: в файле input.txt записаны числа (в столбик), сколько их – неизвестно, но не
- 131. Чтение данных в массив int ReadArray ( int A[], char fName[], int MAX ) { int
- 132. Программа main() { int A[100], N, i; FILE *f; N = ReadArray ( A, "input.txt", 100
- 133. Задания В файле input.txt записаны числа (в столбик), известно, что их не более 100. «4»: Отсортировать
- 134. Обработка текстовых данных Задача: в файле input.txt записаны строки, в которых есть слово-паразит "короче". Очистить текст
- 135. Обработка текстовых данных Особенность: надо одновременно держать открытыми два файла (один в режиме чтения, второй –
- 136. Работа с файлами main() { char s[80], *p; int i; FILE *fIn, *fOut; fIn = fopen("input.txt",
- 137. Обработка текстовых данных Чтение строки s: while ( 1 ) { p = strstr ( s,
- 138. #include Полный цикл обработки файла while ( 1 ) { p = fgets ( s, 80,
- 139. Задания В файле input.txt записаны строки, сколько их – неизвестно. «4»: Заменить во всем тексте «в
- 140. Двоичные файлы Особенности: данные хранятся во внутреннем машинном формате (в текстовом редакторе не прочитать) можно читать
- 141. Открытие и закрытие двоичных файлов Открытие файла fp = fopen ( "input.dat", "rb" ); "rb" =
- 142. Чтение по блокам Чтение в начало массива int A[100]; n = fread ( A, sizeof(int), 100,
- 143. Запись по блокам Запись с начала массива int A[100]; n = fwrite( A, sizeof(int), 100, fp
- 144. Работа с матрицами Хранение в памяти: по строкам (Си, Паскаль) Запись матрицы int A[3][3]; FILE *fp
- 145. Пример Задача: прочитать массив из файла input.dat, умножить все элементы на 2 и вывести в файл
- 146. Работа с файлами fp = fopen( "input.dat", "rb" ); if ( fp == NULL ) {
- 147. Задания «4»: В текстовом файле input.txt записан массив целых чисел. Отсортировать его и записать в двоичный
- 149. Скачать презентацию