++ , . , . , . , , . :
_ _ (__,...);
_ - ; _ - ; __ - , . . () , , , . , , , .
, , . . - , . , . . () . , , .. . .
, ( ) .
// 6.2
#include "stdafx.h"
#include <iostream> // int
long summa(int k,...){ // k -
int *pik = &k;
long total = 0;
for(; k; k--) total += *(++pik);
return total;
}
void main() {
std::cout<< "\n summa(2, 6, 4) = " << summa(2,6,4);
std::cout<< "\n summa(6, 1, 2, 3, 4, 5, 6) = " << summa(6,1,2,3,4,5,6);
|
|
getchar();
}
:
summa(2, 6, 4) = 10
summa(6, 1, 2, 3, 4, 5, 6) = 21
pik int *. k, .e. ( ). pik , . *pik . k, 1 , , . , pik " " sizeof (int) .
. .
// 6.3
#include "stdafx.h"
#include <iostream>
// :
double prod(double arg,...){
double aa = 1.0; //
double* prt = &arg; /* */
if (*prt == 0.0) return 0.0;
for(;*prt; prt++) aa *= *prt;
return aa;
}
void main(){
double prod(double,...); //
std::cout <<"\n prod(2., 4., 3., 0.0) =" <<prod(2.,4.,3., 0.0);
std::cout <<"\n prod(1.5, 2.0, 3.0, 0.0) = ";
std::cout<<prod(1.5, 2.0, 3.0,0.0);
std::cout<<"\n prod(1.4, 3.0, 0.0, 16.0, 84.3, 0.0) = ";
std::cout << prod(1.4, 3.0, 0.0, 16.0, 84.3, 0.0);
std::cout << "\n prod (0.0) = " << prod (0.0);
getchar();
}
:
prod(2., 4., 3., 0.0) = 24
prod(1.5, 2.0, 3.0, 0.0) = 9
prod(1.4, 3.0, 0.0, 16.0, 84.3, 0.0) = 4.2
prod(0.0) = 0
prod prt prt sizeof (double). prod () double. . . .
, - . , , .
. . , , . , , . ++ , . ( IBM PC). , pascal. cdecl , ++ ++.
|
|
, ++ . , . , , () . () . , , .. , , . - .
long fact(int k){
if (k < 0) return 0;
if (k == 0) return 1;
return k * fact(k-l);
}
. . 1, , 0! 1. 1 . k
k * (k-l) * (k-2) *...*3*2*1*1
, fact fact(0). 1 , , , :
1 * fact(1-1)
fact() , .
QuickSort(), .
// 6.4
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#define DIMENSION 100
void QuickSort(int array[], int First, int Last)
{
int Temp, LowerBoundary, UpperBoundary, Separator;
LowerBoundary = First;
UpperBoundary = Last;
Separator = array[(First + Last) / 2];
do{
while (array[LowerBoundary] < Separator) LowerBoundary++;
while (array[UpperBoundary] > Separator) UpperBoundary--;
if (LowerBoundary <= UpperBoundary){
Temp = array[LowerBoundary];
array[LowerBoundary++] = array[UpperBoundary];
array[UpperBoundary--] = Temp;
}
} while (LowerBoundary <= UpperBoundary);
if (First<UpperBoundary)QuickSort(array,First,UpperBoundary);
if (LowerBoundary<Last) QuickSort(array, LowerBoundary, Last);
}
void main()
{
int array[DIMENSION], i = 0;
for (; i < DIMENSION; array[i++] = rand()%1000);
QuickSort(array, 0, DIMENSION -1);
printf("\n\n");
for (i = 0; i < DIMENSION; printf("\n%d", array[i++]));
getchar();
}