
- •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 random ( int n )
{
return rand() % N; // случайное число в интервале [0,N-1]
}
С ее помощью (вызывая ее много раз подряд) можно получать последовательность случайных чисел в интервале [0,N-1] с равномерным распределением.
Теперь попытаемся использовать эту функцию для интервала [a,b]. Очевидно, что формула
k = random(N) + a;
дает последовательность в интервале [a,a+N-1]. Поскольку нам нужно получить интервал [a,b], сразу имеем b=a+N-1, откуда N=b-a+1. Поэтому
Для получения случайных целых чисел с равномерным распределением в интервале [a,b] надо использовать формулу
k = random(b-a+1) + a;
Более сложным оказывается вопрос о случайных вещественных числах. Если разделить результат функции rand() на RAND_MAX:
x = (float) rand() / RAND_MAX;
мы получим случайное вещественное число в интервале [0,1) (при этом надо не забыть привести одно из этих чисел к вещественному типу, иначе деление одного целого числа на большее целое число будет всегда давать ноль).
Длина интервала [0,1) такой последовательности равна 1, а нам надо получить интер-вал длиной b-a. Если теперь это число умножить на b-a и добавить к результату a, мы получаем как раз нужный интервал.
Для получения случайных вещественных чисел с равномерным распределением в интервале [a,b) надо использовать формулу
x = rand()*(b-a)/RAND_MAX + a;
Основная литература: 1[93-96], 2[38-40]
Дополнительная литература:1,2,3,5
Контрольные вопросы:
1. Опишите массив R из пяти элементов, каждый из которых является массивом из 10-ти вещественных чисел.
2. Чему равно значение константы RAND_MAX
3. Заполните массив int x[10][15] случайными числами из диапазона 1..100;
4. Заполните массив float x[15] [15] случайными числами из диапазона 0..1;
5. В каком случае размерность массива можно явно не указывать.
Лекция 8 Функции пользователя. Область действия переменных. Функции и указатели. Функции и массивы.
В алгоритмическом языке С кроме использования стандартных функций существует возможность работать с функциями пользователя.
По правилам, принятым в языке С, каждый идентификатор, в том числе и имя функции, должен быть объявлен до его использования в программе. Определение функции состоит из двух частей: заголовка и тела. Заголовок функции, заканчивающийся точкой с запятой, называется прототипом функции и является объявлением функции. При объявлении функции можно сначала объявить только ее заголовок (прототип), а полный текст - тело функции – привести после описания главной функции main.
Все функции являются глобальными. В языке С запрещено объявлять одну функцию внутри другой.
Заголовок определяет имя функции, ее тип и формальные параметры, тело определяет действия над данными, выполняемые функцией. Возращающее функцией значение передается в вызывающюю программу опрератором return (выражение). Значение "выражения" и есть результат функции (возращаемого значения). Всякая функция имеет вид:
[тип_результата ] имя([список формальных параметров]) { тело функции ; }
Здесь квадратные скобки указываютя, что заключенная в них конструкция может отсутствовать. Тип результата определяет тип значения, который возвращается функцией в точку ее вызова при помощи оператора возврата return. Если тип функции не указан, то по умолчанию предполагается тип int. Список параметров состоит из перечня типов и имен параметров, разделенных запятыми. Функция может не иметь параметров, но круглые скобки необходимы в любом случае.
Оператор return вызывает немедленный выход из данной функции и возврат в вызывающую ее функцию. Этот оператор можно также использовать для возврата значения функции. Отметим, что в теле функции может быть несколько операторов return, но может и не быть ни одного. В таких случаях возврат в вызывающую программу происходит после выполнения последнего оператора тела функции.
Рассмотрим пример программы рисования лестницы.
#include <stdio.h>
void main()
{
printf("|----|\n");
printf("|----|\n");
printf("|----|\n");
}
А теперь напишем эту программу с использованием функции Lestniza.
#include <stdio.h>
void Lestniza(void)
{
printf("|----|\n");
}
void main()
{
Lestniza();
Lestniza();
Lestniza();
}
Как видно из программы, обращение к функции осуществляется три раза. Для преодоления этого недостатка переработаем программу и введем формальные и фактические аргументы:
#include <stdio.h>
void Lestniza(int n )/* B - формальный аргумент */
{
int i;
for (i = 1; i <= n; i++)
printf("|----|\n");
}
void main()
{
Lestniza(3); /* 3 -фактический аргумент */
}
Пример функции, определяющей наименьшее из двух целых чисел:
mini(int x, int y)_
{ int t;
if (x<y) t=x;
else t=y;
return t;
}
Можно написать функцию mini и таким образом:
mini(int x, int y)
{
return (x<y)? x:y;
}
Все функции, возвращающие значение, должны использоваться в правой части выражений языка С, иначе возвращаемый результат будет утерян. Но они не могут использоваться в левой части операторов присваивания, за исключением тех случаев, когда возвращается адрес.
Если функция не возвращает никакого значения, она должна быть описана как функция типа void (пустая).
Например, для вывода горизонтальной строки на экран дисплея можно использовать следующую функцию: