Приведение типа в "С" - 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); }
Объяснение кода листинга программы
- Включение необходимых заголовочных файлов:
и . - Определение трех функций: max3i, max3d и max3x.
- Функция max3i сравнивает три значения типа int и возвращает наибольшее из них.
- Функция max3d сравнивает три значения типа double и возвращает наибольшее из них.
- Функция max3x принимает четыре аргумента: три значения и функцию, которая сравнивает эти значения.
- В функции main считываются три значения типа int и сохраняются в переменных iA, iB и iC.
- Вызывается функция max3x с аргументами iA, iB, iC и max3i.
- Выводится наибольшее значение из трех считанных.
- Считываются три значения типа double и сохраняются в переменных dA, dB и dC.
- Вызывается функция max3x с аргументами dA, dB, dC и max3d.
- Выводится наибольшее значение из трех считанных.
- Программа завершается с успехом (EXIT_SUCCESS).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д