Апрель 2020
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
27282930   

Календарь Календарь

Последние темы
» Netbox.Global (NBX) - браузер с инновационной технологией.
автор Viktor2312 Чт Апр 02 2020, 00:10

» Новости криптовалют: статьи, заметки, разное...
автор Viktor2312 Ср Апр 01 2020, 15:23

» Часики на лампах
автор freddy Вс Мар 15 2020, 14:27

» Использование ЯВУ для разработки программ для РК86
автор barsik Сб Мар 14 2020, 18:36

» Топ-25 книг по программированию.
автор Viktor2312 Сб Мар 14 2020, 15:38

» Новинки. Книги. Часть 1.
автор Viktor2312 Сб Мар 14 2020, 13:41

» ПО. ПЭВМ "Ириша". Программирование для ИРИШИ на PL/M.
автор barsik Пт Мар 13 2020, 02:00

» Интересные фото. Разное...
автор barsik Вт Мар 10 2020, 21:11

» Примитивная DOS размером 2 Кб
автор barsik Чт Мар 05 2020, 09:52

» ROM-BIOS (монитор) "для Микро-80"
автор barsik Ср Фев 26 2020, 14:32

» Коммутатор на 12 входов и 2 выхода для УМЗЧ.
автор Viktor2312 Вт Фев 25 2020, 10:26

» Статьи, заметки, очерки, разное... Микроконтроллеры.
автор Viktor2312 Вт Фев 25 2020, 09:45

» Радио-86РК: Расширение ПЗУ
автор barsik Пн Фев 24 2020, 19:28

» Язык программирования С.
автор Viktor2312 Пн Фев 17 2020, 19:02

» Радио-86РК: внешние видео-адаптеры
автор freddy Сб Фев 15 2020, 17:44

» ПЗУ F800 для РК86
автор barsik Сб Фев 08 2020, 19:08

» "PC". Статьи, заметки, очерки, разное...
автор Viktor2312 Чт Фев 06 2020, 16:07

» AVR AY плеер
автор freddy Сб Фев 01 2020, 15:18

» радиолюбительский компьютер Микро-80 - мой новодел
автор vlad6502 Ср Янв 29 2020, 01:50

» Конфиги для эмулятора EMU80 V4
автор barsik Сб Янв 25 2020, 11:42

» Амфитон 25у-002С
автор Viktor2312 Сб Янв 25 2020, 02:15

» Решил собрать радиоприёмник.
автор freddy Чт Янв 23 2020, 18:48

» Электроника. Статьи, заметки, очерки, разное...
автор Viktor2312 Пн Янв 20 2020, 14:53

» Вопрос по старой клаве Chicony 1992 года kb-5191
автор Viktor2312 Пн Янв 20 2020, 05:00

» Не включается из стэндбая телевизор ЭЛТ Сони
автор Atari1974 Пт Янв 17 2020, 18:59

Самые активные пользователи за месяц
Viktor2312
Язык программирования С. Vote_lcapЯзык программирования С. Voting_barЯзык программирования С. Vote_rcap 

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


Язык программирования С.

Перейти вниз

Язык программирования С. Empty Язык программирования С.

Сообщение  Viktor2312 в Вт Янв 21 2020, 10:27

1
.
Язык программирования С.


____Данная тема будет посвящена языку программирования С.


Программирование – это процесс написания компьютерных программ.

____Программа - это просто некоторый текст. Возможно, с первого взгляда он кажется непонятной аброй-кадаброй, но на самом деле в нём есть свои четкие правила, которые никто не может нарушить. Эти правила и составляют основу любого языка программирования. В принципе, записать текст программы можно в любом текстовом редакторе, даже в стандартном блокноте ОС Windows, но есть одно значительное но.
____Компьютер не понимает ничего, кроме нулей и единиц. Уж тем более он не понимает никаких слов, поэтому написанный текст программы для него, примерно как и для вас сейчас – набор непонятных символов. Чтобы компьютер понял то, что мы от него хотим, нам нужна специальная программа, которая, если так можно выразиться, переведёт программу, записанную на языке программирования, на язык, понятный компьютеру. Такая программа называется компилятором, а сам процесс перевода программы на понятный компьютеру язык - компиляцией. Итак, процесс написания программ состоит в самом простом виде из следующих шагов:

  • написать код программы в любом текстовом редакторе;

  • скомпилировать исходный код.

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


IDE Pelles C.

____Pelles C - небольшая, бесплатная среда разработки под Windows.
____Для новичка имеется всё необходимое - встроенный редактор и компилятор. Поддерживаются новые стандарты языка Си (C99, С11).
____Отличается простотой в установке и использовании. На официальном сайте имеются версии как для 32-х, так и для 64-разрядных систем.


Установка IDE Pelles C.

____1 шаг. Переходим на официальную страницу проекта IDE Pelles C.
____Выберите подходящую версию установочного пакета и скачайте его. После завершения скачивания запустите установку.

____2 шаг. Первым делом необходимо ознакомиться с условиями лицензионного соглашения.

Язык программирования С. 00001__YAzyk_S.1579594087

____Если вы со всем согласны, то поставьте галочку напротив пункта "I accept the terms in the license agreement" и нажмите кнопку "Next".

____3 шаг. На этом шаге вы можете выбрать файлы, которые Wndows в дальнейшем будет ассоциировать с Pelles C. Я рекомендую выбрать *.С и *.H.

Язык программирования С. 00002__YAzyk_S.1579594697

____4 шаг. В следующем окне можно выбрать каталог установки для Pelles C.

Язык программирования С. 00003__YAzyk_S.1579594866

____Выбрав каталог установки нажмите "Install".

____5 шаг Дождитесь окончания процесса установки и нажмите "Close".

Язык программирования С. 00004__YAzyk_S.1579595187

____6 шаг Запустите программу из меню "Пуск" операционной системы. При первом запуске программы появится предложение создать базу данных с определениями, которые будут использоваться для автозавершения кода. Советую нажать "Build".

Язык программирования С. 00005__YAzyk_S.1579595447

____Дождитесь окончания процесса и нажмите "Close".

____7 шаг Поздравляю! Вы успешно установили IDE Pelles C на свой компьютер.

Язык программирования С. 00006__YAzyk_S.1579595956

Инструкция по установке IDE Pelles C с официального сайта (на английском).


Продолжение в следующем посте...


.


Последний раз редактировалось: Viktor2312 (Ср Фев 05 2020, 05:39), всего редактировалось 2 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12293
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Язык программирования С. Empty .

Сообщение  Viktor2312 в Вт Янв 21 2020, 14:30

2
.
Создание проекта в IDE Pelles C.


1 шаг. Запускаем Pelles C.

Язык программирования С. 00007__YAzyk_S.1579604119

Для того чтобы создать новый проект на стартовой странице нажмите на "Start a new project".

2 шаг. В появившемся окне выбираем пункт "Win64 Console programm (EXE)", так как мы собираемся создавать консольное приложение. Пока попробуем выбрать именно WIN64, так как ОС 64-разрядная, можно поэкспериментировать и выбрать Win32.

Язык программирования С. 00008__YAzyk_S.1579604693

Кроме того, в поле "Name" необходимо ввести название для проекта. В поле "Location" указана основная папка проекта, в ней будут храниться все файлы проекта. Используя кнопку "..." вы можете выбрать самостоятельно, где нужно сохранить проект. Закончив с основными настройками проекта нажмите кнопку "Ok".

3 шаг. Если всё сделано правильно, то в правой части окна появится отдельная вкладка, в которой появится ваш проект.

Язык программирования С. 00009__YAzyk_S.1579604936

Теперь добавим в проект файл с исходным кодом. Именно в нём мы и будем писать текст будущей программы.

4 шаг. Правой кнопкой мышки кликните по значку проекта.

Язык программирования С. 00010__YAzyk_S.1579605116

В появившемся контекстном меню выберите пункт "Add files to project...".

5 шаг. Появится дополнительное окно, в котором необходимо ввести имя для файла с кодом. Я назвал source_001.с, вы можете выбрать другое имя.

Язык программирования С. 00011__YAzyk_S.1579605288

После того, как записали имя файла нажмите на кнопку "Открыть". Кроме того, используя это окно можно добавить любой ранее написанный файл с кодом в проект.

6 шаг. В панели с проектом должен появится добавленный вами файл.

Язык программирования С. 00012__YAzyk_S.1579605446

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

7 шаг. Откроется новая вкладка редактора с исходным файлом. Именно в этом окошке вы и будете писать свои программы.

Язык программирования С. 00013__YAzyk_S.1579606143

Для каждой новой программы требуется создать новый проект.

***

Скопируйте в окно редактора следующий код:

Листинг 1. Программа «Hello, World!»

Код:

#include <stdio.h>
int main(void) {
  printf("Hello, World!\n");
  return (0);
}

____Это простая программа, которая выводит на экран сообщение: "Hello, World!". Большинство пособий по программированию начинается как раз с написания этой программы. Можно сказать, что это стало уже доброй традицией в обучении программированию.
____Не переживайте, что вам сейчас непонятно, что обозначает каждое конкретное слово. Сейчас ваша задача научиться обращаться с компилятором. С самой программой мы разберёмся уже после.
____Компилируем исходный код, используя кнопку меню.

Язык программирования С. 00015__YAzyk_S.1579608517

____Ниже, в маленьком окне, появится результат компиляции программы. Здесь же будут отображаться ошибки и предупреждения, которые возникли при компиляции. Легко заметить, что сейчас никаких сообщений об ошибках нет. Так как столь простенький текст их не имеет.
____Так как ошибок при компиляции не обнаружено, то запускаем нашу программу, используя горячие клавиши Ctrl+F5, либо кнопку меню. Если всё сделано верно, то перед вам откроется окно консоли, в котором будет выведена строка "Hello, world!". И наша первая программа РАБОТАЕТ.

Язык программирования С. 00014__YAzyk_S.1579608753


Про сообщения компилятора, ошибки и предупреждения.

____Компилятор выдаёт два типа сообщений: предупреждения (warning) и ошибки (error).
Предупреждения нам не страшны. К ним можно относиться как к хорошим советам, которыми, впрочем, можно не пользоваться. Программу можно запускать даже при наличии предупреждений, но вот если компилятор выдаёт ошибку (error), то такую программу запустить не получится. Необходимо сначала исправить все ошибки в вашей программе.

____Традиционно в большинстве книг по программированию, в качестве первой программы предлагается программа "Hello, world". Этим никого не удивишь. Но вот что интересно.
Такая традиция появилась благодаря книге "Язык программирования Си" (The C programming language) Б. Керниган, Д. Ричи выпущенной в свет в 1978 году. Эту книгу еще называют "white book".
Второе издание (1988) этой книги было переведено на 27 языков.


Продолжение в следующем посте...


.


Последний раз редактировалось: Viktor2312 (Ср Фев 05 2020, 05:39), всего редактировалось 1 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12293
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Язык программирования С. Empty .

Сообщение  Viktor2312 в Ср Янв 22 2020, 01:15

3
.
Несколько основных принципов.


Программирование.

____В действительности компьютеры не являются умными машинами, потому что они делают только то, что им приказывают. Большинство компьютерных систем выполняют операции на очень примитивном уровне. Например, большинство компьютеров умеют только суммировать числа или проверять значение на равенство нулю. Все остальные операции любой компьютерной системы формируют базовый набор команд, который называют системой команд компьютера.
____Чтобы решить задачу с помощью компьютера, вы должны представить решение задачи в терминах команд специфического компьютера. Компьютерная программа - это только набор команд, необходимых для решения определённой задачи. Подход или метод, который используется для решения задачи, известен как алгоритм. Например, если Вы хотите разработать программу, которая проверяет, является ли число чётным или нечётным, то вы пишете последовательность команд, которые решают задачу, после чего эта последовательность команд становится программой. Метод, который используется в целях проверки того, является ли число чётным или нечётным, называется алгоритмом. Обычно, чтобы разработать программу для решения определённой задачи, решение сначала описывается в виде алгоритма, а затем на его основе разрабатывается программа, которая и выполняет этот алгоритм. Так, алгоритм для проверки числа на чётность мог бы быть описан следующим образом.
____Сначала число делится на два. Если остаток от деления является нулевым, число является чётным, в ином случае число нечётное.
____Имея логически правильный алгоритм, можно последовательно написать утверждения, необходимые для выполнения заданного алгоритма на специфической компьютерной системе. Эти утверждения должны быть выражены в командах определённого языка или как частный случай языка С.


Языки высокого уровня (ЯВУ).

____Когда появились первые вычислительные устройства, то единственным способом их программирования было ручное введение в память устройства двоичных чисел, которые соответствовали определённым машинным командам. Следующее усовершенствование технологии ввода программы произошло с развитием ассемблеров - программ, которые давали возможность программисту работать с компьютером на несколько более высоком уровне. Вместо того, чтобы вводить последовательности двоичных чисел, составляющих программу для выполнения специфической задачи, ассемблер позволяет программисту использовать мнемокоды, или понятные аббревиатуры, которые преобразуются в соответствующие машинные команды. С помощью мнемокодов можно также управлять расположением команд в памяти. Программа, называемая ассемблером, транслирует исходную программу на языке ассемблера из её символического формата в соответствующие машинные команды компьютерной системы.
____Поскольку в ассемблерах существует взаимно-однозначное соответствие между каждым утверждением ассемблера и соответствующей машинной командой, ассемблеры являются языками низкого уровня. Программист должен знать систему команд специфической компьютерной системы, чтобы написать программу на ассемблере, причём окончательная программа не является переносимой; т. е. программа не будет работать, если тип процессора отличается от того, для которого она была написана. Именно поэтому для различных типов процессоров разработаны собственные ассемблеры, которые учитывают специфику системы команд данного процессора. Программы, написанные на языке ассемблера, являются машинно-зависимыми.
____Поэтому с развитием технологий программирования произошёл закономерный переход к т. н. языкам высокого уровня, где одним из первых был язык FORTRAN (FORmula TRANslation). Программисты, разрабатывающие программы на языке FORTRAN, больше не должны были интересоваться архитектурой компьютера, а отдельные операции, выполняемые на FORTRAN, были намного более сложными по сравнению с командами ассемблера и не были связаны с системой команд специфической машины. Однако команды языка FORTRAN, или утверждение, приводили к выполнению многих отдельных машинных команд, в отличии от взаимно-однозначного соответствия между командами ассемблера и машинными командами.
____Стандартизация синтаксиса языков высокого уровня подразумевала, что программа, написанная на языке высокого уровня, должна быть независима от типа компьютера. То есть программа могла работать на любой машине, которая поддерживала язык либо с небольшими изменениями, либо вообще без изменений. Чтобы поддерживать язык высокого уровня, должна быть разработана специальная компьютерная программа, которая переводит утверждения программы, написанной на языке высокого уровня, в форму, которую понимает компьютер, или другими словами, в специфические команды компьютера. Такая программа называется компилятором.


Операционные системы.

____Прежде чем продолжить разговор о компиляторах, необходимо понять роль компьютерной программы, известной как операционная система. Операционная система - это программа, которая управляет всей компьютерной системой. Всё операции ввода-вывода, которые выполняются на компьютере, проходят через операционную систему. Операционная система также управляет ресурсами компьютерной системы и обеспечивает выполнение пользовательских программ.
____Существует много различных операционных систем, например Unix, Linux, Mac OS X, Windows и т. д.


Компиляция программ.

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

Язык программирования С. 00016__YAzyk_S.1579649721

____На рисунке выше показаны шаги, которые должны быть выполнены при вводе, компиляции и выполнении программы, разработанной на языке программирования С.
____Программа, которая должна компилироваться, сначала записывается в виде файла на компьютерной системе. Имеются различные соглашения по именованию файлов, но в основном, выбор названия остаётся за вами. Исходной программе на языке С можно давать любое имя, но последними двумя символами должны быть ".c" (это не является обязательным требованием, это просто соглашение). Поэтому, например, имя prog1.c является допустимым именем файла для программы на языке С в вашем компьютере.
____Для написания программ на языке С можно использовать текстовый редактор, но лучше использовать специализированную IDE. Программа на языке программирования С, которая записана в файл, называется исходной программой, или исходным модулем, поскольку представляет собой оригинальный текст программы. После того как исходная программа записана в файл, её можно компилировать.
____На первом шаге процесса компиляции компилятор анализирует каждое утверждение исходной программы и производит проверку на соответствие синтаксису и семантике языка.
____Если на этом этапе компилятором обнаружены ошибки, то пользователь получает соответствующие сообщения сразу после процесса компиляции. В исходной программе ошибки должны быть исправлены и процесс компиляции должен быть повторён.
____Типичные ошибки, которые происходят на этом этапе, - это незакрытые скобки (синтаксическая ошибка), или использование переменной, которая не определена (семантическая ошибка).
____Когда все синтаксические и семантические ошибки в программе будут исправлены, компилятор начнёт преобразовывать каждое утверждение программы в "более низкую" форму. На большинстве систем это означает, что каждое утверждение исходной программы будет переведено компилятором в эквивалентные структуры на языке ассемблера, которые должны выполнять идентичные действия.
____После того как программа была переведена в эквивалентную программу на языке ассемблера, следующий этап процесса компиляции переводит команды ассемблера а соответствующие машинные команды. На этом этапе может использоваться отдельный ассемблер, но обычно в большинстве систем программирования ассемблер встроен в компилятор.
____Ассемблер анализирует каждую команду языка ассемблера и преобразовывает её в двоичный формат. При этом формируется объектный код, который записывается в соответствующий файл. Этот файл обычно имеет то же самое имя, что и исходный файл, но с расширением ".obj" которое заменяет ".с" в имени файла.
____После того, как исходная программа переводится в объектный код, её необходимо скомпоновать. Этот процесс также выполняется автоматически. Цель этапа компоновки состоит в том, чтобы получить законченную программу, готовую для выполнения на компьютере. Если исходная программа использует другие программы, которые были предварительно скомпилированы, то на этом этапе все программы объединяются. В объектные программы, которые используют библиотечные файлы системы, также будут сделаны вставки из библиотек во время выполнения этого этапа.
____Процесс компиляции и объединения программ часто называют построением. Конечный объединённый файл, который является выполнимым форматом объектного кода, сохраняется в заключительном файле, который можно запустить или выполнить. В операционной системе Windows исполняемый файл обычно имеет то же самое имя, что и исходный файл с расширением ".exe".
____Выполнение программы подразумевает, что последовательно выполняется каждое из утверждений программы. Если программа запрашивает некоторые данные от пользователя, что обычно называется вводом, то происходит временная приостановка выполнения программы таким образом, чтобы можно было ввести данные. Аналогично программа может реагировать на различные события, например нажатие мыши. Процесс отображения результатов работы программы называется выводом. Результаты появляются в окне, иногда называемом консолью. Вывод также можно сделать непосредственно в файл.
____Если всё выполняется правильно (вероятно, это не всегда будет получаться с первого раза), то можно считать, что разработка программы закончена. Если программа не выдаёт желаемые результаты, необходимо вернуться к исходной программе и повторно проанализировать логику алгоритма. Этот этап называется отладкой. Во время этого этапа определяются и устраняются все логические неточности и ошибки программы. При этом, вероятнее всего, необходимо будет сделать некоторые изменения в оригинальной программе, после чего полный процесс компиляции, компоновки и выполнения программы должны быть повторены, пока не будут получены правильные результаты.


Интегрированная среда разработки (IDE).

____Ранее были рассмотрены отдельные этапы создания исполняемой программы на языке С.  Этапы редактирования, компилирования, выполнения и отладки программ. Но обычно эти этапы объединены в едином приложении, называемом интегрированной средой разработки, для обозначения которой часто используют аббревиатуру IDE (Integrated Development Environment). Интегрированная среда разработки - это программа на основе оконного интерфейса, например Pelles C, которая позволяет легко управлять большими объектами, редактировать файлы, компилировать, компоновать, выполнять и отлаживать ваши программы.


Продолжение в следующем посте...


.


Последний раз редактировалось: Viktor2312 (Ср Фев 05 2020, 05:40), всего редактировалось 1 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12293
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Язык программирования С. Empty .

Сообщение  Viktor2312 в Вс Янв 26 2020, 12:08

4
.
Рассмотрим первую программу.

____Рассмотрим нашу первую программу более подробно.

Код:
#include <stdio.h>
int main (void)
{
  printf ("Hello, World!\n");
  return (0);
}

____Первая строка программы:

#include <stdio.h>

означает, что заголовочный файл с именем stdio.h должен быть включён в начало программы. В нём содержится информация для компилятора о том, как выполнить вывод значений (процедура printf) из программы. Или иными словами, первая строка программы сообщает компилятору, что он должен включить информацию о стандартной библиотеке ввода-вывода. Эта строка встречается в начале многих исходных файлов Си-программ. Позже мы вернёмся к этому, для более детального рассмотрения.
____Вторая строка нашей программы:

int main (void)

сообщает системе, что именем программы является main и что эта программа возвращает целое число, о чём говорит аббревиатура int. Имя main - это специальное имя, которое указывает, где программа должна начать выполнение. Круглые скобки сразу после слова main свидетельствуют о том, что это имя функции. Ключевое слово void, которое находится в круглых скобках, означает, что в функцию main не передаётся никаких аргументов. Функции в языке С похожи на подпрограммы. Обычно вы вольны придумывать любые имена для своих функций, но main - особое имя, любая программа начинает свои вычисления с первой инструкции функции main. Обычно main для выполнения своей работы пользуется услугами других функций, одни из них пишутся самим программистом, а другие берутся готовыми из имеющихся в его распоряжении библиотек. Один из способов передачи данных между функциями состоит в том, что функция при обращении к другой функции передаёт ей список значений, называемых аргументами. Этот список берётся в скобки и помещается после имени функции. В нашем примере main определена как функция, которая не ждёт никаких аргументов. Теперь, когда мы определили функцию, мы должны написать, что именно эта функция должна выполнять. Это можно сделать, разместив все утверждения программы в паре фигурных скобок. Все утверждения программы, заключённые в фигурные скобки, будут относиться к функции main. Инструкции функции заключаются в фигурные скобки {}. В нашей программе записано только два таких утверждения. Первое утверждение определяет, что должна быть вызвана подпрограмма с именем printf. В качестве аргумента в подпрограмму printf будет передана последовательность символов.

printf ("Hello, World!\n");

____Функция вызывается по имени, после которого, в скобках, указывается список аргументов. Таким образом, приведенная выше строка — это вызов функции printf с аргументом "Hello, World!\n". Функция printf — это библиотечная функция, которая в данном случае напечатает последовательность символов, заключённую в двойные кавычки.
____Последовательность символов в двойных кавычках, такая как "Hello, World!\n", называется строкой символов или строковой константой.
____Функция printf находится в библиотеке компилятора С, и она просто печатает или отображает те аргументы, которые были подставлены вместо параметров. Последние два символа в строке, а именно обратная наклонная черта "\" и символ "n", вместо составляют символ newline (новая строка). При этом система должна сделать то, о чём говорит название символа - выполнить переход на новую строку. Любые символы, которые будут напечатаны после символа newline, появятся на следующей строке дисплея. Фактически символ newline подобен клавише возврат каретки на пишущей машинке.
____Все утверждения в программе на языке С должны заканчиваться точкой с запятой (;). Именно поэтому точка с запятой должна быть сразу поставлена после закрывающей круглой скобки при вызове функции printf.
____Символ новой строки никогда не вставляется автоматически, так что одну строку можно напечатать по шагам с помощью нескольких обращений к printf.
____Последнее утверждение, написанное как:

return (0);

говорит о том, что выполнение функции закончено и что в систему возвращается значение 0. При этом вместо нуля можно использовать любое целое число. Нуль используется в соответствии с соглашением об индикации успешного завершения программы, т. е. это говорит о том, что при выполнении программы не произошло никаких ошибок. При этом могут использоваться различные числа для указания различных типов ошибок, которые произошли (например, не найден необходимый файл).
____Проверка значения возврата может производиться другими программами (например, операционной системой), чтобы определить, выполнилась ли программа успешно.
____А теперь немного усложним нашу программу. Результат её работы будет следующим:

Язык программирования С. 00017__YAzyk_S.1580071494

Код этой простенькой программки следующий:

Язык программирования С. 00018__YAzyk_S.1580071733

Код:
#include <stdio.h>
int main (void)
{
  printf ("Testing...\n.1\n..2\n...3\n....4\n.....5\n\n\n");
  printf ("\tHello forum ruecm\n");
  printf ("\n");
  printf ("\tHello Vita\n");
  printf ("\n");
  printf ("\t@_Yann._lisss._ is the best human being");
  printf ("\n\n\n\n\n\n\n\n\n\n");
  return (0);
}

____Как видно из текста программы мы добавили ещё шесть функций printf, а также применили символ табуляции \t. И если детально обратить внимание на первую функцию printf

printf ("Testing...\n.1\n..2\n...3\n....4\n.....5\n\n\n");

и на результат её работы, то можно сделать вывод, что можно не делать отдельный вызов функции printf, для вывода каждой строки.


Продолжение в следующем посте...


.


Последний раз редактировалось: Viktor2312 (Ср Фев 05 2020, 05:40), всего редактировалось 1 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12293
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Язык программирования С. Empty .

Сообщение  Viktor2312 в Пн Янв 27 2020, 10:58

5
.
Отображение значений переменных, комментарии,
цикл while.

____Функция printf очень часто будет использоваться в программах, поскольку она обеспечивает простой и удобный способ для отображения результатов работы программы. Мало того, что могут быть отображены простые фразы, как мы уже делали это раньше, но также можно отображать и значения переменных и результаты вычислений. Программа, показанная на листинге ниже, использует функцию printf для отображения результатов сложения двух чисел, а именно чисел 50 и 25.

Язык программирования С. 00019__YAzyk_S.1580111621

Код, для вставки в IDE:

Код:
#include <stdio.h>
int main (void)
{
  int sum;

  sum = 50 + 25;
  printf("The sum of 50 and 25 %i\n", sum);

  return (0);

}

Результат её работы:

Язык программирования С. 00020__YAzyk_S.1580111879

____В нашей программе, в первом утверждении объявляется переменная sum, которая имеет тип int. В языке С требуется, чтобы все переменные были объявлены прежде, чем они будут использованы в программе. Объявление переменной сообщает компилятору языка С, как именно будет использоваться отдельная переменная в данной программе. Эта информация необходима компилятору для генерирования команд, с помощью которых будут храниться и извлекаться значения для данной переменной. Переменная, объявленная с ключевым словом int, может использоваться только для хранения целочисленных значений, т. е. чисел без дробной части. Примеры целочисленных значений: -5; 4; 89; -23; 23; 70; 200 и 0. Числа с дробной частью, такие как: 3,24; 2,305; 7,845; 26,0. Называются вещественными числами или числами с плавающей запятой.
____Целочисленная переменная sum используется для хранения результатов сложения двух целых чисел 50 и 25. Пустая строка после объявления этой переменной оставлена преднамеренно, для визуального отделения объявления переменных программы от утверждений программы. Это не обязательно, но лучше оформлять программу в соответствии с требованиями стиля. Иногда добавление отдельной пустой строки в программе, может сделать программу более читаемой.
____Утверждение программы:

sum = 50 + 25;

выглядит как и в большинстве других языков программирования: число 50 суммируется (о чём говорит знак "+") с числом 25, и результат сохраняется (что делается с помощью оператора присваивания, который выражен знаком "=") в переменной sum.
____Вызов функции printf в программе записан с двумя параметрами, заключёнными в круглые скобки. Эти параметры разделяются запятой. Однако наряду с символьной строкой мы также должны отобразить значения некоторых переменных программы. В нашем случае будет отображено значение переменной sum, которое будет выведено в той же строке, что и надпись The sum of 50 and 25.
____Будет отображена сумма чисел 50 и 25. Для этого в строке, которая используется в качестве первого параметра, поставлен символ процента - специальный символ, который распознаётся функцией printf. Символ, который непосредственно следует за знаком процента, определяет, какое значение должно быть отображено в этом месте. В нашей программе, символ i будет распознан функцией printf как команда отображать значение как целое число.
____Всякий раз, когда функция printf находит символы "%i" в символьной строке, она отображает значение очередного параметра функции. Поскольку именно sum и будет очередным параметром функции printf, его значение и будет отображено после того, как будет отображена строка "The sum of 50 and 25".
____Рассмотрим следующий пример, на листинге ниже:

Язык программирования С. 00021__YAzyk_S.1580131656

Код, для вставки в IDE:

Код:
#include <stdio.h>
int main (void)
{
  int value1, value2, sum;

  value1 = 50;
  value2 = 25;
  sum = value1 + value2;
  printf ("The sum of %i and %i is %i\n", value1, value2, sum);

  return (0);
}

Результат её работы:

Язык программирования С. 00022__YAzyk_S.1580132212

____В первом утверждении программы объявлены три переменные, названные value1, value2 и sum. Все они имеют тип int. Это утверждение будет эквивалентно трём строкам, где будут описаны три утверждения следующим образом.

int value1;
int value2;
int sum;

____После того как эти три переменные были объявлены, программа присваивает значение 50 для переменной value1 и затем присваивает значение 25 переменной value2. После этого вычисляется сумма этих двух переменных и результат присваивается переменной sum. При обращении к функции printf теперь записано четыре аргумента. Повторим ещё раз, что первый аргумент, обычно называемый строкой форматирования, указывает системе, как остающиеся аргументы должны быть отображены. Значение переменной value1 должно быть отображено непосредственно после вывода строки "The sum of". Точно так же значения для переменных value2 и sum должны быть отображены в соответствующих местах, где в строке форматирования встречаются символы "%i".

Следует обратить внимание, что функция printf также позволяет использовать для отображения целого числа символы управления форматом %d.

____Приведённая ниже программа выполняет вычисления и печатает в два столбика соответствия температур по Фаренгейту температурам по Цельсию.

Язык программирования С. 00023__YAzyk_S.1580152037

Код, для вставки в IDE:

Код:
#include <stdio.h>

/* Печать таблицы температур по Фаренгейту
и Цельсию для fahr = 0, 20, ..., 300 */

int main (void)
{
  int fahr, celsius;
  int lower, upper, step;

  lower = 0; /* нижняя граница таблицы температур */
  upper = 300; /* верхняя граница */
  step = 20; /* шаг*/

  fahr = lower;
  while (fahr <= upper)
 {
 celsius = 5 * (fahr-32) / 9;
 printf ("%d\t%d\n", fahr, celsius);
 fahr = fahr + step;
    }
  printf ("\n\n\n\n\n");

  return (0);
}

Результат её работы:

Язык программирования С. 00024__YAzyk_S.1580152340

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

/* Печать таблицы температур по Фаренгейту
и Цельсию для fahr = 0, 20, ..., 300 */

являются комментарием, который в данном случае кратко объясняет, что делает программа. Все символы, помещённые между /* и */, игнорируются компилятором, и этим можно свободно пользоваться, чтобы сделать программу более понятной. Комментарий можно располагать в любом месте.
____Комментарии служат для объяснения пользователю программы, или программисту или тому, кто желает ознакомиться с программой, или тому, кто будет обслуживать программу, что именно программист имел в виду, когда он писал специфическую программу или специфическую последовательность утверждений.
____Есть два способа вставить комментарии в программу на языке С. Первый мы уже рассмотрели, на примере последней программы. Эта форма комментария часто используется в том случае, когда для комментария необходимо несколько строк программы. Второй способ добавлять комментарий к программе - использовать два последовательных символа наклонной черты вправо (//). Всё, что следует за этими наклонными чертами вплоть до конца строки, игнорируется компилятором.
____Грамотное использование комментариев в программе подразумевает, что они должны только разъяснять плохо понимаемые фрагменты программы, причём их не должно быть слишком много. Программист будет много раз возвращаться к программе, которую он составил, возможно, только пол года назад, и вдруг он с тревогой обнаруживает, что он не понимает задачи отдельной подпрограммы, или специфической группы утверждений. Простой комментарий, грамотно вставленный в программу, возможно, сэкономит много времени, которое может быть потрачено впустую при восстановлении прежней логики подпрограммы или группы утверждений.
____Это должно войти в привычку - вставлять комментарии в программу во время её написания, поскольку именно в этот период намного проще её документировать.
____Кроме того, комментарии пригодятся и на этапе отладки, когда определяются и устраняются ошибки в логике программы. Комментарии помогут не только в уточнении логических связей программы, но и помогут указать источник логической ошибки. Наконец, не всем программистам нравится документировать программу во время разработки. Но фактически после того, как вы закончите отлаживать вашу программу, вы вряд ли захотите возвращаться к программе, чтобы вставить комментарии. Вставка комментариев при разработке будет много проще и эффективнее, чем дополнительный этап работы по оформлению программы.
____В языке программирования С любая переменная должна быть объявлена раньше, чем она будет использована, обычно все переменные объявляются в начале функции перед первой исполняемой инструкцией. В объявлении описываются свойства переменных. Оно состоит из названия типа и списка переменных, например:

int fahr, celsius;
int lower, upper, step;

____Тип int означает, что значения перечисленных переменных есть целые, в отличие от него тип float указывает на значения с плавающей запятой, т. е. на числа, которые могут иметь дробную часть. Диапазоны значений обоих типов зависят от используемой машины.
____Числа типа int бывают как 16-разрядные (лежат в диапазоне от -32768 до 32767), так и 32-разрядные. Числа типа float обычно представляются 32-разрядными словами, имеющими по крайней мере 6 десятичных значащих цифр (лежат приблизительно в диапазоне от 10-38 до 1038).
____Помимо int и float в языке С имеется ещё несколько базовых типов для данных, это:

char - символ - единичный байт;

short - короткое целое;

long - длинное целое;

double - с плавающей запятой с двойной точностью.

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

lower = 0;
upper = 300;
step = 20;

fahr = lower;

которые устанавливают указанные в них переменные в начальные значения. Любая инструкция заканчивается точкой с запятой.
____Все строки таблицы вычисляются одним и тем же способом, поэтому мы воспользовались циклом, повторяющим это вычисление для каждой строки. Необходимые действия выполнит цикл while:

while (fahr <= upper)
{

____Он работает следующим образом. Проверяется условие в скобках. Если оно истинно (значение fahr меньше или равно upper), то выполняется тело цикла (три инструкции заключённые в фигурные скобки). Затем опять проверяется условие, и если оно истинно, то тело цикла выполняется снова. Когда условие становится ложным (fahr превысило upper), цикл завершается, и вычисления продолжаются с инструкции, следующей за циклом. Поскольку никаких инструкций за циклом нет, кроме return (0); то программа по сути завершает работу.
____Телом цикла while может быть одна или несколько инструкций, заключённых в фигурные скобки, как в программе преобразования температур, или одна-единственная инструкция без скобок, как в цикле представленном ниже:

Код:
while (i < J)
    i = 2 * i;

____И в том и в другом случае инструкции, находящиеся под управлением while, мы будем записывать со сдвигом, равным одной позиции табуляции, которая в программе указывается четырьмя пробелами. Благодаря этому будут ясно видны инструкции, расположенные внутри цикла. Отступы подчёркивают логическую структуру программы. С-компилятор не обращает внимания на внешнее оформление программы, но наличие в нужных местах отступов и пробелов существенно влияет на то, насколько легко она будет восприниматься человеком при просмотре. Чтобы лучше была видна логическая структура выражения, рекомендуется на каждой строке писать только по одной инструкции и с обеих сторон от операторов ставить пробелы.
____Большая часть вычислений в нашей программе выполняется в теле цикла. Температура по Фаренгейту переводится в температуру по Цельсию и присваивается переменной celsius посредством инструкции:

celsius = 5 * (fahr-32) / 9;

____Причина, по которой мы сначала умножаем на 5 и затем делим на 9, а не сразу умножаем на 5/9, связана с тем, что в С, как и во многих других языках, деление целых сопровождается отбрасыванием (truncation - усечение), т. е. потерей дробной части. Так как 5 и 9 — целые, отбрасывание в 5/9 дало бы нуль, и на месте температур по Цельсию были бы напечатаны нули.
____Этот пример прибавил нам ещё немного знаний о том, как работает функция printf. Функция printf - это универсальная функция форматного ввода-вывода. Её первый аргумент - строка символов, в которой каждый символ % соответствует одному из последующих аргументов (второму, третьему, ...), а информация, расположенная за символом %, указывает на вид, в котором выводится каждый из этих аргументов. Например %d специфицирует выдачу аргумента в виде целого десятичного числа, и инструкция

printf ("%d\t%d\n", fahr, celsius);

печатает целое fahr, выполняет табуляцию (\t) и печатает целое celsius.
____В функции printf каждому спецификатору первого аргумента (конструкции начинающейся с %) соответствует второй аргумент, третий аргумент и т. д. спецификаторы и соответствующие им аргументы должны быть согласованы по количеству и типам: в противном случае напечатано будет не то, что нужно.
____Функция printf не является частью языка С, и вообще в языке нет никаких специальных конструкций, определяющих ввод-вывод. Функция printf - лишь полезная функция стандартной библиотеки, которая обычно доступна для С-программ. Поведение функции printf, однако, оговорено стандартом ANSI, и её свойства должны быть одинаковыми во всех С-системах, удовлетворяющих требованиям стандарта.
____Существует ещё две проблемы, связанные с программой преобразования температур. Одна из них (более простая) состоит в том, что выводимый результат выглядит несколько неряшливо, поскольку числа не выровнены по правой позиции колонок, да и хоть какой-то таблицы нет вообще, её контуров. Это легко исправить, добавив в каждый из спецификаторов формата %d указание о ширине поля и символы которые будут обозначать контуры самой таблицы, при этом программа будет печатать числа, прижимая их к правому краю указанных полей. Например мы можем написать:

printf ("| %4d | %4d | \n", fahr, celsius);

чтобы в каждой строке первое и второе число печатать в поле из четырёх позиций. В результате имеем следующую программу:

Язык программирования С. 00025__YAzyk_S.1580504819

Код, для вставки в IDE:

Код:
#include <stdio.h>

/* Печать таблицы температур по Фаренгейту
и Цельсию для fahr = 0, 20, ..., 300 */

int main (void)
{
    int fahr, celsius;
    int lower, upper, step;

    lower = 0; //нижняя граница таблицы температур
    upper = 300; // верхняя граница
    step = 20; // шаг

    fahr = lower;
 printf ("--------------- \n");
    while (fahr <= upper)
    {
        celsius = 5 * (fahr-32) / 9;
        printf ("| %4d | %4d | \n", fahr, celsius);
        fahr = fahr + step;
    }
 printf ("---------------");
    printf ("\n\n\n\n\n");

    return (0);
}

Результат её работы:

Язык программирования С. 00026__YAzyk_S.1580504991

____Вторая, более серьёзная проблема связана с тем, что мы пользуемся целочисленной арифметикой и поэтому не совсем точно вычисляем температуры по шкале Цельсия. Например, 0 оF на самом деле (с точностью до десятой) равно -17,8 оС, а не -17. Чтобы получить более точные значения температур, нам нужно пользоваться не целочисленной арифметикой, а арифметикой с плавающей точкой (далее именно так будем называть арифметику с плавающей запятой). А это потребует некоторых изменений в программе.

Язык программирования С. 00027__YAzyk_S.1580522931

Код, для вставки в IDE:

Код:
#include <stdio.h>

/* Печать таблицы температур по Фаренгейту и Цельсию для
fahr = 0, 20, ..., 300; вариант с плавающей точкой. */

int main (void)
{
    float fahr, celsius;
    int lower, upper, step;

    lower = 0; //нижняя граница таблицы температур
    upper = 300; // верхняя граница
    step = 20; // шаг

    fahr = lower;
    printf ("\n\n  ----------------- \n");
    while (fahr <= upper)
    {
        celsius = (5.0/9.0) * (fahr-32.0);
        printf ("  | %4.0f | %6.1f | \n", fahr, celsius);
        fahr = fahr + step;
    }
    printf ("  -----------------");
    printf ("\n\n\n\n\n");

    return (0);
}

Результат её работы:

Язык программирования С. 00028__YAzyk_S.1580523098

____Программа мало изменилась. Она отличается от предыдущей лишь тем, что fahr и celsius объявлены как float, а формула преобразования написана в более естественном виде. В предыдущем варианте нельзя было написать 5/9, так как целочисленное деление в результате отбрасывания дробной части дало бы нуль. Десятичная точка в константе указывает на то, что последняя рассматривается как число с плавающей точкой, и 5.0/9.0, таким образом, есть частное от деления двух значений с плавающей точкой, которое не предполагает отбрасывания дробной части. В том случае, когда арифметическая операция имеет целые операнды, она выполняется по правилам целочисленной арифметики. Если же один операнд с плавающей точкой, а другой - целый, то перед тем, как операция будет выполнена, последний будет преобразован в число с плавающей точкой. Если бы мы написали fahr-32, то 32 было бы автоматически преобразовано в число с плавающей точкой. Тем не менее при записи констант с плавающей точкой мы всегда используем десятичную точку, причём даже в тех случаях, когда константы на самом деле имеют целые значения. Это делается для того, чтобы обратить внимание читающего программу на их природу.
____Более подробно правила, определяющие, в каких случаях целые переводятся в числа с плавающей точкой, рассмотрим позже.

fahr = lower;

и проверка

while (fahr <= upper)

работают естественным образом, т. е. перед выполнением операции значение int приводится к float.
____Спецификация %4.0f в printf определяет печать числа с плавающей точкой (в данном случае числа fahr в поле шириной не более четырёх позиций без десятичной точки и дробной части. Спецификация %6.1f описывает печать другого числа celsius в поле из шасти позиций с одной цифрой после десятичной точки.
____Ширину и точность можно не задавать: %6f означает, что число будет занимать не более шести позиций; %.2f - число имеет две цифры после десятичной точки, но ширина не ограничена; %f просто указывает на печать числа с плавающей точкой.

%d - печать десятичного целого;

%6d - печать десятичного целого в поле из шести позиций;

%f - печать числа с плавающей точкой;

%.2f - печать числа с плавающей точкой с двумя цифрами после десятичной точки;

%6.2f - печать числа с плавающей точкой с двумя цифрами после десятичной точки, в поле из шести позиций.

____Кроме того, printf допускает следующие спецификаторы: %o для восьмеричного числа; %x для шестнадцатеричного числа; %c для символа; %s для строки символов и %% для самого %.


Продолжение в следующем посте...


.


Последний раз редактировалось: Viktor2312 (Ср Фев 05 2020, 05:41), всего редактировалось 1 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12293
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Язык программирования С. Empty .

Сообщение  Viktor2312 в Сб Фев 01 2020, 16:08

6
.
Переменные, типы данных и арифметические выражения.


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


Работа с переменными.

____Первые программисты должны были писать программы в двоичных кодах, используя систему команд того компьютера, для которого они программировали. При этом подразумевалось, что команды должны были быть закодированными программистом вручную в виде двоичных чисел, прежде чем они будут введены в компьютер. Кроме того, программист должен был явно обращаться к памяти, указывая непосредственные адреса памяти или ссылки для всех переменных, сохраняемых в памяти компьютера.
____Современные языки программирования позволяют в большей степени концентрироваться на логической стороне проблемы, возникающей при решении определённых задач, и в меньшей степени думать о машинных кодах и памяти. Современные языки программирования позволяют присваивать переменным понятные символические имена и использовать их при вычислениях и хранении данных. С именами переменных связывается тип данных, который контролируется компилятором и для которого выделяется определённое количество байтов памяти.
____В наших предыдущих примерах, были использованы несколько переменных, для хранения целочисленных значений. Например, была использована переменная sum для хранения суммы двух целых чисел 50 и 25. В языке программирования, как мы уже убедились, разрешены и другие типы данных, которые необходимо присвоить переменным до того, как они будут использованы в программе. Переменные могут обозначать числа с плавающей точкой, символы и даже указатели на определённые ячейки памяти.
____Правила для написания имён переменных очень простые. Имя должно начинаться с буквы или с символа подчёркивания (_), за которыми могут следовать любые комбинации букв в любом регистре, символы подчёркивания или цифры от 0 до 9. Ниже показан пример правильных имён:

sum, pieceFlag, i, J5x7, Number_of_moves, _sysflag, sign_1 и т. д.

____Но следующие имена уже не будут являться правильными:

sum$value$ - включён недопустимый символ;

piece flag - пробел не разрешён;

4Spencer - имя переменной не должно начинаться с числа;

int - int является зарезервированным словом.

____Слово int не может использоваться как имя переменной, поскольку оно имеет специальное назначение и компилятор связывает с ним определённые действия. Такие слова называются зарезервированными или ключевыми словами. Они распознаются компилятором С как директивы и поэтому не могут использоваться в качестве имён переменных.
____Необходимо всегда помнить, что в языке программирования С различаются заглавные и строчные буквы. Поэтому имена переменных sum, Sum и SUM будут ссылаться на разные переменные. Длина имени может быть сколь угодно большой, но только первые 63 символа будут учитываться, или будут являться значимыми, а в некоторых специальных случаях, только первый набор из 31 символа будет значимым. Но обычно на практике не используются такие длинные имена, для себя можно даже выработать правило - не превышать 31 символ, поскольку их довольно неудобно набирать и при этом ухудшается зрительное восприятие программы.
____Когда выбираете имя переменной, не спешите и придерживайтесь следующих правил. Выбирайте имя, которое чётко определяет назначение переменной. причина здесь очевидна. Вместе с комментариями, хорошо продуманные имена переменных значительно улучшают наглядность программы, что способствует лучшему пониманию логики программы и поможет сэкономить много времени при дальнейшей работе над программой или при её отладке. При этом можно будет значительно сократить описательную часть программы, т. к. программа будет хорошо восприниматься. О хорошо понимаемых программах говорят, что они являются самодокументированными.


Типы данных и константы.

____Мы уже познакомились с базовым типом данных int, и, как вы помните, переменные, объявленные как тип int, могут использоваться только для хранения целочисленных значений. Это означает, что в таких переменных не выделено места для хранения дробной части.
____В языке программирования С используются ещё четыре базовых типа данных: float, doble, shar и _Bool. Переменные объявленные как тип float, могут использоваться для хранения вещественных чисел (чисел с плавающей точкой). Переменные типа doble также используются для хранения вещественных чисел, но удвоенной точности. Переменные типа shar могут использоваться для хранения отдельных символов, таких как буквы, цифры или точки с запятой. Наконец тип _Bool используется только для хранения двух значений: 0 или 1.
____Переменные типа _Bool используются в тех ситуациях, когда требуется хранить только один из двух вариантов: да/нет, включено/выключено, правда/ложь. В языке программирования С любое число, отдельный символ или строка символов считаются константами. Например, число 59 представляет целочисленное значение, которое является константой. Строка символов "Программирование на языке С забавно\n" также является константой.
____Выражение, состоящее исключительно из констант, является константным выражением. Поэтому выражение

256 + 8 - 16

является константным выражением, поскольку каждый элемент этого выражения является константой, но если будет присутствовать переменная, например, t_1, объявленная как тип int, то выражение

256 + 8 - t_1

уже не будет являться константным.


Базовый тип int.

____В языке программирования С целочисленная константа состоит из одной цифры или последовательности нескольких цифр. Предшествующий цифрам знак минус говорит о том, что значение является отрицательным. Значения 165, -12 и 0 являются примерами целочисленных констант. Никаких пробелов между цифрами не допускается и значения больше 999 не могут форматироваться с помощью запятой. Поэтому значение 15,000 не является правильной целочисленной константой и должно быть записано как 15000.
____В языке С для отображения целочисленных констант можно использовать не только базовое число 10 (десятичные числа). Если первое число является 0, то это значит, что данное число рассматривается как восьмеричное число (базовое число 8 ). В этом случае все остальные числа должны составлять допустимые восьмеричные числа, т. е. быть числами из диапазона чисел 0 - 7. Таким образом, для того, чтобы задать восьмеричное число 50, которое эквивалентно десятичному числу 40, необходимо написать 050.
____Аналогичным образом, восьмеричное число 0177 равно десятичному числу 127 (1*64+7*8+7). Целочисленное значение может отображаться в восьмеричной нотации с помощью символа форматирования "%o", который ставится в строке форматирования в утверждении вывода. В этом случае отображается восьмеричное значение без предшествующего нуля. Символ форматирования "%#o" приводит к отображению восьмеричного значения с предшествующим нулём.
____Если целочисленной константе предшествует нуль и символ X (независимо в каком регистре), то целочисленная константа считается шестнадцатеричным значением (базовое число 16). Символы непосредственно следующие за символом X, и составляют само число. Эти символы могут быть числами от 0 до 9, а также буквами от A до F (a, b, c, d, e, f или A, B, C, D, E, F). Буквы представляют значения от 10 до 15 соответственно. Поэтому для присваивания целочисленного шестнадцатеричного значения FFEF0D переменной rgbColor, необходимо написать следующее утверждение.

rgbColor = 0xFFEF0D;

____Символ форматирования "%x" используется для отображения значений в шестнадцатеричном виде без предшествующих символов "0x" и букв a - f в нижнем регистре. Для отображения значения с предшествующими символами, необходимо использовать символ форматирования "%#x", как показано в следующем примере.

printf ("Color is %#x\n", rgbColor);

____Для отображения символов в верхнем регистре, необходимо использовать символы форматирования "%X" и "%#X".


Хранение и диапазоны.

____Любое значение, будь то символы, целые или вещественные числа, имеет связанный с ними диапазон значений. Этот диапазон зависит от количества памяти, выделяемой для хранения каждого типа данных, и не определяется в языке программирования С.
____Обычно этот диапазон зависит от компьютера, на котором вы работаете, и поэтому реализация кода называется машинно-зависимой. Например, целочисленное значение может занимать 32 бита на вашем компьютере и 64 бита на другом компьютере. Вы никогда не должны писать программу, в которой учитываются размеры типов данных, хотя при этом гарантируется, что минимальное значение занимаемой памяти будет одинаковым для всех типов данных на всех компьютерах. Например, гарантируется, что целочисленное значение типа int сохраняется как минимум в 32 битах, что соответствует размеру слова (word) на большинстве компьютеров.


Вещественный тип float.

____Переменные, объявленные как тип float, могут использоваться для хранения вещественных чисел, т. е. чисел с плавающей точкой. Именно для этих целей и введён тип float. Значения 3. или 125.8 и -.001 являются правильными примерами задания вещественных чисел. Для отображения вещественных чисел в процедуре printf используется символ форматирования "%f".
____Вещественные константы могут также отображаться в научной нотации. Константа 1.7e+4 является вещественным числом, выраженным в научной нотации и представляющим значение 1.7*104.
____Значение перед буквой e называется мантиссой тогда как значение после буквы e называется показателем степени. Показатель степени, который может быть со знаком плюс или минус, представляет число, в которое должно быть возведено число 10 и на которое должна быть умножена мантисса. Поэтому константа 2.25e-3 представляет собой значение мантиссы 2.25, умноженное на 10-3 (число -3 является показателем степени), т. е. число 0.00225.
____Символ e, который разделяет мантиссу и показатель степени, может быть написан как в верхнем, так и в нижнем регистре.
____Для отображения на экране вещественных чисел в научной нотации используется символ форматирования "%e". При этом значения могут отображаться как в виде чисел с плавающей запятой, так и в виде чисел в научной нотации. Если показатель степени меньше -4 или больше 5, то удобнее использовать научную нотацию, в противном случае надо использовать символ форматирования "%f".


Числа удвоенной точности double.

____Числа удвоенной точности подобны числам типа float, но используются в тех случаях, когда недостаточно точности чисел типа float. Переменные, объявленные как тип double, могут сохранять вдвое больше цифр, чем переменная типа float. В большинстве компьютеров переменные типа double занимают 64 бита.
____Если специально не оговорено, то все вещественные константы трактуются компилятором С как переменные типа double. Для того чтобы вещественную переменную объявить как тип float, необходимо добавить символ f или F.

12.5f

____Для отображения переменной типа double на экране, используются символы форматирования "%f", "%e" или "%g", которые используются и при отображении вещественных чисел.


Символьный тип char.

____Переменные типа char можно использовать для хранения отдельных символов. Символьные константы объявляются с помощью отдельных символов, заключённых в одиночные кавычки. Поэтому записи вида 'a', ';' и '0' являются примерами правильно заданных символьных констант. В первом случае задаётся буква a, во втором случае это точка с запятой и в третьем случае это число 0. Не путайте символьные константы, которые представляют один символ, со строкой символов, которая представляет один или несколько символов, заключённых в двойные кавычки.
____Символьная константа '\n' (символ новой строки) является допустимым символом, хотя по внешнему виду не соответствует ранее приведённому правилу. Но это правильная запись, т. к. символ обратной черты '\' для компилятора языка С не является действительно учитываемым символом, а имеет специальное назначение.
____Другими словами, компилятор языка С трактует запись '\n' как один символ, хотя в действительности записано два символа. Но при этом наличие обратной черты заставляет компилятор языка С по-другому воспринимать символ n.
____Символ форматирования "%c" может использоваться для отображения значений символьных переменных на экране.


Булев тип _Bool.

____Переменные типа _Bool предназначены для хранения только двух значений, 0 и 1. Размер памяти, выделяемый для хранения каждой переменной, не оговаривается. Переменные типа _Bool используются для хранения результатов булевых вычислений. Например, переменные такого типа можно использовать для указания состояния режима чтения из файла, т. е. закончено или нет чтение из файла.
____По соглашению, 0 используется для указания состояния "ложь", а 1 используется для состояния "истина". При присваивании значения переменной типа _Bool, 0 записывается как 0, а любое значение, отличное от 0, записывается как единица.
____Для более удобной работы с переменными типа _Bool, в стандартном заголовочном файле stdbool.h для этих переменных определены значения true и false.
____Ниже показан листинг программы и результат её работы, где показано использование основных типов данных языка С.

Язык программирования С. 00029__YAzyk_S.1580869451

Код для вставки в IDE:

Код:
#include <stdio.h>

int main (void)
{
 int integerVar = 100;
 float floatingVar = 331.79;
 double doubleVar = 8.45e+11;
 char charVar = 'Q';
 _Bool boolVar = 0;

 printf ("integerVar = %i\n", integerVar);
    printf ("floatingVar = %f\n", floatingVar);
 printf ("doubleVar = %e\n", doubleVar);
 printf ("doubleVar = %g\n", doubleVar);
 printf ("charVar = %c\n", charVar);
 printf ("boolVar = %i\n", boolVar);
 printf ("\n\n\n\n\n");

 return (0);
}

Результат работы программы:

Язык программирования С. 00030__YAzyk_S.1580869758


Продолжение в следующем посте...


.

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12293
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Язык программирования С. Empty .

Сообщение  Viktor2312 в Ср Фев 05 2020, 05:42

7
.
____В первом утверждении в листинге выше объявлена целочисленная переменная integerVar (о чём говорит ключевое слово int), и ей присвоено значение 100. Это же самое можно сделать и с помощью двух следующих утверждений.

int integerVar;
integerVar = 100;

____Обратите внимание, что во второй строке, выведенной программой на экран, значение 331.79, которое было присвоено переменной floatingVar, отображается как 331.790009. На самом деле, действительное значение, которое отображается, зависит от особенностей системы, которая используется для вычислений. Причина такой "неаккуратности" кроется в особенностях хранения чисел в компьютере. Некоторые вещественные числа не могут быть точно сохранены в памяти.
____Для отображения переменных типа float и double можно выбрать один из трёх форматов. Символ форматирования "%f" используется для вывода значения в наиболее привычном виде.
____Если специально не оговорено, то вещественные числа отображаются округлёнными с шестью цифрами после точки.
____Символ форматирования "%e" используется для отображения значений вещественных чисел в научной нотации. Как и ранее, только шесть цифр по умолчанию отображаются на экране.
____Если используется символ форматирования "%g", то производится выбор между форматами "%f" и "%e" и при этом удаляются все последующие нули. Если нет цифр после запятой, то дробная часть не отображается совсем.
____В предпоследнем утверждении вывода, символ форматирования "%c" используется для отображения одного символа'Q', который был присвоен переменной charVar при объявлении переменной. Поскольку любая символьная строка (такая как первый аргумент процедуры printf) выделяется двойными кавычками, то и символьная константа должна заключаться в двойные кавычки.
____В последней процедуре printf показан вывод переменной типа _Bool, значение которой отображается с помощью символа форматирования для целых чисел "%i".
`

Спецификаторы типов: long, long long, short, unsigned, signed.

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

long int factorial;

____Такое объявление переменной factorial задаёт целочисленную переменную с расширенным диапазоном. Но как и при объявлении переменных типа float и double, действительный диапазон переменных зависит от используемого типа компьютера. На многих компьютерах типы int и long int имеют один и тот же диапазон и для их хранения выделяется 32 бита (231-1 или 2,147,483,647).
____При объявлении типа long int к задаваемому значению необходимо добавить букву L (в верхнем или нижнем регистре). При этом недопустимы пробелы между цифрами и буквой. Поэтому следующее объявление:

long int numberOfPoints = 131071100L;

создаст переменную numberOfPoints и присвоит ей начальное значение 131,071,100.
____Для отображения переменной типа long int с помощью процедуры printf, в качестве модификатора используется буква l, которая размещается перед символами форматирования i, o и x. Таким образом, символ форматирования "%li" необходимо использовать для отображения типа long int в десятичном формате. Символ форматирования "%lo" используется для отображения переменных с расширенным диапазоном значений в восьмеричном формате, и символ форматирования "%lx" - для отображения в шестнадцатеричном формате.
____Также можно объявить тип long long int, при этом объявление переменной как:

long long int maxAllStorage;

создаст переменную для хранения расширенного диапазона значений, при котором будет использоваться по крайней мере 64 бита. При выводе значений типа long long int в символе форматирования необходимо использовать две буквы l, например "%lli".
____Спецификатор long можно использовать и при объявлении переменных типа double, как показано ниже:

long double Nomber_A_001;

____Константа типа long double записывается как константа типа float с добавленной буквой l или L сразу после цифр.

1.235e+8L

____Для отображения переменных типа long double, используется модификатор L. Поэтому символ форматирования для вещественных переменных с расширенным диапазоном значений будет иметь вид "%Lf". Если использовать символ форматирования "%Le", то эта же переменная будет отображена в научной нотации, а при использовании символа форматирования "%Lg" автоматически будет сделан выбор между выводом в формате "%Lf" или в формате "%Le".
____Спецификатор short, будучи помещён перед ключевым словом int, указывает компилятору С на то, что данная переменная объявлена для хранения небольших целочисленных значений. Причиной использования таких переменных может быть желание сэкономить память, когда в некоторых ситуациях используется значительное число переменных с небольшими значениями, но при этом ограничен ресурс памяти.
____В некоторых компьютерах размер типа short int будет занимать в два раза меньше битов, чем для типа int. Но в любом случае гарантируется, что количество выделяемых битов для переменных типа short int будет не меньше 16 бит.
____Для задания переменных типа short int в языке С нет специального формата. Для отображения переменных типа short int используется модификатор h, который помещается перед символом форматирования: "%hi", "%ho" и "%hx". Но можно использовать и обычное форматирование для целочисленных переменных при отображении типа short int, при этом формат short int будет преобразован в формат int.
____Спецификатор unsigned помещается перед ключевым словом int при объявлении переменных целочисленного типа и указывает компьютеру на то, что задаётся положительное число. Это число обычно используется как счётчик и не может иметь отрицательное значение.
____Используя целочисленные переменные типа unsigned для хранения положительных чисел, можно расширить диапазон используемых значений. Константа типа unsigned int задаётся с помощью буквы u или U, которая помещается после цифр, как показано ниже:

0x00ffU

____Можно комбинировать буквы u (или U) и l (или L) при задании целочисленных констант, при этом запись:

20000UL

указывает компилятору на то, что константа 20000 имеет тип unsigned long.
____Целочисленная константа, за которой не следуют буквы u, U, l или L, но которая превышает допустимый диапазон для типа int расширяется до диапазона unsigned int. Если значение константы превышает и этот диапазон, то компилятор рассматривает её как тип long int. Если и этого диапазона не достаточно для использования этого значения, то предпринимается попытка использовать тип unsigned long int. Если недостаточно и этого типа, то берётся диапазон, связанный с типом long long int, и наконец используется тип unsigned long long int
____Когда объявляются переменные типа long long int, long int, short int или unsigned long, то можно пропустить ключевое слово int. Поэтому целочисленную переменную без знака counter можно объявить так:

unsigned counter;

____Переменные типа char тоже можно объявлять как беззнаковые.
____Квалификатор signed используется для дополнительного указания компилятору на то, что задаваемая переменная может принимать значения как со знаком, так и без знака. Такие квалификаторы в основном используются при объявлении переменных типа char, более подробно это будет рассмотрено позже.
____На данный момент произведено поверхностное описание типов данных, но постепенно, на практических примерах, этот вопрос будет изучен детально. Ниже представлена таблица основных типов данных:

Язык программирования С. 00031__YAzyk_S.1581243707


Арифметические выражения.

____В языке С, как и в большинстве языков программирования, знак плюс (+) используется для суммирования двух значений, знак минус (-) используется для получения разности двух значений, знак звёздочка (*) - для перемножения двух значений, а обратная черта (/) - для деления двух значений. Эти операторы называются бинарными арифметическими операторами, поскольку они выполняют операции с двумя значениями.
____

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12293
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Язык программирования С. Empty .

Сообщение  Viktor2312 в Пн Фев 17 2020, 19:02

8
.
Блин, работает, но...

Язык программирования С. 76767734_00.1581955124


Вечно всё идёт не так, как задумывалось...
.

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12293
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Язык программирования С. Empty Re: Язык программирования С.

Сообщение  Спонсируемый контент

9

Спонсируемый контент


Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения