Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на языке Си. Учебное пособие для СПО

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
Функцию только с необъявленными параметрами, в принципе,
определить можно, но выбрать параметры будет затруднительно, т. к.
макроопределения для работы с необъявленными параметрами используют имя
последнего объявленного формального параметра.
Внутри функции программист сам отвечает за выбор из стека
дополнительных параметров. Для работы с ними используются макроопределения va_arg, va_start и va_end, определённые в файле stdarg.h.
Примеры
#include <stdio.h> #include <conio.h> #include <stdarg.h> void print(char *format, ...); int main() { int a = 45, b = 65; double f = 2.75; print("dfc", a, f, b); } void print(char * format, ...) { va_list ar; int n, i; double f; va_start(ar, format); for (i = 0; format[i]; i++) switch(format[i]) { case 'd': n = va_arg(ar, int); printf("%d\n", n); break; case 'f': f = va_arg(ar, double); printf("%lf\n", f); break; case 'c': n = va_arg(ar, int); printf("%c\n", n); break; } va_end(ar); }
#include <stdio.h> #include <stdlib.h> #include <stdarg.h> /*складывается k аргументов */ int sum1(int k,...) { va_list ar; int s = 0; va_start( ar, k ); while( k-- > 0 ) s += va_arg( ar, int ); va_end(ar); return s; }
101
/* складывается до 0 */ int sum2(int arg,...) { va_list ar; int s = arg; int n; va_start( ar, arg ); while( n = va_arg( ar, int ) ) s += n; va_end(ar); return s; }
int main(int argc, char *argv[]) { int s1 = sum1( 10/*кол*/, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ); int s2 = sum2( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0/*конец*/ ); printf( "s1 = %d; s2 = %d;\n", s1, s2 ); return 0; }
Условные макрокоманды и макрокоманды с параметром
Макроопределение с параметром – может использоваться как замена функции.
#define max(a,b) ((a)>(b)?(a):(b)) cout<<max(x,y)<<endl;
Никаких вычислений не происходит, только подстановка.
Условные макроопределения #if, #else, #elif #endif #ifdef #ifndef
позволяют компилировать программу выборочно, в зависимости от некоторых
условий.
#define N_LAB 1
main() { #if N_LAB == 1 puts(“lab1”); …. #elif N_LAB== 2 puts(“lab2”); ….
102
#else …. #endif }
Пример
#define NAME "a.txt" int main(){ #ifdef NAME char name[]=NAME; #else char name[80]; cin>>name; #endif cout<<name<<endl; }
пример
#define _VER_ "ver 1.0" #define ZADANIE 1 #define pr(x) printf("rez = %6.3f\n",x) #define N 11
float m[N];
main(){ #ifdef _VER_ printf("%s\n",_VER_); #endif for(int i=0; i<N; i++) m[i]=0.31415*i; #if ZADANIE==1 puts("ZADANIE 1"); for(int i=0; i<N; i++) pr(sin(m[i])); #elif ZADANIE==2 puts("ZADANIE 2"); for(int i=0; i<N; i++) pr(cos(m[i])); #else puts("invalid number task"); #endif }
103
Контрольные вопросы
Для чего используется перегрузка функций? Что такое шаблон функции? Для чего используются макроопределения с параметром и условное
макроопределение?
Для чего используются указатели на функцию? Что такое Array и Vector?
104
ЛИТЕРАТУРА
1. Поляков, А. Ю. Программирование : практикум / А. Ю. Поляков, А. Ю. Полякова, Е. Н. Перышкова. — Новосибирск : Сибирский государственный университет телекоммуникаций и информатики,
2015. — 55 c. — Текст : электронный // Цифровой образовательный ресурс IPR SMART : [сайт]. — URL: https://www.iprbookshop.ru/
55494.html.
2. Перцев, И. В. Лабораторный практикум по дисциплине «Программи­рование» / И. В. Перцев ; Сиб. гос. ун-т телекоммуникаций и информатики. — Новосибирск : СибГУТИ, 2017. — 37 с.
3. Баженова, И. Ю. Введение в программирование : учебное пособие / И. Ю. Баженова, В. А. Сухомлин. — 3-е изд. — Москва : Интернет­Университет Информационных Технологий (ИНТУИТ), Ай Пи Ар Медиа, 2020. — 326 c. — ISBN 978-5-4497-0652-2. — Текст : электронный // Цифровой образовательный ресурс IPR SMART : [сайт]. — URL: https://www.iprbookshop.ru/97539.html.
4. Борисенко, В. В. Основы программирования : учебное пособие / В. В. Борисенко. — 3-е изд. — Москва : Интернет-Университет Информационных Технологий (ИНТУИТ), Ай Пи Ар Медиа, 2020. — 322 c. — ISBN 978-5-4497-0678-2. — Текст : электронный // Цифровой образовательный ресурс IPR SMART : [сайт]. — URL: https://www.iprbookshop.ru/97568.html.
5. Устинов, В. В. Основы алгоритмизации и программирование. Часть 2 : конспект лекций / В. В. Устинов. — Новосибирск : Новосибирский государственный технический университет, 2013. — 32 c. — ISBN 978-5-7782-2337-0. — Текст : электронный // Цифровой образовательный ресурс IPR SMART : [сайт]. — URL: https:// www.iprbookshop.ru/44675.html.
105
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]