- •3 Базовые структуры алгоритмов — это определенный набор блоков и стандартных способов их соединения для выполнения типичных последовательностей действий.
- •4) Линейный алгоритм
- •5) Разветвляющийся алгоритм
- •6) Циклический алгоритм
- •Смысловые имена переменных
- •10) Функция стандартного вывода printf()
- •Функция стандартного ввода scanf()
- •13) Вложенные циклы
- •14) Массивы. Общие сведения
- •Описание массивов
- •1. Объявление массива
- •2. Инициализация массивов
- •16) Вычисление суммы элементов массива
- •Пример 2.3.
- •17) Перестановка двух элементов массива
- •18) Поиск минимального и максимального элемента массива и его порядкового номера (индекса)
- •Объявление функции
- •20) Понятие указателя
- •Адрес переменной и значение переменной по адресу
- •Применение указателей
- •Сбор информации
- •Хранение информации
- •Процесс передачи
- •Обработка информации
- •24) Архитектура эвм
- •25) Структурная схема и устройства пк
- •Микропроцессор
- •Оперативная память
- •Контроллеры
- •Системная магистраль
- •Внешняя память. Классификация накопителей
- •Дополнительные устройства
- •Десятичная система счисления
- •Двоичная система счисления
- •Из двоичной в десятичную систему счисления
- •Из десятичной в двоичную систему счисления
- •Заключение
10) Функция стандартного вывода printf()
Функция printf() является функцией стандартного вывода. С помощью этой функции можно вывести на экран монитора строку символов, число, значение переменной...
Функция printf() имеет прототип в файле stdio.h int printf(char *управляющая строка, ...);
В случае успеха функция printf() возвращает число выведенных символов.
Управляющая строка содержит два типа информации: символы, которые непосредственно выводятся на экран, и спецификаторы формата, определяющие, как выводить аргументы.
Функция printf() это функция форматированного вывода. Это означает, что в параметрах функции необходимо указать формат данных, которые будут выводиться. Формат данных указывается спецификаторами формата. Спецификатор формата начинается с символа % за которым следует код формата.
Спецификаторы формата:
%с |
символ |
%d |
целое десятичное число |
%i |
целое десятичное число |
%e |
десятичное число в виде x.xx e+xx |
%E |
десятичное число в виде x.xx E+xx |
%f |
десятичное число с плавающей запятой xx.xxxx |
%F |
десятичное число с плавающей запятой xx.xxxx |
%g |
%f или %e, что короче |
%G |
%F или %E, что короче |
%o |
восьмеричное число |
%s |
строка символов |
Примеры программ.
/* Пример 1 */ #include <stdio.h> void main(void) { int a,b,c; // Объявление переменных a,b,c a=5; b=6; c=9; printf("a=%d, b=%d, c=%d",a,b,c); }
Результат работы программы: a=5, b=6, c=9
Функция стандартного ввода scanf()
Функция scanf() - функция форматированного ввода. С её помощью вы можете вводить данные со стандартного устройства ввода (клавиатуры). Вводимыми данными могут быть целые числа, числа с плавающей запятой, символы, строки и указатели.
Функция scanf() имеет следующий прототип в файле stdio.h: int scanf(char *управляющая строка);
Функция возвращает число переменных которым было присвоено значение.
Управляющая строка содержит три вида символов: спецификаторы формата, пробелы и другие символы. Спецификаторы формата начинаются с символа %.
Спецификаторы формата:
%c |
чтение символа |
%d |
чтение десятичного целого |
%i |
чтение десятичного целого |
%e |
чтение числа типа float (плавающая запятая) |
%h |
чтение short int |
%o |
чтение восьмеричного числа |
%s |
чтение строки |
%x |
чтение шестнадцатеричного числа |
%p |
чтение указателя |
%n |
чтение указателя в увеличенном формате |
При вводе строки с помощью функции scanf() (спецификатор формата %s), строка вводиться до первого пробела!! т.е. если вы вводите строку "Привет мир!" с использованием функции scanf()
char str[80]; // массив на 80 символов scanf("%s",str);
то после ввода результирующая строка, которая будет храниться в массиве str будет состоять из одного слова "Привет". ФУНКЦИЯ ВВОДИТ СТРОКУ ДО ПЕРВОГО ПРОБЕЛА! Если вы хотите вводить строки с пробелами, то используйте функцию
char *gets( char *buf );
С помощью функции gets() вы сможете вводить полноценные строки. Функция gets() читает символы с клавиатуры до появления символа новой строки (\n). Сам символ новой строки появляется, когда вы нажимаете клавишу enter. Функция возвращает указатель на buf. buf - буфер (память) для вводимой строки.
Хотя gets() не входит в тему этой статьи, но всё же давайте напишем пример программы, которая позволяет ввести целую строку с клавиатуры и вывести её на экран.
#include <stdio.h> void main(void) { char buffer[100]; // массив (буфер) для вводимой строки gets(buffer); // вводим строку и нажимаем enter printf("%s",buffer); // вывод введённой строки на экран }
Ещё одно важное замечание! Для ввода данных с помощью функции scanf(), ей в качестве параметров нужно передавать адреса переменных, а не сами переменные. Чтобы получить адрес переменной, нужно поставить перед именем переменной знак &(амперсанд). Знак & означает взятие адреса.
Что значит адрес? Попробую объяснить. В программе у нас есть переменная. Переменная хранит своё значение в памяти компьютера. Так вот адрес, который мы получаем с помощью & это адрес в памяти компьютера где храниться значение переменной.
11) Условный оператор if-else в C++
Если вопрос касается задач разветвляющегося процесса, то здесь необходимо использовать условный оператор if-else. В этой статье вы узнаете, как работаетусловный оператор if-else в C++ и разберем одну задачу на эту тему.
Допустим, у нас имеется задача, в которой нужно определить какое из трех чисел введенных с клавиатуры является самым большим? Для решения такой задачи нам как раз таки и понадобится использование условного оператор if-else .
В общем виде этот оператор выглядит так:
Если у нас «условие» является истинным выражением или значением, то выполняется оператор_1 иначе, если у нас «условие» ложно, то выполняется оператор_2.
А если мы хотим задать группу операторов для истинного или ложного условия? Тогда это будет выглядеть так:
При условии если у нас имеется группа операторов, то их мы помещаем в фигурные скобки.
А теперь задачка:
Решение:
Эту задачу можно решать по крайне мере двумя способами. И сейчас я вам о них расскажу.
Способ_1.
Давайте для начала составим блок-схему 1 способа.
С помощью блок-схемы можно наглядно понять структуру задачи, как она будет работать. Давайте проговорим. Если a>b и a>c, то присвой значение a максимуму иначе если b>c, то b присвой значение максимуму, иначе присвой с максимуму. Затем выводим результат на экран.
Теперь нам нужно это записать на языке C++. Все очень просто и по алгоритму.
Что мы сделали? Во-первых, сделали подсказку для удобства. Во-вторых, выделили память под 4 переменные. Далее непосредственно сам ввод переменных, которые будем сравнивать. Потом записали алгоритм блок-схемы. Алгоритм блок-схемы мы уже проговаривали. А в конце выводим самое большое число.
Способ_2. Способ два еще проще и заключается он в следующем: Выделяем память под 3 переменные, а затем пишем подряд 3 условных оператора, не используя слово else.
Для использования группы операторов, я предлагаю вам почитать статью, в которой я высчитывал площадь треугольника. Там как раз вы увидите использование в фигурных скобках группы операторов.
Конструкция If-Else предназначена для проведения каких-либо условий. На практике очень часто приходится что-то сравнивать, проделывать определенные действия в зависимости от тех или иных условий. Например, на сайте нам может потребоваться сравнить переменные после чего вывести на экран определенную информацию. Другой пример — запрет входа пользователя на сайт, если он неправильно указал свой логин и пароль. Третий — если какие-то поля формы не заполнены должным образом, то необходимо выводить соответствующее сообщение на экран. Таких примеров может быть масса. Таким образом, данная конструкция весьма полезна и часто применяется при создании сайтов.
Конструкцию If-Else можно перевести на русский язык, как «Если-Иначе». Схематично она выглядит следующим образом:
Алгоритм работы выглядит следующим образом: пишется ключевое слово «If», затем в круглых скобках указывается условие. Если условия истина, то выполняются действия, указанные в первых фигурных скобках. Если условия не истинны, то выполняются действия, заданные во вторых фигурных скобках, а первые пропускаются.
12) В языке Си существует три типа циклов: for, while, do while. Каждый из них имеет свои конкретные применения. Все они описаны ниже.
Самый часто используемый цикл — это цикл for, его структура показана ниже:
1 2 3 |
for ( /*инициализация переменной; условие; изменение значения переменной*/ ) { // тело цикла (тут находится код который будет повторяться) } |
Инициализация переменной позволяет либо объявить переменную и присвоить ей значение либо присвоить значение уже существующей переменной. Во-вторых, значение этой переменной сообщает программе — истинно или ложно условие цикла. И пока условие цикла — истинно, цикл должен продолжать повторяться. Управляющую переменную обязательно необходимо как-то изменять, иначе цикл будет бесконечный, например можно обновлять её так: i++, i = i + 2 или даже так i = random(5). Обратите внимание, что каждую секцию в заголовке цикла, отделяет точка с запятой , что очень важно. Также отметим, что каждый из разделов может быть пустым, хотя точки с запятой все еще должны быть там. Если условие не пустое, то оно оценивается как истинное и цикл будет выполняться до тех пор, пока что-то не сделает условие цикла — ложным. Давайте рассмотрим простой пример использования цикла for.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <stdio.h>
int main() { int i; /* Цикл будет работать до тех пор, пока i < 10, при этом после каждой итерации переменная i будет инкрементироваться(увеличиваться на 1)*/ for ( i = 0; i < 10; i++ ) { /* Имейте ввиду что условие проверяется перед каждым повторением, то есть работа цикла остановится когда переменная i будет равна 10*/ printf( "%d\n", i ); } getchar(); } |
Собственно, результат работы программы:
CppStudio.com
0
1
2
3
4
5
6
7
8
9
Эта программа представляет собой очень простой пример использования цикла. переменной i присваивается ноль, и покаi меньше 10 на экран печатается значения переменной i, после этого к переменной i прибавляется единица и все снова повторяется до тех пор, пока условие не станет ложным. Имейте в виду, что значение переменной i увеличивается после выполнения кода в теле цикла запускается в первый раз.
Цикл while — очень простой цикл, вот его структура:
1 2 3 4 |
while ( /*условие*/ ) { // тело цикл - тут находится код, который необходимо повторять } |
Тело цикла начинает выполняться, если условие цикла — истинно. Условие представляет собой логическое выражение, например х == 1 или х! = 7 (х не равно 7). То есть условие может быть абсолютно любым — любое сочетание логических выражений. Вот пример составного условия — x == 3 || x > 10, это условие будет истинным, если икс будет равен трем или икс будет больше 10. Обратите внимание, что while имеет раздела инициализации или раздела изменения управляемой переменной, поэтому перед использованием этого цикла, сначала необходимо объявить переменную, которая будет проверяться в условии цикла и в теле цикла изменять значение этой переменной. Собственно, давайте рассмотрим простой пример с использованием цикла while:
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <stdio.h>
int main() { int var = 0; /* обязательно сначала объявляем переменную */
while ( var < 10 ) { /* пока значение переменной var меньше 10 */ printf( "%d\n", var ); var++; /* обновляем значение в переменной var(если этого не делать, то условие цикла всегда будет истинным, тогда цикл будет - бесконечным) */ } getchar(); } |
Вот мы и рассмотрели еще один пример использования циклов, и как видите и в этом примере нет ничего сложного. Просто представьте себе, что цикл всегда начинает повторять код, который находится в теле цикла. Как только выполняется последний оператор в теле цикла, выполняется проверка условия цикла. Если условие все ещё — истинное, то цикл продолжает и дальше работать, а если условие — ложное, то выполняется выход из цикла.
Есть еще один тип циклов — do while. Этот цикл полезен, когда необходимо выполнить код по крайней мере — 1 раз. Рассмотрим его структуру:
1 2 3 |
do { // тело цикла } while ( /*условие*/ ); |
Структура очень простая, как видите условие находится в конце цикла ,соответственно и проверка условия будет выполняться после того, как выполнятся код в теле цикла. Обратите внимание, что условие проверяется в конце цикла, а не в начале, так что блок кода в теле цикла будет выполнен по крайней мере один раз. Если условие истинно, цикл прыгает обратно в начало и снова выполняет его. Цикл do while почти ничем не отличается от цикла while, за исключением того, что тело цикла гарантированно выполняется хотя бы один раз. Цикл while сначала проверяет условие, а потом выполняет блок кода в теле, конечно же, если условие — истинно, В то время как do while сначала выполняет код в теле цикла, а затем проверяет условие, и если оно — истинное, то он продолжает работать. Пример работы цикла do while показан ниже:
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <stdio.h>
int main() { int i = 0;
do { /* Напечатает сообщение и завершит работу*/ printf( "Привет! Я цикл do while\n" ); } while ( i != 0 ); getchar(); } |
Обратите внимание на точку с запятой в конце цикла, вы всегда должны ставить эту точку с запятой так, как в приведенном выше примере. Очень часто эта точка с запятой не ставится, в результате — появляется ошибка компиляции. Только этот цикл заканчивается точкой с запятой, у остальных циклов в конце, кроме закрывающей скобочки — ничего не ставится. Обратите внимание, что в примере выше, этот цикл будет выполняться один раз, потому что сначала печатается сообщение а потом проверяется условие цикла.
