Структуры - Ошибка с выводом среднего бала студентов - 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);