| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1470 人关注过本帖
标题:一个输入,计算,打印学生成绩的函数的问题
只看楼主 加入收藏
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
结帖率:100%
收藏
 问题点数:0 回复次数:8 
一个输入,计算,打印学生成绩的函数的问题
我编写了一个函数,功能是输入五名学生的学号、姓名和其三门学科的成绩,并计算他的平均成绩,然后输出这五名学生的记录。函数代码是:

#define N 5
#include <string.h>
struct student
{int num;
char name[10];
int score[3];
}stu[N];
float aver[5];
void input(struct student stu1[])
{int i,j;
for(i=0;i<N;i++)
{
printf("input %d sutdent:\n",i+1);
printf("num:");
scanf("%d",&stu1[i].num);
printf("name:");
scanf("%s",stu1[i].name);
printf("score:");
for(j=0;j<3;j++)
scanf("%d",&stu1[i].score[j]);
}
}
float score(struct student stu2[])
{int i,j;
float aver1;
float sum;
aver1=0,sum=0;
for(i=0;i<N;i++)
{ for(j=0;j<3;j++)
sum=sum+stu2[i].score[j];
aver1=sum/3;
aver[i]=aver1;
sum=0;
}
}
void print(float pingjun2[],struct student stu3[])
{int i,j;
printf("output:");
for(i=0;i<N;i++)
{printf("num:%d\nnume:%s\nscore:",stu3[i].num,stu3[i].name);
for(j=0;j<3;j++)
printf("%d\n",stu3[i].score[j]);
printf("aver:%5.2f",aver[i]);
}
}
main()
{ input(stu);
score(stu);
print(aver,stu);
}
可是运行时,能够输入学生的记录,但不能输出,显示错误信息(红色字):
output:num:01
name:han2y
score:33
22
55
Floating point error :Domain.
不知程序哪里出了错误,请各位高手给看看……
在此谢谢了!

[此贴子已经被作者于2006-6-13 17:59:39编辑过]

搜索更多相关主题的帖子: 函数 学生 打印 num 
2006-06-13 17:58
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
收藏
得分:0 
不是说如果类型不匹配,系统会自动进行类型的转换吗?

2006-06-13 18:08
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
刚刚试过了,在VC下正常。你想必是在TC下运行的。
可以在main()内加复合语句:
{ float xyz;
if(0)scanf("%f",&xyz);/*不必理睬警告*/
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-13 18:16
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
收藏
得分:0 
版主就是厉害,可是不知道这个复合语句有什么意义,它的作用是什么?

2006-06-13 18:27
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(han2y)版主就是厉害,可是不知道这个复合语句...
但愿试过有效后才夸的我。
实际上这是Turbo C 2.0的一个bug:
1。当年DOS下内存紧张,所以追求形成的EXE文件“块头”越小越好。
2。于是Borland公司在C编译器中采取如下策略:
尽可能不连接一个名叫 _turboFloat 的OBJ模块,从而使EXE小8KB左右。
3。但不知在哪个环节上出了点问题。人们在编程中发现,下列情况之一
⑴某些二维以上(含)数组元素用scanf()赋值时
⑵某些结构体(一维)数组元素用scanf()赋值时
即便程序员在scanf()中写了"%f"编译器居然视而不见,依然不连接浮点模块。
4。我本人发现的“穷对付”方案有二:
⑴ { float dummy_name; if(0)scanfI("%f",&dummy_name);
⑵ 添加一个“哑函数”(不被他人调用)
dummy_fun( )
{
_turboFloat();
}
5。方案二是在 Tcc -S ...... 命令行编译下通过反汇编发现的。

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-13 18:48
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
收藏
得分:0 
版主好厉害,竟然会反汇编,我真的好好学习学习

2006-06-13 19:03
private
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2006-5-1
收藏
得分:0 

#include <stdio.h>

struct student
{
int no; //学号
char name[15]; //姓名
int score[3]; //三门课程的成绩
double avr; //平均成绩
};

struct student stu[50]; //声明一个结构数组变量

struct student input();
void display(struct student stud[],int count);
void sort(struct student stud[],int count);
void insert(struct student stud[],int count);
void del(struct student stud[],int count);

void main()
{
int count;
char ch;
ch='y';

printf("请输入学员信息。");
printf("\n");
count=0;
while ((ch=='y') || (ch=='Y'))
{

stu[count]=input(); //调用录入信息函数
count++;
printf("\n 是否继续?(y or n)");
scanf(" %c",&ch);
}
printf("\n排序前的学员信息如下:");
display(stu,count); //调用显示信息函数
sort(stu,count); //调用排序函数
printf("\n排序后的学员信息如下:");
display(stu,count);

printf("\n\n是否要插入新学员?(y or n)");
scanf(" %c",&ch);
if(ch=='y' || ch=='Y')
{
insert(stu,count); //调用插入信息函数
count++;
printf("\n插入新学员后的学员信息如下:");
display(stu,count);
}

printf("\n\n是否要删除某个学员?(y or n)");
scanf(" %c",&ch);
if(ch=='y' || ch=='Y')
{
del(stu,count); //调用删除信息函数
count--;
printf("\n删除后学员的信息如下:");
display(stu,count);
}
}

struct student input() //录入信息函数
{
struct student studn;
int sum,j;
printf("\n学号:");
scanf("%d",&studn.no);

printf("\n姓名:");
scanf("%s",studn.name);

printf("\n三门成绩:");
sum=0;
printf("\n");
for(j=0;j<3;j++)
{
printf("成绩%d: ",j+1);
scanf("%d",&studn.score[j]);
sum+=studn.score[j];
}
studn.avr=sum/3.0;

return studn;
}

void display(struct student stud[],int count) //显示信息函数
{
printf("\n学号\t姓名\t\t平均成绩");

printf("\n");
for(int i=0;i<count;i++)
{
printf("%-03d",stud[i].no);
printf("\t%-15s",stud[i].name);
printf("\t%-10.1f",stud[i].avr);
printf("\n");
}
}

void sort(struct student stud[],int count) //排序函数
{
/* 冒泡排序法*/
struct student t;
for(int i=0;i<count;i++)
{
for(int j=0;j<count-i-1;j++) //比较元素
{
if(stud[j].avr<stud[j+1].avr)
{
t=stud[j];
stud[j]=stud[j+1];
stud[j+1]=t;
}
}
}
}

void insert(struct student stud[],int count) //插入函数
{
/*插入一个学员的信息,要求插入后的学员信息依然有序*/
int i,j;
struct student temp;
printf("\n请输入要插入的学员信息");

temp=input();
for(i=0;i<count;i++)
{
if(stud[i].avr<temp.avr)
break;
}
for(j=count;j>=i;j--)
{
stud[j+1]=stud[j];
}
stud[i]=temp;
}

void del(struct student stud[],int count) //删除函数
{
int dno;
int i=0;
printf("请输入要删除的学员的学号:");
scanf("%d",&dno);
for(i=0;i<count;i++)
{
if(stud[i].no==dno)
break;
}
for(;i<count-1;i++)
{
stud[i]=stud[i+1];
}
}


2006-06-13 19:07
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
良好的头饰,是成功的一半。又有人帮MM啦。

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-13 19:19
private
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2006-5-1
收藏
得分:0 

#define N 5
#include<stdio.h>
#include <string.h>

struct student
{
int num;
char name[10];
int score[3];
}stu[N];

float aver[5];

void input(struct student stu1[])
{
int i,j;
for(i=0;i<N;i++)
{
printf("input %d sutdent:\n",i+1);
printf("num:");
scanf("%d",&stu1[i].num);
printf("name:");
scanf("%s",stu1[i].name);
printf("score:");
for(j=0;j<3;j++)
scanf("%d",&stu1[i].score[j]);
}
}
void score(struct student stu2[])
{
int i,j;
float aver1;
float sum;
aver1=0,sum=0;
for(i=0;i<N;i++)
{
for(j=0;j<3;j++)
sum=sum+stu2[i].score[j];
aver1=sum/3;
aver[i]=aver1;
sum=0;
}
}
void print(float pingjun2[],struct student stu3[])
{
int i,j;
printf("output:");
for(i=0;i<N;i++)
{
printf("num:%d\nnume:%s\nscore:",stu3[i].num,stu3[i].name);
for(j=0;j<3;j++)
printf("%d\n",stu3[i].score[j]);
printf("aver:%5.2f",aver[i]);
}
}
void main()
{
input(stu);
score(stu);
print(aver,stu);
}


2006-06-13 19:30
快速回复:一个输入,计算,打印学生成绩的函数的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019262 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved