Главная » Просмотр файлов » А. Богатырев - Руководство полного идиота по программированию (на языке Си)

А. Богатырев - Руководство полного идиота по программированию (на языке Си) (1109482), страница 2

Файл №1109482 А. Богатырев - Руководство полного идиота по программированию (на языке Си) (А. Богатырев - Руководство полного идиота по программированию (на языке Си)) 2 страницаА. Богатырев - Руководство полного идиота по программированию (на языке Си) (1109482) страница 22019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Руководство полного идиота<br> по программированию (на языке Си)while(условие)оператор;...продолжение...илиwhile(условие){операторы;...}...продолжение...Повторить|V|+------>--+|||V|--------------------|| проверить УСЛОВИЕ |-------> если ложно (нуль)A--------------------|||||V||если истинно (не нуль)|||||V||операторV||||||+-----<---+||+-------<---------------------+|VпродолжениеПример:int x;x = 10;while(x > 0){printf("x=%d\n", x);x = x - 1;}printf("Конец.\n");printf("x стало равно %d.\n", x);/* печатает 0 */"Цикл" он потому, что его тело повторяется несколько раз.Чтобы цикл окончился, оператор-тело цикла должен менятькакую-то переменную, от которой зависит истинность условия повторений.ОПЕРАТОРЫ "И, ИЛИ, НЕ"Условия могут быть сложными.ЕСЛИ красный И вес < 10 ТО ...;ЕСЛИ красный ИЛИ синий ТО ...;file:///Volumes/WININSTALL/assets/materials_informatiks.html8/6803.06.2015Андрей Богатырев.

Руководство полного идиота<br> по программированию (на языке Си)ЕСЛИ НЕ красный ТО ...;На языке Си такие условия записываются так:if(условие1 && условие2) ...;if(условие1 || условие2) ...;if(! условие1)...;/* "И" *//* "ИЛИ" *//* "НЕ" */Например:if(4 < x && x <= 12) ...;Было бы неправильно записатьif(4 < x <= 12) ...;ибо язык программирования Си НЕ ПОНИМАЕТ двойное сравнение!Еще примеры:if(x < 3 || y > 4) ...;if( ! (x < 3 || y > 4)) ...;ЦИКЛ for ("для каждого")Этот цикл является просто иной записью одного из вариантов цикла while.Он служит обычно для выполнения опеределенного действия несколько раз,не "пока истинно условие", а "выполнить N-раз".У такого цикла есть "переменная цикла" или "счетчик повторений".int i;i = a; /* начальная инициализация */while(i < b){тело_цикла;i += c; /* увеличение счетчика */}...продолжение...переписывается в видеint i;for(i=a; i < b; i += c)тело_цикла;тело_цикла будет выполнено для значений iaa+ca+c+c...пока i < bfile:///Volumes/WININSTALL/assets/materials_informatiks.html9/6803.06.2015Андрей Богатырев.

Руководство полного идиота<br> по программированию (на языке Си)В простейшем случаеfor(i=1; i <= N; i++)printf("i=%d\n", i);i означает "номер повторения".Такой цикл служит для повторения СХОЖИХ действий НЕСКОЛЬКО разс разным значением параметра.ОПЕРАТОР break ("вывалиться из цикла")Оператор break заставляет прервать выполнение тела циклаи сразу перейти к продолжению программы.while(условие1){операторы1;if(условие2)break; ------->----+|операторы2;|}|...продолжение...<--------<---------+иfor(i=0; условие1; i++){операторы1;if(условие2)break; ------->----+|операторы2;|}|...продолжение...<--------<---------+Этот оператор позволяет организовывать дополнительныеточки выхода из цикла (при дополнительных условиях).Пример:for(i=0; i < 20; i++){printf("i=%d\n", i);if(i == 7){printf("break loop!\n");break;/* вывалиться из цикла */}printf("more\n");}printf("finished, i=%d\n", i); /* печатает 7 */В частности, с его помощью можно организовывать бесконечный цикл:for(;;){/* заголовок бесконечного цикла */операторы1;if(условие2)break; ------->----+file:///Volumes/WININSTALL/assets/materials_informatiks.html10/6803.06.2015Андрей Богатырев.

Руководство полного идиота<br> по программированию (на языке Си)||}|...продолжение...<--------<---------+операторы2;Здесь в самом заголовке цикла НЕ ПРОВЕРЯЕТСЯ НИКАКИХ УСЛОВИЙ,такой цикл продолжается бесконечно.Условие продолжения считается всегда истинным.Единственный способ выйти из него это сделать break (при каком-то условии) в теле цикла, что и написано.Бесконечный цикл можно также организовать при помощиwhile(1){...}ОПЕРАТОР ВЫВОДА (ПЕЧАТИ)printf("текст");Печатает на экран текст.printf("текст\n");Печатает на экран текст и переходит к новой строке.printf("слово1 слово2 ");printf("слово3\n");печатаетслово1 слово2 слово3и переходит на новую строку.Если переход на новую строку не задан явно, символом \n,то текст продолжает печататься в текущей строке.printf("%d", x);Печатает в текстовом виде ЗНАЧЕНИЕ переменной x.Специальная конструкция %d означает"взять переменную из списка после запятойи напечатать ее значение в ивде целого числа".printf("икс равен %d - ого-го\n", x);Печатает сначала текстикс равензатем значение переменной x как целое число,затем текст- ого-гои переходит на новую строку (поскольку указан символ \n).Этот оператор может печатать и несколько значений переменных:file:///Volumes/WININSTALL/assets/materials_informatiks.html11/6803.06.2015Андрей Богатырев.

Руководство полного идиота<br> по программированию (на языке Си)int x, y;x = 12; y = 15;printf("икс есть %d, игрек есть %d, все.\n", x, y);~~~~~~Данный оператор работает так.Строка "икс есть %d, игрек есть %d\n" называется ФОРМАТОМ.Компьютер читает формат слева направо и печатает текстдо тех пор, пока не встретит символ %d.Курсор изображен символом _икс есть _Далее он берет ПЕРВУЮ переменную из списка ~~~~ ипечатает ее как целое число.икс есть 12_далее он снова печатает текст пока не встретит %dикс есть 12, игрек есть _Теперь он берет ВТОРУЮ переменную из списка и печатает ее:икс есть 12, игрек есть 15_Снова печатает текст, включая перевод строки \n.Как только строка формата кончилась, оператор printf завершен.икс есть 12, игрек есть 15, все._Печатать можно не только значения переменных, но и значения арифметическихвыражений:printf("равно: %d\n", 12 + 3 * 5);Контрольный вопрос, что печатается:int x, y, z;x = 13;y = 23;z = 34;printf("x=%d xx=%d\nzzz=%d\n", x, y - 1, z * 2 + 1);Тут в формате есть ДВА перевода строки,поэтому будет напечатано:x=13 xx=22zzz=69_Заметьте, что перед тем как быть напечатанными,выражения в списке после формата ВЫЧИСЛЯЮТСЯ.Что напечатаетprintf("x=%d\n y=%d\n", x, y);x=13file:///Volumes/WININSTALL/assets/materials_informatiks.html12/6803.06.2015Андрей Богатырев.

Руководство полного идиота<br> по программированию (на языке Си)y=23_Пробел перед y возник потому, что он СОДЕРЖИТСЯв строке формата после символа \n !!!Будьте внимательны.ФУНКЦИИФункцией называется фрагмент программы,в который передаются ПАРАМЕТРЫ,и который ВОЗВРАЩАЕТ значение (или ничего).Прелесть функции в том, что ее можно выполнить много разиз разных точек программы.Функция состоит изОБЪЯВЛЕНИЯ- описания того, как она что-то вычисляетОбъявление бывает ровно одно.ВЫЗОВОВ- с конкретными значениями параметров,что именно она должна на этот раз вычислить.Вызовов может быть сколько угодно.Объявление простейшей функции выглядит так:int func(int x){/* Один или несколько операторов,завершающихся оператором return(нечто);*/return x+1;}------------------------------------------------------------------------int func(...задает функцию с именем func(имя выдумывает программист, как и имена переменных).int означает, что функция возвращает целое значение.------------------------------------------------------------------------...(int x)...задает список аргументов (или параметров) функции.------------------------------------------------------------------------...){...}задает тело функции - некую последовательность объявленийпеременных и операторов.------------------------------------------------------------------------return выражение;задает оператор выхода из функции в точку ее вызова с возвратом значенияfile:///Volumes/WININSTALL/assets/materials_informatiks.html13/6803.06.2015Андрей Богатырев.

Руководство полного идиота<br> по программированию (на языке Си)выражения.------------------------------------------------------------------------Покажем простой пример ВЫЗОВА этой функции:int y;...y = func(5);...продолжение.../* a *//* b */Этот фрагмент работает следующим образом:y = func(5);В этой точке мы1) "записываем на бумажке",что вызов произошел в такой-то строке, таком-то местенашей программы.2) Смотрим на ОПРЕДЕЛЕНИЕ функции func.int func(int x){...Мы вызвали функцию как func(5).Это значит, что в теле функции x получает начальное значение 5.То есть ДЛЯ ДАННОГО ВЫЗОВА наша функция (ее тело) превращается вint x;x = 5;return x+1;3) x+1 есть 6.Далее должен выполниться оператор return.Он выполняется так:Мы "читаем с бумажки" - откуда была вызвана функция func,и смотрим на это место.

Это былоy = func(5);Вычеркиваем func(5) и заменяем его ЗНАЧЕНИЕМ выражения,вычисленного в операторе return;y = 6;4) Выполняем этот оператор и переходим к продолжению.------------------------------------------------------------------------int y, z, w;y = func(5);z = func(6);w = func(7) + func(8) + 1;Превратится вy = 6;z = 7;w = 8 + 9 + 1;file:///Volumes/WININSTALL/assets/materials_informatiks.html14/6803.06.2015Андрей Богатырев. Руководство полного идиота<br> по программированию (на языке Си)При этом мы четыре раза "прыгнем" на определение функции func(),пройдем все ее операторы с разными значениями параметра xи вернемся обратно в точку вызова.ПРОГРАММА В ЦЕЛОМПрограмма в целом состоит из функций.Одна из функций должна иметь имя main(),С ФУНКЦИИ main НАЧИНАЕТСЯ ВЫПОЛНЕНИЕ ПРОГРАММЫ.(на самом деле этому предшествует отведение и инициализацияглобальных переменных; смотри последующие лекции).Часто main() - единственная функция в программе.------------------------------------------------------------------------Структура программы такова:#include <stdio.h>/* магическая строка *//* ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ (о них позже) */int a = 7;int b;/* по умолчанию 0 *//* ФУНКЦИИ */f1(){....}f2(){....}/* НАЧАЛЬНАЯ (ГЛАВНАЯ) ФУНКЦИЯ */void main(){...}------------------------------------------------------------------------Пример программы:#include <stdio.h>int f1(int x, int y){return (x + y*2);}int f2(int x){int z;z = x+7;return 2*z;}void main(){/* Объявления переменных */int a, b, c;/* Операторы */a = 5; b = 6;c = f1(a, b+3);b = f1(1, 2);a = f2(c);file:///Volumes/WININSTALL/assets/materials_informatiks.html15/6803.06.2015Андрей Богатырев.

Руководство полного идиота<br> по программированию (на языке Си)printf("A есть %d B есть %d C есть %d\n", a, b, c);}Она печатает:A есть 60 B есть 5 C есть 23КАК НЕ НАДО ПРОГРАММИРОВАТЬ ЦИКЛЫint i;for(i=0; i < 4; i++){if(i == 0)func0();else if(i == 1) func1();else if(i == 2) func2();else if(i == 3) func3();}В данном примере цикл АБСОЛЮТНО НЕ НУЖЕН.То, что тут делается, есть просто ПОСЛЕДОВАТЕЛЬНОСТЬ операторов:func0();func1();func2();func3();Цикл имеет смысл лишь тогда, когда много раз вызываетсяОДНО И ТО ЖЕ действие, но может быть зависящее от параметра, вроде func(i).Но не разные функции для разных i.Аналогично, рассмотрим такой пример:int i;for(i=0; i < 10; i++){if(i==0)func0();else if(i == 1) func1();else if(i == 2) func2();elsefuncN(i);}Тут funcN(i) берет на себя роль "а в остальных случаях".Однако, этот пример более естественно может быть записан так:int i;func0();func1();func2();for(i = 3; i < 10; i++)funcN(i);Заметьте, что цикл теперь начинается с индекса 3.А теперь - случай, где смесь цикла и условного оператора оправдана:int i;for(i=0; i < 100; i++){if((i % 2) == 0) even();elseodd();file:///Volumes/WININSTALL/assets/materials_informatiks.html/* четный *//* нечетный */16/6803.06.2015Андрей Богатырев.

Характеристики

Тип файла
PDF-файл
Размер
733,58 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6447
Авторов
на СтудИзбе
306
Средний доход
с одного платного файла
Обучение Подробнее