Примеры программ с циклами на си

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

Видеоурок

В языке Си, как и в большинстве других языков, существует 3 вида циклов. Каждый из них выполняет одну и ту же роль, но записывается по-разному. Рассмотрим все три цикла.

Цикл For

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

for (int i = 0; i < 10; i++) printf(«%dn», i);

В объявлении цикла записывается следующее: переменная цикла, её начальное значение и диапазон. В примере выше будут выведены числа от 0 до 10.

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

Цикл While

Суть цикла while не особо отличается от цикла for . Единственное отличие заключается в способе записи цикла. В while необходимо прописать лишь условие, а все остальные параметры записываются вне цикла:

Язык Си для начинающих / #5 — Циклы и операторы в них


int i = 1; // Создание переменной while (i

Цикл Do While

Цикл схож с циклом while по форме написания, но при этом работает немного по-другому. Цикл do..while будет выполнен один раз сто процентов, а дальше проверит условие и если оно верно, то цикл будет выполняться дальше:

int x = 13; do < x—; printf(«%dn», i); >while (x > 10);
Как видно из примера, цикл изначально неверный, но это не мешает ему сработать один раз.

Операторы для работы в циклах

Существует два основных оператора для работы в циклах:

  • Оператор break — служит для выхода из цикла полностью;
  • Оператор continue — пропускает лишь одну итерацию и не выходит из цикла.

Весь код будет доступен после подписки на проект!

Задание к уроку

Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям

Большое задание по курсу

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

Источник: itproger.com

Циклы в языке С (Си) для микроконтроллеров AVR

В данной статье будут рассмотрены циклы в языке программирования Си для микроконтроллеров AVR. Будут рассмотрены циклы типа «для» (for) и циклы типа «пока» (while), будет показано как осуществить принудительное прерывание цикла и организовать бесконечный цикл. Рассмотрены вопросы вложенных циклов и формирования длительных временных задержек.

Структура цикла с предусловием

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

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

В языке С есть две разновидности циклов: циклы со счетчиком (типа «для» или for ) и цикл с условием (типа «пока» или while ). В других языках программирования, например Pascal, циклы с условием разделялись на циклы с предусловием (типа while) и циклы с пост условием (типа repeat until), но в современных языках программирования циклы с пост условием постепенно отмирают.

Циклы типа «для» (for)

Циклы типа «для» (for) применяются в ситуациях, в которых заранее известно количество повторений цикла. Поэтому в составе подобного цикла всегда есть так называемый «счетчик повторений» или «переменная цикла». Пример использования цикла for в языке представлен на следующем рисунке.

Рассмотрим пример цикла for, приведенный на следующем рисунке.

В этом примере на первом шаге цикла переменная i будет равна 1, перед вторым шагом произойдет ее увеличение на 1 в результате инкремента (i++) и она станет равной 2. На третьем шаге значение переменной цикла i будет равно 3. И так до тех пор, пока на пятом шаге цикла она не станет равной 5. В результате следующей операции инкрементирования (i++) переменная цикла получит значение 6, но условие i

Язык С допускает инициализацию переменной цикла в его оглавлении как показано на следующем рисунке.

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

Усовершенствуем программу управления миганием светодиода, рассмотренную в статье про программирование портов микроконтроллеров AVR, с помощью цикла типа «для» (for). Заставим светодиод мигать 10 раз.

Пример подобной программы представлен на следующем рисунке.

Программа для мигания светодиодом 10 раз

Циклы типа «пока» (while)

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

while (условие)
<
// тело_цикла
>

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

Чтобы цикл завершился, внутри него (в его теле) должно происходить изменение какой-либо переменной, которая входит в условие цикла.

int y;

while (y > 0)
<
y = y — 1;
>

В этом примере тело цикла будет повторено (выполнится) 50 раз, до тех пор пока переменная y будет больше нуля. На каждом шаге цикла значение переменной y будет уменьшаться на 1. И когда оно станет равным 0, цикл завершится.

Оператор break

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

В большинстве случаев он используется следующим образом:

if (условие1) break;

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

Бесконечные циклы

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

Читайте также:
Landi renzo evo программа настройки

for(;;)
<
// тело_цикла
>

Чаще применяется способ с циклом типа while – он более нагляден. Выйти из подобных циклов можно единственным образом – применив рассмотренный в предыдущем разделе оператор break.

Бесконечные циклы находят широкое распространение в программах для микроконтроллеров, потому что данные программы должны, как правило, работать постоянно до тех пор, пока устройство не обесточат. Много примеров подобных программ вы можете найти на нашем сайте в рубрике «схемы и устройства на микроконтроллерах AVR».

Вложенные циклы

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

Пример вложенного цикла в языке С

Рассмотрим пример двух вложенных друг в друга циклов «для». Тело вложенного цикла в общей сложности будет повторено 200 раз.

В этом примере тело вложенного цикла будет выполнено 200 раз.

Формирование задержки

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

Пример организации длительной задержки для микроконтроллеров AVR

Комментарии

Циклы в языке С (Си) для микроконтроллеров AVR — 17 комментариев

юрий говорит 24.09.2022 в 13:52 :
В datasheet есть эта команда «NOP»,например для Atmega8- 1 такт.
admin-new говорит 25.09.2022 в 22:07 :

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

юрий говорит 23.09.2022 в 19:34 :
А можно записать урок по оператору switch?
Спасибо.
admin-new говорит 24.09.2022 в 12:46 :
Ну попробовать можно, только вот не будет ли такой урок слишком короткий для отдельной статьи
юрий говорит 24.09.2022 в 13:30 :

Быть может тогда добавить тему «Конечные автоматы для AVR» как развитие темы » Switch».
К сожалению ,тему конечных автоматов очень трудно найти в уроках для AVR.
Хотя это очень интересно.
Спасибо.

admin-new говорит 25.09.2022 в 22:08 :

Надо подумать. А вы случайно не знаете какую-нибудь англоязычную статью где эта тема хорошо освещена? Тогда я бы просто перевел эту статью и эта тема стала бы доступна в сети и на русском языке

юрий говорит 26.09.2022 в 10:50 :

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

admin-new говорит 27.09.2022 в 14:02 :

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

юрий говорит 27.09.2022 в 16:19 :

https://www.youtube.com/watch?v=2UN2H3mSpLEindex=56 jaxcoder.com/Post/Index?guid=3d7c2e49-c587-465b-a1df-861d3fcad914 popayaem.ru/konechnye-avtomaty-kak-programmirovat-bez-zaparok.html digitrode.ru/articles/90-konechnyy-avtomat-na-c.html kit-e.ru/micro/switch-1/ github.com/search?q=Finite+State+Machine От админа: хорошо, я в ближайшие дни постараюсь посмотреть и сделать на основе всего этого свою статью. По материалам ваших ссылок написал статью про конечные автоматы в микроконтроллерах AVR. Можете читать.

Читайте также:
Программы для диагностики автомобилей через k line адаптер для ПК

антошка говорит 29.08.2022 в 19:44 :
А можно в место delay(1000) сделать ту же задержку ну допустим оператором for?
admin-new говорит 31.08.2022 в 21:37 :

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

юрий говорит 23.09.2022 в 20:16 :

можно
#define F_CPU 4000000UL // указываем частоту в герцах
#define time 30 //объявляем константу time(например 30)
void pause (unsigned long a)//функция паузы с аргументом а unsigned long counter ;//переменная counter
for(counter=a; counter>0; counter—)
asm («nop»);//для того, чтобы избежать оптимизации этой ф-ции
> пример использования
int main(void) < . while(1) .
pause (10000L*time);//пауза рассчитывается в зависимости от частоты F_CPU
//в данном случае аргумент а=10000L = 10000*(1/4000000)= 2,5( мсек)
// и еще умножаем на выбранную константу (например 30) получаем 30*2,5=75(мсек)
.
>
>

admin-new говорит 24.09.2022 в 12:44 :

Ну в принципе идея конечно рабочая, только я вот лично сам никогда не сталкивался с использованием функции asm(«nop») и поэтому не знаю за какое время (за сколько тактов) она выполняется

юрий говорит 24.09.2022 в 13:55 :
Из даташит 1такт (для Atmega 8)
admin-new говорит 25.09.2022 в 22:09 :
Да, хорошо. Тогда все нормально
Юрий говорит 17.05.2022 в 17:11 :

Спасибо, все подробно объяснили. Тема (на мой взгляд) относительно несложная для понимания, поэтому, наверное, и вопросов не возникает

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

Примеры программ с циклами на си

Результатом работы программы будет вертикальный список значений счётчика n:

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

#include
void main()
int n;
clrscr();
for (n=1; n printf(«Iteration: «);
printf(«%dn»,n);
>
>
Результат выполнения программы с несколькими действиями в цикле:

В качестве счётчика цикла могут быть переменные не только целого, но и вещественного типа. Так же, формула приращения цикла может быть любой. Например, заменим тип переменной n на float, а приращение значения n сделаем 0.5.

#include
void main()
float n;
clrscr();
for (n=1; n printf(«Iteration: «);
printf(«%fn»,n);
>
>
Результатом работы этой программы будет список дробных значений n:

Формула приращений счётчика цикла может иметь как положительное приращение (как в нашем случае), так и отрицательное приращение — цикл будет работать на уменьшение счётчика. Для этого достаточно изменить условие (диапазон) значений цикла и формулу приращения счётчика. Например, в нашей программе «развернём» счётчик в обратную сторону:
#include
void main()
float n;
clrscr();
for (n=4; n>=1; n=n-0.5)
printf(«Iteration: «);
printf(«%fn»,n);
>
>
Результат работы этой программы будет такой:

#include
void main()
float fact;
int n,q;
clrscr();
/* Вводим с клавиатуры значение q */
printf(«Vvedi q: «);
scanf(«%d»,
/* Проверяем введённое значение q и если оно равно 0 то . */
if (q==0) printf(«Factorial = 1»);
/* Если q не равно 0 то создаём цикл и в цикле вычисляем факториал fact*/
else
fact = 1;
for (n=1; n /* Выводим полученное значение факториала на экран*/
printf(«Factorial=%f»,fact);
>
>
Результат работы программы при q=0:

Результат работы программы при q не равном 0:

Источник: hi-intel.ru

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