Найдите самую высокую и самую низкую ценность каждого человека, если человек больше чем один - PullRequest
0 голосов
/ 02 мая 2019

Я хочу найти максимальный и минимальный значения для каждого человека в процентах, сумме, проекте, MID, финале и оценке с помощью метода поиска.

struct student{
  char id[10];
  char fname[25];
  char lname[25];
  char letter[10];
  int quiz[3];
  int assignment[3];
  int project,MID,Final,grade,percentage,average,sum;
};

int main() {
  struct student person[10];
  int input,choose,max=0,min=0;

  printf("Input Student : ");
  scanf("%d",&input );
  printf("\n");

  int i,j,k,g;
  for ( i = 0; i < input; i++) {
    int count=0,count2=0;
    printf("Input Id : ");
    scanf("%s",person[i].id);
    printf("Input Name : ");
    scanf("%s",person[i].fname);
    scanf("%s",person[i].lname);
    printf("\n");

    //input assignment
    for ( j = 0; j < 3; j++) {
      printf("Input Assignment%d : ",j );
      scanf("%d",&person[i].assignment[j] );
      count+=person[i].assignment[j];
      person[i].average = count/3;
    }
    person[i].percentage = person[i].average*0.20;
    person[i].MaxPer = person[i].percentage;

    printf("\n");
    //input quiz
    for ( k = 0; k < 4; k++) {
      printf("Input Quiz%d : ",k );
      scanf("%d",&person[k].quiz[i] );
      count2+=person[k].quiz[i];
      person[i].average = count2/4;
    }
    person[i].sum = person[i].average*0.10;
    person[i].MinPer = person[i].percentage;

    printf("\n");

    //input Project
    printf("Input Project Value%d : ",i );
    scanf("%d",&person[i].project );
    person[i].project= person[i].project * 0.15;
    printf("\n");

    //input MID
    printf("Input Project Value%d : ",i );
    scanf("%d",&person[i].MID );
    fflush(stdin);
    person[i].MID= person[i].MID * 0.25;
    printf("\n");

    //input Final
    printf("Input Project Value%d : ",i );
    scanf("%d",&person[i].Final );
    fflush(stdin);
    person[i].Final= person[i].Final * 0.25;

    //count Grade
    person[i].grade = person[i].percentage + person[i].sum + person[i].project + person[i].MID + person[i].Final;

    printf("\n");
  }

      printf("Highest Value \t\t\t%15d %25d %11d %10d %10d\n",person[i].MaxPer,person[i].sum,person[i].project,person[i].MID,person[i].Final);
      printf("Lowest Value \t\t\t%15d %25d %11d %10d %10d\n",person[i].MinPer,person[i].sum,person[i].project,person[i].MID,person[i].Final);
  return 0;
}

, поэтому, если я введу все задания, викторины и т. Д. Для 3 человек с разным номером, он зациклится и найдет самое высокое и самое низкое среди трех. И последнее - распечатать вывод.

1 Ответ

2 голосов
/ 02 мая 2019

Я хочу найти самый высокий и самый низкий из каждого человека окончательные результаты в процентах, сумме, проекте, MID, Финале и оценке с помощью метода поиска.

Я не понимаю, что вы имеете в виду, потому что многие из этих данных уникальны для каждого человека, так как говорить о мин / макс на них? Вы говорите о мин / макс среди всех людей?

В любом случае, некоторые замечания по поводу вашего скачкообразного кода помогут вам


Предупреждение о двух строках

 printf("Highest Value \t\t\t%15d %25d %11d %10d %10d\n",person[i].MaxPer,person[i].sum,person[i].project,person[i].MID,person[i].Final);
 printf("Lowest Value \t\t\t%15d %25d %11d %10d %10d\n",person[i].MinPer,person[i].sum,person[i].project,person[i].MID,person[i].Final);

вне for ( i = 0; i < input; i++) {, поэтому i значения ввод , и вы получаете доступ к неинициализированным значениям и может быть вне person

В

scanf ("% d", & input);

вы не проверяете scanf возвращает 1, чтобы узнать, является ли ввод действительным числом, вам также необходимо проверить, является ли input меньше 10, иначе вы получите доступ из массив, в любом случае, чтобы также проверить положительное значение, чтобы указать на ошибку, в противном случае кажется хорошей идеей.

Также проверьте другой scanf , чтобы узнать, был ли введен правильный ввод, никогда не думайте, что пользователь вводит допустимый ввод

Поля MaxPer и MinPer не существуют, но также и в

 person[i].MaxPer = person[i].percentage;

 printf("\n");
 //input quiz
 for ( k = 0; k < 4; k++) {
   printf("Input Quiz%d : ",k );
   scanf("%d",&person[k].quiz[i] );
   count2+=person[k].quiz[i];
   person[i].average = count2/4;
 }
 person[i].sum = person[i].average*0.10;
 person[i].MinPer = person[i].percentage;

person[i].percentage; не изменяется, поэтому MaxPer и MinPer будут иметь одинаковое значение

почему вы устанавливаете person[i].average в цикле, а не после?

почему *0.10

То же самое в

 for ( j = 0; j < 3; j++) {
   printf("Input Assignment%d : ",j );
   scanf("%d",&person[i].assignment[j] );
   count+=person[i].assignment[j];
   person[i].average = count/3;
 }
 person[i].percentage = person[i].average*0.20;

почему вы устанавливаете person[i].average в цикле, а не после?

почему person[i].average*0.20; как если бы вы управляли 5 значениями?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...