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

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

.pdf
Скачиваний:
1
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
101
Функцию только с необъявленными параметрами, в принципе,
определить можно, но выбрать параметры будет затруднительно, т. к.
макроопределения для работы с необъявленными параметрами используют имя
последнего объявленного формального параметра.
Внутри функции программист сам отвечает за выбор из стека
дополнительных параметров. Для работы с ними используются макроопределения 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; }
102
/* складывается до 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”); ….
103
#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 }
104
Контрольные вопросы
Для чего используется перегрузка функций? Что такое шаблон функции? Для чего используются макроопределения с параметром и условное
макроопределение?
Для чего используются указатели на функцию? Что такое Array и Vector?
105
ЛИТЕРАТУРА
1. Поляков А.Ю. Программирование [Электронный ресурс]:
практикум/ Поляков А.Ю., Полякова А.Ю., Перышкова Е.Н. – Электрон. текстовые данные. – Новосибирск: Сибирский
государственный университет телекоммуникаций и информатики,
2015. – 55 c. – Режим доступа: http://www.iprbookshop.ru/55494.– ЭБС «IPRbooks».
2. Перцев И.В. Лабораторный практикум по дисциплине
«Программирование» / И. В. Перцев ; Сиб. гос. ун-т телекоммуникаций и информатики. - Новосибирск : СибГУТИ,
2017. - 37 с.
3. Баженова И.Ю. Введение в программирование [Электронный
ресурс]: учебное пособие/ Баженова И.Ю., Сухомлин В.А.– Электрон. текстовые данные. – М.: БИНОМ. Лаборатория знаний, Интернет-Университет Информационных Технологий (ИНТУИТ),
2007. – 326 c. – Режим доступа: http://www.iprbookshop.ru/22400.– ЭБС «IPRbooks».
4. Борисенко В.В. Основы программирования [Электронный ресурс]/
Борисенко В.В. – Электрон. текстовые данные. – М.: Интернет­Университет Информационных Технологий (ИНТУИТ), 2016. – 323 c. – Режим доступа: http://www.iprbookshop.ru/52206. – ЭБС «IPRbooks».
5. Устинов В.В. Основы алгоритмизации и программирование. Часть
2 [Электронный ресурс]: конспект лекций/ Устинов В.В.– Электрон. текстовые данные. – Новосибирск: Новосибирский государственный технический университет, 2013. – 32 c. – Режим доступа: http://www.iprbookshop.ru/44675. – ЭБС «IPRbooks».
106
Учебное издание
Перцев Игорь Владимирович
Программирование на языке Си
Корректор И.Л. Гончарова
Подписано в печать 15.03.2022, заказ № 133
п. л. 6,3, 106 стр., электронная версия – 1,22 Мб
Отдел рекламы и PR СибГУТИ
630102, г. Новосибирск, ул. Кирова, 86, офис 105
тел. (383) 269-83-56
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]