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

Из чего состоит программа

Для начала стоит понять, что программу нельзя читать и писать как книгу: от корки до корки, сверху вниз, строку за строкой. Любая программа состоит из отдельных блоков. Начало блока кода в C/C++ обозначается левой фигурной скобкой { , его конец - правой фигурной скобкой } .

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

В данном случае у нас 2 функции с именами setup и loop . Их присутствие обязательно в любой программе на C++ для Arduino. Они могут ничего и не делать, как в нашем случае, но должны быть написаны. Иначе на стадии компиляции вы получите ошибку.

Классика жанра: мигающий светодиод

Давайте теперь дополним нашу программу так, чтобы происходило хоть что-то. На Arduino, к 13-му пину подключён светодиод. Им можно управлять, чем мы и займёмся.

void setup() { pinMode(13 , OUTPUT) ; } void loop() { digitalWrite(13 , HIGH) ; delay(100 ) ; digitalWrite(13 , LOW) ; delay(900 ) ; }

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

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

Теперь давайте поймём в каком порядке исполняются сами блоки, т.е. функции setup и loop . Не задумывайтесь пока что значат конкретные выражения, просто понаблюдайте за порядком.

    Как только Arduino включается, перепрошивается или нажимается кнопка RESET , «нечто» вызывает функцию setup . То есть заставляет исполняться выражения в ней.

    Как только работа setup завершается, сразу же «нечто» вызывает функцию loop .

    Как только работа loop завершается, сразу же «нечто» вызывает функцию loop ещё раз и так до бесконечности.

Если пронумеровать выражения по порядку, как они исполняются, получится:

void setup() { pinMode(13 , OUTPUT) ; ❶ } void loop() { digitalWrite(13 , HIGH) ; ❷ ❻ ❿ delay(100 ) ; ❸ ❼ … digitalWrite(13 , LOW) ; ❹ ❽ delay(900 ) ; ❺ ❾ }

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

void loop() { digitalWrite(13 , HIGH) ; ❷ ❻ ❿ delay(100 ) ; ❸ ❼ … digitalWrite(13 , LOW) ; ❹ ❽ delay(900 ) ; ❺ ❾ } void setup() { pinMode(13 , OUTPUT) ; ❶ }

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

Что делают выражения

Теперь давайте попробуем понять почему написанная программа приводит в итоге к миганию светодиода.

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

Это делается выражением в функции setup:

PinMode(13 , OUTPUT) ;

Выражения бывают разными: арифметическими, декларациями, определениями, условными и т.д. В данном случае мы в выражении осуществляем вызов функции . Помните? У нас есть свои функции setup и loop , которые вызываются чем-то, что мы назвали «нечто». Так вот теперь мы вызываем функции, которые уже написаны где-то.

Конкретно в нашем setup мы вызываем функцию с именем pinMode . Она устанавливает заданный по номеру пин в заданный режим: вход или выход. О каком пине и о каком режиме идёт речь указывается нами в круглых скобках, через запятую, сразу после имени функции. В нашем случае мы хотим, чтобы 13-й пин работал как выход. OUTPUT означает выход, INPUT - вход.

Уточняющие значения, такие как 13 и OUTPUT называются аргументами функции . Совершенно не обязательно, что у всех функций должно быть по 2 аргумента. Сколько у функции аргументов зависит от сути функции, от того как её написал автор. Могут быть функции с одним аргументом, тремя, двадцатью; функции могут быть без аргументов вовсе. Тогда для их вызова круглые скобка открывается и тут же закрывается:

NoInterrupts() ;

На самом деле, вы могли заметить, наши функции setup и loop также не принимают никакие аргументы. И загадочное «нечто» точно так же вызывает их с пустыми скобками в нужный момент.

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

Перейдём к функции loop:

void loop() { digitalWrite(13 , HIGH) ; delay(100 ) ; digitalWrite(13 , LOW) ; delay(900 ) ; }

Она, как говорилось, вызывается сразу после setup . И вызывается снова и снова как только сама заканчивается. Функция loop называется основным циклом программы и идеологически предназначена для выполнения полезной работы. В нашем случае полезная работа - мигание светодиодом.

Пройдёмся по выражениям по порядку. Итак, первое выражение - это вызов встроенной функции digitalWrite . Она предназначена для подачи на заданный пин логического нуля (LOW , 0 вольт) или логической единицы (HIGH , 5 вольт) В функцию digitalWrite передаётся 2 аргумента: номер пина и логическое значение. В итоге, первым делом мы зажигаем светодиод на 13-м пине, подавая на него 5 вольт.

Как только это сделано процессор моментально приступает к следующему выражению. У нас это вызов функции delay . Функция delay - это, опять же, встроенная функция, которая заставляет процессор уснуть на определённое время. Она принимает всего один аргумент: время в миллисекундах, которое следует спать. В нашем случае это 100 мс.

Пока мы спим всё остаётся как есть, т.е. светодиод продолжает гореть. Как только 100 мс истекают, процессор просыпается и тут же переходит к следующему выражению. В нашем примере это снова вызов знакомой нам встроенной функции digitalWrite . Правда на этот раз вторым аргументом мы передаём значение LOW . То есть устанавливаем на 13-м пине логический ноль, то есть подаём 0 вольт, то есть гасим светодиод.

После того, как светодиод погашен мы приступаем к следующему выражению. И снова это вызов функции delay . На этот раз мы засыпаем на 900 мс.

Как только сон окончен, функция loop завершается. По факту завершения «нечто» тут же вызывает её ещё раз и всё происходит снова: светодиод поджигается, горит, гаснет, ждёт и т.д.

Если перевести написанное на русский, получится следующий алгоритм:

    Поджигаем светодиод

    Спим 100 миллисекунд

    Гасим светодиод

    Спим 900 миллисекунд

    Переходим к пункту 1

Таким образом мы получили Arduino с маячком, мигающим каждые 100 + 900 мс = 1000 мс = 1 сек.

Что можно изменить

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

Вы можете подключить внешний светодиод или другое устройство, которым нужно «мигать» на другой пин. Например, на 5-й. Как в этом случае должна измениться программа? Мы должны всюду, где обращались к 13-му пину заменить номер на 5-й:

Компилируйте, загружайте, проверяйте.

Что нужно сделать, чтобы светодиод мигал 2 раза в секунду? Уменьшить время сна так, чтобы в сумме получилось 500 мс:

void setup() { pinMode(5 , OUTPUT) ; } void loop() { digitalWrite(5 , HIGH) ; delay(50 ) ; digitalWrite(5 , LOW) ; delay(450 ) ; }

Как сделать так, чтобы светодиод при каждом «подмигивании» мерцал дважды? Нужно поджигать его дважды с небольшой паузой между включениями:

void setup() { pinMode(5 , OUTPUT) ; } void loop() { digitalWrite(5 , HIGH) ; delay(50 ) ; digitalWrite(5 , LOW) ; delay(50 ) ; digitalWrite(5 , HIGH) ; delay(50 ) ; digitalWrite(5 , LOW) ; delay(350 ) ; }

Как сделать так, чтобы в устройстве были 2 светодиода, которые мигали бы каждую секунду поочерёдно? Нужно общаться с двумя пинами и работать в loop то с одним, то с другим:

void setup() { pinMode(5 , OUTPUT) ; pinMode(6 , OUTPUT) ; } void loop() { digitalWrite(5 , HIGH) ; delay(100 ) ; digitalWrite(5 , LOW) ; delay(900 ) ; digitalWrite(6 , HIGH) ; delay(100 ) ; digitalWrite(6 , LOW) ; delay(900 ) ; }

Как сделать так, чтобы в устройстве были 2 светодиода, которые переключались бы на манер железнодорожного светофора: горел бы то один то другой? Нужно просто не выключать горящий светодиод тут же, а дожидаться момента переключения:

void setup() { pinMode(5 , OUTPUT) ; pinMode(6 , OUTPUT) ; } void loop() { digitalWrite(5 , HIGH) ; digitalWrite(6 , LOW) ; delay(1000 ) ; digitalWrite(5 , LOW) ; digitalWrite(6 , HIGH) ; delay(1000 ) ; }

Можете проверить другие идеи самостоятельно. Как видите, всё просто!

О пустом месте и красивом коде

В языке C++ пробелы, переносы строк, символы табуляции не имеют большого значения для компилятора. Там где стоит пробел, может быть перенос строки и наоборот. На самом деле 10 пробелов подряд, 2 переноса строки и ещё 5 пробелов - это всё эквивалент одного пробела.

Пустое пространство - это инструмент программиста, с помощью которого можно или сделать программу понятной и наглядной, или изуродовать до неузнаваемости. Например, вспомним программу для мигания светодиодом:

void setup() { pinMode(5 , OUTPUT) ; } void loop() { digitalWrite(5 , HIGH) ; delay(100 ) ; digitalWrite(5 , LOW) ; delay(900 ) ; }

Мы можем изменить её так:

void setup( ) { pinMode(5 , OUTPUT) ; } void loop () { digitalWrite(5 ,HIGH) ; delay(100 ) ; digitalWrite(5 ,LOW) ; delay(900 ) ; }

Всё, что мы сделали - немного «поработали» с пустым пространством. Теперь можно наглядно видеть разницу между стройным кодом и нечитаемым.

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

1. Всегда, при начале нового блока между { и } увеличивайте отступ. Обычно используют 2 или 4 пробела. Выберите одно из значений и придерживайтесь его всюду.

Плохо:

void loop() { digitalWrite(5 , HIGH) ; delay(100 ) ; digitalWrite(5 , LOW) ; delay(900 ) ; }

Хорошо:

void loop() { digitalWrite(5 , HIGH) ; delay(100 ) ; digitalWrite(5 , LOW) ; delay(900 ) ; }

2. Как и в естественном языке: ставьте пробел после запятых и не ставьте до.

Плохо:

DigitalWrite(5 ,HIGH) ; digitalWrite(5 , HIGH) ; digitalWrite(5 ,HIGH) ;

Хорошо:

DigitalWrite(5 , HIGH) ;

3. Размещайте символ начала блока { на новой строке на текущем уровне отступа или в конце предыдущей. А символ конца блока } на отдельной строке на текущем уровне отступа:

Плохо:

void setup() { pinMode(5 , OUTPUT) ; } void setup() { pinMode(5 , OUTPUT) ; } void setup() { pinMode(5 , OUTPUT) ; }

Хорошо:

void setup() { pinMode(5 , OUTPUT) ; } void setup() { pinMode(5 , OUTPUT) ; }

4. Используйте пустые строки для разделения смысловых блоков:

Хорошо:

Ещё лучше:

void loop() { digitalWrite(5 , HIGH) ; delay(100 ) ; digitalWrite(5 , LOW) ; delay(900 ) ; digitalWrite(6 , HIGH) ; delay(100 ) ; digitalWrite(6 , LOW) ; delay(900 ) ; }

О точках с запятыми

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

Как уже говорилось, переносы строк для него - пустой звук, поэтому ориентируется он на этот знак препинания. Это позволяет записывать сразу несколько выражений в одной строке:

void loop() { digitalWrite(5 , HIGH) ; delay(100 ) ; digitalWrite(5 , LOW) ; delay(900 ) ; }

Программа корректна и эквивалентна тому, что мы уже видели. Однако писать так - это дурной тон. Код гораздо сложнее читается. Поэтому если у вас нет 100% веских причин писать в одной строке несколько выражений, не делайте этого.

О комментариях

Одно из правил качественного программирования: «пишите код так, чтобы он был настолько понятным, что не нуждался бы в пояснениях». Это возможно, но не всегда. Для того, чтобы пояснить какие-то не очевидные моменты в коде его читателям: вашим коллегам или вам самому через месяц, существуют так называемые комментарии.

Это конструкции в программном коде, которые полностью игнорируются компилятором и имеют значение только для читателя. Комментарии могут быть многострочными или однострочными:

/* Функция setup вызывается самой первой, при подаче питания на Arduino А это многострочный комментарий */ void setup() { // устанавливаем 13-й пин в режим вывода pinMode(13 , OUTPUT) ; } void loop() { digitalWrite(13 , HIGH) ; delay(100 ) ; // спим 100 мс digitalWrite(13 , LOW) ; delay(900 ) ; }

Как видите, между символами /* и */ можно писать сколько угодно строк комментариев. А после последовательности / / комментарием считается всё, что следует до конца строки.

Итак, надеемся самые основные принципы составления написания программ стали понятны. Полученные знания позволяют программно управлять подачей питания на пины Arduino по определённым временны́м схемам. Это не так уж много, но всё же достаточно для первых экспериментов.

СТРУКТУРА ПРОСТОЙ ПРОГРАММЫ

Теперь, после того как мы привели конкретный пример, вы готовы к тому, чтобы познакомиться с несколькими общими правилами, касающимися программ, написанных на языке Си. Программа состоит из одной или более функций, причем какая-то из них обязательно должна называться main() . Описание функции состоит из заголовка и тела. Заголовок в свою очередь состоит из директив препроцессора типа #include и т. д. и имени функции.

РИС. 2.4. Структура функции в языке Си: заголовок и тело.

Из книги C++ автора Хилл Мюррей

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

Из книги Домашний архитектор. Подготовка к ремонту и строительству на компьютере автора Булат Виталий

Структура программы Super Home Suite Рассмотрим главное окно программы Super Home Suite (демонстрационной версии 3.5.2) (рис. 2.1). Рис. 2.1. Главное окно программы Super Home SuiteВверху расположено системное меню, включающее разделы команд для управления программой, редактированием данных,

Из книги Информатика и информационные технологии: конспект лекций автора Цветкова А В

Структура программы Окно программы PromOffice Euroremont (рис. 3.1) состоит из нескольких частей. Вверху находится горизонтальная панель с главным меню, под ней – панель инструментов. Остальную область окна занимают панели для работы с данными. В последней версии программы в правом

Из книги Информатика и информационные технологии автора Цветкова А В

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

Из книги Язык программирования С# 2005 и платформа.NET 2.0. автора Троелсен Эндрю

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

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

Структура простой программы на C# Язык C# требует, чтобы вся логика программы содержалась в рамках определения некоторого типа (вспомните из главы 1, что термин тип используется для обозначения любого элемента множества {класс, интерфейс, структура, перечень, делегат}). В

Из книги Создаем вирус и антивирус автора Гульев Игорь А.

СТРУКТУРА ПРОГРАММЫ Исходная программа Исходная программа представляет собой совокупность следующих элементов: директив препроцессора, указаний компилятору, объявлений и определений. Директивы препроцессора специфицируют действия препроцессора по преобразованию

Из книги Язык Си - руководство для начинающих автора Прата Стивен

Структура и процесс загрузки COM-программы Что же представляет собой COM-программа, как она загружается в память и запускается?Структура COM-программы предельно проста – она содержит только код и данные программы, не имея даже заголовка. Размер COM-программы ограничен

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

Структура и процесс загрузки EXE-программы В отличие от COM-программ, EXE-программы могут состоять из нескольких сегментов (кодов, данных, стека). Они могут занимать больше 64Кбайт.EXE-файл имеет заголовок, который используется при его загрузке. Заголовок состоит из

Из книги Конец холивара. Pascal vs C автора Кривцов М. А.

ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ Давайте рассмотрим простую программу на языке Си. Следует сразу сказать, что такой пример нужен нам лишь для выявления некоторых основных черт любой программы, написанной на языке Си. Далее мы дадим пояснения к каждой строке, но, перед

Из книги Linux и все, все, все... Статьи и колонки в LinuxFormat, 2006-2013 автора Федорчук Алексей Викторович

18.5.1. Простой цикл for Этот цикл просто выводит на экран список, который состоит из " 1 2 3 4 5". Чтобы получить доступ к каждой переменной, в качестве параметра имя_переменной указывается "loop".$ pg for_i#!/bin/sh# for_ifor loop in 1 2 3 4 5doecho $LOOP doneПриведенный выше сценарий выводит следующие данные:$

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

1. Структура программы на языке Pascal В программе на Pascal выделяют следующие основные разделы: заголовок программы, описания, операторы. Разделы отделяются друг от друга точкой с запятой. В конце программы ставится точка. Каждый раздел начинается со своего ключевого

Из книги автора

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

Из книги автора

Создаём простой пул Освоив ранее основные понятия, мы научились понимать ZFS. Для обратной же задачи – чтобы ZFS понимала нас – нужно ознакомиться с её командами. Главные из них – две: zpool для создания и управления пулами, и zfs для создания и управления наборами данных.

Из книги автора

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

Из книги автора

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример №1:

# include

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

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

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

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

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

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

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

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

Пример №1:

# include < stdio.h>

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

#include
#include «math.h»

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Например:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Общий вид

Пример

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

# include

# define N 10

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

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

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

int x=1; char str[N];

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

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

gets(str);

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

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

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

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

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

# include < name >

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

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

# include < math . h >

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

Директива

# include < stdio . h >

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

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

#define S1 S2

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

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

# define P printf

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

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

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

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

void main(void)

void main()

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

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

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

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

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

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

k = sizeof(int);

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

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

Таблица 1

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

Значение

Размер

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

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

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

32768 . . . +32767

2147483648 . . . +2147483647

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

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

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

(по модулю)

Символьный

128 . . . +127

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



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: