哪位达人帮我看看我的C语言程序
发布网友
发布时间:2022-04-29 20:12
我来回答
共5个回答
热心网友
时间:2022-06-22 07:43
刚才帮你运行一下程序有20~30来个错误。。。。。。
其实这个就和我以前编的学生管理系统一样 程序如下 你看看 可能对你有帮助
保证可以完美运行 还是第一次传到网上哈
#include "stdio.h"
#include "string.h"
struct student
{int num;
char name[10];
char sex[10];
char brith[20];
char academy[20];
float score[5];
float average;
}stu[30];
int m=0,o;
void main()
{
void SR();
void TJ();
void CX();
void SC();
void CR();
void XG();
int n;
printf("请输入统计人数:");
scanf("%d",&o);
do{printf(" # %d学生 4门课的统计程序 #\n 1 成绩录入;\n 2 成绩查询;\n 3 成绩统计;\n 4 删除录入;\n 5 插入学生 \n 6 修改学生 \n 7 退出",o);
printf("\n输入1-7选择。请选择:");
scanf("%d",&n);
if(n==1) SR();
else if(n==2) CX();
else if(n==3) TJ();
else if(n==4) SC();
else if(n==5) CR();
else if(n==6) XG();
else if(n==7) printf("谢谢使用");
else printf("无此选项!自动返回!\n");}
while(n!=7);
}
void SR()
{int y,i,j,t,k,n; float x;
if(m==1)
{printf("成绩已录入,数字键返回");
scanf("%d",&y);
goto loop;}
for(i=0;i<o;i++)
{printf("输入第%d名同学的信息\n",i+1);
printf("学号:");
scanf("%d",&stu[i].num);
printf("\n姓名:\n");
scanf("%s",&stu[i].name);
printf ("\n性别:\n");
scanf ("%s",&stu[i].sex);
printf("\n出生日期:\n");
scanf("%s",&stu[i].brith);
printf("\n系别:\n");
scanf("%s",&stu[i].academy);
printf("\n分数:\n");
for(j=0;j<4;j++)
{printf("第%d科",j+1);
scanf("%f",&stu[i].score[j]);}
x=0;
for(t=0;t<4;t++)
x=x+stu[i].score[t];
stu[i].average=x/4;}
printf("输入的成绩为:\n");
printf("学号 姓名 性别 出生日期 系别 第一科 第二科 第三科 第四科\n");
for(k=0;k<o;k++)
printf("%-6d%-10s%-6s%-13s%-7s%-7.2f%-9.2f%-9.2f%-9.2f\n",stu[k].num,stu[k].name,
stu[k].sex,stu[k].brith,stu[k].academy,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].score[3]);
printf("重新输入请按 0,其他数字键返回");
scanf("%d",&n);
if(n==0)
SR();
else m=1;
loop:{};}
void CR()
{int i,k,j,t,n,w=-1;float x;
if(m==0)
{printf("请先输入成绩!\n");
goto loop;};
printf("插入的学号:");
scanf("%d",&stu[o].num);
printf("\n插入的姓名:\n");
scanf("%s",&stu[o].name);
printf ("\n插入的性别:\n");
scanf ("%s",&stu[o].sex);
printf("\n插入的出生日期:\n");
scanf("%s",&stu[o].brith);
printf("\n插入的系别:\n");
scanf("%s",&stu[o].academy);
printf("\n插入的分数:\n");
for(j=0;j<4;j++)
{printf("第%d科",j+1);
scanf("%f",&stu[o].score[j]);}
o=o+1;
for(i=0;i<o;i++)
{x=0;
for(t=0;t<4;t++)
{x=x+stu[i].score[t];}
stu[i].average=x/4;}
printf("各学生成绩:\n");
{printf("学号 姓名 性别 出生日期 系别 第一科 第二科 第三科 第四科 平均\n");
for(k=0;k<o;k++)
printf("%-6d%-10s%-6s%-13s%-7s%-7.2f%-9.2f%-9.2f%-9.2f%-9.1f\n",stu[k].num,stu[k].name,
stu[k].sex,stu[k].brith,stu[k].academy,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].score[3],stu[k].average);}
printf("重复插入请按 0,其他数字键确认");
scanf("%d",&n);
if(n==0)
CR();
loop:{};}
void SC()
{int k,j,t,n,w=-1;
if(m==0)
{printf("请先输入成绩!\n");
goto loop;};
printf("各学生成绩:\n");
{printf("学号 姓名 性别 出生日期 系别 第一科 第二科 第三科 第四科 平均\n");
for(k=0;k<o;k++)
printf("%-6d%-10s%-6s%-13s%-7s%-7.2f%-9.2f%-9.2f%-9.2f%-9.1f\n",stu[k].num,stu[k].name,
stu[k].sex,stu[k].brith,stu[k].academy,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].score[3],stu[k].average);}
chucuo:printf ("你要删除的学号:");
scanf("%d",&j);
for(t=0;t<o;t++)
{if (stu[t].num==j)w=t;}
if(w!=-1)
{o=o-1;
for (k=w;k<o;k++)
{stu[k].num=stu[k+1].num;
strcpy(stu[k].name,stu[k+1].name);
strcpy(stu[k].sex,stu[k+1].sex);
strcpy(stu[k].brith,stu[k+1].brith);
strcpy(stu[k].academy,stu[k+1].academy);
stu[k].score[0]=stu[k+1].score[0];
stu[k].score[1]=stu[k+1].score[1];
stu[k].score[2]=stu[k+1].score[2];
stu[k].score[3]=stu[k+1].score[3];
stu[k].average=stu[k+1].average;}}
if (w==-1) {printf("输入学号有误,请从新输入:");goto chucuo;};
printf("删除后各学生成绩:\n");
printf("学号 姓名 性别 出生日期 系别 第一科 第二科 第三科 第四科 平均\n");
for(k=0;k<o;k++)
{printf("%-6d%-10s%-6s%-13s%-7s%-7.2f%-9.2f%-9.2f%-9.2f%-9.1f\n",stu[k].num,stu[k].name,
stu[k].sex,stu[k].brith,stu[k].academy,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].score[3],stu[k].average);}
printf("重复删除请按 0,其他数字键确认");
scanf("%d",&n);
if(n==0)
SC();
loop:{};}
void TJ()
{
int k,i,j,a[30],t; float n[30],q;
if(m==0)
{printf("请先输入成绩!\n");
goto loop;};
printf("各学生成绩:\n");
{printf("学号 姓名 性别 出生日期 系别 第一科 第二科 第三科 第四科 平均\n");
for(k=0;k<o;k++)
printf("%-6d%-10s%-6s%-13s%-7s%-7.2f%-9.2f%-9.2f%-9.2f%-9.1f\n",stu[k].num,stu[k].name,
stu[k].sex,stu[k].brith,stu[k].academy,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].score[3],stu[k].average);}
for(i=0;i<o;i++)
a[i]=i;
for(i=0;i<o;i++)
n[i]=stu[i].average;
for(j=0;j<o-1;j++)
for(i=0;i<o-1-j;i++)
if(n[i]<n[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;
q=n[i];n[i]=n[i+1];n[i+1]=q;}
printf("按平均分排序\n");
{printf("学号 姓名 性别 出生日期 系别 第一科 第二科 第三科 第四科 平均\n");
for(k=0;k<o;k++)
printf("%-6d%-10s%-6s%-13s%-7s%-7.2f%-9.2f%-9.2f%-9.2f%-9.1f\n",stu[a[k]].num,stu[a[k]].name,
stu[a[k]].sex,stu[a[k]].brith,stu[a[k]].academy,stu[a[k]].score[0],stu[a[k]].score[1],stu[a[k]].score[2],stu[a[k]].score[3],stu[a[k]].average);}
chucuo:{printf("1 按第一科排序\n2 按第二科排序\n3 按第三科排序\n4 按第四科排序\n请输入:");
scanf("%d",&k);
if(k==1) j=0;
else if(k==2) j=1;
else if(k==3) j=2;
else if(k==4) j=3;
else {printf("出错,重新输入\n");goto chucuo;}
for(i=0;i<o;i++)
{n[i]=stu[i].score[j];
a[i]=i;};
for(k=0;k<o-1;k++)
for(i=0;i<o-1-k;i++)
if(n[i]<n[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;
q=n[i];n[i]=n[i+1];n[i+1]=q;}
{printf("按第%d科排序结果:\n",j+1);
printf("学号 姓名 性别 出生日期 系别 科目\n");
for(k=0;k<o;k++)
printf("%-6d%-10s%-6s%-13s%-7s%-7.2f\n",stu[a[k]].num,stu[a[k]].name,
stu[a[k]].sex,stu[a[k]].brith,stu[a[k]].academy,stu[a[k]].score[j]);}
printf("继续按1,其他数字键返回");
scanf("%d",&i);
if(i==1) goto chucuo;
loop:{};}}
void CX()
{
int x,y,k,t,i,j,q=0;
if(m==0)
{printf("请先输入成绩!\n");
goto loow;};
looq:printf("1 按学号查询\n2 查询不及格学生\n其他数字键退出\n");
scanf("%d",&x);
if(x==1)
loop:{printf("输入学号:\n");
scanf("%d",&y);
j=0;
for(k=0;k<o;k++)
if(y==stu[k].num)
{printf("学号 姓名 性别 出生日期 系别 第一科 第二科 第三科 第四科 平均\n");
printf("%-6d%-10s%-6s%-13s%-7s%-7.2f%-9.2f%-9.2f%-9.2f%-9.1f\n",stu[k].num,stu[k].name,
stu[k].sex,stu[k].brith,stu[k].academy,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].score[3],stu[k].average);j=1;}
if(j==0)
{printf("无此人,重新输入:\n");
goto loop;}
printf("继续按1,其他数字键返回\n");
scanf("%d",&i);
if(i==1)
goto loop;
else goto looq;}
else if(x==2)
{for(k=0;k<o;k++)
for(t=0;t<4;t++)
if(stu[k].score[t]<60)
{printf("学号 姓名 性别 出生日期 系别 第一科 第二科 第三科 第四科 平均\n");
printf("%-6d%-10s%-6s%-13s%-7s%-7.2f%-9.2f%-9.2f%-9.2f%-9.1f\n",stu[k].num,stu[k].name,
stu[k].sex,stu[k].brith,stu[k].academy,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].score[3],stu[k].average);q=1;break;};
if(q==0)
printf("全部及格!\n");
printf ("继续请按1,其他数字键退出:");
scanf ("%d",&k);
if(k==1)
goto looq;};
loow:{};
}
void XG()
{int k,j,t,n,w=-1; float x;
if(m==0)
{printf("请先输入成绩!\n");
goto loop;};
printf("各学生成绩:\n");
{printf("学号 姓名 性别 出生日期 系别 第一科 第二科 第三科 第四科 平均\n");
for(k=0;k<o;k++)
printf("%-6d%-10s%-6s%-13s%-7s%-7.2f%-9.2f%-9.2f%-9.2f%-9.1f\n",stu[k].num,stu[k].name,
stu[k].sex,stu[k].brith,stu[k].academy,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].score[3],stu[k].average);}
chucuo:printf ("你要修改的学号:");
scanf("%d",&j);
for(t=0;t<o;t++)
{if (stu[t].num==j)w=t;}
if(w!=-1)
{printf("请输入你要修改的信息:");
printf("\n修改的学号:\n");
scanf("%d",&stu[w].num);
printf("\n修改的姓名:\n");
scanf("%s",&stu[w].name);
printf ("\n修改的性别:\n");
scanf ("%s",&stu[w].sex);
printf("\n修改的出生日期:\n");
scanf("%s",&stu[w].brith);
printf("\n修改的系别:\n");
scanf("%s",&stu[w].academy);
printf("\n修改的分数:\n");
for(j=0;j<4;j++)
{printf("第%d科",j+1);
scanf("%f",&stu[w].score[j]);}}
x=0;
for(t=0;t<4;t++)
{x=x+stu[w].score[t];}
stu[w].average=x/4;
if (w==-1) {printf("输入学号有误,请从新输入:");goto chucuo;};
printf("修改后各学生成绩:\n");
printf("学号 姓名 性别 出生日期 系别 第一科 第二科 第三科 第四科 平均\n");
for(k=0;k<o;k++)
{printf("%-6d%-10s%-6s%-13s%-7s%-7.2f%-9.2f%-9.2f%-9.2f%-9.1f\n",stu[k].num,stu[k].name,
stu[k].sex,stu[k].brith,stu[k].academy,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].score[3],stu[k].average);}
printf("重复修改请按 0,其他数字键确认");
scanf("%d",&n);
if(n==0)
XG();
loop:{};}
热心网友
时间:2022-06-22 07:44
你这个问题在于scanf没有吧输入流清理干净,当你输入x,y,z回车的时候会把3个值存放到相应的地址空间中,但是你输入的回车还存放在输入缓冲区中,使得你第二次gets接收到的字符串就是一个回车,这样就一错到底了
解决办法就是接受一个字符把没有处理掉的字符清理掉就可以了
void creatf(File bb[10])
{ int i;
printf("please input the workers information:\n");
for(i=0;i<3;i++)
{ printf("please input the NO.%d's name: ",i);
gets(bb[i].NAME);
printf("please input his/her number,bs,zs: ");
scanf("%d%f%f",&bb[i].num,&bb[i].bs,&bb[i].zs);
getchar();
}
}
我自己测试过 没有问题或者你改成这样试试
while(getchar()!=EOF);
热心网友
时间:2022-06-22 07:44
你这个程序粘贴错了吧,编译都通不过,怎么能输入1个呢。
补充:
不晓得C语言有啥子机关,执行下面语句要出问题:
scanf("%d%f%f",&bb[i].num,&bb[i].bs,&bb[i].zs);
我这样对付的:
函数里面增加定义:
fload x,y;
scanf("%d%f%f",&bb[i].num,&x,&y);
bb[i].bs=x;
bb[i].zs=y;
热心网友
时间:2022-06-22 07:45
#include
<stdio.h>
#include
<conio.h>
#include
<stdlib.h>
typedef
struct
{
char
NAME[20];
int
num;
float
bs;
float
zs;
}File;
void
creatf(File*
bb)
{
int
i;
printf("please
input
the
workers
information:\n");
for(i=0;i<10;i++)
{
printf("please
input
the
NO.%d's
name:
",i);
gets(bb[i].NAME);
printf("please
input
his/her
number,bs,zs:
");
scanf("%d%f%f",&bb[i].num,&bb[i].bs,&bb[i].zs);
getchar();
}
}
void
findmin(File*
bb)
{
int
i;
File
t;
t=bb[0];
for(i=0;i<10;i++)
{
if
((t.bs+t.zs)>(bb[i].bs+bb[i].zs))
t=bb[i];
}
printf("the
worker's
information
is:
");
printf("%d,%s,%g,%g\n",t.num,t.NAME,t.bs,t.zs);
}
main()
{
File
bb[10];
system("cls");
creatf(bb);
findmin(bb);
}
热心网友
时间:2022-06-22 07:46
findmin函数中,t=bb[0]后面缺少了一个分号,f((t.bs+t.zs)>(bb[i].bs+bb[i].zs)最后少了一个小括号,if写成f了