Циклы в языке C
Прежде, чем изучать циклы, следует познакомиться с часто используемым в языке C способом увеличения/уменьшения значений переменных на единицу. Конечно, в C работают такие формы изменения значений как, например, a += 1 или a -= 1. Однако чаще используют операции инкрементирования (оператор инкремента «++») и декрементирования (оператор декремента «—«): i++ или ++i, i— или —i. В результате этих операций переменные увеличиваются или уменьшаются на единицу.
Запомните, когда вы видите выражения типа ++i или i++, то в результате их выполнения значение i меняется. Не надо делать вот так: i = ++i. Это совершенно лишнее.
Когда знак инкремента или декремента стоит перед переменной, то перед нами префиксная форма операции (++i, —i), а когда после переменной, то постфиксная форма (i++, i—). Когда эти выражения не участвуют в построении более сложных выражений, то между префиксной и постфиксной формами никакой разницы нет: что i++, что ++i — без разницы, в результате мы получим значение i на единицу больше.
Однако когда эти выражения участвуют в построении более сложных, то разница между префиксной и постфиксной формами появляется и заключается в следующем: переменная над которой производится операция инкрементирования или декрементирования в постфиксной форме сначала используется в сложном выражении как есть, и только потом увеличивается на единицу; если мы имеем дело с префиксной формой, то переменная сначала изменяется, а затем используется. Например, код:
, выведет на экране:
Объясняется такой результат так:
значение переменной a было увеличено на единицу, после чего это значение было присвоено переменной c;
значение переменной b было сначала присвоено переменной d и только потом увеличено на единицу.
Еще один пример:
На экране будет выведено:
Это результат логических выражений, где 0 означает ложь, а 1 — истину. В данном случае, когда x сравнивается с нулем, то его значение еще не увеличено, а когда сравнивается у, то его значение уже больше нуля.
Применять операторы инкремента и декремента можно также к переменным вещественного типа.
Цикл while
Цикл while в языке программирования C работает также как и в других языках программирования. По аналогии с условным выражением в инструкции if, условное выражение при while заключается в круглые скобки. Если тело цикла включает несколько выражений разделяемых точкой с запятой, то все тело заключается в фигурные скобки.
Присвойте переменной star значение 0. Пока значение star не достигнет 55 выводите на экран в строку по одной звездочке (*).
С помощью цикла while запрограммируйте вывод на экран цифровых кодов и значений таблицы символов ASCII от 31 до 127 включительно. При этом после каждого десятого символа осуществляйте переход на новую строку. (Подсказка: чтобы переходить на новую строку, в цикле while надо использовать инструкцию if , в условии которой остаток 1 от деления на 10 сравнивается с нулем.)
Используя внешний и вложенный циклы while организуйте вывод таблицы умножения на экран.
1 Операция нахождения остатка от деления в языке C обозначается знаком процента (%).
Цикл do-while
Цикл do-while отличается от while лишь тем, что его тело будет выполнено хотя бы один раз независимо от условия выполнения цикла. Синтаксис цикла do-while можно описать так (фигурные скобки можно опустить, если выражение только одно):
Этот цикл называют циклом с постусловием. Его используют намного реже обычного while. В принципе почти всегда можно обойтись без него, но в определенных ситуациях его использование упрощает код. Допустим требуется вывести на экран отдельные цифры числа. Любое число состоит хотя бы из одной цифры, даже число 0. Можно решить эту задачу с использованием цикла while:
Но в этом случае, если a равно 0, то цикл не выполнится ни разу. Пришлось бы перед циклом использовать инструкцию if, в которой сравнивать переменную с 0. Использование же цикла do-while решает эту проблему, т. к. его тело один раз выполнится даже при нулевом значении переменной:
Цикл for
Представим синтаксис заголовка цикла for языка программирования C так:
Заголовок цикла for включает три части, разделенных точкой с запятой; причем каждая часть может быть сложной, т. е. состоять из нескольких выражений, разделенных простой запятой. В первой части обычно указываются переменные и часто их начальные значения; во второй – с помощью логического(их) выражения(й) задаются условия, при которых выполняется тело цикла; в третью часть помещаются выражения, которые выполняются в конце каждой итерации цикла (чаще всего здесь изменяется значение переменной, заданной в первой части заголовка).
Вот так будет выглядеть программный код, выводящий таблицу символов на экран, в котором используется цикл for:
Напишите программу с использованием цикла for, выводящую на экран таблицу умножения (Подсказка: как и в случае с while следует использовать два цикла — внешний и вложенный.)
Операторы break и continue
Оператор break позволяет прервать выполнение цикла, а continue — прервать текущую итерацию (проход) цикла. Почти всегда можно обойтись без этих операторов, но иногда их использование позволяет упростить программный код и сделать его более понятным.
Рассмотрим пару примеров. Допустим, требуется проверить массив на наличие в нем хотя бы одного элемента со значением 0. Как только ноль будет обнаружен проверять оставшуюся часть массива уже нет смысла. Поэтому, чтобы не выполнять лишних итераций, используется оператор break.
Второй пример. Требуется из одного массива скопировать в другой только числа, которые больше 0. Можно с помощью continue прерывать итерацию цикла, если очередной элемент меньше либо равен нулю.
В данном случае использование continue совсем не очевидно с точки зрения надобности, т. к. легко можно обойтись без него, если изменить условие при if на противоположное, удалить continue, а оставшийся код поместить в тело оператора if.
Как написать следующее выражение на языке с переменной a присвоено значение b
Здравствуйте нужно решить тест.
Дан массив int w[3][3] = < < 2, 3, 4 >, < 3, 4, 8 >, < 1, 0, 9 >>;. Чему будет равно значение элемента этого массива w[1][2]:
Чему равно значение x после float y=1.5, x=2/3*y-1:
Чему равно значение y после: int y=9, y%=4:
Чему будет равно значение r после выполнения
int t=2, b=7, r=3; if (t>b)
Написать условный оператор для увеличения j в 2 раза если j не равно i и j – нечетное число, в противном случае j умножить на i
Какая функция, описанная в заголовочном файле читает строку символов из файла?
Написать цикл for в стандарте C++ , вычисляющий и печатающий факториалы чисел от 1 до 9
Используя цикл с предусловием вычислить количество цифр заданного числа N
Записать функцию, заменяющую в строке (массиве символов) знак подчеркивания на знак пробела
Укажите допустимые вещественные (плавающие) типы в языке С:
При открытии файла выполняются следующие действия (укажите правильные ответы):
физический файл связывается с логическим (файловой переменной)
устанавливается тип файла (текстовый или бинарный)
устанавливается вид (режим) использования файла
функцией открытия файла возвращается результат (ошибка)>
12. Цикл с предусловием: while, do while или for
13. Какой из перечисленных операторов, не является циклом в С++? (for, while, repeat until, do while>
14.Чтобы подключить заголовочный файл в программу на С++, например iostream необходимо написать:
15. Кто разработал язык программирования C++
16. Как выглядит оператор сравнения двух переменных на равенство?
17. Какую функцию должны содержать все программы на С++?
18. Запишите фрагмент программы, который напечатает 20 звёздочек — *.
20. Какими знаками заканчивается большинство строк кода в Си++?
21. Чему будет равна переменная a, после выполнения этого кода int a; for(a = 0; a < 10; a++)?
22. До каких пор будут выполняться операторы в теле цикла while (x < 100)?
23. Запишите правильный вариант объявления константной переменной в С++, где type — тип данных в С++ variable- имя переменной value — константное значение:
24. Простые типы данных в С++:
25. Как записываются комментарии в С++?
26. Программа, переводящая входную программу на исходном языке в эквивалентную ей выходную программу на результирующем языке, называется: (интерпретатор, транслятор, сканер, компилятор)
27. Какой из перечисленных типов данных не является типом данных в С++? (int, real, float, double)
28. Укажите правильную форму записи цикла do while
29. Присвоить переменной y 1, если x больше 9, а иначе 0, используя условный оператор ?
30. Какие служебные символы используются для обозначения начала и конца блока кода?
31. Что появится на экране, после выполнения этого фрагмента кода?
32. Какое из значение эквивалентно зарезервированному слову true?
33. В каком случае можно не использовать фигурные скобочки в операторе выбора if?
34. Какое ключевое слово указывает, что целая переменная не может принимать отрицательные значения?
35. Как выглядит логический оператор И?
36. Чему равен результат выполнения следующего выражения: 1000 / 100 % 7 * 2 ?
37. Это значение 5.9875e17 может быть сохранено в переменной, типа:
38. Какой порядковый номер последнего элемента массива, размер массива 19?
40. Какой стандартный код используется для Символьных данных типа char в С++?
41. Укажите зарезервированное ключевое слово для динамического выделения памяти!
43. Допустим, у нас есть код
И в массив arr мы попытались записать следующий набор символов Hello World. Что в действительности будет содержать массив arr?
44. Объявлена переменная char a; Какое из следующих выражений не верно? (a = 3, a = "3", a = ‘3’)
45. В какой из следующих строк выполняется обращение к седьмому элементу массива, размер массива равен 10? (mas[7], mas[6], mas, mas(7))
46. Чем заканчивается строка в C++
47. Укажите корректное определение строковой переменной (string[20] mystr, string mystr[20], char mystr[20], string mystr)
48. В каком из вариантов ответов объявлен двумерный массив? (int array[20, 20], array anarray[20][20], int anarray[20][20], char array[20])
49. Словосочетание "Hello world!" может быть сохранено в символьном массиве размером n элементов. Укажите чему равно n?
50. Какой заголовочный файл С++ содержит инструкции файлового ввода/вывода?
51. Какие существуют правила для написания имен переменных на языке С++?
52. Как написать следующее выражение "Переменной a присвоено значение b"?
53. Оператор инкрементации (x=x+1) эквивалентен…
54. Каким будет результат вычисления участка программы, написанной на языке C++ 6%3?
55. Как на языке C++ будет записано действие: "больше или равно"?
56. Как на языке C++ будет записано действие: "не равно"?
57. Какой логический оператор будет соответствовать действию: "и"?
58. Выберите вариант ответа, в котором оператор записан не верно? 1) if (x==1) y=1; else y=2; 2) if x=1 then y=1 else y=2 3) IF (x=1) y=1; ELSE y=2; 4)Нет верного ответа
Оператор присваивания. Запись значения в переменную на Си
Как Вы помните, переменные нужны чтобы хранить в них какие-то данные. Разберёмся как использовать переменные по их прямому назначению. Основной вопрос такой: «Как сохранить значение в переменной». Или вспоминая аналогию с коробкой «Как положить что-то в коробку?»
Ответ прост. Для этого существует специальный оператор, который называется оператором присваивания и обозначается символом равно » code-left»>
Листинг 1. Присваивание значения переменной
В примере выше показаны два способа присвоить значение переменной. В первом случае мы сначала создаём переменную, а потом записываем в неё значение, а во втором случае мы сразу создаём переменную и присваиваем ей значение.
Второй вариант записи короче, но делает в то же самое, что и первый. Берёт значение, которое записано справа от знака равно, и сохраняет его в переменную, которая записана слева от от него.
Не забывайте ставить после очередной команды точку с запятой.
Есть несколько важных моментов на которых надо отдельно заострить внимание:
- в некоторых языках программирования, после того как вы создали переменную, в ней сразу же хранится значение нуль. В языке Си это не так. Пока переменной не присвоено какое-нибудь значение, в ней будет храниться «мусор». Как этот мусор выглядит мы посмотрим на следующем уроке.
- справа от знака равно НЕ обязательно должно быть записано какое-то конкретное число, там может быть записано арифметическое выражение или имя переменной.
Остановимся на втором пункте подробнее. Чтобы лучше разобраться давайте обратимся к примерам.
Если справа от знака равно записано выражение, то сначала вычисляется его значение и уже оно сохраняется в переменную, которая записана слева от =.
Когда переменной присваивается значение, то то, что хранилось в ней до этого удаляется.
Обратите внимание, новое значение не добавляется к старому, а полностью заменяет его. Я как-то говорил, что переменные похожи на коробки, но только на первый взгляд. Теперь мы видим, что наша аналогия с коробкой не совсем точная. Если бы в коробке лежало десять шариков, и мы бы туда положили ещё пять, то их стало бы 15.
В выражении справа от знака равенства могут использоваться другие переменные, которые объявлены ранее. Вместо них в выражение подставляются значения, которые в них хранятся в данный момент.
При вычислении выражения n — 3, n равняется 5. Это потому, что исходное значение 10, заданное при инициализации, мы в программе изменяли. А при вычислениях используется текущее значение переменной.
В выражении справа от знака равенства может быть использована сама переменная.
Кажется, что это какой-то порочный круг, но на самом деле проблем здесь не возникнет. Т.к. сначала вычисляется выражение справа, а только потом происходит присваивание. По аналогии с предыдущим примером при вычислении значения справа от знака равно вместо переменной n будет подставлено её текущее значение, т.е. 10. Потом будет произведено сложение и присваивание.
Ещё один поучительный пример.
Если Вы подумали что 5, то это неправильно. Никто не знает, что в ней будет записано. Т.к. неизвестно, что было записано в переменной z. Ещё раз напоминаю, что если переменной не присвоено никакое значение, в ней хранится не нуль, а неизвестно что.
Выражение справа от знака равно может быть достаточно сложным, оно не обязательно будет состоять из одного действия.
Теперь ещё один важный момент, который надо понимать. Когда я рассказывал о типах данных, я говорил, что в переменной можно хранить значения только того же типа, что и тип переменной. Например, в переменную целого типа нельзя положить вещественное число. Этот принцип применяется и с выражениями. Чтобы программа работала корректно, необходимо, чтобы тип выражения или переменной справа от знака присваивания совпадал с типом переменной.
Посмотрим несколько примеров.
Внимание на последнюю строчку! Хотя справа выражение целого типа, а слева вещественная переменная, данная команда всё равно будет работать так, как надо. Это из-за того, что все целые числа можно записать как вещественные, у которых дробная часть равна нулю. Подобная штука называется неявное приведение (преобразование) типов . С этой возможностью надо быть очень осторожным, т.к. компилятор не отслеживает такие ошибки. Другими словами программа будет скомпилирована, но работать будет неправильно. Мы ещё вернёмся к этому в следующем уроке, когда научимся выводить значение переменных на экран компьютера.
Сохрани в закладки или поддержи проект.
Практика
Решите предложенные задачи. Для удобства работы сразу переходите в полноэкранный режим
основы алгоритмизации и программирования тест. оап тест. Программа передаёт управление в случае, если значение переменной или выражения оператора switch не совпадает ни с одним константным выражением
3 какой служебный знак ставится после оператора case?
4 какому зарезервированному слову программа передаёт управление в случае, если значение переменной или выражения оператора switch ни с одним константным выражением?
5 укажите правильное объявление массива.
7 какое значение, по умолчанию, возвращает программа операционной системе в случае успешного завершения (return)?
8 процесс компиляции программы.
переводит исходный текст в исполняемый файл
9 чем метод пузырька отчается от шейкера?
метод шейкера позволяет сортировать массив в двух направлениях (и слева на право и справа на лево)
10 чему будет равна переменная а, после выполнения этого кода int a; for(a=0; a « “ ” « « endl;
26 Какое из следующих значений эквивалентно зарезервированному слову true?