这是本人的一个阶段作业 由于是第一次发帖子 不太懂规矩 注释的不是十分明白... 另 英语不好 函数和变量名一般都是中文的~
#include <stdio.h>
#include <stdlib.h>//system("cls") exit(0)
#include <windows.h>//Sleep();
int i;
tuichu();
main()
{
int a,j,d,n=0,q,k,h,m,x;//n为计数器
struct aa
{
int xuehao;
char xingming[10];
float fenshu;
}student[300];//定义student为aa类型的结构体
float max=student[0].fenshu,min=2000,sum=0;/*问题就出在这里 max和min是为了统计最高分和最低分的 正常是max min都应该初始化为student[0].fenshu,但如果min初始化为student[0].fenshu 则输出的最低分是个随即数 如果初始化为比较大的数 结果反而正确了~ 无法解释...*/
AB: system("cls");
printf("\n");
printf(" *****************************************************\n");
printf(" * *\n");
printf(" * *\n");
printf(" * 学生管理系统 *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" *****************************************************\n");
printf(" 1---->录入学生信息\n");
printf(" 2---->浏览学生信息\n");
printf(" 3---->添加学生信息\n");
printf(" 4---->统计学生信息\n");
printf(" 5---->汉诺塔游戏\n");
printf(" 6---->退出系统\n");
printf(" 请输入您的选择:");
scanf("%d",&a);
switch(a)
{
case 1:
{
system("cls");
printf("请输入你要录入学生成绩的个数:");
scanf("%d",&q);
for(j=0;j<q;j++)
{
printf("请输入第%d个学生的信息:\n",j+1);
printf("请输入学号:");
scanf("%d",&student[j].xuehao);
printf("请输入姓名:");
scanf("%s",&student[j].xingming);
printf("请输入分数:");
scanf("%f",&student[j].fenshu);
n++;
}
printf("录入成功!返回菜单中");
Sleep(2500);
system("cls");
goto AB;
}
case 2:
{
system("cls");
if(n==0)
{
printf("没有学生信息,返回菜单中!");
Sleep(2500);
system("cls");
goto AB;
}
else
{
for(j=0;j<q;j++)
{
printf("第%d个学生的信息:\n",j+1);
printf("学号:%d",student[j].xuehao);
printf("姓名:%s",student[j].xingming);
printf("分数:%.2f",student[j].fenshu);
}
printf("返回菜单中...");
Sleep(4000);
system("cls");
goto AB;
}
}
case 3:
{
if(n==0)
{
system("cls");
printf("没有学生信息,返回菜单中!");
Sleep(2500);
goto AB;
}
else
{
system("cls");
printf("请输入第%d个学生的信息:\n",++q);
printf("请输入学号:\n");
scanf("%d",&student[q-1].xuehao);
printf("请输入姓名:\n");
scanf("%s",&student[q-1].xingming);
printf("请输入分数:\n");
scanf("%f",&student[q-1].fenshu);
printf("录入成功,返回菜单中...");
Sleep(2500);
system("cls");
goto AB;
}
}
case 4:
{
if(n==0)
{
system("cls");
printf("没有学生成绩!返回菜单中...");
Sleep(2000);
goto AB;
}
else
{
system("cls");
for(j=0;j<q;j++)
{
sum=sum+student[j].fenshu;
}
printf("平均分为:%.2f\n",sum/10);
for(j=0;j<q;j++)
{
if(max<student[j].fenshu)
{
max=student[j].fenshu;
h=j;
}
}
printf("最高分为:%.2f\n最高分的学号为:%d\n最高分的姓名是:%s\n",max,student[h].xuehao,student[h].xingming);
for(j=0;j<q;j++)
{
if(min>student[j].fenshu)
{
min=student[j].fenshu;
k=j;
}
}
printf("最低分为:%.2f\n最低分的学号为:%d\n最低分的姓名是:%s\n",min,student[k].xuehao,student[k].xingming);
printf("返回菜单中...");
Sleep(5000);
goto AB;
}
}
case 5:
{
system("cls");
CC: void hannuota(int n,char a,char b,char c);
printf("请输入汉诺塔的层数:\n");
scanf("%d",&m);
printf("移动步骤如下:\n");
hannuota(m,'A','B','C');
printf("游戏结束,继续吗?\n1.是\n2.否\n");
scanf("%d",&x);
if(x==2)
{
system("cls");
printf("返回菜单中...");
Sleep(2000);
goto AB;
}
else
if(x==1)
{ system("cls");
goto CC;
}
else
{
printf("输入错误,返回菜单中...");
Sleep(2000);
goto AB;
}
}
case 6:
{
system("cls");
printf("真的退出吗?1.是 2.否");
scanf("%d",&d);
if(d==1)
tuichu();
else
{
system("cls");
printf("返回菜单中...");
Sleep(3000);
goto AB;
}
}
default:
system("cls");
printf("输入的选项错误,请重新选择!");
Sleep(2000);
goto AB;
}
}
tuichu()
{
char r[200]="程序制作人:华育7班刘潇,侵权必究!\n\n\t\t\t制作时间:2007年10月23日\n\n\t\tGOODBYE!\n";
system("cls");
for(i=0;i<=strlen(r);i++)
{
printf("%c",r[i]);
Sleep(35);
}
exit(0);
}
void hannuota(int n,char a,char b,char c)
{
void yidong(char x,char y);
if(n==1)
yidong(a,c);
else
{
hannuota(n-1,a,c,b);
yidong(a,c);
hannuota(n-1,b,a,c);
}
}
void yidong(char x,char y)
{
printf("%c――>%c\n",x,y);
}
另此程序是在VC环境下编译的 如果有高手可以指点我一下我非常愿意 本人QQ:36165776
----------------解决方案--------------------------------------------------------
大家可以先运行一下我的程序 搞清功能
----------------解决方案--------------------------------------------------------
学生管理系统中还有汉诺塔游戏,很有创意!!!
----------------解决方案--------------------------------------------------------
一个无法解释的问题
那是什么问题?
学生管理系统做汉若塔可能是劳逸结合吧
----------------解决方案--------------------------------------------------------
呵呵 和汉诺塔合在一起纯属无聊 问题在注释里了 就在定义float max min那里的注释上了
----------------解决方案--------------------------------------------------------
float max=student[0].fenshu,min=2000,sum=0;/*问题就出在这里 max和min是为了统计最高分和最低分的 正常是max min都应该初始化为student[0].fenshu,但如果min初始化为student[0].fenshu 则输出的最低分是个随即数 如果初始化为比较大的数 结果反而正确了~ 无法解释...*/
你为什么要在全局时初始化呢,你可以在求最高,最低分的函数里给他赋值啊.
----------------解决方案--------------------------------------------------------
我用VC编译了一下,你的程序虽然没有error,但是warning也是要注意的,
比如第4个warning:(15) : warning C4700: local variable 'student' used without having been initialized
这个就是你的错误所在,min和max在赋值的时候,student[0].fenshu还没有初始化,那他的值只能是一个随机数了
一般来说,程序要调试到0 error,0 warning的情况,这样才能避免一些简单的错误
----------------解决方案--------------------------------------------------------
恩 我把他定义在case 4 里了就可以了 但是能解释一下为什么呢?
----------------解决方案--------------------------------------------------------
7楼解释一下 我的程序里max 也定义在了最前面 min也定义了最前面 他们2个初始的值是一样的 为什么最高分max是正确的 而min里却是错误的数据呢?
----------------解决方案--------------------------------------------------------
反正要放到结构体赋值之后的语句中.
当然因为你有判断是否为0,所以即使没有初始化结构体也不会执行下面的语句.
----------------解决方案--------------------------------------------------------