//2.使用可变参数,实现函数,求函数参数的平均值。 #include<stdio.h> #include<windows.h> #include<stdarg.h> int average(int n, ...) { va_list arg;//函数声明了一个arg的变量,它用于访问参数列表的未确定部分,这个变量通过下面的va_start来初始化 int count = 0; int sum = 0; //准备访问可变参数 va_start(arg, n);//va_start的第一个参数是va_list变量的名字,第二个参数是省略号前最后一个有名字的参数, //初始化过程将arg变量设置为指向可变参数部分的第一个参数 //添加取自可变参数列表的值 for (count = 0; count < n; count++) { sum += va_arg(arg, int);//va_arg用来访问参数,这个宏接受两个参数:va_list变量和参数列表中下一个参数的类型, //va_arg返回这个参数的值,并使arg指向下一个可变参数 } //完成处理可变函数 va_end(arg); return sum / n; } int main() { int a = 5; int b = 8; int c = 12; int avg1 = average(2, a, b); int avg2 = average(3, a, b, c); printf("avg1=%d\n", avg1); printf("avg2=%d\n", avg2); system("pause"); return 0; }
//3.使用可变参数,实现函数,求函数参数的最大值。 #include<stdio.h> #include<windows.h> #include<stdarg.h> int average(int n, ...) { va_list arg;//函数声明了一个arg的变量,它用于访问参数列表的未确定部分,这个变量通过下面的va_start来初始化 int count = 0; int max=0; //准备访问可变参数 va_start(arg, n);//va_start的第一个参数是va_list变量的名字,第二个参数是省略号前最后一个有名字的参数, //初始化过程将arg变量设置为指向可变参数部分的第一个参数 //添加取自可变参数列表的值 for (count = 0; count < n; count++) { int ret= va_arg(arg, int);//va_arg用来访问参数,这个宏接受两个参数:va_list变量和参数列表中下一个参数的类型, //va_arg返回这个参数的值,并使arg指向下一个可变参数 if (ret >= max) { max = ret; } } //完成处理可变函数 va_end(arg); return max; } int main() { int a = 5; int b = 8; int c = 12; int avg1 = average(2, a, b); int avg2 = average(3, a, b, c); printf("avg1=%d\n", avg1); printf("avg2=%d\n", avg2); system("pause"); return 0; }
//4:4.1.模拟实现printf函数,可完成下面的功能 // //能完成下面函数的调用。 //print("s ccc d.\n","hello",'b','i','t',100); //函数原型: //print(char *format, ...) // #include<stdio.h> #include<windows.h> #include<stdlib.h> #include <string.h> #include <assert.h> #include<stdarg.h> void print( const char *format, ...) { va_list arg;//函数声明了一个arg的变量,它用于访问参数列表的未确定部分,这个变量通过下面的va_start来初始化 //准备访问可变参数 int count = 0; char *p = 0; va_start(arg, format);//va_start的第一个参数是va_list变量的名字,第二个参数是省略号前最后一个有名字的参数, //初始化过程将arg变量设置为指向可变参数部分的第一个参数 //添加取自可变参数列表的值 while(*format!='\0') { if (*format == 's') { p=(va_arg(arg, char*));//va_arg用来访问参数,这个宏接受两个参数:va_list变量和参数列表中下一个参数的类型, //va_arg返回这个参数的值,并使arg指向下一个可变参数 printf("%s",p); } else if (*format == 'c') { p=(va_arg(arg, char*)); printf("%c", p); } else if (*format == 'd') { int d = va_arg(arg, int); printf("%d", d); } format++; } //完成处理可变函数 va_end(arg); } int main() { print("s ccc d.\n", "hello", 'b', 'i', 't',100); system("pause"); return 0; }