Структуры - Ошибка с выводом среднего бала студентов - C (СИ)

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

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

ошибка с выводом среднего бала студентов.он всегда выходит целочисленным,хотя это не всегда так
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
 
int i=0;
 
struct rasp
  {
   char ima[20];
   int  nom_zach;
   int  otsenka1;
   int  otsenka2;
   int  otsenka3;
   int  otsenka4;
   double sred_bal;
  };
 
int vvod(struct rasp *a)
{
 int f,c;
 clrscr();
 f=i+1;
 for(i;i<f;i++)
 {
  {printf("\n zapis %d",i+1);
   printf("\nvvedite ima -> ");
   scanf("%s",&a[i].ima);
   printf("vvedite nomer zatchetnoi knigi -> ");
   scanf("%d",&a[i].nom_zach);
   printf("vvedite otsenku za1ekzamen -> ");
   scanf("%d",&a[i].otsenka1);
   printf("vvedite otsenku za 2 ekzamen -> ");
   scanf("%d",&a[i].otsenka2);
   printf("vvedite otsenku za 3 ekzamen -> ");
   scanf("%d",&a[i].otsenka3);
   printf("vvedite otsenku za 4 ekzamen -> ");
   scanf("%d",&a[i].otsenka4);
   a[i].sred_bal=(((a[i].otsenka1)+(a[i].otsenka2)+(a[i].otsenka3)+(a[i].otsenka4))/4);
  }
 printf("\nprodolzit ? 1-yes 0-no\n");
 scanf("%d",&c);
 if (c==1) f++;}
 return f;
}
 
void vivod(struct rasp *a,int f)
{
 int i;
 clrscr();
 printf("Familiay I.O.  nomer zacetki  1otsenka  2otsenka  3otsenka  4otsenka   sred.bal\n");
 for(i=0;i<f;i++)
  {
  printf("%s            %d          %d        %d        %d         %d            %lg\n",a[i].ima,a[i].nom_zach,a[i].otsenka1,a[i].otsenka2,a[i].otsenka3,a[i].otsenka4,a[i].sred_bal);
  }
 return;
}
 
void sortprib(struct rasp *a,int f)
{
 int i,g;
 struct rasp t;
 clrscr();
 printf("\vvedite pynkt neobxodimoi sortirovki\n"
     "1-po familii \n"
     "2-po ybivaqniy srednego bala\n");
 scanf("%d",&g);
 if (g==2)
 {printf("\sortirovka po ybivaqniy srednego bala\n");
 for(i=1;i<f;i++)
 {
  while((a[i].sred_bal)<(a[i-1].sred_bal))
  {
   t=a[i-1];
   a[i-1]=a[i];
   a[i]=t;
   if (i>1)
   i--;
  }
 }
 return;
 }
 if (g==1)
 {printf("\sortirovano po Familii\n");
 for(i=1;i<f;i++)
 {
 while(strcmp(a[i].ima,a[i-1].ima)<0)
  {
   t=a[i-1];
   a[i-1]=a[i];
   a[i]=t;
   if (i>1)
   i--;
  }
 }
 return;
 }
}
 
void ob(struct rasp *a,int f)
{
 int i;double k,p;
 p=0;
 clrscr();
 printf("\sredniy bal gruppi\n");
 for(i=0;i<f+1;i++)
 {
 p=p+a[i].sred_bal;
 }
 k=p/f;
 printf("%lg\n",k);
}
 
void filtr(struct rasp *a,int f)
{
 int i,h;
 struct rasp t;
 clrscr();
 printf("\vvedite pynkt neobxodimogo filtra\n"
     "1-otlichiki \n"
     "2-choroshisty\n"
         "3-studenti imeiyshie ydovletvoritelnii otsenki\n"
     "4-studenti ne zdavshie sessiy\n");
 scanf("%d",&h);
 if (h==1)
  {
   printf("\otlichniki\n"); 
   for(i=1;i<f;i++)
   {
     if (((a[i].otsenka1)==5)&&((a[i].otsenka2)==5)&&((a[i].otsenka3)==5)&&((a[i].otsenka4)==5));
        printf("Familiay I.O.  nomer zacetki  1otsenka  2otsenka  3otsenka  4otsenka   sred.bal\n"
               "%s            %d          %d        %d        %d         %d            %lg\n",a[i].ima,a[i].nom_zach,a[i].otsenka1,a[i].otsenka2,a[i].otsenka3,a[i].otsenka4,a[i].sred_bal);
    // else printf("otlichnicov net");
   }
   return;
  } 
 if (h==2)
 {printf("\horoshisty\n");
 for(i=1;i<f;i++)
 {
  if (((a[i].otsenka1)>3)&&((a[i].otsenka2)>3)&&((a[i].otsenka3)>3)&&((a[i].otsenka4)>3)&&((a[i].otsenka1)+(a[i].otsenka2)+(a[i].otsenka3)+(a[i].otsenka4))<20);
    printf("Familiay I.O.  nomer zacetki  1otsenka  2otsenka  3otsenka  4otsenka   sred.bal\n"
            "%s            %d          %d        %d        %d         %d            %lg\n",a[i].ima,a[i].nom_zach,a[i].otsenka1,a[i].otsenka2,a[i].otsenka3,a[i].otsenka4,a[i].sred_bal);
 // else printf("choroshistov net");
 }
 return;
 }
 if (h==3)
 {printf("\studenti imeiyshie ydovletvoritelnii otsenki\n");
 for(i=1;i<f;i++)
 {
  if (((a[i].otsenka1)=3)||((a[i].otsenka2)=3)||((a[i].otsenka3)=3)||((a[i].otsenka4)=3)&&((a[i].otsenka1)+(a[i].otsenka2)+(a[i].otsenka3)+(a[i].otsenka4))>11);
    printf("Familiay I.O.  nomer zacetki  1otsenka  2otsenka  3otsenka  4otsenka   sred.bal\n"
            "%s            %d          %d        %d        %d         %d            %lg\n",a[i].ima,a[i].nom_zach,a[i].otsenka1,a[i].otsenka2,a[i].otsenka3,a[i].otsenka4,a[i].sred_bal);
 // else printf("studentov imeiysih ydovletvoritelnii otsenki net");
 }
 return;
 }
 
 if (h==4)
 {printf("\studenti ne sdavshie sessiy\n");
 for(i=1;i<f;i++)
 {
  if (((a[i].otsenka1)<3)||((a[i].otsenka2)<3)||((a[i].otsenka3)<3)||((a[i].otsenka4)<3));
    printf("Familiay I.O.  nomer zacetki  1otsenka  2otsenka  3otsenka  4otsenka   sred.bal\n"
               "%s            %d          %d        %d        %d         %d            %lg\n",a[i].ima,a[i].nom_zach,a[i].otsenka1,a[i].otsenka2,a[i].otsenka3,a[i].otsenka4,a[i].sred_bal);
  //else printf("studentov ne sdavshih sessiy net");
 }
 return;
 }
}
 
void main(void)
{
struct rasp s[10];
int n,v;
clrscr();
while(1)
  {
   printf("1. vvod dannih\n");
   printf("2. sortirovka\n");
   printf("3. vichislenie srednego bala gruppi\n");
   printf("4. filtr\n");
   printf("5. vivod dannih\n");
   printf("6. VIHOD\n");
   printf("\n viberete deistvie:");
   scanf("%d",&v);
   switch (v)
   {
   case 1:{n=vvod(s);break;}
   case 2:{sortprib(s,n);break;}
   case 3:{ob(s,n);break;};
   case 4:{filtr(s,n);break;};
   case 5:{vivod(s,n);break;};
   case 6:{exit(1);}
   }
  }
}
почему так не могу понять...

Решение задачи: «Структуры - Ошибка с выводом среднего бала студентов»

textual
Листинг программы
printf("%s %d %d %d %d %d %lg\n",a[i].ima,a[i].nom_zach,a[i].otsenka1,a[i].otsenka2,a[i].otsenka3,a[i].otsenka4,a[i].sred_bal);

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


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

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

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