Приведение типа в "С" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Покажите пожалуйста, на примерах с созданием собственных функций, прототипами к ним. Как выглядят явное и не явное приведение типов? Желательно на простейших программах , например сравнение трех чисел и вывод максимального. Для удобства написал готовый код с функцией и прототипом, который можете изменять, добавлять на свое усмотрение : Цель, наглядно увидеть, что из себя представляет явное и не явное приведение типов.
include <stdio.h>
 
int maximum (int, int, int);
 
main ()
{
   int a, b, c;
 
   printf ("Enter three integers: ");
   scanf ("%d%d%d", &a, &b, &c);
   printf ("Maximum is: %d\n", maximum (a, b, c));
 
return 0;
}
 
int maximum (int x, int y, int z)
{
   int max = x;
 
   if (y > max)
      max = y;
   if (z > max)
      max = z;
 
return max;
}

Решение задачи: «Приведение типа в "С"»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
void * max3i(const void * a, const void * b, const void * c){
    if ( *(int*)a > *(int*)b )
        return ( *(int*)a > *(int*)c ) ? (void*)a : (void*)c;
    else
        return ( *(int*)b > *(int*)c ) ? (void*)b : (void*)c;
}
 
void * max3d(const void * a, const void * b, const void * c){
    if ( *(double*)a > *(double*)b )
        return ( *(double*)a > *(double*)c ) ? (void*)a : (void*)c;
    else
        return ( *(double*)b > *(double*)c ) ? (void*)b : (void*)c;
}
 
void * max3x(const void * a, const void * b, const void * c, void * (*func)(const void *, const void *, const void *)){
    return func(a, b, c);
}
 
int main(void){
    int iA, iB, iC;
    double dA, dB, dC;
    
    printf("3 int values: ");
    if ( scanf("%d %d %d", &iA, &iB, &iC) != 3 ){
        perror("scanf");
        exit(EXIT_FAILURE);
    }
    printf("Maximum: %d\n", *(int*)max3x(&iA, &iB, &iC, max3i));
    
    printf("\n3 double values: ");
    if ( scanf("%lf %lf %lf", &dA, &dB, &dC) != 3 ){
        perror("scanf");
        exit(EXIT_FAILURE);
    }
    printf("Maximum: %.2f\n", *(double*)max3x(&dA, &dB, &dC, max3d));
    
    exit(EXIT_SUCCESS);
}

Объяснение кода листинга программы

  1. Включение необходимых заголовочных файлов: и .
  2. Определение трех функций: max3i, max3d и max3x.
  3. Функция max3i сравнивает три значения типа int и возвращает наибольшее из них.
  4. Функция max3d сравнивает три значения типа double и возвращает наибольшее из них.
  5. Функция max3x принимает четыре аргумента: три значения и функцию, которая сравнивает эти значения.
  6. В функции main считываются три значения типа int и сохраняются в переменных iA, iB и iC.
  7. Вызывается функция max3x с аргументами iA, iB, iC и max3i.
  8. Выводится наибольшее значение из трех считанных.
  9. Считываются три значения типа double и сохраняются в переменных dA, dB и dC.
  10. Вызывается функция max3x с аргументами dA, dB, dC и max3d.
  11. Выводится наибольшее значение из трех считанных.
  12. Программа завершается с успехом (EXIT_SUCCESS).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5