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