c语言问题 先给100 完成在加

2024-11-01 15:35:57
推荐回答(4个)
回答1:

难怪没人答啊,我改了足有50个以上的error,
编译运行都没有问题了,逻辑没看,你自己调一调BUG什么的吧。

#include
#include
#include
#include
void zfpx(); //总分排序函数
void average(); //求平均分函数
void sum();
void save_message(); //总分函数
void delete_message(); //删除信息函数
void display_message(); //显示全部学生函数
void tianjia_message(); //添加学生信息函数
void search_name(); //查找学生信息函数
struct student * head = NULL, * p1, * p2;
struct student
{
char name[20];
int number[20];
char sex[20];
float score[2];
struct student *next;
};
typedef struct student stu;
int n;
stu *input_message()
{
stu *p1 ,*p2;
int i;
printf("输入学生个数\n");
scanf("%d",&n);
p1=head;
for(i=0;i<=n;i++)
{
p2=(stu*)malloc(sizeof(stu));
printf("输入姓名");
scanf("%s",&p2->name);
printf("输入性别");
scanf("%s",&p2->sex);
printf("输入学号");
scanf("%s",&p2->number);
printf("输入3门语文:数学:英语:分数(0-100):");
scanf("%d,%d,%d",&p2->score[0],&p2->score[1],&p2->score[2]);
p1->next=p2;//*尾插法不断建立链表*//
p1=p2;
}
p2->next=NULL; //*建表完成*//
return head;
}

void search_name()
{ stu *p2;
char s[20];
printf("输入要查询的姓名:\n");
scanf("%s",s);
p2=head;
while(strcmp(p2->name,s)&&p2!=NULL)//*判断条件*//
p2=p2->next; //指向下一个*//
if(p2==NULL)
printf("\n没有找到该学生的名字 %s\n",s);
else
{
printf(" 学号 || 性别 // 3门分数\n ");
printf(" %s %s %d %d %d ",p2->number,p2->sex,p2->score[0],p2->score[1],p2->score[2]);
}
system("cls");
}

void save_message()
{FILE *fp;
stu *p2;
char filename[20]; //文件长度
printf("写入文件名:\n");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL) //*测试能否打开*//
{
printf("不能打开文件\n");
exit(1);
}
printf("\n打开文件\n");
p2=head;
while(p2!=NULL)
{
fwrite(p2,sizeof(stu),1,fp); //*写入信息*//
p2=p2->next;
}
fclose(fp); //*关闭文件*//
printf("-----打开成功!-----\n");
}

void tianjia_message()
{
stu *p2;
char n[10];
printf("输入要添加学生的学号");
scanf("%s",n);
p2=head;
while(strcmp((char*)p2->number,n)&&p2!=NULL)//*判断条件*//
p2=p2->next;//指向下一个*//
if(p2==NULL)
printf("输入添加学生的名字");
scanf("%s",&p2->name);
printf("输入添加学生的性别");//修改信息*//
scanf("%s",&p2->sex);
printf("添加学生的分数");
scanf("%d,%d,%d",&p2->score[0],&p2->score[1],&p2->score[2]);
printf("添加成功");
system("cls");
}

void display_message()
{
stu *p2;
p2=head->next;
while(1)
{
printf("姓名=%s,学号=%d,性别=%s,数学分数=%f,英语分数=%f 语文分数=%f\n",p2->name,p2->number,p2->sex,p2->score[0],p2->score[1],p2->score[2]);
p2=p2->next;
}
}

//*删除信息*//
void delete_message()
{
char n[10];
stu *p1,*p2;
p1=head;
if (head==NULL)
printf("\n列表为空!\n");
else
{
printf("输入要删除的学号");
scanf("%s",&n);
p1 = head;
while (strcmp((char *)p1->number,n)!=0&&p1->next!=NULL)//*判断条件*//

{
p2=p1;
p1=p1->next;
}
if(strcmp((char *)p1->number,n)==0 )
{
if(p1==head) {

head=head->next;
free(p1);
}
else
{
p2->next=p1->next;

free(p1);
}
}
else printf("\n没有找到信息!\n");
}
printf("删除成功\n");

}

void sum() //计算总分
{char n[10];
int score;
stu *p2;
p2=head;
printf("输入你要计算的学号");
scanf("%s",&n);
while(strcmp((char *)p2->number,n)&&p2!=NULL)//*判断条件*//
p2=p1->next;//指向下一个*//
if(p2==NULL)
printf("没有发现信息");
else
{
score=(p2->score[0]+p2->score[1]+p2->score[2]);//计算总分*//
printf("总分为:%d",score);
}
}

void average() //计算平均分
{char n[10];
float score;
stu *p2;
p2=head;
printf("输入你要计算的学号");
scanf("%s",&n);
while(strcmp((char *)p2->number,n)&&p2!=NULL)//*判断条件*//
p2=p2->next;//指向下一个*//
if(p2==NULL)
printf("没有发现信息");
else
{
score=(p2->score[0]+p2->score[1]+p2->score[2])/3;//计算平均分*//
printf("平均分为:%f",score);
system("cls");
}
}

void zfpx()
{
int i,j,min;
struct student tmp;
for(i=0;i<=n-1;i++)
min=i;
for(j=0;j {
if(p1[i].score {
min=j;
}
}
tmp=p1[i];p1[i]=p1[min];p1[min]=tmp;

system("cls");
}

void main()
{
int nn;
printf("请输入你的选择(1~8)\n");
printf("\n================ 主菜单 =================\n");
printf(" 1 : 保存或打开文件 \n");
printf(" 2 : 新增一个学生 \n");
printf(" 3 : 删除一个学生 \n");
printf(" 4 : 显示所有学信息 \n");
printf(" 5 : 计算总分 \n");
printf(" 6 : 计算平均分 \n");
printf(" 7 : 按成绩排序 \n");
printf(" 8 : 查找信息 \n");
printf(" 9 : 退出 \n");
printf("===========================================\n");

scanf("%d",&nn);
system("cls");

switch(nn)
{
case 1:void save_message();
break;
case 2:void tianjia_message();
break;
case 3:void delete_message();
break;
case 4:void display_message();
break;
case 5:void sum();
break;
case 6:void average();
break;
case 7:void zfpx();
case 8:void search_name();
break;
case 9:free(p1),exit(0);
default:
break;
}
}

回答2:

问题真的是一大堆 ,能不能说说你的程序先执行哪个了

head根本没有正确的值,你的链表有问题啊

回答3:

神马问题,这么高调!!说来听听!!

回答4:

哪是你写的?