Язык си решение программ

В пособии приведено подробное описание наиболее распространенного языка программирования СИ для персональных компьютеров, совместимых с IBM PC, и описано применение средств языка на примерах задач работы со списками.

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

Ил. 33, табл. 8, библиография назв.
Утверждено ученым советом университета
Рецензенты: д.ф-м.н., проф. Афанасьев А.П.

Оглавление

  • 1.ОПИСАНИЕ ЯЗЫКА СИ
  • 1.1. ЭЛЕМЕНТЫ ЯЗЫКА СИ
  • 1.1.1. Используемые символы
  • 1.1.2. Константы
  • 1.1.3. Идентификатор
  • 1.1.4. Ключевые слова
  • 1.1.5. Использование комментариев в тексте программы
  • 1.2.1 Категории типов данных
  • 1.2.2. Целый тип данных
  • 1.2.3. Данные плавающего типа
  • 1.2.4. Указатели
  • 1.2.5. Переменные перечислимого типа
  • 1.2.6. Массивы
  • 1.2.7. Структуры
  • 1.2.8. Объединения (смеси)
  • 1.2.9. Поля битов
  • 1.2.10. Переменные с изменяемой структурой
  • 1.2.11. Определение объектов и типов
  • 1.2.12. Инициализация данных
  • 1.3.1. Операнды и операции
  • 1.3.2. Преобразования при вычислении выражений
  • 1.3.3. Операции отрицания и дополнения
  • 1.3.4. Операции разадресации и адреса
  • 1.3.5. Операция sizeof
  • 1.3.6. Мультипликативные операции
  • 1.3.7. Аддитивные операции
  • 1.3.8. Операции сдвига
  • 1.3.9. Поразрядные операции
  • 1.3.10. Логические операции
  • 1.3.11. Операция последовательного вычисления
  • 1.3.12. Условная операция
  • 1.3.13. Операции увеличения и уменьшения
  • 1.3.14. Простое присваивание
  • 1.3.15. Составное присваивание
  • 1.3.16. Приоритеты операций и порядок вычислений
  • 1.3.17. Побочные эффекты
  • 1.3.18. Преобразование типов
  • 1.4.1. Оператор выражение
  • 1.4.2. Пустой оператор
  • 1.4.3. Составной оператор
  • 1.4.4. Оператор if
  • 1.4.5. Оператор switch
  • 1.4.6. Оператор break
  • 1.4.7. Оператор for
  • 1.4.8. Оператор while
  • 1.4.9. Оператор do while
  • 1.4.10. Оператор continue
  • 1.4.11. Оператор return
  • 1.4.12. Оператор goto
  • 1.5.1. Определение и вызов функций
  • 1.5.2. Вызов функции с переменным числом параметров
  • 1.5.3. Передача параметров функции main
  • 1.6.1. Исходные файлы и объявление переменных
  • 1.6.2. Объявления функций
  • 1.6.3. Время жизни и область видимости программных объектов
  • 1.6.4. Инициализация глобальных и локальных переменных
  • 1.7.1. Методы доступа к элементам массивов
  • 1.7.2. Указатели на многомерные массивы
  • 1.7.3. Операции с указателями
  • 1.7.4. Массивы указателей
  • 1.7.5. Динамическое размещение массивов
  • 1.8.1. Директива #include
  • 1.8.2. Директива #define
  • 1.8.3. Директива #undef
  • 2.1. ЛИНЕЙНЫЕ СПИСКИ
  • 2.1.1. Методы организации и хранения линейных списков
  • 2.1.2. Операции со списками при последовательном хранении
  • 2.1.3. Операции со списками при связном хранении
  • 2.1.4. Организация двусвязных списков
  • 2.1.5. Стеки и очереди
  • 2.1.6. Сжатое и индексное хранение линейных списков
  • 2.2.1. Пузырьковая сортировка
  • 2.2.2. Сортировка вставкой
  • 2.2.3. Сортировка посредством выбора
  • 2.2.4. Слияние списков
  • 2.2.5. Сортировка списков путем слияния
  • 2.2.6. Быстрая и распределяющая сортировки
  • 2.3.1. Последовательный поиск
  • 2.3.2. Бинарный поиск
  • 2.3.3. М-блочный поиск
  • 2.3.4. Методы вычисления адреса
  • 2.3.5. Выбор в линейных списках

Источник: codenet.ru

[НЕ]урок СИ — МАССИВЫ решение задач основы

Язык C за 100 секунд [перевод на русский]

Егорова. Программирование на языке Си

Егорова Е.В. Программирование на языке Си. Учебное пособие / Алт. госуд.

технич. ун-т им. И.И.Ползунова. — Барнаул: 2012. — 184 с.

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

Цель пособия — дать конкретную информацию для самостоятельной работы студента.

Пособие предназначено для студентов направления 231000 «Программная

Рекомендовано — заседанием кафедры Прикладная Математика

Протокол №3 от 20.11.12.

Рецензент: C.А.Кантор — зав.кафедрой Прикладной математики АлтГТУ.

Данное учебное пособие предназначено для практического изучения основ алгоритмизации и программирования на стандартном языке Си. Цель учебника не в том, чтобы дать традиционное подробное описание языка Си, а в том, чтобы позволить студенту самостоятельно, в идеале вообще без участия преподавателя, изучить основы алгоритмизации и основы программирования на языке Си.

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

Учебник ориентирован на тех, кто знаком с основами информатики на уровне простейшей практической работы за компьютером. Конкретную интегрированную среду разработки Си-программ студент может выбрать по своему усмотрению, так как изложение материала от среды разработки практически не зависит. В книге рассматривается классический вариант языка Си («стандартный СИ»), который не зависит от реализаций и имеет место практически для любой конкретной среды программирования.

Структура учебника следующая. Пособие рассчитано на работу в двух семестрах по 16-17 учебных недель каждый. Основной материал разбит на 8 модулей. Изучение одного модуля занимает примерно 4 недели. Структура модуля следующая:

теоретический материал по одной или нескольким темам, который сразу же по тексту иллюстрируется решением практических задач;

Читайте также:
К серверному программному обеспечению относятся программы

задание к лабораторной работе, выполнение которой на компьютере позволит закрепить знания, полученные в теоретических разделах модуля;

список контрольных вопросов по данному модулю, который дает

дополнительную проверку полученных знаний.

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

Затем следует выполнить на компьютере лабораторную работу, что позволит практически закрепить полученные знания. Выполнение лабораторной работы пропускать нельзя! Интуитивное ощущение «я знаю и смогу это сделать» еще не означает, что Вы без проблем справитесь с этим на практике. К лабораторной работе прилагается набор вариантов заданий.

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

1 ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ СИ

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

История создания. Почему язык называется СИ ?

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

Си появился как инструментальный язык в процессе работы над операционной системой (ОС) UNIX Кена Томпсона из научно-исследовательской лаборатории фирмы Bell Telephone Laboratories. В 1969 г. Томпсон начал работать над этой системой для мини-ЭВМ PDP-7 фирмы DEC. В 1972 г. Деннисом Ритчи и Кеном Томпсоном был создан язык программирования Си.

В нем сочетались лучшие свойства языка Ассемблер и языков высокого уровня. От Ассемблера были взяты гибкие и эффективные средства работы с памятью, от языков высокого уровня — широкий набор управляющих конструкций, возможность работы со сложными структурами данных, гибкие средства ввода-вывода. Сегодня компилятор с языка Си есть практически на любом компьютере в любой ОС. 95% ОС UNIX и почти все прикладное обеспечение для нее написано на языке Си.

Название языка соответствует третьей букве латинского алфавита «C». Совпадение не случайно и имеет свою историю. Один из языков, появившихся в 70-х годах, назывался APL (A Programming Language) — язык программирования A. Так была занята первая буква алфавита. Во время работы над ОС UNIX для PDP-7 был создан язык программирования B, который оказал сильное влияние на следующий язык, разработанный Ритчи и Томпсоном для тех же целей. Показывая эту преемственность, авторы назвали язык C.

Версии языка Си. Турбо-Си. Си++.

Деннис Ритчи разработал язык Си для компьютера типа PDP фирмы DEC, который работал под управлением операционной системы UNIX. Эта версия языка Си приобрела большую известность благодаря классическому труду Кернигана и Ритчи «Язык программирования СИ». Данную основополагающую классическую версию языка принято называть KR. Комитет не просто предложил стандарт, а еще подготовил 79 тестов, позволяющих быстро и эффективно определить степень совместимости со стандартом ANSI для любого Си-компилятора.

Калифорнийская фирма «Борланд» (Borland Inernational CA) разработала свой компилятор для IBM PC — Турбо Си. В этой разработке:

1) реализован ANSI-стандарт (выполняется 60 тестов из 79);

2) реализована специальная Турбо-среда, которая максимально автоматизирует процесс разработки программ.

В начале 80-х годов в Bell Laboratory Бьерном Страутструпом в результате дополнения и расширения языка Си был создан новый, по сути, язык, получивший название «С с классами». В 1983 г. это название было заменено на «С++». Это название указывает на эволюционную природу перехода от «С» к «С++», так как «++» — это операция приращения в Си (увеличение на 1). С++ — это мощная, объектно-ориентированная версия языка, обычный С сохранен в С++ как подмножество (есть очень немногие исключения).

Следует иметь в виду, что кроме Borland С++ существует еще версия С++, разработанная фирмой Microsoft.

В данной книге описываются основные возможности классического, или

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

Характеристика языка Си

Cи — это язык программирования общего назначения, хорошо известный своей эффективностью, экономичностью и переносимостью. Указанные преимущества Си обеспечивают хорошее качество разработки почти любого вида программного продукта. Использование Си в качестве инструментального языка позволяет получать быстрые и компактные программы. Во многих случаях программы, написанные на Си, сравнимы по скорости с программами, написанными на языке ассемблера. При этом они имеют лучшую наглядность и их более просто сопровождать.

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

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

Читайте также:
Лучшие программы для моушен дизайна

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

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

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

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

Эффективность . По компактности и скорости выполнения программы на языке Си приближаются к программам, написанным на Ассемблере.

Мощность . Язык Си содержит большой набор современных управляющих конструкций и способов представления данных.

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

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

Мобильность . Программы, написанные на языке Си, могут быть легко перенесены на другой компьютер в другую операционную систему.

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

Недостатки языка Си

Главный недостаток: язык предъявляет высокие требования к квалификации использующего его программиста. Так, Си предоставляет программисту очень большую свободу в программировании, однако бесконтрольное использование этой свободы часто приводит к ошибкам.

1.1 ОСНОВНЫЕ ЭТАПЫ РЕШЕНИЯ ЗАДАЧ НА ЭВМ

Цель изучения данного материала — познакомиться с общей технологией разработки программ на ЭВМ. В принципе, эта технология не зависит от языка программирования. Ниже приводятся примеры на двух языках: Паскаль и Си.

Обычно выделяются следующие этапы решения задачи на ЭВМ:

1) постановка задачи;

2) для математических задач — выбор математического метода решения задачи и окончательная математическая постановка задачи (построение математической модели);

3) разработка алгоритма решения и наглядное изображение алгоритма в одной из принятых форм;

4) написание программы (запись алгоритма на языке программирования);

5) ввод текста программы в ЭВМ;

6) получение рабочей программы;

7) тестирование и отладка программы;

8) решение задачи на ЭВМ;

9) анализ результатов выполнения программы и оформление их в виде таблиц, графиков и т.д.;

10) оформление отчета о проделанной работе.

Рассмотрим выполнение всех этих этапов на примере. Пусть требуется решить на ЭВМ следующую задачу: найти объем прямой треугольной призмы.

Математическая постановка задачи

Объем прямой треугольной призмы вычисляется по формуле:

Источник: studfile.net

Модель языка Си

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

Поэтому разберемся с моделью языка Си:

  • Для чего язык Си был разработан?
  • Как выглядит программа с точки зрения языка Си?
  • Какие практические советы из этого следуют?

1. Цель создания языка C

Деннис Ритчи разработал язык C для решения двух задач:

  1. Язык должен как можно более эффективно транслироваться в машинные коды, для обеспечения максимальной производительности.
  2. Язык должен быть максимально переносимым на любые платформы.

Обе поставленные задачи были полностью решены. В 1972 году появился первый вариант языка C.

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

Также язык С в настоящее время реализован практических на всех компьютерных платформах и операционных системах.

Какую же модель языка выбрал Деннис Ритчи?

2. Модель С

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

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

3. Модель функции в языке С

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

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

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

Читайте также:
Программа радикального перехода к рынку была принята российским руководством автор

Отсюда следует важный принцип языка С — принцип изоляции кода.

4. Изоляция кода в языке C

Изоляция кода — это такой принцип построения программы, который предполагает, что между фрагментами программы нет скрытых связей.

Например, предположим, что программист Иванов вызывал функцию, которую написал программист Петров. При этом и у Иванова, и у Петрова есть переменная с именем X. Она же используется в качестве аргумента функции.

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

Для исключения подобных ситуаций в языке С предусмотрено несколько видов защиты:

  • Передача по значению.
  • Области видимости переменных.
  • Директивы условной компиляции и т.д.

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

5. Избыточность языка С

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

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

В языке C++ другая модель языка и другой подход к программированию, который получил название объектно-ориентированное программирование (ООП).

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

К счастью, 90% возможностей языка Си избыточны и вам никогда не понадобятся.

Например, есть громадная таблица приоритетов операторов C.

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

Для правильного использования приоритетов нужно всего лишь расставить скобки. И все!

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

Хотя во многих учебниках рекомендуется выучить эту таблицу наизусть, чтобы сократить число скобок.

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

Вам захочется сказать: «Зачем я вообще этим занимался?!»

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

6. Командная разработка с помощью C

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

Для чего они нужны?

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

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

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

Каркас будущей программы можно создать очень быстро, а потом постепенно реализовать весь функционал.

7. Иерархия структур данных в С

Иерархия структур данных — это одна из самых мощных возможностей языка C. В языке С можно с легкостью создавать любые, сколько угодно сложные структуры данных.

К сожалению, произошла путаница в терминологии. Раньше программными объектами назывались любые конструкции в языке программирования. Но с появлением языка C++ стали называть объектами экземпляры классов.

Хотя в языке С объектами изначально назывались структуры данных.

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

Рассмотрим фрагмент иерархии объектов данных библиотеки GTK+

Как вы видите весь оконный интерфейс представлен в виде иерархии объектов данных, что позволяет легко и быстро работать как с любым конечным объектом, так и с любым вышестоящим объектом.

Подобная иерархия реализована в библиотеке Win32API для программирования под Windows, и во многих других программных системах.

8. Сильное абстрагирование в С

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

В качестве основного инструмента абстрагирования в языке С применяются библиотеки. Например, в самом языке нет команд работы с графикой. Но программист может подключить любую графическую библиотеку (например, Cairo) и обращаться к ее функциям и объектам данных, так же легко, как и к любым функциям и структурам данных, написанных на языке C.

Уровень абстракции ничем не ограничен. Так, если программисту нужно написать оконный интерфейс для Windows, то достаточно добавить строчку:

Источник: progtips.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru