 
        
        - •1. Понятие информации. Виды информации. Единицы измерения информации. Информация и данные.
- •Информация может существовать в виде:
- •6. Форматы представления вещественных чисел. Структура представления числа: мантисса, порядок. Диапазон вещественного числа и количество значащих цифр.
- •11. Синтаксические и логические ошибки. Тестирование и отладка программы.
- •15. Функции форматного ввода и вывода. Параметры. Управляющая строка. Спецификаторы формата. Управляющие символы.
- •Спецификаторы формата:
15. Функции форматного ввода и вывода. Параметры. Управляющая строка. Спецификаторы формата. Управляющие символы.
 
 
	
	 
Управляющая строка содержит спецификации преобразования и используется для установления количества и типов аргументов. В нее могут включаться:
пробелы, символы табуляции и перехода на новую строку (все они игнорируются);
спецификации преобразования, состоящие из знака %, возможно, символа * (запрещение присваивания), возможно, числа, задающего максимальный размер поля, и самого символа преобразования;
обычные символы, кроме % (считается, что они должны совпадать с очередными неизвестными символами во входном потоке).
Функция printf() это функция форматированного вывода. Это означает, что в параметрах функции необходимо указать формат данных, которые будут выводиться. Формат данных указывается спецификаторами формата. Спецификатор формата начинается с символа % за которым следует код формата.
Спецификаторы формата:
| %с | символ | 
| %d | целое десятичное число | 
| %i | целое десятичное число | 
| %e | десятичное число в виде x.xx e+xx | 
| %E | десятичное число в виде x.xx E+xx | 
| %f | десятичное число с плавающей запятой xx.xxxx | 
| %F | десятичное число с плавающей запятой xx.xxxx | 
| %g | %f или %e, что короче | 
| %G | %F или %E, что короче | 
| %o | восьмеричное число | 
| %s | строка символов | 
| %u | беззнаковое десятичное число | 
| %x | шестнадцатеричное число | 
| %X | шестнадцатеричное число | 
| %% | символ % | 
| %p | Указатель | 
| %n | Указатель | 
Кроме спецификаторов формата данных в управляющей строке могут находиться управляющие символы:
| \b | BS, забой | 
| \f | Новая страница, перевод страницы | 
| \n | Новая строка, перевод строки | 
| \r | Возврат каретки | 
| \t | Горизонтальная табуляция | 
| \v | Вертикальная табуляция | 
| \" | Двойная кавычка | 
| \' | Апостроф | 
| \\ | Обратная косая черта | 
| \0 | Нулевой символ, нулевой байт | 
| \a | Сигнал | 
| \N | Восьмеричная константа | 
| \xN | Шестнадцатеричная константа | 
| \? | Знак вопроса | 
Чаще всего вы будете использовать символ \n. С помощью этого управляющего символа вы сможете переходить на новую строку.
16.Алгоритмическая конструкция ветвления: полная и неполная форма, блок-схемы. Условная операция. Условный оператор в языке Си: структура оператора, полная и неполная формы, использование сложных условий. Пример на языке Си.
	Ветвление -
	управляющая структура, организующая
	выполнение лишь одного из двух указанных
	действий в зависимости от справедливости
	некоторого условия. 
Условие -
	вопрос, имеющий два варианта ответа:
	да или нет. 
Запись
	ветвления выполняется в двух формах:
	полной и неполной. 
Полная
	форма: 
 
 Неполная
	форма:
 
Неполная
	форма: 
 
 
	 
 
 
17.Алгоритмическая конструкция выбора: понятие, блок-схема. Оператор выбора в языке Си: структура оператора. Пример программы на Си.
 
 
18.Циклические алгоритмы: понятие, виды (перечислить). Алгоритмическая конструкция цикла с предусловием (понятие, использование, блок-схема). Оператор цикла for: структура оператора, пример использования.
Цикл
	"до": 
 Исполнение
	цикла начинается с выполнения действия.
	Таким образом тело цикла будет реализовано
	хотя бы один раз. После этого происходит
	проверка условия. Поэтому цикл "до"
	называют циклом с постусловием. Если
	условие не выполняется, то происходит
	возврат к выполнению действий. Если
	условие истинно, то осуществляется
	выход из цикла. Таким образом условие
	цикла "до" - это условие выхода.
	Для предотвращения зацикливания
	необходимо предусмотреть действия,
	приводящие к истинности условия.
Исполнение
	цикла начинается с выполнения действия.
	Таким образом тело цикла будет реализовано
	хотя бы один раз. После этого происходит
	проверка условия. Поэтому цикл "до"
	называют циклом с постусловием. Если
	условие не выполняется, то происходит
	возврат к выполнению действий. Если
	условие истинно, то осуществляется
	выход из цикла. Таким образом условие
	цикла "до" - это условие выхода.
	Для предотвращения зацикливания
	необходимо предусмотреть действия,
	приводящие к истинности условия. 
 
 
 
19.Циклические алгоритмы: понятие, виды (перечислить). Алгоритмическая конструкция цикла с предусловием (понятие, использование, блок-схема). Оператор цикла с предусловием while в языке Си: структура оператора, допустимые и недопустимые условия, пример использования.
	Цикл
	"пока": 
 Выполнение
	цикла "пока" начинается с проверки
	условия, поэтому такую разновидность
	циклов называют циклы с предусловием.
	Переход к выполнению действия
	осуществляется только в том случае,
	если условие выполняется, в противном
	случае происходит выход из цикла. Можно
	сказать что условие цикла "пока"
	- это условие входа в цикл. В частном
	случае может оказаться что действие
	не выполнялось ни разу. Условие цикла
	необходимо подобрать так, чтобы действия
	выполняемые в цикле привели к нарушению
	его истинности, иначе произойдет
	зацикливание. 
Зацикливание -
	бесконечное повторение выполняемых
	действий.
 
Выполнение
	цикла "пока" начинается с проверки
	условия, поэтому такую разновидность
	циклов называют циклы с предусловием.
	Переход к выполнению действия
	осуществляется только в том случае,
	если условие выполняется, в противном
	случае происходит выход из цикла. Можно
	сказать что условие цикла "пока"
	- это условие входа в цикл. В частном
	случае может оказаться что действие
	не выполнялось ни разу. Условие цикла
	необходимо подобрать так, чтобы действия
	выполняемые в цикле привели к нарушению
	его истинности, иначе произойдет
	зацикливание. 
Зацикливание -
	бесконечное повторение выполняемых
	действий.
 
 
20. Циклические алгоритмы: понятие, виды (перечислить). Алгоритмическая конструкция цикла с постусловием (понятие, использование, блок-схема). Оператор цикла с постусловием в языке Си: структура оператора, допустимые и недопустимые условия, пример использования.
 
 
21. Типовые циклические алгоритмы: максимум/минимум, сумма/произведение, количество.
 
 
 Дополнительно:
Дополнительно:
 
 
 
 
22. Линейный массив: понятие массива, объявление, инициализация массива, индексация элементов. Формирование и вывод массива.
 
 
 
 
23. Типовые алгоритмы для работы с линейными массивами.
 
 
 
 
 
 
 
 
 
 
24. Задача сортировки массива. Алгоритм сортировки линейного массива методом "пузырька".
 
 
 
25. Двумерный массив. Объявление, инициализация двумерного массива, индексация элементов. Формирование и вывод двумерного массива.
 
 
 
 
26. Типовые алгоритмы для обработки двумерного массива (целиком).
 
 
 
28. Указатели. Понятие указателя, объявление, инициализация. Операции, применимые к указателям. Указатель на указатель.
 
 
 
 
 
 
30. Функции в языке Си: понятие, объявление, прототипы функций. Вызов функции. Типы возвращаемых значений.
 
 
 
 
 
 
31. Функции в языке Си: параметры формальные и фактические, механизм передачи параметров. Передача параметров «по значению» и «по ссылке». Пример использования.
 
 
 
 
33. Локальные и глобальные переменные. Области действия и области видимости. Экранирование переменных.
 
 
35. Рекурсивное описание функций: база рекурсии, рекурсивный вызов, использование стека. Пример использования.
	
	 
36-37. Динамическая память: выделение и освобождение памяти, размещение данных в динамической памяти. Выделение и освобождение памяти при работе с одиночными переменными и с массивами, изменение размера массива. Выделение и освобождение памяти при работе с матрицами. Особенности обработки матриц при работе с динамической памятью.
	 
 
	 
 
 
 
39. Строка в языке Си: библиотечные функции для обработки строк. Примеры использования.
	 
	 
	 
	 
	 
	 
	 
	 
1. Поменять местами значения максимальных элементов массива А (35) и матрицы В (8х9).
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void Input(int*, int);
void Output(int*, int, int);
int* Maximal(int*, int);
void Change(int*, int*);
main()
{
int A[35], B[8][9];
srand(time(0));
Input(&A[0], 35);
Input(&B[0][0], 72);
Output(&A[0], 1, 35);
Output(&B[0][0], 8, 9);
Change(Maximal(&A[0], 35), Maximal(&B[0][0], 72));
Output(&A[0], 1, 35);
Output(&B[0][0], 8, 9);
getch();
return 0;
}
void Input(int* x, int n)
{
int i;
for(i=0; i<n; i++)
*(x+i) = -50 + rand()%100;
}
void Output(int* x, int n, int m)
{
int i, j;
printf(“Array:\n”);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
printf(“%5d”, *(x+i*m+j)) ;
printf(“\n”);
}
}
int* Maximal(int* x, int n)
{
int i, *vsp;
for(i=1, vsp=x; i<n; i++)
if(*vsp<*(x+i))
vsp = x+i;
return vsp;
}
void Change(int* x, int* y)
{
int vsp = *x;
*x = *y;
*y = vsp;
}
2. Вычислить S=Аmax/Вmax, где Аmax и Вmax – максимальные значения элементов массива А (35) и матрицы В(8х9) соответственно.
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void Input(int*, int);
void Output(int*, int, int);
int Maximal(int*, int);
main()
{
int A[35], B[8][9];
float x;
srand(time(0));
Input(&A[0], 35);
Input(&B[0][0], 72);
Output(&A[0], 1, 35);
Output(&B[0][0], 8, 9);
x = Maximal(&B[0][0], 72);
if(x)
printf(“S = %.3f\n”, Maximal(&A[0],35)/x);
else
printf(“Error!!! Divide by 0!!!\n”);
getch();
return 0;
}
void Input(int* x, int n)
{
int i;
for(i=0; i<n; i++)
*(x+i) = -50 + rand()%100;
}
void Output(int* x, int n, int m)
{
int i, j;
printf(“Array:\n”);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
printf(“%5d”, *(x+i*m+j)) ;
printf(“\n”);
}
}
int Maximal(int* x, int n)
{
int i, vsp;
for(i=1, vsp=*x; i<n; i++)
if(vsp<*(x+i))
vsp = *(x+i);
return vsp;
}
3. Отсортировать массив А(35) и строки матрицы А(8х9) в порядке убывания.
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void Input(int*, int);
void Output(int*, int, int);
void Sort(int*, int, int);
main()
{
int A[35], B[8][9];
srand(time(0));
Input(&A[0], 35);
Input(&B[0][0], 72);
Output(&A[0], 1, 35);
Output(&B[0][0], 8, 9);
Sort(&A[0], 1, 35);
Sort(&B[0][0], 8, 9);
Output(&A[0], 1, 35);
Output(&B[0][0], 8, 9);
getch();
return 0;
}
void Input(int* x, int n)
{
int i;
for(i=0; i<n; i++)
*(x+i) = -50 + rand()%100;
}
void Output(int* x, int n, int m)
{
int i, j;
printf(“Array:\n”);
for(i=0; i<n; i+)
{
for(j=0; j<m; j++)
printf(“%5d”, *(x+i*m+j)) ;
printf(“\n”);
}
}
void Sort(int* x, int n, int m)
{
int vsp, i, j, k;
for(k=0; k<n; k++)
for(i=0; i<m; i++)
for(j=i+1; j<m; j++)
if(*(x+k*m+i)<*(x+k*m+j))
{
vsp = *(x+k*m+i);
(x+k*m+i) = *(x+k*m+j);
*(x+k*m+j) = vsp;
}
}
4. Заполнить матрицы А(8х7) и В (7х8) нулями и единицами по следующему правилу: если сумма индексов элемента четная, элемент будет равен 0, если нечетная будет равен 1.
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void Input(int*, int, int);
void Output(int*, int, int);
main()
{
int A[8][7], B[7][8];
Input(&A[0][0], 8, 7);
Input(&B[0][0], 7, 8);
Output(&A[0][0], 8, 7);
Output(&B[0][0], 7, 8);
getch();
return 0;
}
void Input(int* x, int n, int m)
{
int i, j;
for(i=0; i<n; i++)
for(j=0; j<m; j++)
if((i+j)%2)
*(x+i*m+j) = 1;
else
*(x+i*m+j) = 0;
}
void Output(int* x, int n, int m)
{
int i, j;
printf(“Array:\n”);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
printf(“%5d”, *(x+i*m+j)) ;
printf(“\n”);
}
}
5. Удалить из массивов А(35) и В(40) максимальные по значению элементы.
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void Input(int*, int);
void Output(int*, int);
void Delete(int*, int);
main()
{
int A[35], B[40];
srand(time(0));
Input(&B[0], 40);
Output(&A[0], 35);
Output(&B[0], 40);
Delete(&A[0], 35);
Delete(&B[0], 40);
Output(&A[0], 34);
Output(&B[0], 39);
getch();
return 0;
}
void Input(int* x, int n)
{
int i;
for(i=0; i<n; i++)
*(x+i) = -50 + rand()%100;
}
void Output(int* x, int n)
{
int i;
printf(“Array:\n”);
for(i=0; i<n; i++)
printf(“%5d”, *(x+i)) ;
printf(“\n”);
}
void Delete(int* x, int n)
{
int i, j, *m;
for(i=1, m=x; i<n; i++)
if(*m<*(x+i))
m=x+i;
for( ; m<=x+n-2; m++)
*m = *(m+1);
}
1
