
- •1.Учебно-методический комплекс дисциплины
- •Данные о преподавателе:
- •1.2 Данные о дисциплине:
- •Выписка из учебного плана
- •1.3 Пререквизиты
- •1.4 Постреквизиты
- •1.5 Цели и задачи дисциплины
- •1.6 Перечень и виды заданий и график их выполнения
- •Виды заданий и сроки их выполнения
- •1.7 Список литературы
- •1.8 Контроль и оценка знаний.
- •1.9 Политика и процедура курса
- •2 Содержание Активного раздаточного материала
- •2,1 Тематический план курса
- •2.2 Конспект лекционных занятий
- •#Define millenium 1000
- •// Нельзя изменять
- •/* Это моя первая программа на Си*/
- •Void main()
- •Void main ()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main(void)
- •If (логическое выражение) оператор 1;
- •Void main()
- •If (логическое выражение)
- •If (условие 1 )
- •If (условие 1 )
- •If (X) printf ("Число не равно нулю");
- •Void main()
- •Void main(void)
- •Void main()
- •Void main()
- •Int n; // Количество узлов интерполяции
- •Int k; // Номер узла
- •Void main()
- •Vvedi 5 7
- •Int *a; // Указатель на массив целых чисел
- •Void main()
- •Int vect[10], s1[50];
- •Int vect [n];
- •Void main( )
- •Int min; // номер минимального элемента
- •Int random ( int n )
- •Void lin(char a)
- •Void z1(int * X, int * y)
- •Void z1(int*, int*);
- •Int имя переменной;
- •Void main()
- •8 Есть цифра
- •8 Есть буква или цифра
- •Int integ;
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Int ocen;
- •Void main( )
- •File *указатель на файл;
- •Fclose(имя_указателя);
- •Void main()
- •Int h; /*дескриптор создаваемого файла*/
- •Void main()
- •Initgraph(&g_driver,&g_mode," ");
- •Vgamed 1 640x350
- •Vgahi 2 640x480
- •Initwindow ( 400, 300 ); // открыть окно для графики 400 на 300
- •Void main(void)
- •Int g_driver,g_mode,g_error;
- •2.3 Планы лабораторных занятий
- •Планы занятий в рамках самостоятельной работы студентов под руководством преподавателя (срсп).
- •2.5 Планы занятий в рамках самостоятельной работы студентов (срс).
- •2.6 Тестовые задания для самоконтроля с указанием ключей
- •Глоссарий
Int n; // Количество узлов интерполяции
Int k; // Номер узла
double t; // Точка, в которой вычисляется значение
double L; // Значение многочлена L_k(x) в точке t
int i = 0;
. . .
L = 1.0; // Начальное значение произведения
while (i <= n)
{ if (i == k){
++i; // К следующему узлу
continue; // Пропустить k-й множитель
}
L *= (t - x[i]) / (x[k] - x[i]); // Вычисляем произведение
++i; // К следующему узлу
}
}
Основная литература: 1[82-97], 2[84-91]
Дополнительная литература:1,2,3,5
Контрольные вопросы:
1. Какой процесс называется ”циклическим” ?
2. Чем отличаются операторы while и do……while?
3. Поясните понятие “Вложенный цикл”;.
4. Оператор цикла с постусловием выполняется до тех пор, пока заключенное в нем выражение …………………(истина или ложь?);
5. Какого типа может быть шаг изменения параметра цикла for? цикла while?
Лекция 6. Указатели. Операции над указателями. Классы памяти. Динамическое выделение памяти
Указатели
Указатель – это переменная, в которой хранится адрес другой переменной или участка памяти.
Указатели являются одним из основных понятий языка Си. В такие переменные можно записывать адреса любых участков памяти, но чаще всего – адрес элемента динамического массива.
Указатель используется:
- для связи независимых структур друг с другом;.
- для динамического распределения памяти;.
- для доступа к различным элементам структуры..
Указатель объявляется следующим образом:
тип *<имя переменной>;
Указатели объявляются в списке переменных, но перед их именем ставится знак *. Указатель всегда указывает на переменную того типа, для которого он был объявлен.
Например:
int *a, b, c, *d;
float *f;
char *w;
Здесь объявлены указатели a, d, которые могут содержать адреса переменных только целого типа , указатель f, который может содержать адрес переменной только вещественного типа , указатель w, который может содержать адрес переменной только символьного типа и переменные b,c типа int.
Операции над указателями
1. & – операция взятия адреса;
2. * – операция выдачи содержимого переменной, адрес которой содержит указатель;
3. = операция присваивания. Указатели одного и того же типа могут использоваться в операциях присваивания, как и любые другие переменные;
4. арифметические операции
+, -, ++, --, +=, -=
Степень увеличения (уменьшения) значения указателя зависит от типа указателя. Общая формула для вычисления значения указателя
p=p+n*<количество байт памяти базового типа указателя>
p=p-n*<количество байт памяти базового типа указателя>
5. Если р и р1 указатели на элементы одного и того массива, то р-р1 дает такой же результат, как вычитание индексов соответствующих элементов массива, также и р+р1 дает такой же результат, как сложение индексов соответствующих элементов массива
6. Указатели можно сравнивать(<, >, <=, >=, ==, !=)
Рассмотрим операции над указателями на фрагментах программы.
Операции взятия адреса и выдачи содержимого переменной
1. int x=1, y=2;
2. int *ip;
3. ip=&x;
4. y=*ip;
5. *ip=0;
В первой строке объявлены и инициализированы переменные x и y. Во второй строке объявлен указатель *ip, который может содержать адреса переменных только целого типа. В третьей строке приведена операция взятия адреса &, то есть переменной ip присваивается адрес переменной x или иначе эта запись означает: «записать в указатель ip адрес переменной x». Четвертая запись означает: «присвоить переменной y значение переменной, адрес которой содержит указатель ip».Таким образом, после данной операции значение переменной y будет равно 1. Пятая запись означает: «присвоить переменной, адрес которой содержит указатель ip, значение 0», то есть переменной x будет присвоено значение 0.
Операция присваивания
1. int x=1, y=2;
2. int *px, *py;
3. px=&x; py=&y;
4. py= px;
В первой строке объявлены и инициализированы переменные x и y. Во второй строке объявлены указатели *px, *py , которые могут содержать адреса переменных только целого типа. В третьей строке приведена операция взятия адреса &, то есть переменной px присваивается адрес переменной x, а переменной py присваивается адрес переменной y. В четвертой строке переменной py присвоивается значение переменной px. После данной операции указатели *px, *py будут указывать на одну и ту же переменную x.
Арифметические операции
int *px;
...
px ++;
px += 4;
-- px;
px -= 4;
В результате этих операций значение указателя меняется особым способом: px ++ сдвигает указатель на размер целого числа, то есть на 2 байта, а не на 1 как можно подумать. А запись px +=4 или px = px +4 сдвигает указатель на 4 целых числа дальше, то есть на 8 байт.
Последние две операции применимы при работе с массивами. Итак, что надо знать про указатели:
• указатель – это переменная, в которой записан адрес другой переменной;
• при объявлении указателя надо указать тип переменных, на которых он будет указывать, а перед именем поставить знак *;
• знак & перед именем переменной обозначает ее адрес;
• знак * перед указателем в рабочей части программы (не в объявлении) обозначает значение ячейки, на которую указывает указатель;
• нельзя записывать по указателю, который указывает непонятно куда – это вызывает сбой программы, поскольку что-то стирается в памяти;
• для обозначения недействительного указателя используется константа NULL;
• при изменении значения указателя на n он в самом деле сдвигается к n-ому следующему числу данного типа, то есть для указателей на целые числа на n*sizeof(int) байт;
• указатель печатаются по формату %p.
В результате выполнения программы
#include<stdio.h>
#include<conio.h>