1. 程式人生 > >使用可變引數,實現函式,求函式引數的平均值和最大值

使用可變引數,實現函式,求函式引數的平均值和最大值

利用可變引數列表:可變引數列表是通過巨集來實現的,這些巨集定義在stdarg.h中。

值得注意的是:可變引數列表傳參時,第一個傳的引數的個數。

步驟:

1.定義一個va_list型別的變數 arg

2.巨集va_start(arg,num)---這個巨集有兩個引數,第一個引數為va_list型別的變數,第二個引數為可變引數列表之前的引數。作用就是使得 va_list 的變數指向可變引數列表的首地址。這才是一般意義上的對 va_list的初始化。

3.巨集va_arg(arg,int) ---第一個引數為va_list型別的變數第二個為引數的型別。

4.巨集va_end(arg)---結束標誌


使用可變引數,實現函式,求函式引數的平均值

程式碼如下:

#include<stdio.h>  
#include<stdlib.h>  
#include <stdarg.h>   
int average(int num, ...)//第一個引數傳的是引數的個數,後面三個點代表可變引數列表  
{
	int sum = 0;
	va_list arg;  //定義一個va_list型別的變數  
	va_start(arg, num); //巨集 va_start  
	for (int i = 0; i < num; i++)
	{
		sum += va_arg(arg, int);  //巨集 va_arg  
	}
	va_end(arg); //巨集 va_end  
	return sum / num;
}

int main()
{
	int aver = 0;
	aver = average(5,2,4,6,8,10); //第一引數為個數,之後的數為被平均的數  
	printf("%d\n", aver);
	system("pause");
	return 0;
}
使用可變引數,實現函式,求函式引數的最大值

程式碼如下:

#include <stdio.h>
#include <stdarg.h>
#include <windows.h>
int Max(int n, ...)
{
	int i = 0;
	int max = 0;
	va_list arg;
	va_start(arg, n);
	for (i = 0; i < n; i++)
	{
		int val = va_arg(arg, int);
		if (val > max)
		{
			max = val;
		}
	}
	va_end(arg);
	return max;
}
int main()
{
	int ret = Max(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
	printf("%d\n", ret);
	system("pause");
	return 0;
}


相關推薦

使用可變引數實現函式函式引數平均值

利用可變引數列表:可變引數列表是通過巨集來實現的,這些巨集定義在stdarg.h中。 值得注意的是:可變引數列表傳參時,第一個傳的引數的個數。 步驟: 1.定義一個va_list型別的變數

[c語言] 呼叫函式實現兩個數中的

#include<stdio.h>int max(int x, int y){int max = 0;if (x < y){max = y;}else{max = x;}return

數組裏面

for http urn ret p s es2017 n) 要求 console 有些時候,我們需要求出一個數組裏面的最大值,最小值。 先說最大值: //求數組裏面的最大值 let arr=[2,5,8,9,3,50,1]; function

作業三——左部分中的減去右部分的絕對值是多少

給定一個長度為N(N>1)的整型陣列A,可以將A劃分成左右兩個部分,左部分A[0..K],右部分A[K+1..N-1],K可以取值的範圍是[0,N-2]。求這麼多劃分方案中,左部分中的最大值減去右部分最大值的絕對值,最大是多少? 給定整數陣列A和陣列的大小n,請返回題目所求的答案。 測

使用線段樹陣列各區間的

輸入 :第一行輸入n(陣列內元素的個數);第二行 n個數(陣列內的元素);之後每行兩個數x,y(所詢問區間)。 輸出 :分別輸出詢問區間內的最大值,最小值,和。 #include<iostream> #include<algorithm> #inc

poj 1050_To the max(需要轉換思維一個欄位問題)

分析:  對於此題,首先可以想到的有字首和,這個題的關鍵也是字首和,但是怎麼設計這個字首和是一個好問題。           通常我們所用的字首和大多都是在一維陣列上,可以通過一維陣列中的字首和來求得在一維陣列上求一個欄位,且使欄位的和最大這個問題。推廣到二維陣列,二維陣列

任意多個數的(利用可變引數列表)

可變引數列表是通過巨集來實現的,這些巨集定義於stdarg.h標頭檔案中。這個標頭檔案聲明瞭一個型別va_list和三個巨集va_start,va_arg,va_end.我們可以宣告一個型別為va_list的變數與這幾個巨集配合使用,訪問引數的值。

一個數組中函式的下標值

#include <stdio.h> int maxElement(array[] ,int n) {  int i=0,n=0,t=array[0];//將下標為0的值賦值給t  for(i=0;i<n;i++)//控制迴圈  {  if(t<ar

Java程式設計:定義一個int型的一維陣列包含10個元素分別賦一些隨機整數然後出所有元素的平均值並輸出出來。

public class Program1 {/**1.定義一個int型的一維陣列,包含10個元素,分別賦一些隨機整數,然後求出所有元素的最大值,最小值,平均值,和值,並輸出出來。*/public static void main(String[] args) { int[

C#--輸入10個數存入陣列中這10個數的和平均值。

輸入10個數存入陣列中,求這10個數的最大值、最小值和平均值。 using System; using System.Collections.Generic; using System.Linq; u

c語言利用指標一組數的平均值

最近一直在學演算法,c語言的指標在演算法中用的不多,所以就沒怎麼學,直到後來幫我同學做課程設計的時候,才學了一段時間,為了防止過段時間忘了指標,所以就把課程設計儲存下來,以後忘了還可以看看這個回憶一下指標。 #include <stdio.h> int mai

將一個整數拆分為幾個數的這幾個數的

#coding=utf-8 import pdb def split_int( num ):     #pdb.set_trace()     if num < 2:         result = 0     elif num == 2:         resul

請使用迭代查詢一個list中並返回一個tuple

自己寫個小程式玩,程式碼實現:   def findMinAndMax(L): if len(L) == 0: return (None, None) else: mi = L[0] ma = L[0] f

使用迭代查詢一個list中並返回一個tuple。

Numbuer = [5,8,109,87,99,33,24,77] def findMinAndMax(Numbuer):   if Numbuer !=[]:     min = Numbuer[0]     max = Numbuer[0]   for x in Numbuer:     if max

請使用迭代查詢一個list中並返回一個tuple(Python)

from collections import Iterable, Iterator def g(): yield 1 yield 2 yield 3 print('Iterable? [1, 2, 3]:', isinstance(

Python:lambda表示式實現兩個變數的

lambda 表示式(又稱匿名函式)   作用:     建立一個匿名函式物件     同def 類似,但不提供函式名   格式:     lambda [引數1,引數2,.....]: 表示式(預設只能寫一個)   說明:     1.lambda 只是一個表示式,它用

python3_請使用迭代查詢一個list中並返回一個tuple:

請使用迭代查詢一個list中最小和最大值,並返回一個tuple: 在Pycharm以下程式碼執行成功: def findMinAndMax(L):     if L!=[]:        

筆試題&面試題:給定n個數要求比較次數1.5n同時找出

寫出一個演算法,對給定的n個數的序列,返回序列中的最大和最小的數. 設計出一個演算法,只需要執行1.5n次比較就能找到序列中最大和最小的數嗎?能否再少?分析:要求比較次數為1.5n,使用一般的逐個遍歷每個元素然後判斷其是否為最大最小值是需要2n次的比較的,所以這樣的方法是行

數組中的並把它放到最後

創建 ++ and ati ofa () out arrays 之間 import java.util.Arrays;import java.util.Random;public class MaxOfArray { public static void main(S