1. 程式人生 > >求任意多個數的最大值(利用可變引數列表)

求任意多個數的最大值(利用可變引數列表)

    可變引數列表是通過巨集來實現的,這些巨集定義於stdarg.h標頭檔案中。這個標頭檔案聲明瞭一個型別va_list和三個巨集va_start,va_arg,va_end.我們可以宣告一個型別為va_list的變數與這幾個巨集配合使用,訪問引數的值。
    函式先宣告一個va_list型別的變數,這個變數通過呼叫va_start來初始化,第一個引數是va_list變數的名字,第二個引數是省略號前最後一個有名字的引數。初始化過程把va_list型別的變數設定為指向可變引數部分的第一個引數。
   va_arg巨集接受兩個引數:va_list變數和引數列表中下一個引數的型別,返回這個引數的值,並使va_list
型別的變數指向下一個可變引數。 當訪問完最後一個可變引數之後,要呼叫va_end.
#include <stdio.h>
#include <stdarg.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, 100, 2, 3, 4, 5, 6, 7, 8, 9, 10); printf("%d\n", ret); getchar(); return 0; }

求任意多個數的平均值

#include<stdio.h>
#include<stdarg.h>

float average(int n, ...)
{
    int count = n;
    va_list val;
    float sum = 0;
    va_start(val, n);
    while
(count--) { sum += va_arg(val, int); } va_end(val); return sum / n; } int main() { float aver = average(7, 1, 2, 3,4,5,6,7); printf("average = %f\n", aver); getchar(); return 0; }

相關推薦

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

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

個數(利用三目運算子)

//求三個資料中的最大值 public class OperatorTest {public static void main(String[] args) {//定義三個變數int a = 20 ;int b = 50 ;int c = 30 ;//使用中間第三方變數實現

(C語言)用函式實現個數

題目描述:從鍵盤輸入三個數,之後呼叫函式實現求三個數的最大值 程式碼實現: #include<stdio.h> int main() { int qmax(int a,int b,int c); //求最大值函式的宣告 int x,y,z; int max

遞歸數組的

spa 遞歸 logs blog clas urn pre 最大 log 1 int Max(int a[], int n) 2 { 3 if (n == 1) return a[0]; 4 return a[0]>Max(a + 1, n - 1)

如何數組的

pre 不能 for 進行 rip red arr func min 前言 取出數組中的最大值或者最小值是開發中常見的需求,但你能想出幾種方法來實現這個需求呢? Math.max JavaScript 提供了 Math.max 函數返回一組數中的最大值,用法是: Math

F. Drivers Dissatisfaction+小生成樹+lca樹上兩點的

continue tmp rst spa 題解 去掉 題意 drive .com 題目鏈接:F. Drivers Dissatisfaction 題意:n個點,m條邊,每條邊有一個w,代表這條路的不滿意度,每一條邊我們可以花費c來使不滿意讀-1;然後問你有s,找到一棵生成

數組中

ack 函數 run 記錄 類型 () 字符數 on() span /* 所有c語言代碼,都是在LoadRunner中運行; */ Action(){   int a[]={12,34,565,23,24,667,89,98};//定義一個int數組;   int len;

【POJ】3620Avoid The Lakes(聯通塊的

Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9009   Accepted:&nb

awk按照某個欄位排列,某個列的

file FFF;2011-10-1;2011-10-1 0:00 ;4.57389 FFF;2011-10-1;2011-10-1 0:15 ;4.33278 FFF;2011-10-2;2011-10-2 12:45;5.95446 FFF;2011-10-2;2011

個數(if)

輸入三個數,輸出最大值; #include<stdio.h> int main() {     int a,b,c,max;     scanf("%d%d%d",&a,&

實驗8,編寫一個模板函式陣列中的

#include <iostream> using namespace std; template<typename T1> //模板宣告,T1為型別引數 T1 max(T1 *p1,T1 n)

出兩數的C程式

1.不使用判斷語句 #include <stdio.h> #include <math.h> double Max(double a, double b) { double q = sqrt((a-b)*(a-b)); return

陣列每列

#實現程式碼 var arr=[ [1,2,5,9], [4,6,2,8], [2,5,7,4], [3,7,8,1], [0,4,1,2] ]; //建立一個空陣列,用來接收每一列最大數所在的行數 var hang=[]

二分法單峰函式

#include <iostream> #include <boost/timer/timer.hpp> #include <ctime> #include <set> using namespace boost::timer

STL-陣列中的,

這個也算是比較好用的一個模版函式吧... #include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <

遞迴線性表的

    感覺沒什麼說的直接上程式碼,就是遞迴就是吊。/*************** 求線性表的最大值 ***************/ #include<iostream> #in

C#——若干數的和平均值

/* (程式頭部註釋開始)* 程式的版權和版本宣告部分* Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved.* 檔名稱:編寫一個控制檯應用。輸入一組整數,輸出最大值、最小值和平均值。 * 作 者: 李莉* 完成日期

【Hive】 或 陣列

 max()函式是針對單列多行求最大值。當我們想要對多列同行之間進行比較時,可以嘗試以下辦法: 1.先將數值轉換成陣列array(),再對陣列排序sort_array(),通過負值使其為降序; select -sort_array(array(-a,-b,-c))[0]

C語言兩個整數

上程式碼: #include<stdio.h> #define Max(a,b) ((a>b)?(a):(b))  //預處理實現 int max(int a,int b)   //函式實現 {return a>b?a:b; } int main()

數組中和次

http 運行 else if ++ pre int mage 技術分享 分享圖片 一維數組,找出其中最大的數和第二大的數。 #include<stdio.h> void main() { int a[]={1,23,45,6,34,2,67,345,6