25.2.2学习内容

通过前序遍历和后序遍历求可能的二叉树的种数(AI生成):

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>struct TreeNode {char val;struct TreeNode *left;struct TreeNode *right;
};int findIndex(char* arr, int start, int end, int target) {for (int i = start; i <= end; i++) {if (arr[i] == target) {return i;}}return -1;
}struct TreeNode* buildHelper(char* pre, int preStart, int preEnd, char* post, int postStart, int postEnd) {if (preStart > preEnd) {return NULL;}struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));root->val = pre[preStart];root->left = NULL;root->right = NULL;if (preStart == preEnd) {return root;}int leftRootVal = pre[preStart + 1];int index = findIndex(post, postStart, postEnd, leftRootVal);if (index == -1) { free(root);return NULL;}int leftSize = index - postStart + 1;root->left = buildHelper(pre, preStart + 1, preStart + leftSize, post, postStart, index);root->right = buildHelper(pre, preStart + leftSize + 1, preEnd, post, index + 1, postEnd - 1);return root;
}struct TreeNode* constructFromPrePost(char* pre, int preSize, char* post, int postSize) {if (preSize == 0 || postSize == 0 || preSize != postSize) {return NULL;}return buildHelper(pre, 0, preSize - 1, post, 0, postSize - 1);
}
void check(struct TreeNode *L,long long int *num){if(L==NULL||(L->left==NULL&&L->right==NULL))return ;if(L->left==NULL||L->right==NULL)(*num)++;if(L->left!=NULL)check(L->left,num);if(L->right!=NULL)check(L->right,num);
}
void freeTree(struct TreeNode* root) {if (root == NULL) return;freeTree(root->left);freeTree(root->right);free(root);
}
int main(){int prelength,postlength;char pre[101],post[101];scanf("%100s %100s",pre,post);prelength=strlen(pre),postlength=strlen(post);struct TreeNode *L=constructFromPrePost(pre,prelength,post,postlength);if(L!=NULL){long long int num=0;check(L,&num);printf("可能的二叉树有%lld种。",(long long int)pow(2,num));}freeTree(L);return 0;
}

就课设的缺点的修改和升级:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Class {struct Student {char Name[50];char Num[20];int grade[10];} student[100], student0;
} class[10];
void print_main() {printf("\n         请选择需要的服务:\n");printf("         A.分数操作      B.查阅操作\n");printf("         C.信息操作      D.统计操作\n");printf("         注意:输入“0”将结束程序!\n         输入“help”将打开帮助指南!\n\n");
}
void help_main() {printf("\n                帮助指南\n");printf("A.分数操作\n");printf("通过姓名或学号增加某同学的某些平时成绩。\n");printf("B.查阅操作\n");printf("通过学号或班级序号查询某同学的一些成绩或某班的成绩。\n");printf("C.信息操作\n");printf("通过学号或姓名来增加或删除信息。\n");printf("D.统计操作\n");printf("通过一些操作来实现排序、找最大值、找最小值、求平均值、求通过率这些统计功能。\n");
}
void save_data(){FILE *a;a=fopen("file.txt","w");for(int i=0;i<10;i++){for(int j=0;j<100;j++){if(strlen(class[i].student[j].Name)!=0){fprintf(a,"%d <%s> %s %d %d %d %d %d %d %d %d %d %d\n",i+1,class[i].student[j].Name,class[i].student[j].Num,class[i].student[j].grade[0],class[i].student[j].grade[1],class[i].student[j].grade[2],class[i].student[j].grade[3],class[i].student[j].grade[4],class[i].student[j].grade[5],class[i].student[j].grade[6],class[i].student[j].grade[7],class[i].student[j].grade[8],class[i].student[j].grade[9]);}}}fclose(a);
}
int input_num(int *class_num) {char a[100];scanf("%s", a);int length = strlen(a);if (length > 2)return 1;if (length == 1 && a[0] <= '9' && a[0] >= '0') {*class_num = a[0] - '0';return *class_num;} else if (length == 2 && a[0] <= '9' && a[0] > '0' && a[1] <= '9' && a[1] >= '0') {*class_num = (a[0] - '0') * 10 + (a[1] - '0');return *class_num;} else if (length == 3 && a[0] == '1' && a[1] == '0' && a[2] == '0')return 100;return 1;
}
void input_num_1(int *a, int *b) {*a = 0,*b = 0;input_num(a);input_num(b);
}
int inquire_main(char a[], int *x, int *y) {for (int i = 0; i < 10; i++) {for (int j = 0; j < 100; j++) {if (strcmp(class[i].student[j].Num, a) == 0 || strcmp(class[i].student[j].Name, a) == 0) {*x = i,*y = j;return 1;}}}return 0;
}
int inquire_grade(int class1, int student1, int num0) {if (class[class1].student[student1].grade[num0] != -1)return 1;else return 0;
}
int inquire_name(int class1, int *student1, char a[]) {for (int j = 0; j < 100; j++) {if (strcmp(class[class1].student[j].Num, a) == 0 || strcmp(class[class1].student[j].Name, a) == 0) {*student1 = j;return 1;}}return 0;
}
int inquire_class(int *class1) {while (1) {int i;while (1) {printf("请输入班级:");input_num(class1);if (*class1 > 0 && *class1 < 11)break;else printf("数据不合理,请重新输入!\n");}for (i = 0; i < 100; i++) {if (class[(*class1) -1].student[i].Name[0] != '\0')break;}if (i != 100)break;else {printf("%d班没有数据!无法查阅!\n", *class1);printf("是否重新输入?\nA.重新输入       B.不重新输入\n");while (1) {char d[100];printf("请输入:");scanf("%s", d);if ((d[0] == 'A' || d[0] == 'a') && (strlen(d) == 1))break;else if ((d[0] == 'B' || d[0] == 'b') && (strlen(d) == 1))return 0;else printf("数据不合理,请重新输入!\n");}}}return 1;
}
int inquire_number(int class1) {for (int i = 0; i < 100; i++) {if (strlen(class[class1].student[i].Name) == 0) {return i;}}return -1;
}
int input_1(int *class1, int *student1) {char b[21];while (1) {printf("请输入班级序号或学生学号:");scanf("%s", b);int c = strlen(b);if (c == 1) {if (b[0] > '0' && b[0] <= '9') {*class1 = b[0] - '0',*student1 = 0;return 0;} else if (b[0] == '0')return 1;else printf("数据不合理,请重新输入!\n");} else if (c == 2) {if (b[0] == '1' && b[1] == '0') {*class1 = 10,*student1 = 0;return 0;} else printf("数据不合理,请重新输入!\n");} else {if (inquire_main(b, class1, student1))return -1;else printf("该学号不存在!请重新输入!\n");}}
}
void input_2(int *class1, int *student1) {char c[51];while (1) {printf("请输入学生姓名或学生学号:");getchar();fgets(c, sizeof(c), stdin);c[strcspn(c, "\n")] = '\0';if (!inquire_main(c, class1, student1))printf("该学号或姓名不存在!请重新输入!\n");else break;}
}
void input_choose(int *a, int *b, int *c) {while (1) {printf("请选择输入成绩方式:\n");printf("A.单次输入              B.区间输入\n");printf("请输入:");char a1[100];scanf("%s", a1);if ((a1[0] == 'A' || a1[0] == 'a') && (strlen(a1) == 1)) {int a2 = 0;while (1) {printf("请输入次数:");input_num(&a2);if (a2 < 11 && a2 > 0)break;else printf("数据不合理,请重新输入!\n");}*a = a2,*b = 0,*c = 0;break;} else if ((a1[0] == 'B' || a1[0] == 'b') && (strlen(a1) == 1)) {int a2 = 0, a3 = 0, x = 0, y = 0;while (1) {if (!x && !y) {printf("请输入起始次数和终止次数(用空格隔开):");input_num_1(&a2, &a3);}if (x && !y) {printf("请重新输入终止次数:");input_num(&a3);}if (!x && y) {printf("请重新输入起始次数:");input_num(&a2);}if (a2 < 11 && a2 > 0)x = 1;if (a3 < 11 && a3 > 0)y = 1;if (a2 > a3)x = 0, y = 0;if (x && y)break;printf("存在数据不合理,请重新输入!\n");}*a = 0,*b = a2,*c = a3;break;} else printf("数据不合理,请重新输入!\n");}
}
int input_main_choose() {printf("是否需要多组输入?\nA.不需要      B.需要\n");char a[100];while (1) {printf("请输入:");scanf("%s", a);if ((a[0] == 'A' || a[0] == 'a') && (strlen(a) == 1)) {printf("注意:输入单个“0”将退出该操作!\n");return 0;} else if ((a[0] == 'B' || a[0] == 'b') && (strlen(a) == 1)) {printf("注意:输入单个“0”将停止多组输入!\n");return 1;} else printf("数据不合理,请重新输入!\n");}
}
void input_main_grade(int class1, int student1, int c, int *b) {char a[100];if (inquire_grade(class1, student1, c - 1)) {printf("第%d次成绩已存在,是否覆盖?\nA.覆盖     B.不覆盖     C.显示成绩\n", c);while (1) {printf("请输入:");scanf("%s", a);if ((a[0] == 'A' || a[0] == 'a') && (strlen(a) == 1)) {*b = 1;break;} else if ((a[0] == 'B' || a[0] == 'b') && (strlen(a) == 1))break;else if ((a[0] == 'C' || a[0] == 'c') && (strlen(a) == 1))printf("第%d次原成绩为:%d。\n请选择是否覆盖?\nA.覆盖     B.不覆盖\n", c, class[class1].student[student1].grade[c - 1]);else printf("数据不合理,请重新输入!\n");}} else *b = 1;
}
void input_main() {printf("分数操作:\n");int y = 0;y = input_main_choose();while (1) {int x, class1, student1, num1, num2, num3;x = input_1(&class1, &student1);if (x == 1)break;if (x != -1)input_2(&class1, &student1);input_choose(&num1, &num2, &num3);if (!num1) {for (int i = num2; i <= num3; i++) {int b = 0, temp = 0;long long a1;input_main_grade(class1, student1, i, &b);if (!b)continue;printf("请输入第%d次成绩:", i);a1=(long long)input_num(&temp);if (a1 <= 100 && a1 >= 0)class[class1].student[student1].grade[i - 1] = a1;else {printf("成绩不合理!请重新输入!\n");i--;}}} else {int b = 0, temp = 0;long long a1;input_main_grade(class1, student1, num1, &b);if (b) {while (1) {printf("请输入第%d次成绩:", num1);a1 = (long long)input_num(&temp);if (a1 <= 100 && a1 >= 0) {class[class1].student[student1].grade[num1 - 1] = a1;break;} else printf("成绩不合理!请重新输入!\n");}}}printf("成功!\n");if (y == 0)break;}
}
int information_input() {while (1) {int class0, n = 0, m, x;while (1) {printf("请输入班级序号:");input_num(&class0);if (class0 > 0 && class0 < 10)break;else printf("数据不合理!请重新输入!\n");}for (int i = 0; i < 100; i++) {if (class[class0 - 1].student[i].Name[0] == '\0') {n = 1;char a[50];printf("请输入学生姓名:");getchar();fgets(a, sizeof(a), stdin);a[strcspn(a, "\n")] = '\0';if (!inquire_name(class0 - 1, &m, a)) {strcpy(class[class0 - 1].student[i].Name, a);} else {inquire_name(class0 - 1, &m, a);printf("该班已存在同名,其信息为:\n");printf("姓名:%s      学号:%s\n", a, class[class0 - 1].student[m].Num);printf("是否新增?\nA.是     B.否\n");char b[101];while (1) {printf("请输入:");scanf("%100s", b);if ((b[0] == 'A' || b[0] == 'a') && (strlen(b) == 1))break;else if ((b[0] == 'B' || b[0] == 'b') && (strlen(b) == 1)) {printf("新增失败!\n");return 0;} else printf("数据不合理,请重新输入!\n");}}while (1) {char c[21];x = class0 - 1;printf("请输入学生学号:");scanf("%20s", c);int s = strlen(c), s0 = 0;for (int i = 0; i < s; i++) {if (c[i] >= '0' && c[i] <= '9')s0 = 0;else {s0 = 1;break;}}if (s0) {printf("学号数据不合理,请重新输入!\n");continue;}if (!inquire_main(c, &x, &m)) {strcpy(class[class0 - 1].student[i].Num, c);break;} else printf("该学号已存在!请重新输入!\n");}break;}}if (!n)printf("%d班已经满了!\n", class0);else break;}save_data();printf("新增成功!\n");return 1;
}
void information_remove() {int x, y;char a[18];while (1) {printf("请输入需要删除的学生的学号:");scanf("%s", a);if (inquire_main(a, &x, &y))break;else printf("该学号不存在!请重新输入!\n");}class[x].student[y] = class[x].student0;save_data();printf("成功!\n");
}
void information_main() {printf("信息操作:\n");printf("请选择操作:\nA.增加信息       B.删除信息\n");char a[100];while (1) {printf("请输入:");scanf("%s", a);if ((a[0] == 'A' || a[0] == 'a') && (strlen(a) == 1)) {information_input();break;} else if ((a[0] == 'B' || a[0] == 'b') && (strlen(a) == 1)) {information_remove();break;} else printf("数据不合理,请重新输入!\n");}
}
int consult_choose() {printf("请选择需要的操作:\nA.查阅单人部分成绩          B.查阅单人成绩          C.查阅单班成绩\n");char a[100];while (1) {printf("请输入:");scanf("%s", a);if ((a[0] == 'A' || a[0] == 'a') && (strlen(a) == 1))return 1;else if ((a[0] == 'B' || a[0] == 'b') && (strlen(a) == 1))return 2;else if ((a[0] == 'C' || a[0] == 'c') && (strlen(a) == 1))return 3;else printf("数据不合理,请重新输入!\n");}return 0;
}
void consult_1_choose(int *a, int *b, int *c) {printf("请选择查询范围:\nA.单次查询       B.区间查询\n");int x = 0;char d[100];while (1) {printf("请输入:");scanf("%s", d);if ((d[0] == 'A' || d[0] == 'a') && (strlen(d) == 1)) {x = 1;break;} else if ((d[0] == 'B' || d[0] == 'b') && (strlen(d) == 1)) {x = 2;break;} else printf("数据不合理,请重新输入!\n");}if (x == 1) {int a2;while (1) {printf("请输入次数:");input_num(&a2);if (a2 < 11 && a2 > 0)break;else printf("数据不合理,请重新输入!\n");}*a = a2,*b = 0,*c = 0;} else {int a2, a3, x = 0, y = 0;while (1) {if (!x && !y) {printf("请输入起始次数和终止次数(用空格隔开):");input_num_1(&a2, &a3);}if (x && !y) {printf("请重新输入终止次数:");input_num(&a3);}if (!x && y) {printf("请重新输入起始次数:");input_num(&a2);}if (a2 < 11 && a2 > 0)x = 1;if (a3 < 11 && a3 > 0)y = 1;if (a2 > a3)x = 0, y = 0;if (x && y)break;printf("存在数据不合理,请重新输入!\n");}*a = 0,*b = a2,*c = a3;}
}
int consult_1() {int class1, student1, x = -1, y, z;if (!inquire_class(&class1))return 0;while (1) {printf("请输入学生姓名或学号:");char a[20];getchar();fgets(a, sizeof(a), stdin);a[strcspn(a, "\n")] = '\0';if (inquire_name(class1 - 1, &student1, a))break;else printf("该姓名或学号在该班不存在,请重新输入!\n");}consult_1_choose(&x, &y, &z);if (x != 0 && y == 0)printf("%s的第%d次成绩是%d。\n", class[class1 - 1].student[student1].Name, x, class[class1 - 1].student[student1].grade[x - 1]);else {printf("%s的第%d次到第%d次成绩是:", class[class1 - 1].student[student1].Name, y, z);for (int i = y; i <= z; i++) {printf("%d ", class[class1 - 1].student[student1].grade[i - 1]);}}printf("\n");return 0;
}
int consult_2() {int class1, student1;if (!inquire_class(&class1))return 0;while (1) {printf("请输入学生姓名或学号:");char a[20];getchar();fgets(a, sizeof(a), stdin);a[strcspn(a, "\n")] = '\0';if (inquire_name(class1 - 1, &student1, a))break;else printf("该姓名或学号在该班不存在,请重新输入!\n");}printf("%s的成绩是:", class[class1 - 1].student[student1].Name);for (int i = 0; i < 10; i++) {printf("%d ", class[class1 - 1].student[student1].grade[i]);}printf("\n");return 0;
}
int consult_3() {int class1;if (!inquire_class(&class1))return 0;printf("%d班的成绩为:\n", class1);printf("姓名                     学号                               成绩\n");for (int i = 0; i < 100; i++) {if (class[class1 - 1].student[i].Name[0] == '\0')continue;printf("%s", class[class1 - 1].student[i].Name);for (int j = 0; j < 20 - (int)strlen(class[class1 - 1].student[i].Name) && j < 14; j++) {printf(" ");}printf("%s", class[class1 - 1].student[i].Num);for (int j = 0; j < 16 - (int)strlen(class[class1 - 1].student[i].Num) && j < 14; j++) {printf(" ");}for (int j = 0; j < 10; j++) {printf("% 4d ", class[class1 - 1].student[i].grade[j]);}printf("\n");}return 0;
}
void consult_main() {printf("查阅操作:\n");int a = consult_choose();if (a == 1)consult_1();if (a == 2)consult_2();if (a == 3)consult_3();
}
void statistics_average_class_choose(double (*p)[2]) {printf("请选择查询班级的方式:A.单班查询        B.区间查询\n");char b[100];while (1) {printf("请输入:");scanf("%s", b);if ((b[0] == 'A' || b[0] == 'a') && (strlen(b) == 1)) {int a2;while (1) {printf("请输入班级序号:");input_num(&a2);if (a2 < 11 && a2 > 0)break;else printf("数据不合理,请重新输入!\n");}printf("%d班的平均值是%.2lf。\n", a2, *(*(p + (a2 - 1)) + 1));break;} else if ((b[0] == 'B' || b[0] == 'b') && (strlen(b) == 1)) {int a2, a3, x = 0, y = 0;while (1) {if (!x && !y) {printf("请输入起始次数和终止次数(用空格隔开):");input_num_1(&a2, &a3);}if (x && !y) {printf("请重新输入终止次数:");input_num(&a2);}if (!x && y) {printf("请重新输入起始次数:");input_num(&a2);}if (a2 < 11 && a2 > 0)x = 1;if (a3 < 11 && a3 > 0)y = 1;if (a2 > a3)x = 0, y = 0;if (x && y)break;printf("存在数据不合理,请重新输入!\n");}for (int i = a2; i <= a3; i++) {printf("%d班的平均值是%.2lf。\n", i, *(*(p + (i - 1)) + 1));}break;} else printf("\n数据不合理,请重新输入!\n");}
}
void statistics_average_class_main(int a, double (*p)[2]) {for (int i = 0; i < 10; i++) {int b = 0, n = 0;for (int j = 0; j < 100; j++) {if (class[i].student[j].Name[0] == '\0')continue;else n++;for (int k = 0; k < 10; k++) {b += class[i].student[j].grade[k];}}if (n != 0) * (*(p + i) +0) = (double)(i + 1),*(*(p + i) +1) = b / (double)n;else *(*(p + i) +0) = (double)(i + 1),*(*(p + i) +1) = 0.0;}if (a == 1)statistics_average_class_choose(p);
}
int statistics_average_personage_choose_1(int class1, double (*p)[2]) {int student1, a = class1, b = 0;char c[100];while (1) {printf("请输入学生姓名或学生学号:");getchar();fgets(c, sizeof(c), stdin);c[strcspn(c, "\n")] = '\0';if (strlen(c) == 1) {if (c[0] == '0')return 0;}b = inquire_main(c, &a, &student1);if (!b)printf("该学号或姓名不存在!请重新输入!\n");else {if (a != class1) {printf("该学号或姓名存在,但不是%d班的!\n", class1 + 1);a = class1;} else break;}}printf("%s的平均值是%.2lf。\n", class[class1].student[student1].Name, *(*(p + student1) +1));return 1;
}
void statistics_average_personage_choose(int class1, double (*p)[2]) {printf("是否需要多组输入?\nA.不需要      B.需要\n");char a[100];while (1) {printf("请输入:");scanf("%s", a);if ((a[0] == 'A' || a[0] == 'a') && (strlen(a) == 1)) {statistics_average_personage_choose_1(class1, p);break;} else if ((a[0] == 'B' || a[0] == 'b') && (strlen(a) == 1)) {while (1) {int n = 1;n = statistics_average_personage_choose_1(class1, p);if (!n)break;}break;} else printf("\n数据不合理,请重新输入!\n");}}
void statistics_average_personage_main(int a, int class1, double (*p)[2]) {for (int i = 0; i < 100; i++) {double b = 0;if (class[class1 - 1].student[i].Name[0] == '\0')continue;else {for (int j = 0; j < 10; j++) {b += class[class1 - 1].student[i].grade[j];}*(*(p + i) +0) = (double)(i),*(*(p + i) +1) = b / 10.0;}}if (a == 1)statistics_average_personage_choose(class1 - 1, p);
}
void statistics_average_main() {double a[10][2], c[100][2];printf("请选择需要求平均值的对象:\nA.班级      B.个人\n");char b[100];while (1) {printf("请输入:");scanf("%s", b);if ((b[0] == 'A' || b[0] == 'a') && (strlen(b) == 1)) {statistics_average_class_main(1, a);break;} else if ((b[0] == 'B' || b[0] == 'b') && (strlen(b) == 1)) {int d;while (1) {printf("请输入需要求平均值的班级:");input_num(&d);if (d > 0 && d < 11)break;else printf("数据不合理,请重新输入!\n");}statistics_average_personage_main(1, d, c);break;} else printf("\n数据不合理,请重新输入!\n");}}
void statistics_sort_class() {printf("注意:成绩将以每班平均分数进行排序!\n");double a[10][2], c = 0;printf("请选择排序结果形式:\nA.升序     B.降序\n");char b[100];while (1) {printf("请输入:");scanf("%s", b);if ((b[0] == 'A' || b[0] == 'a') && (strlen(b) == 1)) {c = 1;break;} else if ((b[0] == 'B' || b[0] == 'b') && (strlen(b) == 1))break;else printf("\n数据不合理,请重新输入!\n");}statistics_average_class_main(0, a);for (int i = 0; i < 9; i++) {int k = i;for (int j = i + 1; j < 10; j++) {if (c) {if (a[j][1] < a[k][1])k = j;} else {if (a[j][1] > a[k][1])k = j;}}double t = a[k][1];a[k][1] = a[i][1], a[i][1] = t;t = a[k][0], a[k][0] = a[i][0], a[i][0] = t;}printf("班级  平均分\n");for (int i = 0; i < 10; i++) {printf("%.0lf", a[i][0]);for (int j = 0; j < (a[i][0] == 10 ? 4 : 5); j++) {printf(" ");}printf("%.2lf\n", a[i][1]);}
}
void statistics_sort_personage() {int d, c = 0;double a[100][2];for (int i = 0; i < 100; i++)a[i][0] = i;while (1) {printf("请输入需要排序的班级:");input_num(&d);if (d > 0 && d < 11)break;else printf("数据不合理,请重新输入!\n");}statistics_average_personage_main(0, d, a);printf("注意:成绩将以个人平均分数进行排序!\n");printf("请选择排序结果形式:\nA.升序     B.降序\n");char b[100];while (1) {printf("请输入:");scanf("%s", b);if ((b[0] == 'A' || b[0] == 'a') && (strlen(b) == 1)) {c = 1;break;} else if ((b[0] == 'B' || b[0] == 'b') && (strlen(b) == 1))break;else printf("数据不合理,请重新输入!\n");}for (int i = 0; i < 99; i++) {int k = i;for (int j = i + 1; j < 100; j++) {if (c) {if (a[j][1] < a[k][1])k = j;} else {if (a[j][1] > a[k][1])k = j;}}double t = a[k][1];a[k][1] = a[i][1], a[i][1] = t;t = a[k][0], a[k][0] = a[i][0], a[i][0] = t;}printf("姓名                     学号       平均值\n");for (int i = 0; i < 100; i++) {if (class[d - 1].student[(int)(a[i][0])].Name[0] == '\0')continue;printf("%s", class[d - 1].student[(int)(a[i][0])].Name);for (int j = 0; j < 20 - (int)strlen(class[d - 1].student[(int)(a[i][0])].Name) && j < 14; j++) {printf(" ");}printf("%s", class[d - 1].student[(int)(a[i][0])].Num);for (int j = 0; j < 16 - (int)strlen(class[d - 1].student[(int)(a[i][0])].Num) && j < 14; j++) {printf(" ");}printf("%.2lf\n", a[i][1]);}
}
void statistics_sort_main() {printf("请选择排序对象:\nA.班级      B.个人\n");char b[100];while (1) {printf("请输入:");scanf("%s", b);if ((b[0] == 'A' || b[0] == 'a') && (strlen(b) == 1)) {statistics_sort_class();break;} else if ((b[0] == 'B' || b[0] == 'b') && (strlen(b) == 1)) {statistics_sort_personage();break;} else printf("\n数据不合理,请重新输入!\n");}
}
void statistics_max_min_class(int a) {if (a)printf("注意:成绩最大值将以每班平均分数进行判断!\n");else printf("注意:成绩最小值将以每班平均分数进行判断!\n");double b[10][2];double d;statistics_average_class_main(0, b);d = b[0][1];if (a) {for (int i = 1; i < 10; i++) {if (b[i][1] == 0)continue;if (d < b[i][1])d = b[i][1];}} else {for (int i = 1; i < 10; i++) {if (b[i][1] == 0)continue;if (d > b[i][1])d = b[i][1];}}if (a)printf("最大值是%.2lf。\n", d);else printf("最小值是%.2lf。\n", d);
}
int statistics_max_min_personage(int a) {if (a)printf("注意:成绩最大值将以每个学生的平均分数进行判断!\n");else printf("注意:成绩最小值将以每个学生的平均分数进行判断!\n");double b[100][2];double d;int class1;if (!inquire_class(&class1))return 0;statistics_average_personage_main(0, class1, b);d = b[0][1];if (a)for (int i = 1; i < 100; i++) {if (class[class1 - 1].student[i].Name[0] == '\0')continue;if (d < b[i][1])d = b[i][1];} else {for (int i = 1; i < 100; i++) {if (class[class1 - 1].student[i].Name[0] == '\0')continue;if (d > b[i][1])d = b[i][1];}}if (a)printf("最大值是%.2lf。\n", d);else printf("最小值是%.2lf。\n", d);return 1;
}
void statistics_max_min_main(int a) {if (a)printf("请选择求最大值的对象:\n");else printf("请选择求最小值的对象:\n");printf("A.班级      B.个人\n");char b[100];while (1) {printf("请输入:");scanf("%s", b);if ((b[0] == 'A' || b[0] == 'a') && (strlen(b) == 1)) {if (a)statistics_max_min_class(1);else statistics_max_min_class(0);break;} else if ((b[0] == 'B' || b[0] == 'b') && (strlen(b) == 1)) {if (a)statistics_max_min_personage(1);else statistics_max_min_personage(0);break;} else printf("数据不合理,请重新输入!\n");}
}
int statistics_pass_main() {int a = 0, class1, c = 0;double b[100][2], e;if (!inquire_class(&class1))return 0;statistics_average_personage_main(0, class1, b);for (int i = 0; i < 100; i++) {if (b[i][1] >= 60)a++;if (class[class1 - 1].student[i].Name[0] != '\0')c++;}if (c != 0)e = (a / (double)c) * 100;else e = 0;printf("%d的通过率为%.2lf%%。", class1, e);return 1;
}
void statistics_main() {printf("统计操作:\n");printf("请选择统计功能:\nA.排序   B.最大值   C.最少值   D.平均值   E.通过率\n");char b[100];while (1) {printf("请输入:");scanf("%s", b);if ((b[0] == 'A' || b[0] == 'a') && (strlen(b) == 1)) {statistics_sort_main();break;} else if ((b[0] == 'B' || b[0] == 'b') && (strlen(b) == 1)) {statistics_max_min_main(1);break;} else if ((b[0] == 'C' || b[0] == 'c') && (strlen(b) == 1)) {statistics_max_min_main(0);break;} else if ((b[0] == 'D' || b[0] == 'd') && (strlen(b) == 1)) {statistics_average_main();break;} else if ((b[0] == 'E' || b[0] == 'e') && (strlen(b) == 1)) {statistics_pass_main();break;} else printf("\n数据不合理,请重新输入!\n");}
}
int initialize() {FILE *a;a = fopen("file.txt", "r");if (a == NULL) {perror("Initialization failed\nError opening file file.txt");return 1;}for (int i = 0; i < 10; i++) {for (int j = 0; j < 100; j++) {class[i].student0.Name[0] = '\0';class[i].student0.Num[0] = '\0';class[i].student[j].Name[0] = '\0';class[i].student[j].Num[0] = '\0';for (int k = 0; k < 10; k++) {class[i].student0.grade[k] = -1;class[i].student[j].grade[k] = -1;}}}char line[1000] = {'\0'};while (fgets(line, sizeof(line), a)) {int temp = 1, index = 0, junk = 0;temp = atoi(line);index = inquire_number(temp - 1);sscanf(line, "%d <%49[^>]> %s %d %d %d %d %d %d %d %d %d %d",&junk, class[temp - 1].student[index].Name, class[temp - 1].student[index].Num,&class[temp - 1].student[index].grade[0], &class[temp - 1].student[index].grade[1],&class[temp - 1].student[index].grade[2], &class[temp - 1].student[index].grade[3],&class[temp - 1].student[index].grade[4], &class[temp - 1].student[index].grade[5],&class[temp - 1].student[index].grade[6], &class[temp - 1].student[index].grade[7],&class[temp - 1].student[index].grade[8], &class[temp - 1].student[index].grade[9]);memset(line, '\0', sizeof(line));}fclose(a);return 0;
}
int main() {printf("##########学生作业完成情况管理系统##########\n");if (initialize())return 1;char a[10];while (1) {print_main();while (1) {printf("请输入:");scanf("%s", a);if (!((strlen(a) == 4) || (strlen(a) == 1))) {printf("数据不合理,请重新输入!\n");continue;}if (strlen(a) == 1) {if (a[0] == 'A' || a[0] == 'a') {input_main();break;} else if (a[0] == 'B' || a[0] == 'b') {consult_main();break;} else if (a[0] == 'C' || a[0] == 'c') {information_main();break;} else if (a[0] == 'D' || a[0] == 'd') {statistics_main();break;} else if (a[0] == '0')return 0;else printf("数据不合理,请重新输入!\n");} else {for (int i = 0; a[i] != '\0'; i++) {if (a[i] >= 'A' && a[i] <= 'Z')a[i] += 32;}if (strcmp(a, "help") == 0) {help_main();break;} else printf("数据不合理,请重新输入!\n");}}}return 0;
}

初始文件的生成:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>int main() {FILE *a;a = fopen("file.txt", "w");if (a == NULL) {perror("Failed to open file");return 1;}srand(time(NULL));char surname[30][20] = {"Smith", "Johnson", "Williams", "Brown", "Jones", "Miller", "Davis", "Garcia", "Rodriguez", "Martinez","Hernandez", "Lopez", "Gonzalez", "Wilson", "Anderson", "Thomas", "Taylor", "Moore", "Jackson", "Martin","Lee", "Perez", "Thompson", "White", "Harris", "Sanchez", "Clark", "Ramirez", "Lewis", "Robinson"};char name[30][20] = {"James", "Mary", "John", "Patricia", "Robert", "Jennifer", "Michael", "Linda", "William", "Elizabeth","David", "Barbara", "Richard", "Susan", "Joseph", "Jessica", "Charles", "Sarah", "Thomas", "Karen","Christopher", "Nancy", "Daniel", "Lisa", "Matthew", "Margaret", "Anthony", "Betty", "Mark", "Dorothy"};int mark[10000] = {0};for (int i = 0; i < 10; i++) {int num_person = rand() % 6 + 48;for (int j = 0; j < num_person; j++) {char name_temp[40] = {'\0'};char num_temp[20] = "9832892024";int grade[10];int surname_index = rand() % 30, name_index = rand() % 30;strcpy(name_temp, surname[surname_index]);int temp = strlen(name_temp), temp_num = rand() % 9000 + 1000;name_temp[temp] = ' ';while (mark[temp_num]) {temp_num = rand() % 9000 + 1000;}mark[temp_num] = 1;for (int k = 0; k < 4; k++) {num_temp[9 + 4 - k] = (char)(temp_num % 10 + '0');temp_num /= 10;}strcat(name_temp, name[name_index]);int text_yes = rand() % 6 + 5, text_temp = 0;for (int k = 0; k < 10; k++) {int q = 0;if (text_temp < text_yes) q = 1;if (q) {if (rand() % 2) {grade[k] = rand() % 41 + 60;text_temp++;} else grade[k] = rand() % 50 + 10;} else grade[k] = rand() % 50 + 10;}fprintf(a, "%d <%s> %s %d %d %d %d %d %d %d %d %d %d\n", i + 1, name_temp, num_temp, grade[0], grade[1], grade[2], grade[3], grade[4], grade[5], grade[6], grade[7], grade[8], grade[9]);}}fclose(a);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/69969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++模板编程——可变参函数模板之折叠表达式

目录 1. 什么是折叠表达式 2. 一元左折 3. 一元右折 4. 二元左折 5. 二元右折 6. 后记 上一节主要讲解了可变参函数模板和参数包展开&#xff0c;这一节主要讲一下折叠表达式。 1. 什么是折叠表达式 折叠表达式是C17中引入的概念&#xff0c;引入折叠表达式的目的是为了…

DeepSeek回答禅宗三重境界重构交易认知

人都是活在各自心境里&#xff0c;有些话通过语言去交流&#xff0c;还是要回归自己心境内在的&#xff0c;而不是靠外在映射到股票和技术方法&#xff1b;比如说明天市场阶段是不修复不接力节点&#xff0c;这就是最高视角看整个市场&#xff0c;还有哪一句话能概括&#xff1…

数据结构【链栈】

基于 C 实现链表栈&#xff1a;原理、代码与应用 一、引言 栈就是一个容器&#xff0c;可以当场一个盒子&#xff0c;只能一个一个拿&#xff0c;一个一个放&#xff0c;而且是从上面放入。 有序顺序栈操作比较容易【会了链栈之后顺序栈自然明白】&#xff0c;所以我们这里只…

成绩案例demo

本案例较为简单&#xff0c;用到的知识有 v-model、v-if、v-else、指令修饰符.prevent .number .trim等、computed计算属性、toFixed方法、reduce数组方法。 涉及的功能需求有&#xff1a;渲染、添加、删除、修改、统计总分&#xff0c;求平均分等。 需求效果如下&#xff1a…

C++:抽象类习题

题目内容&#xff1a; 求正方体、球、圆柱的表面积&#xff0c;抽象出一个公共的基类Container为抽象类&#xff0c;在其中定义一个公共的数据成员radius(此数据可以作为正方形的边长、球的半径、圆柱体底面圆半径)&#xff0c;以及求表面积的纯虚函数area()。由此抽象类派生出…

Java面试题2025-并发编程基础(多线程、锁、阻塞队列)

并发编程 一、线程的基础概念 一、基础概念 1.1 进程与线程A 什么是进程&#xff1f; 进程是指运行中的程序。 比如我们使用钉钉&#xff0c;浏览器&#xff0c;需要启动这个程序&#xff0c;操作系统会给这个程序分配一定的资源&#xff08;占用内存资源&#xff09;。 …

AI智慧社区--百度地图

数据库&#xff1a; 前端实现 页面代码 <template><div class"app-container"><baidu-map class"bm-view" :center"center" :zoom"zoom" ready"initMap"><!-- 定位 --><bm-geolocation anchor…

WSL2中安装的ubuntu搭建tftp服务器uboot通过tftp下载

Windows中安装wsl2&#xff0c;wsl2里安装ubuntu。 1. Wsl启动后 1&#xff09;Windows下ip ipconfig 以太网适配器 vEthernet (WSL (Hyper-V firewall)): 连接特定的 DNS 后缀 . . . . . . . : IPv4 地址 . . . . . . . . . . . . : 172.19.32.1 子网掩码 . . . . . . . .…

一、TensorFlow的建模流程

1. 数据准备与预处理&#xff1a; 加载数据&#xff1a;使用内置数据集或自定义数据。 预处理&#xff1a;归一化、调整维度、数据增强。 划分数据集&#xff1a;训练集、验证集、测试集。 转换为Dataset对象&#xff1a;利用tf.data优化数据流水线。 import tensorflow a…

软件工程概论试题五

一、多选 1.好的软件的基本属性包括()。 A. 效率 B. 可依赖性和信息安全性 C. 可维护性 D.可接受性 正答&#xff1a;ABCD 2.软件工程的三要素是什么()? A. 结构化 B. 工具 C.面向对象 D.数据流! E.方法 F.过程 正答&#xff1a;BEF 3.下面中英文术语对照哪些是正确的、且是属…

问题的价值 ( Value of Question ) 公式

一、什么是问题的价值 我们的人生、工作的期间、瞬息万变的商业环境中&#xff0c;我们必然会面对很多问题&#xff0c;也会提出很多问题。 但这些问题是否具有回答的 价值&#xff0c;应该如何 衡量 呢&#xff1f; 简单如&#xff0c;女朋友问今晚应该吃什么、世界如何才能…

一文了解阿里的 Qwen2.5 模型

最近被DeepSeek刷屏了&#xff0c;但是在之外阿里在2025年1月28日推出了Qwen 2.5 Max模型。 Qwen2.5-Max 的特点&#xff1a;大规模的 MoE 模型&#xff0c;预训练于超 20 万亿 tokens&#xff0c;并经过 SFT 和 RLHF 后训练。 性能表现&#xff1a;在多个基准测试中与领先模型…

基于Django的Boss直聘IT岗位可视化分析系统的设计与实现

【Django】基于Django的Boss直聘IT岗位可视化分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用Python作为主要开发语言&#xff0c;利用Django这一高效、安全的W…

Hive:复杂数据类型之Map函数

Map函数 是Hive里面的一种复杂数据类型, 用于存储键值对集合。Map中的键和值可以是基础类型或复合类型&#xff0c;这使得Map在处理需要关联存储信息的数据时非常有用。 定义map时,需声明2个属性: key 和 value , map中是 key value 组成一个元素 key-value, key必须为原始类…

计算机毕业设计Python动漫推荐系统 漫画推荐系统 动漫视频推荐系统 机器学习 bilibili动漫爬虫 数据可视化 数据分析 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

2025年02月02日Github流行趋势

项目名称&#xff1a;oumi 项目地址url&#xff1a;https://github.com/oumi-ai/oumi 项目语言&#xff1a;Python 历史star数&#xff1a;1416 今日star数&#xff1a;205 项目维护者&#xff1a;xrdaukar, oelachqar, taenin, wizeng23, kaisopos 项目简介&#xff1a;构建最…

谭浩强C语言程序设计(3) 7章

1、递归实现N的阶乘 c复制 #include <cstdio> // 包含标准输入输出库// 计算n的阶乘 int total 0; // 定义全局变量total用于存储阶乘结果// 递归函数计算阶乘 int fac(int a){// 如果输入的数小于0&#xff0c;输出错误信息if (a < 0){printf("%d < 0,err…

python算法和数据结构刷题[2]:链表、队列、栈

链表 链表的节点定义&#xff1a; class Node():def __init__(self,item,nextNone):self.itemitemself.nextNone 删除节点&#xff1a; 删除节点前的节点的next指针指向删除节点的后一个节点 添加节点&#xff1a; 单链表 class Node():"""单链表的结点&quo…

网络工程师 (13)时间管理

一、定义与重要性 项目时间管理是指为确保项目按时完成而采取的一系列规划、安排和控制活动。它始于项目启动阶段&#xff0c;贯穿整个项目生命周期&#xff0c;直至项目结束。时间管理对于项目的成功至关重要&#xff0c;它有助于项目团队明确工作目标和时间节点&#xff0c;增…

2025.2.1——四、php_rce RCE漏洞|PHP框架

题目来源&#xff1a;攻防世界 php_rce 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;PHP框架漏洞以及RCE漏洞信息 1.PHP常用框架 2.RCE远程命令执行 step 2&#xff1a;根据靶机提示&#xff0c;寻找版本漏洞 step 3&#xff1a;进行攻击…