Контактный телефон: 21-40-84 icon

Контактный телефон: 21-40-84




НазваКонтактный телефон: 21-40-84
Сторінка1/9
Дата28.05.2013
Розмір1.55 Mb.
ТипЛекция
  1   2   3   4   5   6   7   8   9


Вступление


Предлагается курс дистанционного обучения алгоритмическому языку Си объёмом 38 часов лекционных и 34 часа лабораторных занятий.

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

Курс составил Авраменко Виктор Васильевич, кандидат технических наук, доцент, доцент кафедры информатики Сумского государственного университета.

Преподаёт дисциплины: «Алгоритмические языки», «Системное программирование», «Основы математического моделирования и вычислительной техники».

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

Контактный телефон: 21-40-84

Электронная почта: avr@sumdu.edu.ua

Лекция 1

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

Этот язык создал сотрудник фирмы Bell Labs Денис Ритчи в 1972г. во время совместной работы с Кеном Томпсоном над операционной системой UNIX. Прообразом языка Си послужил язык Би, разработанный Томпсоном.

Важным моментом является то, что Си был разработан как инструмент для программистов-практиков. Главной целью его автора было создание удобного и полезного языка. Естественно, критерий полезности принимается во внимание при разработке всех языков программирования, но, кроме того, часто учитывались и другие потребности. Например, при создании языка Паскаль, основной целью было построение прочных основ обучения принципам программирования. Язык Бейсик создавался таким, чтобы его синтаксис был близок к синтаксису английского языка. Поэтому им легко могли пользоваться студенты, не знакомые с ЭВМ. Все эти цели тоже важны, но они не всегда совместимы с каждодневными требованиями.

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

Рассмотрим некоторые из достоинств языка Си.

  1. Си – современный язык. Он включает в себя те управляющие конструкции, которые рекомендуются теоретическим и практическим программированием. Его структура побуждает программиста использовать в своей работе нисходящее проектирование, структурное программирование и пошаговую разработку модулей. То есть программирование осуществляется от общего к развёрнутым частностям. Результатом такого подхода является надёжная хорошо читаемая программа.

  2. Си – эффективный язык. Его структура позволяет наилучшим образом использовать возможности современных ЭВМ. На языке Си программы обычно отличаются компактностью и быстротой исполнения

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

  4. Си – мощный и гибкий язык. Например, большая часть мощной и гибкой операционной системы UNIX написана на Си. Речь идёт о компьютерах и интерпретаторах других языков, таких, как ФОРТРАН, АПЛ, Паскаль, Лисп, Лого и Бейсик. Поэтому когда используется компилятор с Фортрана в системе UNIX, результирующая объектная программа в конечном счёте получается с помощью некоторой программы, написанной на Си. Кроме того, программы, написанные на Си, используются для решения физических и технических проблем и даже для производства мультфильмов.

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

  6. Си – удобный язык. Он хорошо структурирован, что позволяет поддерживать хороший стиль программирования. Вместе с тем он, образно говоря, не связывает руки программисту разными ограничениями. Хотя следует отметить, это как раз является причиной возможных ошибок в программах недостаточно внимательных программистов.

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

Список литературы

  1. Б. Керниган, Д. Ритчи. Язык программирования Си // Финансы и статистика.-, М., 1992.

  2. М. Уэйт, С. Прата, Д. Мартин. Язык Си // Мир. - М., 1988.

  3. Р. Уинер. Язык Турбо Си // Мир.- М., 1991.

  4. В.С. Проценко, П.Й. Чаленко, А.Б. Ставровський. Техніка програмування мовою Сі. – Київ: Либідь, 1993.

  5. Бошкин А.В., Дубнер П.Н. Работа в Турбо Си . - ЮКИС, М., 1991.

  6. С.В. Кардышев, А.М. Капкин. Интерфейс программиста Турбо-Си //Радио и связь.- М., 1992.

  7. С.Е. Власов, Разработка программ в интегрированной среде Турбо Си. Серия Библиотека пользователя.-, Нижний Новгород, 1992.

  8. Бруно Бабэ. Просто и ясно о Borland C++ версии 4.0 и 4.5.-М : БИНОМ., 1995.

  9. А.И. Касаткин, А.Н. Вальвачев. От Turbo С к Borland C++.-

Минск :Вышыэйшая школа , 1992.

Несколько слов о стиле изложения материала.

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

И само изложение языка Си начинается с рассмотрения нескольких простых программ с целью как бы провести своеобразную «экскурсию» по нему.

Во время этой «экскурсии» в сжатой форме будет подано много сведений о языке Си.

Не следует стараться обязательно все запоминать и понимать. Позже обо всём этом будет сказано более подробно и основательно.

Ещё одна особенность изложения материала продиктована стремлением как можно быстрее дать студентам тот минимум информации, который позволил бы самостоятельно писать хотя бы простые программы. Именно этим объясняются выбор и последовательность изложения сведений о языке Си.

Предполагается, что Си-программы будут вводиться, отлаживаться и запускаться в интегрированной среде Borland C++. Работа в ней очень похожа на работу программиста в среде Турбо Паскаль. Предполагается, что многие из студентов уже изучали Турбо Паскаль и работали в этой интегрированной среде.

Итак, переходим к примерам программ на Си.

Первая программа предназначена для вывода на экран строки символов.

#include

void main()

{

puts(“Очень рад приветствовать Вас!”);

}

В начале первой строки стоит номерной знак ( # ). Это означает, что в данной строке содержится т.н. директива препроцессора. Программа предварительно обрабатывается т.н. препроцессором и только потом осуществляется компиляция. В первой строке препроцессору предписывается включить (include) в программу файл stdio.h (поставить этот файл на место первой строки). Файл stdio.h содержит заголовки (прототипы) стандартных функций ввода/вывода.

Программа на Си состоит из одной или нескольких т.н. функций.

Количество этих функций не лимитируется. Их имена придумывает программист, но одна функция обязательно (!) должна называться main (главная). Все функции «равноправные». Ни в одной нельзя внутри определять другую. Любая функция может вызывать любую другую. Единственное отличие функции main от других в том, что именно с неё начинается выполнение программы. И всё! Если в Паскале есть главная программа и подпрограммы (function, procedure), то в Си все они – функции.

Комментарии в Си обозначаются двумя способами. Комментарий до конца строки обозначается подряд стоящими двумя косыми чертами ( // ), за которыми следует текст. Второй способ имеет вид /* комментарий */.

Функции делятся на стандартные, находящиеся в библиотеках, и нестандартные, создаваемые программистом. Тексты функций в программе на Си могут располагаться в произвольном порядке. Всё равно первой будет вызвана функция main. Однако могут встречаться случаи, когда вызывается функция, текст которой находится ниже, чем ее вызов, или функция является библиотечной.

Как на стадии компиляции убедиться в правильном обращении к этой функции? Для этого служат заголовки функций или их ещё называют прототипами. В каждом таком заголовке находятся сначала тип возвращаемого функцией результата, далее – имя функции и за ним в круглых скобках через запятые приводятся типы формальных параметров. Сколько параметров – столько типов, даже если все формальные параметры одного типа. В конце прототипа ставится точка с запятой. Для стандартных функций прототипы находятся в специальных заголовочных (head – голова по англ.) файлах. Конкретно, в файле stdio.h находятся прототипы стандартных функций ввода/вывода (input/output). Прототипы функций, создаваемых программистом, обычно размещаются в самом начале программы. Если в функции отсутствуют формальные параметры, то в круглых скобках пишется void или не пишется ничего. Но скобки должны быть обязательно! Имя функции отличается от имени простой переменной именно наличием после идентификатора круглых скобок.

Итак, после столь пространного объяснения первой строки программы переходим ко второй.

В ней описывается главная функция. void – означает, что функция ничего не возвращает. Далее после void стоит имя функции main. О том, что это имя функции , свидетельствуют круглые скобки после main. А то, что в скобках пусто, говорит об отсутствии передаваемых при вызове функции main параметров. Следует заметить, что при необходимости main ( ) может также вызываться и с параметрами. О том, какие это параметры и когда используются , можно прочитать в литературе.

После круглых скобок точку с запятой ставить нельзя, поскольку это не прототип, а определение функции. После круглых скобок стоят открывающая и закрывающая фигурные скобки. Они соответствуют begin и end из языка Паскаль. Всё, что находится между этими скобками, называется блоком. В примере в этом блоке приведен вызов функции puts ( ). О том, что это функция, свидетельствует наличие после имени круглых скобок. Это функция вывода строки символов на дисплей. То есть при вызове функции puts ( ) в качестве фактического параметра передаётся строка символов, заключённая в кавычки. Длина этой строки может достигать 65535 символов.

После puts ( ) стоит точка с запятой. В Си оператор заканчивается точкой с запятой. Иначе компилятор будет пытаться расшифровать два не разделенных точкой с запятой оператора как один.

Итак, программа рассмотрена. Теперь остановимся на том, как она будет введена и запущена на ПЭВМ. Для этого используется интегрированная среда Borland C++. Чтобы работать в этой среде, надо запустить программу bc.exe. Предположим, она расположена на диске С: и путь к ней имеет вид

C:\BCPP\BIN

Создадим в корневой директории диска С:\ директорию пользователя USER и зайдём в неё. В нижней части экрана появится

С:\USER>

Запустим bc.exe. Если путь к ней заранее прописан, то достаточно ввести bc.exe. Если же путь не прописан, то следует ввести

>С:\BCPP\BIN\bc и нажать “Enter”. (Расширение exe можно не писать).

Необходимо помнить, что запускаются только программы с расширениями .exe, .com, .bat. В директории BIN только одна программа с именем bc, а именно, bc.exe. Она и будет запущена.

Итак, запускается интегрированная среда Borland C++. При этом текущей директорией является С:\USER. Сюда по умолчанию будут заноситься все создаваемые программистом , а также компилятором и компоновщиком файлы.

На экране появляется окно с курсором в левом верхнем углу. Всё готово для создания файла с текстом программы. Даже имя ему предлагается noname00.cpp. В нижней части меню сказано, что для входа в верхнее меню нужно нажать управляющую клавишу F10. Работа в интегрированной среде Borland C++ во многом схожа с работой в среде Турбо Паскаль. Точно так же с помощью мыши или же клавиши F10 и клавиш управления курсором можно выйти в верхнее меню и выбрать в нём нужные пункты. Так , в меню File сообщается, как создать новый файл или открыть уже существующий. В меню Run – как запустить процесс компиляции, компоновки и выполнения программы или же как её отлаживать по шагам. В debug сказано, как при отладке программы контролировать значения переменных и массивов и т.д.

Работа с Borland C++ - тема для первой лабораторной работы.

А сейчас продолжим «экскурсию». Итак, имеется программа на Си. Запущена интегрированная среда Borland C++. Из верхнего меню File видно, что для создания нового файла надо навести курсор на new и нажать клавишу Enter. Появится имя файла noname00.cpp. Позже, уже при занесении файла в память, будет присвоено ему имя и расширение *.c. Например, pr1.c. Расширение обязательно *.c , а не *.cpp, т.к. cpp – расширение для программ на C++.

Однако проще воспользоваться меню File – open или нажать клавишу F3. Появится диалоговое окно, в котором содержится *.cpp. Это содержимое следует заменить, например, на pr1.c, и нажать клавишу Enter. Таким образом, открыт пока что чистый файл pr1.c.

Вводим в него программу на Си и в соответствии с меню Run нажимаем одновременно ctrl+F9 для последовательного запуска компиляции, компоновки и выполнения программы.

Если в программе не было ошибок, то в результате её выполнения на экране дисплея появится запрограммированная строка символов.

Эту строку можно прочитать, нажав клавиши Alt+F5 (о том, как работать с окнами , сообщается в верхнем меню window).

Пример 2 Предположим, необходимо вычислить значение функции y=f(x)=a*cos2(kx). Причём, k=1.25, а значения а и х необходимо ввести с клавиатуры.

#include

#include

void main ( )

{

float a, x, k=1.25, y;

puts (“Введите значения a и x”);

scanf (“%f%f”, &a, &x);

y=a*pow(cos(k*x),2);

printf (“При a=%f x=%f результат y=%f\n”, a, x, y);

puts (“Всего хорошего Вам!”);

}

По сравнению с первым примером здесь имеется ещё одна директория препроцессора, предписывающая включить файл math.h с прототипами (заголовками) стандартных математических функций. К ним в программе относятся функция возведения в степень pow ( ) и вычисления косинуса cos ( ). У функции pow ( ) два аргумента и её прототип выглядит как

double pow (double,double);

Это означает, что pow ( ) возвращает результат типа удвоенной точности (double) и требует два аргумента тоже типа double. Первый аргумент – возводимое в степень число или выражение. Второе – степень, в которую нужно возвести.

В функции main ( ) после открывающей фигурной скобки описаны локальные (т.е. имеющие место лишь в этой функции) переменные a, x, k, y типа float. Типы float и double – означают, что переменные являются действительного типа (т.е. могут иметь дробную часть). Но если под параметры типа float компилятор выделяет только 4 байта, то под double – 8 байт.

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

Только после описания локальных переменных разрешается размещать операторы, предписывающие, что и в какой последовательности делать. Уже знакомая по предыдущему примеру стандартная функция puts ( ) выводит на экран приглашение ввести значения переменных a и x. Далее следует стандартная функция форматного ввода из клавиатуры scanf ( ). Внутри скобок в кавычках размещены подряд два формата “%f%f”, а после них через запятую представлены адреса переменных a и x. Амперсанд (&) перед переменной означает операцию взятия адреса этой переменной. Рассмотрим , как осуществляется форматный ввод информации (здесь числовых значений). При вызове функции scanf ( ) появляется экран пользователя, и на нём отображено приглашение : «Введите значения a и x» (без кавычек).

На клавиатуре набираем числовое значение переменной а и нажимаем Enter. Это число в формате %f (для переменных типа float) размещается по адресу, выделенному компилятором для а. Второе число тоже по формату %f будет занесено по адресу для х. Сколько переменных, столько должно быть форматов. Для каждого типа переменной существует свой формат. Необходимо строго следить за тем, чтобы соблюдалось соответствие между переменными и форматами для их ввода.

В следующей строке вычисляется выражение , и результат присваивается переменной у. В этом выражении используются упомянутые ранее функции cos ( ) и pow ( ).

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

При а=2.5 х=0 результат у=2.5,

Ниже появится строка:

Всего хорошего Вам!

Её выведет функция puts ( ).

Пример 3 Необходимо вычислить .

#include

#include

void main ( )

{

float a, x, y;

puts (“Введите a и x”);

scanf (“%f%f”, &a, &x);

if ((a-x)>0 && cos(x))

{

y=log(a-x)/cos(x);

printf (“При a=%f x=%f результат y=%f\n”, a, x, y);

}

else

printf(“Нельзя вычислить у при a=%f x=%f\n”, a, x”);

puts (“Пока!”);

}

Здесь по сравнению с примером 2 прежде, чем вычислить у, производится проверка условия возможности это сделать. Для этого служит оператор условной передачи управления if. Он имеет две формы представления. Одна с использованием else, а другая – без него. Форма if с else имеет вид

if (выражение)

оператор_1;

else

оператор_2;

оператор_3;

.

.

После ключевого слова if в обязательных круглых скобках помещается выражение (арифметическое или логическое). Если результат вычисления этого выражения «истина», то выполняется оператор_1, а за ним – оператор_3. Если результат – «ложь», то выполняется оператор_2, а затем оператор_3. Следует отметить, что в Си нет специального булевского типа. Всё, что не равно нулю, считается «истина». Если же выражение (в том числе отдельная переменная) равняется нулю, то в логическом плане это «ложь».

Конкретно, в примере проверяется одновременно выполнение двух условий, а именно: (а-х)>0 и cos(x)0. Два амперсанда между ними означают логическую операцию «и». Операция «не» обозначается восклицательным знаком, а «или» - две параллельные вертикальные черты. Следует отметить, что условия cos(x)0 можно было бы представить в виде cos(x)!= 0, но, как уже было сказано ранее, достаточно просто написать выражение cos(x), которое автоматически сравнивается с нулём. При этом используется меньше машинных команд.

Итак, если условие ((a-x)>0 && cos(x)) даёт результат «истина», то выполняется вычисление у и вывод значений переменных на экран. Чтобы эти два оператора рассматривались как один составной, они расположены между открывающей и закрывающей фигурными скобками. Ещё раз отметим, что фигурные скобки играют в Си ту же роль, что ключевые слова begin и end в языке Паскаль.

Если проверяемое условие даст результат «ложь», то выполняется оператор после else, т.е. выводится сообщение о невозможности вычислить у и при каких значениях а и х это имеет место.

В любом случае было вычисление у или нет в конце появляется на экране строка символов «Пока!».

Пример 4 Табуляция функции.

Необходимо вычислить значения функции y=f(x) при изменении х от xmin до xmax с шагом х.

Пусть у=е, где е – основание натурального логарифма.

В Си имеются три оператора цикла: while, do while и for.В примере используется for.

#include

#include

void main ( )

{

float x, xmin, dx, xmax,y;

puts (“Введите xmin, dx, xmax”);

scanf (“%f%f%f”, &xmin, &dx, &xmax);

for (x=xmin ; x<=xmax ; x+=dx)

{

y=exp(-x);

printf (“При x=%f y=%f\n”, x, y);

}

puts (“Конец”);

}

В функции main ( ) описаны используемые в ней локальные переменные. Все они типа float.

Далее следуют приглашение и ввод значений xmin, dx и xmax.

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

Итак, вначале идёт инициализация x=xmin. Затем проверяется условие x<=xmax. В случае, если результат «истина», выполняется оператор, следующий за оператором for. Это составной оператор, состоящий из оператора присвоения значения переменной у и printf ( ). Эти два оператора заключены в { }.

После того, как будет выполнен этот составной оператор, происходит переход к третьему полю оператора цикла for. В нём осуществляется присвоение x= x+dx, записанное в форме x+=dx. Такое присваивание можно применять в том случае, когда результат вычисления присваивается переменной (х), участвующей в выражении справа от знака присваивания (=).

После изменения значения переменной цикла вновь проверяется условие, представленное во втором поле и т.д. После очередного изменения переменной цикла условие выполнения оператора в цикле может не выполниться. Происходит выход из цикла. На экране появится слово «Конец».

На этом примере заканчивается т.н. «экскурсия» по начальным ступенькам языка Си. Опыт показывает, что по её результатам студенты, особенно изучавшие ранее Паскаль, могут уже на первых практических занятиях составлять самостоятельно программы подобные приведенным в примерах. Естественно, в силу неполной информированности ими допускаются ошибки. Возникают вопросы. Всё это активизирует познавательную деятельность студентов и способствует лучшему восприятию подаваемого далее учебного материала.

Итак, приступаем к относительно последовательному изучению языка Си.

  1   2   3   4   5   6   7   8   9

Схожі:

Контактный телефон: 21-40-84 iconАнкета фотографии
Домашний адрес, контактный телефон, e-mail
Контактный телефон: 21-40-84 iconАнкета участника Автобиографические данные фио
Контактный телефон e-mail
Контактный телефон: 21-40-84 iconЗаведующему кафедрой
Контактную информацию об отвественном по кафедре по поддержанию кафедрального сайта (фио, должность, контактный телефон)
Контактный телефон: 21-40-84 iconІнструкція для участі за дистанційною формою у конференції
Контактный телефон кафедры информационных технологий и систем: 8-(0642)-590345 (зав кафедрою – Могильный Геннадий Анатольевич), e-mail:...
Контактный телефон: 21-40-84 iconДодаток 1
Телефон, факс, e-mail, сайт організації; відповідальна особа (піб, телефон, e-mail)
Контактный телефон: 21-40-84 iconДодаток 1
Телефон, факс, e-mail, сайт організації; відповідальна особа (піб, телефон, e-mail)
Контактный телефон: 21-40-84 iconНаша адреса: 01030, м. Київ-34, вул. Стрілецька, 28, Товариство “Знання”
Наш телефон 0-800-50-00-14 (безкоштовна міжміська лінія), для киян телефон 537-63-61, ф. 537-63-62
Контактный телефон: 21-40-84 iconПлан проведення наукових та науково-технічних заходів у 2008 р. Національний університет “Львівська політехніка” (назва організації)
Телефон, факс, e-mail, сайт організації; відповідальна особа (піб, телефон, e-mail)
Контактный телефон: 21-40-84 iconІнформація про книги на нашому сайті www znannia com ua Новинки виділені заливкою код назва ціна новинки з 22. 12. 2011-22. 02. 2012
Наш телефон 0-800-50-00-14 (безкоштовна міжміська лінія), для киян телефон 537-63-61, ф. 537-63-62
Контактный телефон: 21-40-84 iconПравила подання інформації для розміщення на офіційному сайті ону необхідна інформація по усім підрозділам
Відповідальний за інформацію по підрозділу (робочий телефон, мобільний телефон (бажано), електрона адреса). Ця інформація використовується...
Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©zavantag.com 2000-2013
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи