以下是我自己编写的C语言的程序,运行没有错误,但输出的结果不对,请哪位高手帮忙看那一下,急!!谢啦~

#include<stdio.h>
struct STUDENT
{
char id[10];
int score[5];
double ave;
}
stu[10];

void average();
void nopass();
void good();

void main()
{int num=10,i,j;
for(i=0;i<num;i++)
{
printf("\t请输入第%d个学生的数据",i+1);
printf("\t学号:");
scanf("%s",stu[i].id);
for(j=0;j<5;j++)
{
printf("\t第%d门课的成绩:",j+1);
scanf("%d",&stu[i].score[j]);
}
}
average();
nopass();
good();
}

void average()
{int a=0,i;
float b=0;
for(i=0;i<10;i++)
a=a+stu[i].score[0];
b=a/10;
printf("\t the average score is :%f",b);
}

void nopass()
{
printf("不及格学生");
int i,j,sum=0;
for(i=0;j<10;i++)
{for(j=0;j<5;j++)
{if(stu[i].score[j]<60)
sum=sum++;
}
if(sum>=2)
{for(j=0;j<5;j++)
printf("第%d门成绩为%d\n",j+1,stu[i].score[j]);
printf("学号:%s\n",stu[i].id);
for(j=0;j<5;j++)
sum+=stu[i].score[j];
stu[i].ave=sum/5.0;
printf("\t平均成绩%f\n",stu[i].ave);
}
}
}

void good()
{
printf("\t优秀学生\n\n");
int i,j,n,k,sum=0;
for(i=0;i<10;i++)
{ for(j=0;j<5;j++)
{
if(stu[i].score[j]>80)
sum++;
}
if(sum=5)
{
n=0;
for(j=0;j<5;j++)
printf("第%d门的成绩%d",j+1,stu[i].score[j]);
printf("学号%s",stu[i].id);
for(j=0;j<5;j++)
n=n+stu[i].score[j];
stu[i].ave=n/5.0;
printf("\t平均成绩%f\n",stu[i].ave);
}
}
for(i=0;i<10;i++)
{ k=0;
for(j=0;j<5;j++)
{ k+=stu[i].score[j];
stu[i].ave=k/5.0;
if(stu[i].ave>85)
{
for(j=0;j<5;j++)
printf("第%d门的成绩%d",j+1,stu[i].score[j]);
printf("学号%s",stu[i].id);
printf("\t平均成绩%f\n",stu[i].ave);
}
}
}
}
题目:一个班有10个学生,每个学生有学号,以及数学,物理,英语,语文,体育5门课的成绩信息。分别编写3个函数以实现以下3个要素:
(1)求数学的平均成绩
(2)对于有两门以上课程不及格的学生,输出他们的学号,各门课成绩及平均成绩
(3)输出成绩优良的学生(平均成绩在85分以上或全部成绩都在80分以上)的学号,各门课成绩和平均成绩

第1个回答  推荐于2016-11-27
优化了一下你的程序代码,你再试试
#include<stdio.h>
struct STUDENT
{
char id[10];
int score[5];
double sum; //这里增加一个总分,方便处理,录入时就完成
double ave; //总分与平均分的计算
} stu[10];

void average();
void nopass();
void good();

int main()
{
int num=10,i,j;
for(i=0;i<num;i++)
{
printf("\t请输入第%d个学生的数据",i+1);
printf("\t学号:");
scanf("%s",stu[i].id);
stu[i].sum=0;
for(j=0;j<5;j++)
{
printf("\t第%d门课的成绩:",j+1);
scanf("%d",&stu[i].score[j]);
stu[i].sum += stu[i].score[j] ;
}
stu[i].ave= stu[i].sum/5 ;
}
average();
nopass();
good();
}

void average()
{
//int a=0,i; a必须是float,否则b=a/10就按整数除了
int i;
double a=0,b=0;
for(i=0;i<10;i++)
a=a+stu[i].score[0];
b=a/10;
printf("\t the math average score is :%f",b);
}

void nopass()
{
printf("不及格学生\n");
int i,j,sum=0;
for(i=0;i<10;i++)
{
sum=0;
for(j=0;j<5;j++)
{
if(stu[i].score[j]<60)
sum++;
}
if(sum>=2)
{
printf("学号:%s\n",stu[i].id);
for(j=0;j<5;j++)
printf("第%d门成绩为%d\n",j+1,stu[i].score[j]);
printf("\t平均成绩%f\n",stu[i].ave);
}
}
}

void good()
{
printf("\t优秀学生\n\n");
int i,j,n,k,sum=0;

for(i=0;i<10;i++)
{
for(j=0;j<5;j++)
{
if(stu[i].score[j]<80) //有一门不足,就中止检查
break ;
}

if(j==5)
{
printf("学号%s\n",stu[i].id);
for(j=0;j<5;j++)
printf("第%d门的成绩%d\n",j+1,stu[i].score[j]);
printf("\t平均成绩%f\n",stu[i].ave);
}
else
if (stu[i].ave>85)
{
printf("学号%s\n",stu[i].id);
for(j=0;j<5;j++)
printf("第%d门的成绩%d\n",j+1,stu[i].score[j]);
printf("\t平均成绩%f\n",stu[i].ave);
}
}
/**
for(i=0;i<10;i++)
{
if(stu[i].ave>85)
{
printf("学号%s\n",stu[i].id);
for(j=0;j<5;j++)
printf("第%d门的成绩%d\n",j+1,stu[i].score[j]);
printf("\t平均成绩%f\n",stu[i].ave);
}
}
***/
}本回答被提问者采纳
第2个回答  2011-09-24
for (i=0;tt[i]=!'\0';i++)
修改为
for (i=0;tt[i] !='\0';i++)
应该是你写忙了。
第3个回答  2011-09-24
#include<stdio.h>
struct STUDENT
{
char id[10];
int score[5];
double sum; //*这里增加一个总分,方便处理,录入时就完成
double ave; //*总分与平均分的计算
} stu[10];

void average();
void nopass();
void good();

void main()
{
int num=10,i,j;
for(i=0;i<num;i++)
{
printf("\t请输入第%d个学生的数据",i+1);
printf("\t学号:");
scanf("%s",stu[i].id);
stu[i].sum=0;
for(j=0;j<5;j++)
{
printf("\t第%d门课的成绩:",j+1);
scanf("%d",&stu[i].score[j]);
stu[i].sum += stu[i].score[j] ;
}
stu[i].ave= stu[i].sum/5 ;
}
average();
nopass();
good();
}

void average()
{
//int a=0,i; a必须是float,否则b=a/10就按整数除了
int i;
double a=0,b=0;
for(i=0;i<10;i++)
a=a+stu[i].score[0];
b=a/10;
printf("\t the math average score is :%f",b);
}

void nopass()
{
printf("不及格学生\n");
int i,j,sum=0;
for(i=0;i<10;i++)
{
sum=0;
for(j=0;j<5;j++)
{
if(stu[i].score[j]<60)
sum++;
}
if(sum>=2)
{
printf("学号:%s\n",stu[i].id);
for(j=0;j<5;j++)
printf("第%d门成绩为%d\n",j+1,stu[i].score[j]);
printf("\t平均成绩%f\n",stu[i].ave);
}
}
}

void good()
{
printf("\t优秀学生\n\n");
int i,j,sum=0;

for(i=0;i<10;i++)
{
for(j=0;j<5;j++)
{
if(stu[i].score[j]<80) //有一门不足,就中止检查
break ;
}

if(j==5)
{
printf("学号%s\n",stu[i].id);
for(j=0;j<5;j++)
printf("第%d门的成绩%d\n",j+1,stu[i].score[j]);
printf("\t平均成绩%f\n",stu[i].ave);
}
else
if (stu[i].ave>85)
{
printf("学号%s\n",stu[i].id);
for(j=0;j<5;j++)
printf("第%d门的成绩%d\n",j+1,stu[i].score[j]);
printf("\t平均成绩%f\n",stu[i].ave);
}
}

for(i=0;i<10;i++)
{
if(stu[i].ave>85)
{
printf("学号%s\n",stu[i].id);
for(j=0;j<5;j++)
printf("第%d门的成绩%d\n",j+1,stu[i].score[j]);
printf("\t平均成绩%f\n",stu[i].ave);
}
}

}
第4个回答  2011-09-23
什么问题,我也不愿运行了

C语言简单程序!这个程序高手帮忙看看吧 能运行但是结果不对 输入1的...
C语言当中运算符 ^ 是按位的异或运算,并不表示求幂运算!如果你想表示一个很小的数最简单的办法就是直接写0.000001 或者使用pow函数,pow(底数,指数)

c语言编写海伦公式,我的为什么没错误,运行出来却不对呢。
控制台进行输入过程中的逗号应该和scanf中格式化字符串中的逗号一致,都是英文的标点 你输入了中文的逗号

请高手帮忙,用C语言输出以下程序.
{ for(int i=1;i<=10;i++){ printf("%d\\t%d\\t%d\\n",i,i*i,i*i*i);} }

关于C语言编写程序的一个疑问 高手帮忙看看我的程序哪错了
其次,格式化输出的格式有错误。若定义一个字符数组,char ch[20] = "hahaha";将它以字符串的形式输出,用printf("%s",ch);而在以上代码中,%s全都写成了s%。以后不要粗心了啊。再次,也是以刚刚我举的为例。20位的字符数组ch[20]以字符串形式输出,用到的是printf("%s",ch);注意,这里是ch...

大哥大姐帮忙看这是什么问题~~~ 谢谢了
在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即死机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。这时候,就会出现上述的“写内存”错误,并指出被引用的内存地址为“0x00000000”。内存分配失败故障的原因...

[急求助]C语言程序编程题,请高手帮忙解答下!
按照题目要求编写的程序如下(见图)

各位C语言高手帮帮忙:下面是代码!编译过后提示没有定义x,y
运行后我们发现输出结果不是"8 5"而依旧是"5 8",也就是说交换函数并没有将2个变量的值交换,这是为什么呢?我们知道,C语言中整型变量的形式参数传递的是值而不是地址,也就是形式参数实际上是复制了实际参数的值进入函数运算的,而被复制的实际参数的值并没有改变。就这段代码来说,就是形参x...

c语言读程序写出执行结果,求高手帮忙解答
第一题:1 4 7 2 5 8 3 6 9 第二题:21 第三题:1 第四题:j = 64 第五题:j =81 第六题:18 这个只能帮到你一时,平时还是靠自己去学的,加油吧!

...运行没问题,提交之后runtime error,高手帮忙看看吧
在本地运行结果没问题,什么也不能说明.你这代码太过冗杂。看看这个代码 include <iostream> include <string> include <vector> include <algorithm> \/\/ STL sort function using namespace std;char map[] = "2223334445556667#77888999#";\/\/ABCDEFGHIJKLMNOPQRSTUVWXYZ void visited(char &ch) \/\/ ...

...问题:在C语言中,整型数据以“%f”格式输出时,不对的根本原因是?_百 ...
后部分视作指数 从几开始我也忘了 呵呵 当然会出错啦 额 不对应格式输出全部都不可以!理由依然是数据解释不对 比如说你要输出'A' 但是用了%d的控制符 那么就会输出65 因为A在ASCII表中的大小事65 也就是说数据0100 0001 你用%c输出 就表示字符'A' 用%d输出就表示65 明白了否?

相似回答