C语言制作多功能简易计算器

    技术2022-07-13  65

    开发一个多功能简易计算器,基本信息包括:四则运算、常见单位转换。

    1.四则运算:

    (1)能识别用户输入的运算(加+、减-、乘*、除/)表达式并计算,如:用户输入189+219,按回车确定后可计算该加法运算的结果并打印输出,其它运算以此类推;

    (2)能检测表达式中的错误或不符合运算法则的情况并提示。如,在除法运算中除数为0的情况,表达式错误的情况12376a+31p等;

    2.单位转换:

    (1)能实现长度单位换算:英寸、英尺、毫米、厘米、米;

    (2)能实现质量单位换算:磅、盎司、克、千克、斤、吨;

    (3)能实现面积单位换算:公顷、亩、平方米、平方英尺;

    附代码:

    #include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> int v4(char c)//判断字符是否为加减乘除,如果含有'+','-','*','/'则返回1,否则返回0 { if (c == '+' || c == '-' || c == '*' || c == '/') { return 1; } else { return 0; } } void arithmetic()//四则运算 { system("cls"); //清屏 printf("输入表达式(例如1+1)(输入RETURN:返回)(输入EXIT:退出):\n"); while (1) { printf("-------------------------------------\n"); printf("输入表达式:"); char str[48] = "";//初始化字符串,用于接收计算式 int add = 0;//运算符次数累加初始值为0 scanf_s("%s", str, (unsigned int)sizeof(str));//获取表达式 if (strcmp(str, "RETURN") == 0) //输入RETURN返回上一层 { system("cls"); //清屏 return; } else if (strcmp(str, "EXIT") == 0) //输入EXIT退出程序 { exit(0); } else { int i = 0; size_t len; len = strlen(str); while (i < len)//计算运算符次数累(加减乘除符号出现次数) { if (v4(str[i])) { add++; } i++; } for (i = 0; i < len; i++) { if (add != 1)//运算符号不为1次时,提示错误,跳出计算,重新获取计算式 { printf("输入错误,请重新输入\n"); break; } if (isdigit(str[i]) || v4(str[i]) || str[i] == '.' && !isalpha(v4(str[i])))//输入满足数字、运算符且不为字母 { if (v4(str[i]))//检测到运算符号时进行计算 { char *num1 = NULL, *num2 = NULL;//两个数字初始化,设置空值 const char plus[2] = "+"; const char minus[2] = "-"; const char multiply[2] = "*"; const char divide[2] = "/"; switch (str[i]) { case '+'://当运算符号为加法 num1 = strtok_s(str, plus, &num2);//通过运算符号'+'分离字符串,得到num1和num2两个数(字符串形式) printf("%f", atof(num1));//字符串num1转浮点型 printf("+"); printf("%f", atof(num2));//字符串num2转浮点型 printf("="); printf("%.2f\n", atof(num1) + atof(num2)); break; case '-'://当运算符号为减法 num1 = strtok_s(str, minus, &num2);//通过运算符号'-'分离字符串,得到num1和num2两个数(字符串形式) printf("%f", atof(num1)); printf("-"); printf("%f", atof(num2)); printf("="); printf("%.2f\n", atof(num1) - atof(num2)); break; case '*'://当运算符号为乘法 num1 = strtok_s(str, multiply, &num2);//通过运算符号'*'分离字符串,得到num1和num2两个数(字符串形式) printf("%f", atof(num1)); printf("*"); printf("%f", atof(num2)); printf("="); printf("%.2f\n", atof(num1) * atof(num2)); break; case '/'://当运算符号为除法 num1 = strtok_s(str, divide, &num2);//通过运算符号'/'分离字符串,得到num1和num2两个数(字符串形式) if (strcmp(num2, "0") == 0)//被除数为0进行提示,并跳出计算 { printf("被除数不能为0\n"); break; } printf("%f", atof(num1)); printf("/"); printf("%f", atof(num2)); printf("="); printf("%.2f\n", atof(num1) / atof(num2)); break; default: printf("\n无效输入\n"); break; } } } else { printf("输入错误,请重新输入\n"); break; } } } } } void Length()//能实现长度单位换算:英寸、英尺、毫米、厘米、米; { system("cls"); //清屏 printf("-------------单位转换器--------------\n"); printf("1:英尺 2:英寸 3:毫米 4:厘米 5:米 9:返回 0:退出\n"); printf("-------------------------------------\n"); while (1) { int selection; //存储用户选择 printf("请选择当前单位(输入对应数字):"); //读取用户选择 scanf_s("%d", &selection); if (selection == 9)//选项为9返回上一层 { system("cls"); //清屏 return; } else if (selection == 0)//选项为0退出程序 { printf("程序结束!"); exit(0); } else if (selection < 1 || selection >5)//选项不在范围内提示错误 { printf("输入错误,请重新输入\n"); selection = 9; } else//进行单位转换 { printf("-------------------------------------\n"); printf("请输入当前单位的值:"); float all; //存储用户输入的值 //读取用户输入值 scanf_s("%f", &all); switch (selection)//根据选项进行单位转换 { case 1://英尺转换其他单位 printf("**************转换结果***************\n"); printf("%f英尺,%f英寸,%f毫米,%f厘米,%f米\n", all, all * 12, all*304.8, all*30.48, all*0.3048); printf("*************************************\n"); break; case 2://英寸转换其他单位 printf("**************转换结果***************\n"); printf("%f英尺,%f英寸,%f毫米,%f厘米,%f米\n", all / 12, all, all*25.4, all*2.54, all*0.0254); printf("*************************************\n"); break; case 3://毫米转换其他单位 printf("**************转换结果***************\n"); printf("%f英尺,%f英寸,%f毫米,%f厘米,%f米\n", all / 304.8, all / 25.4, all, all*0.1, all*0.001); printf("*************************************\n"); break; case 4://厘米转换其他单位 printf("**************转换结果***************\n"); printf("%f英尺,%f英寸,%f毫米,%f厘米,%f米\n", all / 30.48, all / 30.48 * 12, all * 10, all, all * 100); printf("*************************************\n"); break; case 5://米转换其他单位 printf("**************转换结果***************\n"); printf("%f英尺,%f英寸,%f毫米,%f厘米,%f米\n", all / 30.48, all * 12 / 30.48, all * 1000, all * 100, all); printf("*************************************\n"); break; default: printf("输入错误,请重新输入\n"); break; } } } } void quality()//能实现质量单位换算:磅、盎司、克、千克、斤、吨; { system("cls"); //清屏 printf("-------------单位转换器--------------\n"); printf("1:磅 2:盎司 3:克 4:千克 5:斤 6:吨 9:返回 0:退出\n"); printf("-------------------------------------\n"); while (1) { int selection; //存储用户选择 printf("请选择当前单位(输入对应数字):"); //读取用户选择 scanf_s("%d", &selection); if (selection == 9)//选项为9返回上一层 { system("cls"); //清屏 return; } else if (selection == 0)//选项为0退出程序 { printf("程序结束!"); exit(0); } else if (selection < 1 || selection >6)//选项不在范围内提示错误 { printf("输入错误,请重新输入\n"); selection = 9; } else//进行单位转换 { printf("-------------------------------------\n"); printf("请输入当前单位的值:"); float all; //存储用户输入的值 //读取用户输入值 scanf_s("%f", &all); switch (selection) { case 1://磅转换其他单位 printf("**************转换结果***************\n"); printf("%f磅,%f盎司,%f克,%f千克,%f斤,%f吨\n", all, all * 16, all * 1000 / 2.2046, all / 2.2046, all * 2 / 2.2046, all / 2204.6); printf("*************************************\n"); break; case 2://盎司转换其他单位 printf("**************转换结果***************\n"); printf("%f磅,%f盎司,%f克,%f千克,%f斤,%f吨\n", all / 16, all, all * 1000 / 35.2746, all / 35.2746, all * 2 / 35.2746, all / 2204.6 / 16); printf("*************************************\n"); break; case 3://克转换其他单位 printf("**************转换结果***************\n"); printf("%f磅,%f盎司,%f克,%f千克,%f斤,%f吨\n", all*2.2046 / 1000, all * 35.2746 / 1000, all, all / 1000, all * 2 / 1000, all / 1000000); printf("*************************************\n"); break; case 4://千克转换其他单位 printf("**************转换结果***************\n"); printf("%f磅,%f盎司,%f克,%f千克,%f斤,%f吨\n", all*2.2046, all * 35274.6, all * 1000, all, all * 2, all / 1000); printf("*************************************\n"); break; case 5://斤转换其他单位 printf("**************转换结果***************\n"); printf("%f磅,%f盎司,%f克,%f千克,%f斤,%f吨\n", all*2.2046 / 2, all * 35274.6 / 2, all * 500, all / 2, all, all / 2000); printf("*************************************\n"); break; case 6://吨转换其他单位 printf("**************转换结果***************\n"); printf("%f磅,%f盎司,%f克,%f千克,%f斤,%f吨\n", all*2204.6, all * 35274600, all * 1000 * 1000, all * 1000, all * 2000, all); printf("*************************************\n"); break; default: printf("输入错误,请重新输入\n"); break; } } } } void area()//能实现面积单位换算:公顷、亩、平方米、平方英尺; { system("cls"); //清屏 printf("-------------单位转换器--------------\n"); printf("1:公顷 2:亩 3:平方米 4:平方英尺 9:返回 0:退出\n"); printf("-------------------------------------\n"); while (1) { int selection; //存储用户选择 printf("请选择当前单位(输入对应数字):"); //读取用户选择 scanf_s("%d", &selection); if (selection == 9)//选项为9返回上一层 { system("cls"); //清屏 return; } else if (selection == 0)//选项为0退出程序 { printf("程序结束!"); exit(0); } else if (selection < 1 || selection >4)//选项不在范围内提示错误 { printf("输入错误,请重新输入\n"); selection = 9; } else//进行单位转换 { printf("-------------------------------------\n"); printf("请输入当前单位的值:"); float all; //存储用户输入的值 //读取用户输入值 scanf_s("%f", &all); switch (selection) { case 1://公顷转换其他单位 printf("**************转换结果***************\n"); printf("%f公顷,%f亩,%f平方米,%f平方英尺\n", all, all * 15, all * 10000, all*107639.104167); printf("*************************************\n"); break; case 2://亩转换其他单位 printf("**************转换结果***************\n"); printf("%f公顷,%f亩,%f平方米,%f平方英尺\n", all / 15, all, all * 10000 / 15, all*107639.104167 / 15); printf("*************************************\n"); break; case 3://平方米转换其他单位 printf("**************转换结果***************\n"); printf("%f公顷,%f亩,%f平方米,%f平方英尺\n", all / 10000, all * 15 / 10000, all, all*10.7639104167); printf("*************************************\n"); break; case 4://平方英尺转换其他单位 printf("**************转换结果***************\n"); printf("%f公顷,%f亩,%f平方米,%f平方英尺\n", all / 107639.104167, all * 15 / 107639.104167, all * 10000 / 107639.104167, all); printf("*************************************\n"); break; default: printf("输入错误,请重新输入\n"); break; } } } } void conversion()//单位转换 { char answer = 'q'; while (1) { system("cls"); //清屏 printf("\n选择操作:\n" "长度单位换算,输入 L\n" "质量单位换算,输入 M\n" "面积单位换算,输入 S\n" "返回,输入R\n" "退出程序,输入 Q\n"); scanf_s(" %c", &answer, (unsigned int)sizeof(answer)); switch (toupper(answer)) { case 'L': Length();//长度单位换算 break; case 'M': quality();//质量单位换算 break; case 'S': area();//面积单位换算 break; case 'R': system("cls"); //清屏 return; break; case 'Q': printf("程序结束!"); exit(0); default: printf("\n无效选择项\n"); break; } } } int main() { system("cls"); //清屏 char answer = 'q'; while (1) { printf("\n选择操作:\n" "四则运算,输入 A\n" "单位转换,输入 B\n" "退出程序,输入 Q\n"); scanf_s(" %c", &answer, (unsigned int)sizeof(answer));//获取进行操作的字符 switch (toupper(answer)) { case 'A': arithmetic();//四则运算 break; case 'B': conversion();//单位转换 break; case 'Q': printf("程序结束!"); exit(0);//退出程序 default: printf("\n无效选择项\n"); break; } } return 0; }

    测试结果: 1.运行程序,出现选择操作界面;输入A进行四则运算,输入B进行单位换算,输入Q退出程序 2.此时输入A,进行四则运算测试 3.根据提示输入表达式,如1+1,输入return则会返回上一层,输入exit退出程序 4.输入一些加减乘除的计算式 5.输入return,返回到上一层界面 6.输入B,进行单位转换 7.此时有三个单位换算,输入L进行长度单位换算,输入M进行质量单位换算,输入S进行面积单位换算,输入R返回上一层,输入Q退出程序 8.输入L测试长度换算 9.根据提示依次输入单位数字,以及该单位的值 10.进行不同单位的测试 这个程序中四则运算只实现了正数的计算,当输入负数会提示错误,还有些小问题不够完善,仅供大家参考。

    本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

    Processed: 0.016, SQL: 9