Vissza
Vátozó
paraméterszámú függvények
.
I. Változó
paraméterszámú függvényeket
használva írjunk
programot mely a következő feladatokat végzi el. Oldjuk
meg kétféleképpen őket,
könyvtárfüggvényeket használva, illetve
nélkülük:
a
paraméterként feltüntetett egész
számokat adjuk össze,
a
paraméterként feltüntetett egész
számokat szorozzuk össze,
a
paraméterként feltüntetett valós
számok közül határozzuk meg a legnagyobbat (
Forráskód ),
a
paraméterként feltüntetett valós
számok közül határozzuk meg a legkisebbet,
határozzuk
meg a paraméterként feltüntetett egész
számok számtani középarányosát.
II. Írjuk meg a printf és scanf ( Forráskód
) könyvtárfüggvényeket, a
getchar()
függvény alkalmazásával, úgy hogy a
következő formázó
jelekre
működjenek:
d
–egész szám
c
–karakter
s
–karaktersor
f
–valós szám
o–oktális szám
x
–hexa szám
Fel1.
#include
<stdio.h>
#include
<stdarg.h>
#include
<time.h>
#include
<stdlib.h>
int max(int
n,...);
int max1(int
n,...);
void main()
{
printf("\n%d",max(6,4,1,3,6,2,5));
printf("\n%d",max(10,8,6,10,1,2,7,3,4,5,9));
printf("\n%d",max1(6,4,1,3,6,2,5) );
printf("\n%d",max1(10,8,6,10,1,2,7,3,4,5,9) );
printf("\n");
}
int max(int n,...)
{
int max, *id, i;
id = &n+1;
max = *(&n+1);
for(i=0; i<n; i++)
{
if( max < *id ) max = *id;
id++;
}
return max;
}
int max1(int
n,...)
{
va_list argptr;
int max, id, i;
va_start(argptr,n);
id = va_arg(argptr,int);
max = va_arg(argptr,int);
for(i=1; i<n; i++)
{
if( max < id ) max = id;
id = va_arg(argptr,int);
}
va_end(argptr);
return max;
}
Vissza
Fel2.
#include
<stdio.h>
#include
<stdarg.h>
void myscanf(char
*fmt, ...);
void main()
{
char c;
int i;
char s[20];
//char * s= (char*)malloc(10* sizeof(char));
printf("Kerek egy karaklancot: ");
myscanf("%s", s);
printf("%s", s);
printf("Kerek egy karaktert: ");
myscanf("%c", &c);
printf("%c\n",c);
printf("Kerek egy egesz szamot: ");
myscanf("%i", &i);
printf("%i\n",i);
}
void myscanf(char
*fmt, ...)
{
char *p, str0, str; //ezzel lepkedunk vegig az elso
argumentumon
va_list argp; // a va struktura
int build;
char c; //ezt hasznaljuk karakter beolvasasra
va_start(argp, fmt);
for(p = fmt; *p != '\0'; p++) //ameddig a formatalo
string tart
{
switch(*++p) //ha formatalo
karakter
{
case 's':
str0 = str =
va_arg(argp, char*);
i = 0;
while (1)
{
c = getchar();
if( c=='\n') break;
*str = c;
str++;
}
*str = 0;
va_arg(argp, char**) = &str0;
fflush(stdin);
break;
case 'c':
*va_arg(argp, char*) =
getchar();
fflush(stdin);
break;
case 'i':
build = 0;
while (1)
{
c=getchar();
if (c >=
'0' && c <= '9')
{
build = build * 10;
build += c - '0';
}
if( c=='\n')
break;
}
*va_arg(argp, int*) = build;
fflush(stdin);
break;
}
}
va_end(argp);
}
Vissza