|
Программирование >> Процедурные приложения
cin >> year; fout << \n Календарь на << year << год ; if(!(year % 4) && (year % 100) !(year % 400) leap year flag = true; else leap year flag = false; for(month = 1; month <= 12;month++) { switch(month) { case 1: cout << \n\n\n Январь\n ; num days per month = 31; break; case 2: cout << \n\n\n Февраль\n ; num days per month = leap year flag ? 29 : 28; break; case 3: cout << \n\n\n Март\n ; num days per month = 31;. break; case 4: cout << \n\n\n Апрель\n ; num days per month =30; break; case 5: cout << \n\n\n Май\n ; num days per month =31; break; case 6: cout << \n\n\n Июнь\п ; num days per month = 30; break; case 7: cout << \n\n\n Июль\п ; num days per month = 31; break; case 8: cout << \n\n\n Август\п ; num days per month = 31; break; case 9: cout << \n\n\n Сентябрь\n ; num days per month =30; break; case 10: cout << \n\n\n Октябрь\n ; num days per month = 31; break; case 11: cout << \n\n\n Ноябрь\n ; num days per month = 30; break; case 12: cout << \n\n\n Декабрь\n ; num days per month =31; break; fout << \пПон Вто Сре Чет Пят Суб Вос\п ; fout << --- --- --- --- --- --- --- \n ; for (date = 1; date < jan l start day*4; date++) fout << ; for (date = 1; date <= num days per month; date++) { fout.width.(3) ; fout << date; if ((date+ jan l start day) % 7 > 0) fout << ; else fout << \n ; } jan l start day = (jan l start day + num days per month) % 7; fout.close () ; return (0); Программа начинает свою работу с того, что предлагает пользователю указать день недели, на который приходится 1-е января (0 соответствует понедельнику, 1 - вторнику и т.д.) Далее программа просит указать год, для которого вы. хотите построить календарь. Введенное значение отображается в виде заголовка календаря и сохраняется в переменной year. Выполнив ряд проверок, программа определяет, является ли введенный год високосным или нет, и сохраняет результат в переменной leap year flag (високосным является год, номер которого делится на 4, но не делится на 100, а также год, номер которого делится на 400). Затем запускается цикл for, выполняющийся 12 раз - по одному разу для каждого месяца. Сначала выводится название месяца, а в переменную num days per month записывается количество дней в данном месяце. Это осуществляется в блоке switch/case, состоящем из 12-ти ветвей. Вслед за этим отображаются заголовки дней недели и в отдельной строке - ряд пробелов, чтобы начать выводить числа с того дня, на который приходится 1-е число данного месяца. В последнем цикле for выводятся собственно номера дней месяца. В последней строке внешнего цикла for вычисляется порядковый номер дня недели первого числа следующего месяца. Совместное использование конструкций if/else/if и switch/case В следующем примере выполняется преобразование имеющегося значения длины в футах в значение другой системы измерений: * ifelsw.c * В этой программе на языке С демонстрируется использование * конструкции if /else/if в сочетании с конструкцией switch/ case. #include <stdio.h> enum conversion type {YARDS, INCHES, CENTIMETERS, METERS} C Tconversion; int main() int iuser response; float fmeasurement, ffoot; printf( \nВведите значение длины в футах: ); scanf( %f ,&ffoot) ; printf( \nВозможные единицы измерений: \ \n\t\t0 - ЯРДЫ \ \n\t\t1 - ДЮЙМЫ \ \n\t\t2 - САНТИМЕТРЫ \ \n\t\t3 - МЕТРЫ \ \n\n\t\tBam выбор - >> ); scanf( %d ,&iuser response) ; switch (iuser response) ( case 0 : C Tconversion = YARDS; break; case 1 : C Tconversion = INCHES; break; case 2 : C Tconversion = CENTIMETERS; break; default : C Tconversion = METERS; if (C Tconversion == YARDS) fmeasurement = ffoot/3; else if (C Tconversion == INCHES) fmeasurement = ffoot * 12; else if (C Tconversion == CENTIMETERS) fmeasurement = ffoot * 30.48; else fmeasurement = ffoot * 30.48/100; switch (C Tconversion) { case YARDS : printf( \n\t\t%4.2f ярдов , fmeasurement); break; case INCHES : printf( \n\t\t%4.2f дюймов , fmeasurement); break; case CENTIMETERS : printf( \n\t\t%4.2f сантиметров , fmeasurement) ; break; default : printf( \n\t\t%4.2f метров , fmeasurement); } return (0); В данном примере константы единиц измерений представлены перечислением conversion type. (Подробнее о перечислениях см. в главе Дополнительные типы данных .) Первый блок switch/case предназначен для того, чтобы на основании введенного пользователем значения проинициализировать переменную C Tconversion типа conversion type. Затем в блоке вложенных инструкций if/else/if выполняется соответствующее преобразование. Наконец, в последнем блоке switch/case полученное значение выводится на экран. Циклы В языках С и C++ используются стандартные циклические инструкции: for, while и do/while(в некоторых языках программирования высокого уровня последняя называется repeat/until). Особенностью этих языков является то, что они располагают средствами прерывания циклов. Обычно цикл продолжается до тех пор, пока не выполнится некоторое условие, заданное при инициализации цикла. Но в C/C++ цикл можно прервать после обнаружения ожидаемой ошибки или по другой причине с помощью инструкции break. Кроме того, допускается принудительный переход на следующую итерацию цикла с помощью инструкции continue. Отличие цикла for от циклов while и do/while состоит в том, что в нем, как правило, число повторений заранее известно. Таким образом, цикл for обычно используется в тех случаях, когда можно точно определить необходимое количество повторов. Циклы while и do/while применяются, когда число повторений неизвестно, но имеется некоторое условие, которое необходимо выполнить. Цикл for Цикл for имеет следующий синтаксис: for(инициализирующее выражение;. условное выражение; модифицирующее выражение) выражение; При обнаружении в программе цикла for первым выполняется инициализирующее выражение, в котором обычно устанавливается счетчик цикла. Это происходит только один раз перед запуском цикла. Затем анализируется условное выражение, которое также называется условием прекращения цикла. Пока оно равно true, цикл не прекращается. Каждый раз после всех строк тела цикла выполняется модифицирующее выражение, в котором происходит
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |