Структура программы на языке си примеры. Структура программы на языке С. Что делают выражения

Достаточное условие экстремума функции двух переменных

1. Пусть функция непрерывно дифференцируема в некоторой окрестности точки и имеет непрерывные частные производные второго порядка (чистые и смешанные).

2. Обозначим за определитель второго порядка

экстремум переменная лекционный функция

Теорема

Если точка с координатами является стационарной точкой для функции, то:

А) При она является точкой локального экстремума причем, при локального максимума, - локального минимума;

В) при точка не является точкой локального экстремума;

С) если, может быть и то, и другое.

Доказательство

Запишем формулу Тейлора для функции, ограничившись двумя членами:

Так как по условию теоремы точка является стационарной, то частные производные второго порядка равны нулю, т.е. и. Тогда

Обозначим

Тогда приращение функции примет вид:

В силу непрерывности частных производных второго порядка (чистых и смешанных) по условию теоремы в точке можно записать:

Где или; ,

1. Пусть и, т.е. или.

2. Приращение функции умножим и разделим на, получим:

3. Дополним выражение в фигурных скобках до полного квадрата суммы:

4. Выражение в фигурных скобках неотрицательно, так как

5. Поэтому если а значит, и, то и, следовательно, согласно определению, точка является точкой локального минимума.

6. Если а значит, и, то, согласно определению точка с координатами - точка локального максимума.

2. Рассмотрим квадратный трехчлен, его дискриминант, .

3. Если, то существуют такие точки, что многочлен

4. Полное приращение функции в точке в соответствии с выражением, полученным в I, запишем в виде:

5. В силу непрерывности частных производных второго порядка по условию теоремы в точке можно записать, что

следовательно, существует - окрестность точки, что, для любой точки квадратный трехчлен больше нуля:

6. Рассмотрим - окрестность точки.

Выберем любое значение, так что точка. Полагая, что в формуле приращения функции

Что, получим:

7. Так как, то.

8. Рассуждая аналогично для корня, получим, что в любой -окрестности точки существует точка для которой, следовательно, в окрестности точки не сохраняет знак, следовательно в точке экстремума нет.

Условный экстремум функции двух переменных

При отыскании экстремумов функции двух переменных часто возникают задачи, связанные с так называемым условным экстремумом. Это понятие можно разъяснить на примере функции двух переменных.

Пусть заданы функция и линия L на плоскости 0xy. Задача состоит в том, чтобы на линии L найти такую точку P (x, y), в которой значение функции является наибольшим или наименьшим по сравнению со значениями этой функции в точках линии L, находящихся вблизи точки P. Такие точки P называются точками условного экстремума функции на линии L. В отличие от обычной точки экстремума значение функции в точке условного экстремума сравнивается со значениями функции не во всех точках некоторой ее окрестности, а только в тех, которые лежат на линии L.

Совершенно ясно, что точка обычного экстремума (говорят также безусловного экстремума) является и точкой условного экстремума для любой линии, проходящей через эту точку. Обратное же, разумеется, неверно: точка условного экстремума может и не быть точкой обычного экстремума. Проиллюстрируем сказанное на примере.

Пример №1. Графиком функции является верхняя полусфера (рис. 2).

Рис. 2.

Эта функция имеет максимум в начале координат; ему соответствует вершина M полусферы. Если линия L есть прямая, проходящая через точки А и В (ее уравнение), то геометрически ясно, что для точек этой линии наибольшее значение функции достигается в точке, лежащей посередине между точками А и В. Это и есть точка условного экстремума (максимума) функции на данной линии; ей соответствует точка M 1 на полусфере, и из рисунка видно, что ни о каком обычном экстремуме здесь не может быть речи.

Отметим, что в заключительной части задачи об отыскании наибольшего и наименьшего значений функции в замкнутой области приходится находить экстремальные значения функции на границе этой области, т.е. на какой-то линии, и тем самым решать задачу на условный экстремум.

Определение 1. Говорят, что, где имеет в точке, удовлетворяющей уравнению, условный или относительный максимум (минимум): если для любой, удовлетворяющей уравнению, выполняется неравенство

Определение 2. Уравнение вида называется уравнением связи.

Теорема

Если функции и непрерывно дифференцируемы в окрестности точки, и частная производная, и точка является точкой условного экстремума функции относительно уравнения связи, то определитель второго порядка равен нулю:

Доказательство

1. Так как по условию теоремы частная производная, а значение функции, то в некотором прямоугольнике

определена неявная функция

Сложная функция двух переменных в точке будет иметь локальный экстремум, следовательно, или.

2. Действительно, согласно свойству инвариантности формулы дифференциала первого порядка

3. Уравнение связи можно представить в таком виде, значит

4. Умножим уравнение (2) на, а (3) на и сложим их

Следовательно, при

произвольном. ч.т.д.

Следствие

Поиск точек условного экстремума функции двух переменных на практике осуществляется путем решения системы уравнений

Так, в вышеприведенном примере №1 из уравнения связи имеем. Отсюда легко проверить, что достигает максимума при. Но тогда из уравнения связи. Получаем точку P, найденную геометрически.

Пример №2. Найти точки условного экстремума функции относительно уравнения связи.

Найдем частные производные заданной функции и уравнения связи:

Составим определитель второго порядка:

Запишем систему уравнений для отыскания точек условного экстремума:

значит, существует четыре точки условного экстремума функции с координатами: .

Пример №3. Найти точки экстремума функции.

Приравнивая частные производные к нулю: , находим одну стационарную точку - начало координат. Здесь,. Следовательно, и точка (0, 0) не является точкой экстремума. Уравнение есть уравнение гиперболического параболоида (Рис. 3) по рисунку видно, что точка (0, 0) не является точкой экстремума.

Рис. 3.

Наибольшее и наименьшее значение функции в замкнутой области

1. Пусть функция определена и непрерывна в ограниченной замкнутой области D.

2. Пусть в этой области функция имеет конечные частные производные, кроме отдельных точек области.

3. В соответствии с теоремой Вейерштрасса в этой области найдется точка, в которой функция примет наибольшее и наименьшее значение.

4. Если эти точки будут внутренними точками области D, то очевидно, в них будет максимум или минимум.

5. В этом случае интересующие нас точки находятся среди подозрительных точек на экстремум.

6. Однако наибольшее или наименьшее значение функция может принимать и на границе области D.

7. Для того, чтобы найти наибольшее (наименьшее) значение функции в области D, нужно найти все внутренние точки подозрительные на экстремум, вычислить значение функции в них, затем сравнить со значением функции в пограничных точках области, и наибольшее из всех найденных значений будет являться наибольшим в замкнутой области D.

8. Метод отыскания локального максимума или минимума рассматривался ранее в п. 1.2. и 1.3.

9. Остается рассмотреть метод отыскания наибольшего и наименьшего значения функции на границе области.

10. В случае функции двух переменных область обычно оказывается ограниченной кривой или нескольких кривыми.

11. Вдоль такой кривой (или нескольких кривых) переменные и либо зависят одна от другой, либо обе зависят от одного параметра.

12. Таким образом, на границе функция оказывается зависящей от одной переменной.

13. Метод отыскания наибольшего значения функции одной переменной был рассмотрен ранее.

14. Пусть граница области D задана параметрическими уравнениями:

Тогда на этой кривой функция двух переменных будет представлять собой сложную функцию от параметра: . Для такой функции наибольшее и наименьшее значение определяется по методике определения наибольшего и наименьшего значения для функции одной переменной.

Любая программа, написанная на языке Си, состоит из одной или более "функций", являющихся основными модулями, из которых она собирается.

Пример структуры простой программы на языке Си:

Общий вид

Пример

директивы препроцессора

# include

# define N 10

имя главной функции

начало тела главной функции

объявления переменных и массивов

int x=1; char str[N];

операторы программы

puts(" Введите имя ");

gets(str);

printf("\n %s, Вы %d мой гость!",str,x);

Конец тела главной функции

      1. Директивы препроцессора

Составной частью компилятора является программа, называемая препроцессором . Препроцессор работает до трансляции программы с языка высокого уровня на машинный язык, выполняя её предварительное преобразование. Каждая директива препроцессора начинается с символа # (номер) и занимает всю строку. Директивы, которые не помещаются в одной строке, могут быть продолжены в следующей строке. Признаком продолжения строки является символ обратной косой черты (\) в продолжаемой строке.

Наиболее часто используется директива включения в программу файла

# include < name >

где name – имя файла, включаемого в текст программы.

Эту директиву называют директивой подстановки . Она предписывает компилятору поместить на её место файл name . Файл name называется заголовочным. Он содержит объявления данных и функций, используемых в программе. Например, включение в программу директивы

# include < math . h >

позволит использовать в программе стандартные математические функции, такие как sin x, cos x, ln x и т.д. Список стандартных математических функций будет приведён ниже.

Директива

# include < stdio . h >

даёт возможность использования в программе стандартных функций ввода-вывода.

Другой часто используемой директивой является директива определения

#define S1 S2

где S1, S2 – строки символов.

Препроцессор отыскивает в тексте программы строку символов S 1 и заменяет её строкой S 2 . Например, включение в программу директивы

# define P printf

позволит набирать на клавиатуре букву P вместо слова printf .

Эта замена не выполняется внутри текстовых строк (литералов), символьных констант и комментариев, т.е. действие директивы #define не распространяется на тексты, ограниченные кавычками, апострофами и находящимися внутри комментариев.

      1. Главная функция

Каждая программа на языке Си должна содержать объявление функции main (), которая называется главной функцией. Как правило, эта функция не имеет параметров и не возвращает никакого значения. Для указания этого факта используется слово void . Таким образом, строка с именем главной функции обычно имеет вид:

void main(void)

void main()

      1. Переменные и массивы

Массивом называется группа переменных одного типа с общим именем. Именем переменной или массива является идентификатор – последовательность, составленная из символов:

a – z, A - Z , 0 – 9,_(подчеркивание),

причём первым символом не может быть цифра. Строчные и прописные символы латинского алфавита воспринимаются как разные символы. В качестве имени переменной или массива не могут использоваться служебные слова языка Си. Основные служебные слова языка Си приведены в Приложении.

Элементы массива различаются своими номерами (индексами). Индекс может принимать только целые неотрицательные значения. Индекс записывается после имени массива в квадратных скобках. Индексов может быть несколько. В этом случае каждый индекс записывается в своих квадратных скобках.

В языке Си могут использоваться переменные и массивы различных типов. Данные каждого типа занимают определённое количество байт памяти и могут принимать значения из определённого диапазона. Объём этой памяти и, соответственно, диапазон принимаемых значений в разных реализациях языка Си могут различаться. Количество байт памяти, занимаемой переменной определённого типа для конкретной реализация языка Си можно определить с помощью операции sizeof (тип). Например, определить объём памяти, отводимой под переменную целого типа, можно так:

k = sizeof(int);

printf (“ Под переменную типа int отводится %d байт памяти”, k );

В данных методических указаниях рассматриваются три основных типа переменных и массивов, приведены типичные значения объёма занимаемой памяти и диапазона значений (табл. 1):

Таблица 1

Спецификатор типа (Ключевое слово)

Значение

Размер

памяти (байт)

Диапазон значений

Число целого типа

32768 . . . +32767

2147483648 . . . +2147483647

Действительный

Число действительного типа

3.4ּ10 -38 . . . 3.4ּ10 38

(по модулю)

Символьный

128 . . . +127

Несколько подробнее остановимся на переменной типа char . Как видно из табл. 1, переменная типа char занимает один байт памяти. В одном байте памяти можно записать либо целое число без знака из диапазона , либо целое число со знаком из диапазона [–128, 127]. Это число является кодом одного из 256 символов. Символ, соответствующий данному коду, определяется используемой кодовой таблицей. Таким образом, значение переменной типа char может рассматриваться либо как целое число, либо как символ, код которого равен этому числу.

Структура программы на языке С.

Использование языка программирования С в решении экономических задач

Программы и данные

Достоинства языка С

1) С – современный язык, его структура побуждает программиста использовать в своей работе методы: нисходящего проектирования, структурного программирования, модульную структуру программ.

2) С – эффективный язык. Программы на С отличаются компактностью и быстротой выполнения.

3) С – переносимый или мобильный язык.

4) С – мощный и гибкий язык.

5) Программы написанные на С используються для решения задач различных уровней. С обладает рядом мощных конструкций ассемблера.

6) С – удобный язык, он структурирован и вместе с тем не слишком ограничивает свободу программистам.

7) С – язык компелирующего типа. Так как С стандартизированный, аппаратно-независимый, широко доступный язык, приложение написанное на С часто могут выполняться с минимальными модификациями или даже без них на самых различных компьютерных системах. Компьютер, несмотря на его скорость и мощность вычислений, является простым устройством, которое манипулирует с двоичными числами. Одни двоичные числа интерпретируются компьютером, как команды, другие, как данные. Чтобы заставить компьютер выполнить что-нибудь полезное, нужно составить программу.

Программирование деятельность по составлению программы.

Программа -это описание алгоритма решения задачи, заданной на языке ЭВМ.

Команда предписание, определяющее очередной шаг.

Пример команды : С=А+В, где А, В-операнды, +- операция.

Операция -это то, что должна сделать ЭВМ согласно каждой команде.

Операнды -участники операции, то над чем и с чем выполняется операция. Набор элементарных операций из способов их описаний образуют систему команд языка программирования.

Пример №1:

# include

{void main(void) //заголовок головной функции программы

сout << “Здравствуй, С!\ n”;

1 строка : подключение вспомогательных библиотек, ориентированных на ввод и вывод данных разных типов в поток.

2 строка: заголовок головной функции программы. Cout-оператор вывода информации << – помещение в класс данных, \n-переход к новой строке вывода.

Программа -это последовательность инструкций, реализующих алгоритм набор предписаний, однозначно определяющих содержание и последовательность выполнения операций для решения задач.

Использование С.

1. Программы и данные.

2. Схема выполнения программы на ЭВМ:

Пример №1:

# include < stdio.h>

printf ("Я учусь в БГУИР\ n");

1 строка: команда препроцессора include, включающая файл stdio.h, который описывает библиотечную функцию printf.

2 строка: определение функции с именем main, не получающей никаких аргументов. Инструкция main заключается в фигурные скобки. Функция main обращается к библиотечной ф-ции printf для печати, заданной в последовательности литер. Наклонная черта (\ n) - литера новая строка, переход к новой строке.

Для выполнения программы на ПВЭМ, необходимо сделать следующие действия:

1) Составить программу на языке программирования.

2) Транслировать ее в стандарте этого языка.

3) Связать ее с необходимыми программами и функциями.

4) Загрузить в оперативную память.

5) Выполнить и получить результат.


СХЕМА КОМПЕЛЯЦИИ

Транслятор – это компьютерная программа по переводу программы, написанной на языке программирования, в форму понятную для компьютера. На выходе компилятора получается файл с расширением obj. Исполняемый файл или загрузочный модуль представляет собой файл, содержащий откомпилированную и готовую к выполнению программу. Borland C++ является средой для разработки программ, которые включают в себя как компилятор, так и некоторые другие инструменты.

Структура программы на языке С.

Любая программа на языке С состоит из одной или более ф-ций и элементов. Различным функциям можно давать любые имена. Ф-ции содержат инструкции (команды) предписывающие действия на определенном шаге выполнения, а переменная хранит значения, используемые в процессе этих действий. Такими действиями могут быть присвоения значения переменных, проверка некоторого условия. Функция с именем main. Выполнение любой программы начинается с ф-ции main.

а) Общая структура программы на С без обращения к подпрограмме:

б) Общая структура программы на С с обращением к подпр-ме:

Аргументы являются одним из механизмов взаимодействия между функциями. Список аргументов в круглых скобках идет следом за именем функции. Фигурные скобки обрамляют начало и конец программы. Инструкции, из которых состоит тело программ из операторов и операндов. В С каждый оператор и каждая строка с обращением к функции заканчивается точкой с запятой. Исключение составляют команды препроцессора и имена функции, стоящие в начале программной единицы. Целью большинства программ является решение задачи путем различных преобразований исходных данных. Для этого необходимо.

В программах на языке си - существует некая последовательность:

Для начала мы добавляем нужные нам библиотеки #include Если файл находится в текущем каталоге проекта, он указывается в кавычках. Для файла, находящегося в другом каталоге необходимо в кавычках указать полный путь.

#include
#include «math.h»

После чего Мы можем добавить нужные нам константы #define A 3

После этого начинается функция, командой Main ()

После того как всё выполнено можно ввести getchar ()

2. Для чего в языке Си служит точка с запятой?

Для обозначения конца оператора в языке Си используется точка с запятой

3. Все ли компиляторы Си требуют использования в программе инструкции return?

Для возврата целочисленного значения перед завершением функции дописывается строка

Также в большенстве случаев return означает выход из фуннкции

Операторы тела функции выполняются до первого оператора return. Если в теле функции нет такого оператора (т.е. функция не возвращает никакого результата), то выполняются все операторы до закрывающейся операторной скобки.

Функция вывода элементов массива на печать не возвращает никакого результата, т.е. в теле функции оператор return отсутствует.

4. С какой целью в текст программы вводятся комментарии?

Коментарии вводятся для пояснения того или иного действия

например Printf (‘’Hello World’’) ; // выведем на экран надпись Hello World

Так же коментарии можно ввести символами /* - в начале */ - в конце коментария

5. Для чего при вызове функции используются параметры?

Ссылка - это по сути второе имя того же самого объекта. Когда в функцию передаётся объект по ссылке, то передаётся фактически этот объект. Когда же мы передаём объект по значению, то в функцию передаётся его копия.

void func_1(int a) // передача по значению

6. Все ли функции требуют передачи параметров при вызове?

На мой взгляд совершенно не все, ведь мы можем с лёгкостью записать функцию типа main() без передчи параметров по значению

1. Что такое тип данных char?

Тип данных char - это целочисленный тип данных, который используется для представления символов. То есть, каждому символу соответствует определённое число из диапазона . Тип данных char также ещё называют символьным типом данных, так как графическое представление символов в С++ возможно благодаря char. Для представления символов в C++ типу данных char отводится один байт, в одном байте - 8 бит, тогда возведем двойку в степень 8 и получим значение 256 - количество символов, которое можно закодировать. Таким образом, используя тип данных char можно отобразить любой из 256 символов. Все закодированные символы представлены в таблице ASCII.

2. Чем символ "3" отличается от числа 3?

символ 3 отличается от целого числа 3 тем, что символ не может быть использован в арифметических операциях

3. В чем заключается различие между константой и переменной?

Различие между переменной и константой довольно очевидно: во время выполнения программы значение переменной может быть изменено (например, с помощью присваивания), а значение константы - нет

4. Как определить константу?

Константы в С++ аналогичны константам в Си. Для представления константы в Си использовалась только директива препроцессора #define:

const тип ИмяПеременной = НачальноеЗначение;

Область видимости константы такая же, как у обычной переменной. С помощью ключевого слова const можно объявить указатель на константу

5. Поддерживает ли Си строковый тип данных?

Язык Си не поддерживает отдельный строковый тип данных, но он позволяет определить строки двумя различными способами. В первом используется массив символов, а во втором - указатель на первый символ массива.

6. Сохраняет ли переменная свое значение в ходе выполнения всей программы?

во время выполнения программы значение переменной может быть изменено (например, с помощью присваивания), а значение константы - нет

7. Как изменить значение константы?

1. В чем заключаются различия между escape-последовательностями \n и \r?

Грубо говоря, предполагалось, что \r обнулит номер символа. оставляя неизменным номер строки (т.е. сдвинет каретку пишущей машинки к началу строки, не трогая бумагу), а \n - наоборот, сделает переход к следующей строке, оставляя текущую позицию печати неизменной (прокрутит бумагу, не трогая каретку).

2. Как вывести на экран символ «кавычка»?

printf("My text is: \"my text\"\n");

3. Из каких двух частей состоит список параметров функции printf()?

При печати какого либо числа или выражения сначала пишется Printf ()

В скобках, в начале в кавычках пишем нужные нам данные, а именно

%с – одиночный символ
%d – десятичное целое число со знаком
%f – число с плавающей точкой (десятичное представление)
%s – строка символов (для строковых переменных)
%u – десятичное целое без знака
%% - печать знака процента

Например:

printf ("x=%5i\ty=%f\tz=%7.3f\n",x, y, z);

4. Какие преимущества имеет функция printf() по сравнению с puts()?

5. Что такое указатель формата?

Читает значение с плавающей точкой (только C99)

Аналогично коду %a (только C99)

Читает один символ

Читает десятичное целое

Читает целое в любом формате (десятичное, восьмеричное или шестнадцатеричное)

Аналогично коду %e

Читает число с плавающей точкой

Аналогично коду %f (только С99)

Читает число с плавающей точкой

Аналогично коду %g

Читает восьмеричное число

Читает строку

Читает шестнадцатеричное число

Аналогично коду %x

Читает указатель

Принимает целое значение, равное количеству прочитанных до сих пор символов

Читает десятичное целое без знака

Просматривает набор символов

Читает знак процента

6. Как вывести на экран значение числовой переменной?

Вывести её значение можно с помощью функции Printf()

printf("%7.3f\t%7.3f\n",x,y);

%<количество_позиций_под_значение>.<количество_позиций_под_дробную_часть>f

%<количество_позиций_под_значение>i

Сама по себе программа на языке С++ представляет собой текстовый файл, в котором представлены конструкции и операторы данного языка в заданном программистом порядке. В самом простом случае этот текстовый файл может содержать такую информацию:

Листинг 1.1. Пример простой программы.

/* Пример простой программы*/
#include
int main()
{
printf(“Hello World!”);
return 0;
}

и обычно имеет расширение cpp, например, «ex1.cpp».

Следующий шаг – это компиляция исходного кода. Под компиляцией понимают процесс, при котором содержимое текстового файла преобразуется в исполняемый машинный код, понимаемый процессором компьютера. Однако компилятор создает не готовую к исполнению программу, а только объектный код (файл с расширением *.obj). Этот код является промежуточным этапом при создании готовой программы. Дело в том, что создаваемая программа может содержать функции стандартных библиотек языка С++, реализации которых описаны в объектных файлах библиотек. Например, в приведенной программе используется функция printf() стандартной библиотеки «stdio.h». Это означает, что объектный файл ex1.obj будет содержать лишь инструкции по вызову данной функции, но код самой функции в нем будет отсутствовать.

Для того чтобы итоговая исполняемая программа содержала все необходимые реализации функций, используется компоновщик объектных кодов. Компоновщик – это программа, которая объединяет в единый исполняемый файл объектные коды создаваемой программы, объектные коды реализаций библиотечных функций и стандартный код запуска для заданной операционной системы. В итоге и объектный файл, и исполняемый файл состоят из инструкций машинного кода. Однако объектный файл содержит только результат перевода на машинный язык текста программы, созданной программистом, а исполняемый файл – также и машинный код для используемых стандартных библиотечных подпрограмм и для кода запуска.

Рассмотрим более подробно пример программы листинга 1.1. Первая строка задает комментарии, т.е. замечания, помогающие лучше понять программу. Они предназначены только для чтения и игнорируются компилятором. Во второй строке записана директива #include, которая дает команду препроцессору языка С++ вставить содержимое файла ‘stdio.h’ на место этой строки при компиляции. В третьей строке определена функция с именем main, которая возвращает целое число (тип int) и не принимает никаких аргументов (тип void). Функция main() является обязательной функцией для всех программ на языке С++ и без ее наличия уже на этапе компиляции появляется сообщение об ошибке, указывающее на отсутствие данной функции. Обязательность данной функции обусловливается тем, что она является точкой входа в программу. В данном случае под точкой входа понимается функция, с которой начинается и которой заканчивается работа программы. Например, при запуске exe-файла происходит активизация функции main(), выполнение всех операторов, входящих в нее и завершение программы. Таким образом, логика всей программы заключена в этой функции. В приведенном примере при вызове функции main() происходит вызов функции printf(), которая выводит на экран монитора сообщение “Hello World!”, а затем выполняется оператор return, который возвращает нулевое значение. Это число возвращается самой функцией main() операционной системе и означает успешное завершение программы. Фигурные скобки {} служат для определения начала и конца тела функции, т.е. в них содержатся все возможные операторы, которые описывают работу данной функции. Следует отметить, что после каждого оператора в языке С++ ставится символ ‘;’. Таким образом, приведенный пример показывает общую структуру программ на языке С++.




Top