Ошибка C2440: невозможно преобразовать типы - C (СИ)

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

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

Вот моя задача:
Сессия включает в себя экзамены по трём дисциплинам: «Алгебра», «Математический анализ» и «Языки и методы программирования». Студентам, не сдавшим хотя бы один экзамен, стипендия не выплачивается. Студентам, сдавшим все экзамены не ниже, чем на 3, начисляется базовая стипендия из расчета 250 рублей за каждый балл. Хорошисты (успевающие студенты, не имеющие троек) дополнительно получают надбавку в 25%. Отличники (студенты, сдавшие все экзамены на 5) получают надбавку 50%.
Вот код программы:
#include <math.h>
#include <windows.h>
#include <stdio.h>
 
void inputData (int *M11,int *M12,int *M13,int *M21,int *M22,int *M23,int *M31,int *M32,int *M33)
{
    printf("введите оценки первого студента через пробел\n");   
    scanf("%d%d%d",&M11,&M12,&M13);
    printf("введите оценки второго студента через пробел\n");
    scanf("%d%d%d",&M21,&M22,&M23);
    printf("введите оценки третьего студента через пробел\n");
    scanf("%d%d%d",&M31,&M32,&M33);
}
void calcuateScholarship(float *S1,float *S2, float *S3)
{   int M11,M12,M13,M21,M22,M23,M31,M32,M33;
    if (M11==2 || M12==2 || M13==2)
        S1=0;
    else
    { if (M11==3 || M12==3 || M13==3)
    S1=(M11*250)+(M12*250)+(M13*250);
      if (M11==5 && M12==5 && M13==5)
          S1=(M11*250)+(M12*250)+(M13*250)+(((M11*250)+(M12*250)+(M13*250))*0.5);
      else
      S1=(M11*250)+(M12*250)+(M13*250)+(((M11*250)+(M12*250)+(M13*250))*0.25);}
 
if (M21==2 || M22==2 || M23==2)
        S2=0;
    else
    { if (M21==3 || M22==3 || M23==3)
    S2=(M21*250)+(M22*250)+(M23*250);
      if (M21==5 && M22==5 && M23==5)
      S2=(M21*250)+(M22*250)+(M23*250)+(((M21*250)+(M22*250)+(M23*250))*0.5);
      else
      S2=(M21*250)+(M22*250)+(M23*250)+(((M21*250)+(M22*250)+(M23*250))*0.25);}
if (M31==2 || M32==2 || M33==2)
        S3=0;
    else
    { if (M31==3 || M32==3 || M33==3)
    S3=(M31*250)+(M32*250)+(M33*250);
      if (M31==5 && M32==5 && M33==5)
          S3=(M31*250)+(M32*250)+(M33*250)+(((M31*250)+(M32*250)+(M33*250))*0.5);
      else
          S3=(M31*250)+(M32*250)+(M33*250)+(((M31*250)+(M32*250)+(M33*250))*0.25);}
}
 
int main()
{ 
  SetConsoleOutputCP(1251);
  int M11,M12,M13,M21,M22,M23,M31,M32,M33;
  float S1,S2,S3;
 inputData(&M11,&M12,&M13,&M21,&M22,&M23,&M31,&M32,&M33);
 calcuateScholarship(&S1,&S2,&S3);
 printf("S1=\n%2.0f",S1);
 printf("S2=\n%2.0f",S2);
 printf("S3=\n%2.0f",S3);
 getchar();getchar();
}
Вот ошибки, которые я не могу исправить:
1>d:\проэкты c++\lab4.2\lab4.2\big.cpp(20) : error C2440: =: невозможно преобразовать 'int' в 'float *' 1> Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции 1>d:\проэкты c++\lab4.2\lab4.2\big.cpp(22) : error C2440: =: невозможно преобразовать 'double' в 'float *' 1>d:\проэкты c++\lab4.2\lab4.2\big.cpp(24) : error C2440: =: невозможно преобразовать 'double' в 'float *' 1>d:\проэкты c++\lab4.2\lab4.2\big.cpp(30) : error C2440: =: невозможно преобразовать 'int' в 'float *' 1> Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции 1>d:\проэкты c++\lab4.2\lab4.2\big.cpp(32) : error C2440: =: невозможно преобразовать 'double' в 'float *' 1>d:\проэкты c++\lab4.2\lab4.2\big.cpp(34) : error C2440: =: невозможно преобразовать 'double' в 'float *' 1>d:\проэкты c++\lab4.2\lab4.2\big.cpp(39) : error C2440: =: невозможно преобразовать 'int' в 'float *' 1> Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции 1>d:\проэкты c++\lab4.2\lab4.2\big.cpp(41) : error C2440: =: невозможно преобразовать 'double' в 'float *' 1>d:\проэкты c++\lab4.2\lab4.2\big.cpp(43) : error C2440: =: невозможно преобразовать 'double' в 'float *'
Помогите пожалуйста, умные люди!!

Решение задачи: «Ошибка C2440: невозможно преобразовать типы»

textual
Листинг программы
#include <stdio.h>
 
int main() {
    int mark;
    float cash;
    int sum;
    int i, j;
    
    for ( i = 0; i < 3; i++ ) {
        for ( j = 0, sum = 0, cash = 0; j < 3; j++ ) {
            scanf("%d", &mark);
            sum += mark;
            cash += mark * 250;
        }
        if ( sum < 9 ) {
            printf("Student doesn't have any stipend (has mark 2)\n");
        } else if ( sum < 12 ) {
            printf("Student's stipend is %g (has mark 3)\n", cash);
        } else if ( sum < 15 ) {
            printf("Student's stipend is %g (has mark 4)\n", cash*1.25);
        } else if ( sum == 15 ) {
            printf("Student's stipend is %g (has all marks 5)\n", cash*1.5);
        }
    }
    
    return 0;
}

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

  1. Переменная mark объявлена как целочисленный тип данных.
  2. Переменная cash объявлена как тип данных с плавающей точкой.
  3. Переменная sum объявлена как целочисленный тип данных.
  4. Переменные i и j объявлены как целочисленные типы данных и используются в циклах.
  5. Цикл for с переменной i используется для повторения кода три раза.
  6. Внутри цикла for есть еще один цикл for, который используется для суммирования оценок студента.
  7. Переменная mark используется для получения оценок от пользователя с помощью функции scanf().
  8. Значение переменной mark добавляется к сумме переменных sum и cash.
  9. Переменная sum проверяется на значение меньше 9, чтобы определить, имеет ли студент стипендию.
  10. Если сумма оценок меньше 9, выводится сообщение, что у студента нет стипендии и выводится оценка 2.
  11. Если сумма оценок находится в диапазоне от 9 до 11, выводится сообщение, что у студента есть стипендия, и выводится сумма оценок, умноженная на 250.
  12. Если сумма оценок находится в диапазоне от 12 до 14, выводится сообщение, что у студента есть стипендия, и выводится сумма оценок, умноженная на 1.25.
  13. Если сумма оценок равна 15, выводится сообщение, что у студента есть стипендия, и выводится сумма оценок, умноженная на 1.5.
  14. Переменная cash используется для хранения общей суммы стипендии студента.
  15. Переменная sum используется для хранения суммы оценок студента.
  16. Переменная i используется для инкрементации после каждой итерации внешнего цикла for.
  17. Переменная j используется для инкрементации после каждой итерации внутреннего цикла for.
  18. Цикл for завершается, когда значение переменной j становится равным 3.
  19. Код внутри цикла for выполняется три раза, по одному разу для каждой оценки студента.
  20. Код в функции main() завершается, когда возвращается значение 0.

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


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

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

8   голосов , оценка 4.125 из 5
Похожие ответы