- •Тема 1. Основные этапы решения задач на эвм 5
- •Тема 2. Жизненный цикл программы. Критерии качества программы. 15
- •Тема 3. Схемы алгоритмов, данных, программ 29
- •Тема 1. Основные этапы решения задач на эвм Постановка задачи разработки программного обеспечения
- •Анализ формальной постановки задачи
- •Выбор или разработка математической модели и метода решения
- •Разработка алгоритма
- •Базовые структуры алгоритма
- •3.2. Цикл с постусловием.
- •Тема 2. Жизненный цикл программы. Критерии качества программы.
- •Техническое задание и спецификация программы
- •Разработка проекта программной системы
- •Программирование (кодирование) или программная реализация алгоритмов
- •Тестирование и отладка
- •Эксплуатация и сопровождение
- •Критерии качества программного обеспечения
- •Тема 3. Схемы алгоритмов, данных, программ
- •Символы данных
- •Отображает данные, вводимые в ручную, во время обработки с устройств любого типа (клавиатура, переключатели, кнопки, световое перо, полоски со штрих кодом и т.Д.).
- •Символы процесса
- •Символы линий
- •Специальные символы
- •Правила применения символов в схемах
- •Правила выполнения соединений
- •Специальные условные обозначения
- •Тема 4. Язык программирования высокого уровня Си Общие сведения о языке Си
- •Алфавит языка Си
- •Грамматика для описания языка, синтаксические диаграммы
- •Структура программы на языке Си
- •Void main() //функция main
- •Имена объектов в программе
- •Выражения, операции и приоритеты
- •Тема 5. Стандартные типы данных
- •Тема 6. Составные типы данных Данные регулярного типа (массивы)
- •Int b [n]; // вектор из 10 целых элементов
- •9 Strcpy(s1,&s2[k]); //копирует правую подстроку из s2 в s1
- •9 Strncpy(s1,&s[2],n); //копирует среднюю подстроку из s2 в s1
- •Void main() /*пример функции*/
- •If(strcmp(s, "пароль"))
- •If(!strсmp("quit", s)) break;
- •Данные комбинированного типа (структуры)
- •Int month;
- •Int year;
- •Перечисления
- •Объединения
- •Указатели
- •Void *addres;
- •Int arrey[25];
- •Тема 7. Представление основных управляющих структур программирования Оператор присваивания
- •Составной оператор
- •Оператор перехода Goto
- •Условный оператор If
- •Оператор выбора switch
- •Операторы цикла while, do – while, for
- •Int I,j,imax,jmax,imin,jmin;
- •Операторы прерывания циклов
- •If (!flag) printf("Отрицательных чисел нет"); Форматированный ввод данных
- •Форматированный вывод данных
- •Преобразование типов
- •Инициализация данных
- •Тема 8. Функции
- •Определение функций в языке Си
- •Int rus (unsigned char r)
- •Void change (int X, int y)
- •Void change (int *X, int *y)
- •Вызов функций в языке Си
- •Int *fun (intx,int *y);
- •Int main()
- •Рекурсивные функции
- •Int nodWhile (int m, int n)
- •Int nodWhile (int m, int n)
- •Int main()
- •Int fCalculated[nFib];
- •Int FibDinam (int n)
- •Int main()
- •Int Summa(int n, int a[100])
- •Int main()
- •Тема 9. Файлы
- •Int fseek(file *fp, long count, int access);
- •Int ferror(file *fp);
- •Int remove(char *file_name);
- •Void rewind(file *fp);
- •Int main()
- •Тема 10. Приемы программирования. Примеры алгоритмов Алгоритмы сортировки
- •Исходный массив
- •Void SortBubble (int count, int* pArr)
- •Исходный массив
- •Void SortSelect(int count, int* pArr)
- •Int i1,temp;
- •Int jmax;
- •Void SortInsert (int count, int* pArr)
- •Int temp, j;
- •Алгоритмы поиска
- •Int bfSearch(char *s, char *p)
- •Int bmtarr[255];
- •Int bmSearch(int startpos, char *s, char *p)
- •Int BinarySearch (int lb, int ub, int key, int* pArr)
- •Динамические структуры данных
- •Линейные списки
- •Int value; // значение элемента
- •Void PrintSearchList (list head, int val)
- •If (lfound) printf("Элемент в списке найден!");
- •Стек, очередь, дек
- •Int prior(char);
- •Void main(void)
- •Int k, point;
- •Int prior(char a)
- •Деревья
- •Int info; //информационное поле
- •Приложение 1. Стандартные библиотеки языка Си
- •Приложение 2. Примеры реализации алгоритмов
- •Int main()
- •Int arr[10]; // Массив arr из 10 целочисленных элементов
- •Int I; // Счетчик для циклов
- •Int main()
- •Int main()
- •Int main()
- •Int Temp;
- •Int CurrentYear, Diff, Day1, Day2, Month1, Month2, I, Visokos;
- •Int main()
- •InsertSort(d, max); // Сортируем массив b методом вставок
- •Int number;
- •Int main()
- •Не рекурсивный алгоритм решения задачи Ханойская башня.
- •Int main()
- •Рекурсивный алгоритм решения задачи Ханойская башня.
- •Void move(int I, int j, int d)
- •Void hanoy(int I, int j, int k, int d)
- •Int main()
- •Int Cubic(double *X,double a,double b,double c);
- •Int Cubic (double *X, double a, double b, double c)
- •Void lu_backsub (double **a, int n, int *indx, double *b)
- •Void lu_invert (double **a, int n, int *indx, double **inv, double *col)
- •Int BracketRoot (double x0, double *a, double *b, double d0, double di, double dmax, double (*fun)(double));
- •Int BracketRoot (double x0, double *a, double *b, double d0,
- •Int main()
- •Int expo, I;
- •If (expo & 1)
- •Int main()
- •Приложение 3. Лабораторные работы Лабораторная работа №1
- •Лабораторная работа №2
- •Лабораторная работа №3
- •Лабораторная работа №4
- •Лабораторная работа №5
- •Лабораторная работа №6
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Лабораторная работа №9
- •Лабораторная работа №10
- •Лабораторная работа №11
- •Лабораторная работа №12
- •Список литературы
Int I,j,imax,jmax,imin,jmin;
// ввод матрицы пока пропускаем
max=a[2][1]; imax=2; jmax=1;
min=a[1][1]; imin=1; jmin=1; i=1;
do
{
j=1;
do
{
//если нечетная строка и элемент меньше минимального
if ((i%2)!=0 && a[i][j]<min)
{
min=a[i][j];
imin=i; jmin=j;
}
else
if (((i%2)==0) && (a[i][j]>max))
{
max=a[i][j];
imax=i; jmax=j;
}
j++;
}
while (j>n);
i++;
}
Цикл с заданным количеством итераций (цикл с параметром) for
Цикл for лучше всего использовать, когда известно количество повторений в цикле. Программа при этом становится короче и понятнее.
Синтаксис
FOR (выражение 1; выражение 2; выражение 3) <оператор>
Здесь «выражение 1» задает начальное значение переменной цикла, «выражение 2» – это выражение, определяющее условие, при котором тело цикла будет выполняться, «Выражение 3» определяет изменение переменных, управляющих циклом после каждого выполнения тела цикла. Значения «выражения 1» и «выражения 2» должны быть типа, совместимого по присваиванию с типом переменной цикла. Таким образом, цикл for может быть реализован на основе цикла с предусловием:
<переменная>=<выражение 1>;
while <переменная> <= <выражение 2>
{
<оператор>;
<переменная>++;
}
Вход в цикл возможен только через его заголовок, т.е. нельзя войти во внутрь цикла, используя оператор goto. Однако с помощью этого оператора можно досрочно выйти из цикла, что делать не рекомендуется, для этого используется оператор break. При нормальном завершении цикла значение переменной цикла неопределенно, если цикл завершился преждевременно по оператору break или goto, то переменная цикла сохраняет свое последнее значение. В теле цикла for запрещается изменять переменную цикла.
Пример 19. Необходимо ввести и вывести матрицу вещественных чисел с помощью цикла с параметром, по пути подсчитав сумму всех ее элементов.
int n=10;
int a[10][10];
int sum=0;
int i,j;
for (i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("Введите элемент матрицы [%d %d]: ",i,j);
scanf("%d",&a[i][j]);
}
}
printf("Введенная матрица:");
for (i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",a[i][j]);
sum = sum + a[i][j]; // считаем сумму
}
printf("\n");
}
printf("Сумма элементов = %d", sum);
Операторы прерывания циклов
В некоторых случаях необходимо прервать повторение цикла, проанализировав какие-то условия внутри тела цикла. Это может потребоваться в тех случаях, когда проверки условия для окончания цикла громоздкие, требуют многоэтапного сравнения и сопоставления каких-то данных, и все эти проверки просто невозможно разместить в выражении условия операторов while, do-while или for. Для этого можно использовать оператор break. Он прерывает выполнение тела любого цикла for, do-while или while и передает управление следующему за циклом выполняемому оператору. Еще один способ прерывания – использование оператора goto, передающего управление какому-то оператору, расположенному вне тела цикла. Такой способ нарушает концепции структурного программирования и не рекомендуется к использованию.
Для прерывания циклов, размещенных в процедурах или функциях, можно воспользоваться стандартной процедурой exit. В отличие от оператора break, процедура exit прерывает не только выполнение цикла, но и выполнение той процедуры или функции, в которой расположен цикл.
Иногда внутри тела цикла возникает необходимость прервать только выполнение текущей итерации и перейти к следующей. В этом случае можно воспользоваться стандартной процедурой continue, которая передает управление в заголовок цикла.
Пример 20. Написать программу, которая находит в массиве целых чисел первое отрицательное число и выводит его на экран.
const int n=10;
int mas[n];
int i;
bool flag; //переменная–индикатор отсутствия отрицательных элементов в массиве
flag=false;
for(i=0;i<n;i++)
{
printf("Введите %d элемент массива: ",i);
scanf("%d",&mas[i]);
}
for (i=0;i<n;i++) //теперь ищем отрицательное число
{
if (mas[i] > 0) continue; // переходим в заголовок цикла
printf ("Первое отрицательное число = %d. Номер = %d\n",mas[i],i);
flag = true;
break; // отрицательное число найдено – можно прервать цикл
}