这两个有什么区别
qwertyuioplkkjhgfxvhjgujxfjgthhdyy
第一个s的类型是根据a和b的类型来指定
第二个s的类型指定为float类型
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student
{
int Student_number;
char Student_name[10];
int Student_grade;
char Student_major[10];
int Student_score_1;
int Student_score_2;
int Student_score_3;
int Student_average_score;
int Student_Sum_average;
struct student* pre;
struct student* next;
}Student;
typedef struct student_message
{
int Student_Num;
Student* p;
Student* head;
}Student_Message;
void save_file(Student_Message* Stu);
void show_student(Student_Message* Stu);
void add_student(Student_Message* Stu);
Student* search_student(Student_Message* Stu);
int delete_student(Student_Message* Stu);
int change_student(Student_Message* Stu);
void Search_Student(Student_Message* Stu);
void clean_student();
void land();
void keydowm(Student_Message* Stu);
void sort(Student_Message*Stu);
void readstudent(Student_Message*Stu);
void save_file(Student_Message*Stu)
{
Student* temp = Stu->head;
FILE* fp= NULL;
fp = fopen("学生信息.txt", "w+");
if (fp == NULL)
return;
//fprintf(fp, "学生学号 学生年级 学生年级 学生专业 学生成绩\n");
fprintf(fp, "%d ", Stu->Student_Num);
while (temp->next)
{
fprintf(fp, "%d\t%d\t%s\t%s\t%d\t", temp->Student_number, temp->Student_grade,
temp->Student_name, temp->Student_major, temp->Student_score_1);
temp = temp->next;
}
fprintf(fp, "%d\t%d\t%s\t%s\t%d", temp->Student_number, temp->Student_grade,
temp->Student_name, temp->Student_major, temp->Student_score_1);
fclose(fp);
}
void show_student(Student_Message* Stu)
{
Student* temp = Stu->head;
while (temp->next)
{
printf("学生学号 学生年级 学生姓名 "
"学生专业 学生的成绩 \n%d\t%d\t%s\t%s\t%d\n", temp->Student_number, temp->Student_grade,
temp->Student_name, temp->Student_major, temp->Student_score_1);
temp = temp->next;
}
printf("学生学号 学生年级 学生姓名 "
"学生专业 学生的成绩 \n%d\t%d\t%s\t%s\t%d\n", temp->Student_number, temp->Student_grade,
temp->Student_name, temp->Student_major, temp->Student_score_1);
}
void add_student(Student_Message*Stu)
{
Student* temp = NULL;
Student* new_temp = (Student*)malloc(sizeof(Student));
printf("请输入学生学号 请输入学生年级 请输入学生的成绩 "
" 请输入学生姓名 请输入学生专业 \n");
scanf("%d%d%d%s%s", &(new_temp->Student_number),&(new_temp->Student_grade),
&(new_temp->Student_score_1),(new_temp->Student_name), (new_temp->Student_major));
/*printf("请输入学生学号 ,请输入学生年级 , 请输入学生姓名 , "
"请输入学生专业 ,请输入学生的成绩 \n%d\t%d\t%s\t%s\t%d\n", new_temp->Student_number, new_temp->Student_grade,
new_temp->Student_name, new_temp->Student_major, new_temp->Student_score_1);*/
if (Stu->head == NULL)
{
Stu->head = new_temp;
Stu->head->pre = NULL;
Stu->head->next = NULL;
/*Stu->p = Stu->head->next;
Stu->p->pre = Stu->head;*/
Stu->p = Stu->head;
}
else
{
//temp = new_temp;
new_temp->pre = Stu->p;
Stu->p->next = new_temp;
Stu->p = Stu->p->next;
Stu->p->next = NULL;
}
Stu->Student_Num++;
show_student(Stu);
}
Student* search_student(Student_Message*Stu)
{
char name[12];
Student* temp=Stu->head;
printf("请输入你要查询学生的姓名\n");
scanf("%s", name);
while (temp->next != NULL && strcmp(name, temp->Student_name) != 0)
temp = temp->next;
if (strcmp(name, temp->Student_name) == 0)
return temp;
else
return NULL;
}
int delete_student(Student_Message*Stu)
{
Student*temp=search_student(Stu);
if (temp == NULL)
{
printf("删除节点失败\n");
return 0;
}
else
{
if(temp->pre!=NULL)
temp->pre->next = temp->next;
free(temp);
printf("删除节点成功\n");
return 1;
}
show_student(Stu);
Stu->Student_Num--;
}
int change_student(Student_Message* Stu)
{
Student* temp = search_student(Stu);
if (temp == NULL)
{
printf("修改失败\n");
}
else
{
printf("请输入学生学号,请输入学生年级,请输入学生姓名,"
"请输入学生专业,请输入学生的成绩\n");
scanf("%d%d%s%s%d", &temp->Student_number, &temp->Student_grade,
temp->Student_name, temp->Student_major, &temp->Student_score_1);
printf("修改成功\n");
}
show_student(Stu);
}
void Search_Student(Student_Message*Stu)
{
Student *temp=search_student(Stu);
printf("请输入学生学号 ,请输入学生年级 , 请输入学生姓名 , "
"请输入学生专业 ,请输入学生的成绩 \n%d\t%d\t%s\t%s\t%d\n", temp->Student_number, temp->Student_grade,
temp->Student_name, temp->Student_major, temp->Student_score_1);
}
void clean_student()
{
}
void land()
{
int n = 0,flag=1;
printf("-----------------请输入你的密码,你有三次机会----------------\n");
char password[7] = {'q','w','e','r','t','y','\0'};
char userpassword[7];
while (n < 3)
{
printf("----------------请输入你的密码,你现在还有%d机会--------------\n",3-n);
scanf("%s", userpassword);
printf("%d",strcmp(userpassword, password));
if (strcmp(userpassword, password) == 0)
return;
n++;
}
exit(0);
}
void sort(Student_Message* Stu)
{
Student temp;
Student* Phead = Stu->head;
Student* Ptail = Phead;
while (Phead)
{
Ptail = Phead;
while (Ptail)
{
if(Phead->Student_score_1>=Ptail->Student_score_1)
Ptail = Ptail->next;
else
{
temp.Student_score_1 = Phead->Student_score_1;
temp.Student_grade = Phead->Student_grade;
strcpy( temp.Student_major ,Phead->Student_major);
strcpy(temp.Student_name, Phead->Student_name);
temp.Student_number = Phead->Student_number;
Phead->Student_score_1 = Ptail->Student_score_1;
Phead->Student_grade = Ptail->Student_grade;
Phead->Student_number = Ptail->Student_number;
strcpy(Phead->Student_major, Ptail->Student_major);
strcpy(Phead->Student_name, Ptail->Student_name);
Ptail->Student_score_1 = temp.Student_score_1;
Ptail->Student_grade = temp.Student_grade;
Ptail->Student_number = temp.Student_number;
strcpy(Ptail->Student_major, temp.Student_major);
strcpy(Ptail->Student_name,temp.Student_name );
Ptail = Ptail->next;
}
}
Phead = Phead->next;
}
}
void readstudent(Student_Message*Stu)
{
Student* new_temp=(Student*)malloc(sizeof(Student));
FILE* fp = fopen("学生信息.txt", "r");
if (fp == NULL)
{
printf("读取文件失败\n");
return;
}
fscanf(fp,"%d ", &Stu->Student_Num);
fscanf(fp, "%d\t%d\t%s\t%s\t%d\t", &new_temp->Student_number, &new_temp->Student_grade,
new_temp->Student_name, new_temp->Student_major, &new_temp->Student_score_1);
if (Stu->head == NULL)
{
Stu->head = new_temp;
Stu->head->pre = NULL;
Stu->head->next = NULL;
/*Stu->p = Stu->head->next;
Stu->p->pre = Stu->head;*/
Stu->p = Stu->head;
}
for (int i = 0; i < Stu->Student_Num - 1; i++)
{
Student* temp=(Student*)malloc(sizeof(Student));
fscanf(fp, "%d\t%d\t%s\t%s\t%d\t", &temp->Student_number, &temp->Student_grade,
temp->Student_name, temp->Student_major, &temp->Student_score_1);
temp->pre = Stu->p;
Stu->p->next = temp;
Stu->p = Stu->p->next;
Stu->p->next = NULL;
}
fclose(fp);
}
void keydowm(Student_Message*Stu)
{
int choice;
printf("------------------------学生信息管理系统---------------------------\n\n");
printf("1.添加学生信息 2.查找学生信息\n");
printf("3.修改学生信息 4.删除学生信息\n");
printf("5.展示学生信息 6.退出\n");
printf("7.保存到txt文件 8.依照学生成绩排序\n");
printf("请在键盘敲下你的命令\n");
printf("--------------------------------------------------------------------\n");
scanf("%d", &choice);
getchar();
switch (choice)
{
case 1:
add_student(Stu); break;
case 2:
Search_Student(Stu);
break;
case 3:
change_student(Stu);
break;
case 4:
delete_student(Stu);
break;
case 5:
show_student(Stu);
break;
case 6:
exit(0);
break;
case 7:
save_file(Stu);
break;
case 8:
sort(Stu);
break;
default:
break;
}
system("pause");
system("cls");
}
int main()
{
Student_Message Stu;
Stu.Student_Num = 0;
Stu.head = NULL;
Stu.p = Stu.head;
land();
system("cls");
readstudent(&Stu);
while (1)
{
keydowm(&Stu);
}
return 0;
}
对不起,您的问题不太清楚,请提供更明确的信息和问题的上下文,以便我更好地帮助您解决问题。如果您需要关于C语言方面的问题,请详细说明您遇到的问题或困难,并提供相关的代码和错误提示。感谢您的合作!
如果是C语言, 如果s和sum的类型是float, 那么结果不同
整数相除还是整数, 舍去余数.
如 5/2 == 2
强制转换为float, 则以浮点方式运算
如 5.0/2 == 2.5