Меню сайта
Наш опрос
Оцените мой сайт
Всего ответов: 5
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2014 » Июль » 22 » Занятие №20. Некоторые особенности цикла for. Оператор последовательного вычисления.
15:58
Занятие №20. Некоторые особенности цикла for. Оператор последовательного вычисления.
Добрый день, друзья. Выдалась свободная минутка, решил написать небольшой пост, по мотивам уже заданных мне ранее вопросов. Быть может кому-то эти советы, тоже будут полезны. Итак, сегодня займемся циклами.Рассмотрим цикл for().Как вы уже знаете, синтаксис  этой конструкции имеет следующий вид:for(инициализация счетчика; условие; изменение счетчика)    операторКроме того, мы помним, что после цикла всегда стоит один оператор, но если нам необходимо в теле цикла выполнить несколько действий, то мы можем использовать составной оператор {}. Все что заключено в фигурные скобки, будет считаться за один единственный оператор.Если вы еще не забыли, а это не мудрено с моей-то частотой выпуска занятий, то последнем уроке мы изучали двойные массивы. Одной из типичных задач является вывод массива размерности [N][M] на экран в виде таблицы (или матрицы) в N-строк и M столбцов. Для этой задачи очень крайне удобно использовать два вложенных цикла for. Например:Листинг 1.#include <stdio.h>#include <stdlib.h>#define N 10 #define M 8int main(void){    int arr[N][M];        for (int printf("%d\t",arr[i][j]);    return (0);}Но если мы оставим этот код таким, то массив будет выводиться не табличкой, а строчкой. Нужно добавить еще переход на новую строку, после того, как мы закончили выводить все элементы текущей. Ну т.е. после каждого внутреннего цикла for нужно перенести строку. Исправим.Листинг 2.#include <stdio.h>#include <stdlib.h>#define N 10 #define M 8int main(void){    int arr[N][M];        for (int printf("%d\t",arr[i][j]);        printf("\n");    }return (0);}Вот так уже лучше. Так, наша программа будет выводить все так, как нужно. Вот, посмотрите на следующую картинку.Рис.1. Результат работы программы.А теперь поговорим о красоте. Этот вот дополнительный перенос строки , он как шило в заднице. Из-за него одного пришлось добавить составной оператор. Некрасиво получилось. Есть ли способ этого избежать. Да, есть! Я вам раньше не говорил, а теперь скажу. В заголовке цикла for на месте инициализации счетчика и на месте изменения счетчика, могут стоять не одна, а сразу несколько инструкций. Чтобы их туда записать нужно использовать еще один оператор, оператор последовательного выполнения – ,.  Да-да, просто запятая.  Как это может помочь нам. Да вот как. Смотрите, мы добавляем перенос, на каждой новой итерации внешнего цикла, вот и добавим наш printf в блок изменение счетчика. Листинг 3.#include <stdio.h>#include <stdlib.h>#define N 10 #define M 8int main(void){    int arr[N][M];        for (int \n"))        for (int printf("%d\t",arr[i][j]);        return (0);}На экране мы изменений не увидим, а код стал меньше и приятнее. ) Вот видите, как может помочь оператор последовательного выполнения. Кстати, обратите внимание, если мы пишем инструкции внутри заголовка цикла, мы не ставим там дополнительных ;. Они там не нужны. Рассмотрим один показательный пример. Используем для вывода двойного массива на экран  один цикл for. Это будет выглядеть например так:Листинг 4:#include <stdio.h>#include <stdlib.h>#define N 10 #define M 8int main(void){    int arr[N][M];        for (int %d\t",arr[i][j]);        if \n");           i++;           %d\t",arr[i][j]);        if \n");           j++;           i присвоить 0;          }     } return (0);}И если вы думаете, что такой код не будет работать, то вы ошибаетесь.  Хотя, конечно это все для забавы, и писать что-то серьезное так не следует. Но кому стало интересно - погуглите и найдете что-нибудь интересное для себя.На сегодня всё. Удачи вам и красивого кода. ))
Просмотров: 161 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Форма входа
Календарь
«  Июль 2014  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей