Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Функция с переменным числом параметров, аналогичная функции printf




Пример

Endif

Условная компиляция

Условная компиляция обеспечивается в языке С++ набором команд, которые, по существу, управляют не компиляцией, а препроцессорной обработкой. Эти директивы позволяют исключить из процесса компиляции какие-либо части исходного файла посредством проверки условий.

 

#if <константное выражение>

[ <текст> ]

[ #elif <константное выражение>

[ <текст> ]]

...

[ #else

[ <текст> ]]

Каждой директиве #if в том же исходном файле должна соответствовать завершающая её директива #endif. Между директивами #if и #endif допускается произвольное количество директив #elif и не более одной директивы #else. Если директива #else присутствует, то между ней и директивой #endif на данном уровне вложенности не должно быть других директив #elif.

Препроцессор выбирает участок текста для обработки на основе вычисления константного выражения, следующего за каждой директивой #if и #elif. Выбирается текст, следующий за константным выражением со значением «истина». Если ни одно ограниченное константное выражение не истинно, то препроцессор выбирает текст, следующий за директивой #else. Если же директива #else отсутствует, то никакой текст не выбирается.

Константное выражение может содержать препроцессорную операцию defined (<идентификатор>). Эта операция возвращает истинное значение, если заданный идентификатор в данный момент определён, в противном случае выражение ложно.

#if (sizeof(void *) == 2) #define SDATA #else #define LDATA #endif   #if defined(CREDIT) credit(); #elif defined(DEBIT) debit(); #else printerror(); #endif

Программа поиска корня уравнения f (x) = 0 на отрезке [ a; b ] с заданной точностью
методом деления отрезка пополам

Первый вариант – обычный способ

#include <stdio.h>   #include <math.h>   void main() { double a, b, e, x, c, fa, fc; int n;   printf("Введите границы отрезка и точность: "); scanf("%lf%lf%lf", &a, &b, &e); for (n = 0; fabs(a - b) > e; n++)     { c = (a + b) / 2; fa = f(a); fc = f(c); if (fa * fc < 0) b = c; else a = c; } x = (a + b) / 2; printf("Корень уравнения = %lf\nЧисло итераций = %d\n", x, n); } // Включаем заголовочные файлы, // содержащие прототипы функций ввода/вывода // и математических функций (для fabs)     // Объявления переменных     // Приглашение для пользователя // Ввод исходных данных // В заголовок цикла for включаем инициализацию переменной n, // её увеличение на 1, т.к. оно безусловно выполняется // на каждом шаге цикла, и проверку условия цикла // Т.к. в теле цикла должно быть более одного оператора, // а по синтаксису возможен только один, // операторы, составляющие тело цикла, // объединяются в один с помощью операторных скобок {...}

Второй вариант – как на Паскале

#include <stdio.h> #include <math.h>   void main() { double a, b, e, x, c, fa, fc; int n;   printf("Введите границы отрезка и точность: "); scanf("%lf%lf%lf", &a, &b, &e); n = 0; while (fabs(a - b) > e) { c = (a + b) / 2; fa = f(a); fc = f(c); if (fa * fc < 0) b = c; else a = c; n++; } x = (a + b) / 2; printf("Корень уравнения = %lf\nЧисло итераций = %d\n", x, n); }

Третий вариант – весь алгоритм помещен в заголовок цикла for

#include <stdio.h> #include <math.h>   void main() { double a, b, e, x, c, fa, fc; int n;   printf("Введите границы отрезка и точность: "); scanf("%lf%lf%lf", &a, &b, &e); for (n = 0; fabs(a - b) > e; c = (a + b) / 2, fa = f(a), fc = f(c), fa * fc < 0? b = c: a = c, n++);     x = (a + b) / 2; printf("Корень уравнения = %lf\nЧисло итераций = %d\n", x, n); }   // Для объединения нескольких операторов // в выражении приращения цикла for используется // операция последовательного вычисления
#include <stdio.h> #include <stdarg.h>   void print(char *format,...);   void main() { int a = 45, b = 87; double f = 2.75;   print("dfd", a, f, b); }   void print(char * format,...) { va_list list; int n, i; double f;   va_start(list, format); for (i = 0; format[i]; i++) switch(format[i]) { case 'd': n = va_arg(list, int); printf("%d\n", n); break; case 'f': f = va_arg(list, double); printf("%lf\n", f); break; } va_end(list); }   // Переменная для работы со списком аргументов   // Инициализация указателя на список аргументов   // Выбираем очередной параметр   // Выбираем очередной параметр   // Сброс указателя на список аргументов в NULL

 




Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 328; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.