数学公式查询与计算工具 - 在线查询、计算、添加和删除公式
#include <stdio.h>\n#include <stdlib.h>\n#include <math.h>\n\n#define PI 3.1415926\n\nstruct Formula {\n char name[100];\n char expression[100];\n struct Formula* next;\n};\n\nvoid quadraticEquation();\nvoid pythagoreanTheorem();\nvoid areaOfTriangle();\nvoid volumeOfCylinder();\nvoid SOfBall();\nvoid volumeOFBall();\nvoid daoshu();\nvoid addNewFormula(struct Formula** head);\nvoid deleteFormula(struct Formula** head);\nvoid printFormulas(struct Formula* head);\nvoid saveFormulas(struct Formula* head);\nstruct Formula* loadFormulas();\n\nint main() {\n int a; // 第一级选择\n struct Formula* head = loadFormulas(); // 加载已保存的公式\n while (1) {\n printf("\n");\n printf("\n请选择以下几个选项\n");\n printf("1.常见公式查询\n");\n printf("2.部分公式计算\n");\n printf("3.退出程序\n");\n printf("\n");\n printf("您的选项是:\n");\n scanf("%d", &a);\n\n if (a == 3) {\n saveFormulas(head); // 退出程序前保存公式\n return 0;\n }\n if (a == 1 || a == 2)\n ;\n else\n printf("您输入的选项不合法!请重试\n");\n \n\n while (a == 1) {\n printf("\n请在以下选项中选择您要查询的公式:\n");\n printf("1.常见函数的导数\n");\n printf("2.正弦定理\n");\n printf("3.余弦定理\n");\n printf("4.辅助角定理\n");\n printf("5.球的表面积公式\n");\n printf("6.球的体积公式\n");\n printf("7.添加新公式或查询和删除已添加的公式\n");\n printf("0.返回上一级\n");\n int b; // 第二级选择\n scanf("%d", &b);\n switch (b) {\n case 0:\n b = 0;\n a = 0;\n break;\n case 1:\n daoshu();\n break;\n case 2:\n printf("a/sin A=b/sin B=c/sin C=2R\n");\n printf("R外三角形的外接圆半径\n");\n break;\n case 3:\n printf("cos A=bb+cc-aa/2bc\n");\n break;\n case 4:\n printf("asinx+bcosx=√ (a2+b2)sin [x+arctan (b/a)]\n");\n break;\n case 5:\n printf("S=4ΠRR\n");\n break;\n case 6:\n printf("V=4ΠRRR/3\n");\n break;\n case 7:\n printf("请选择操作:\n");\n printf("1.添加新公式\n");\n printf("2.删除已添加的公式\n");\n printf("3.查询已添加的公式\n");\n int c;\n scanf("%d", &c);\n switch (c) {\n case 1:\n addNewFormula(&head);\n break;\n case 2:\n deleteFormula(&head);\n break;\n case 3:\n printFormulas(head);\n break;\n default:\n printf("无效的选项,请重新输入。\n");\n break;\n }\n break;\n default:\n printf("无效的选项,请重新输入。\n");\n break;\n }\n }\n\n int choice; // 第二级选择\n\n while (a == 2) {\n printf("\n请选择要查询的数学公式:\n");\n \n printf("请输入选项:\n");\n scanf("%d", &choice);\n\n switch (choice) {\n \n default:\n printf("无效的选项,请重新输入。\n");\n break;\n }\n }\n}\n return 0;\n}\n\n\n// 常见导数的函数\nvoid daoshu() {\n printf("(C) ′=0, C为常数\n");\n printf("x ′=1\n");\n printf("(In x) ′=1/x\n");\n printf("sin x ′=cos x\n");\n printf("cos x ′=(-sin x)\n");\n}\n\n// 添加新公式\nvoid addNewFormula(struct Formula** head) {\n struct Formula* newFormula = (struct Formula*)malloc(sizeof(struct Formula));\n printf("请输入公式名称:\n");\n scanf("%s", newFormula->name);\n printf("请输入公式表达式:\n");\n scanf("%s", newFormula->expression);\n newFormula->next = NULL;\n if (head == NULL) {\n head = newFormula;\n } else {\n struct Formula current = head;\n while (current->next != NULL) {\n current = current->next;\n }\n current->next = newFormula;\n }\n printf("新公式添加成功!\n");\n}\n\n// 删除已添加的公式\nvoid deleteFormula(struct Formula head) {\n if (head == NULL) {\n printf("没有已添加的公式。\n");\n return;\n }\n printf("请选择要删除的公式:\n");\n printFormulas(head);\n int index;\n scanf("%d", &index);\n if (index < 1) {\n printf("无效的选项,请重新输入。\n");\n return;\n }\n if (index == 1) {\n struct Formula temp = head;\n head = (head)->next;\n free(temp);\n printf("公式删除成功!\n");\n return;\n }\n struct Formula current = head;\n int i = 1;\n while (current->next != NULL && i < index - 1) {\n current = current->next;\n i++;\n }\n if (current->next == NULL || current->next->next == NULL) {\n printf("无效的选项,请重新输入。\n");\n return;\n }\n struct Formula temp = current->next;\n current->next = temp->next;\n free(temp);\n printf("公式删除成功!\n");\n}\n\n// 打印已添加的公式\nvoid printFormulas(struct Formula head) {\n struct Formula current = head;\n int i = 1;\n while (current != NULL) {\n printf("%d. %s: %s\n", i, current->name, current->expression);\n current = current->next;\n i++;\n }\n}\n\n// 保存公式到文件\nvoid saveFormulas(struct Formula head) {\n FILE* file = fopen("formulas.txt", "w");\n if (file == NULL) {\n printf("无法打开文件。\n");\n return;\n }\n struct Formula* current = head;\n while (current != NULL) {\n fprintf(file, "%s %s\n", current->name, current->expression);\n current = current->next;\n }\n fclose(file);\n printf("公式保存成功!\n");\n}\n\n// 从文件加载公式\nstruct Formula* loadFormulas() {\n struct Formula* head = NULL;\n FILE* file = fopen("formulas.txt", "r");\n if (file == NULL) {\n printf("无法打开文件。\n");\n return head;\n }\n char name[100];\n char expression[100];\n while (fscanf(file, "%s %s\n", name, expression) == 2) {\n struct Formula* newFormula = (struct Formula*)malloc(sizeof(struct Formula));\n strcpy(newFormula->name, name);\n strcpy(newFormula->expression, expression);\n newFormula->next = NULL;\n if (head == NULL) {\n head = newFormula;\n } else {\n struct Formula* current = head;\n while (current->next != NULL) {\n current = current->next;\n }\n current->next = newFormula;\n }\n }\n fclose(file);\n return head;\n}
原文地址: https://www.cveoy.top/t/topic/pT0k 著作权归作者所有。请勿转载和采集!