题目:
编写一个程序,显示一个提供加法、减法、乘法、除法的菜单。获得 用户选择的选项后,程序提示用户输入两个数字,然后执行用户刚才选择的 操作。该程序只接受菜单提供的选项。程序使用float类型的变量储存用户输 入的数字,如果用户输入失败,则允许再次输入。进行除法运算时,如果用 户输入0作为第2个数(除数),程序应提示用户重新输入一个新值。该程序 的一个运行示例如下: Enter the operation of your choice:
a. add s. subtract m. multiply d. divide q. quit
a
Enter first number: 22 .4
Enter second number: one
one is not an number.
Please enter a number, such as 2.5, -1.78E8, or 3: 1
22.4 + 1 = 23.4
Enter the operation of your choice:
a. add s. subtract m. multiply d. divide q. quit
d
Enter first number: 18.4
Enter second number: 0
Enter a number other than 0: 0.2
18.4 / 0.2 = 92
Enter the operation of your choice:
a.add s. subtract m. multiply d. divide q. quit
q
Bye.
答案:
#include<stdio.h>
#include<math.h>
#include<ctype.h>
#include<string.h>int get_choice();//自定义三个函数
int get_first();
float get_float();int main()
{int ct;float i,j;//注意这边的i和j要打成float型!!!!!!!while((ct=get_choice())!='q')//调用get_choice函数{printf("please enter first number:");i=get_float();printf("please enter second number:");j=get_float();switch(ct) //用switch case实现选项操作{case 'a':{printf("%g+%g=%g\n",i,j,i+j); //选用%g去除不必要的0break;}case 's':{printf("%g-%g=%g\n",i,j,i-j);break;}case 'm':{printf("%g*%g=%g\n",i,j,i*j);break;}case 'd':{
// 判断float型浮点数是否为0(除数不能为0)while(fabs(j)<=1e-6) //注意不直接判断等于0,而是用1e-6来判断,具体见笔记部分{printf("enter a number other than o:");j=get_float();}printf("%g/%g=%g\n",i,j,i/j);break;}}}printf("bye!\n");return 0;}int get_first(){int ch;do//至少进行一次循环,选用do while{ch=tolower(getchar()); //将输入的字母转变成小写字母,以便switch判断}while(isspace(ch));while(getchar()!='\n')continue; //用于将可能存在的别的字符“吃掉”return ch;}int get_choice(){int ch;//注意别漏了!!printf("enter the operation of your choice:\n");printf("a. add s. subtract\n");printf("m. multiply d. divide\n");printf("q. quit\n");ch=get_first(); //调用写在前面的get_first函数while(ch!='a'&&ch!='s'&&ch!='m'&&ch!='d'&&ch!='q'){printf("please enter with a,s,m,d:");ch=get_first();}return ch;}float get_float(){int ch;float input;while(scanf("%f",&input)!=1) //将输入的字符作为地址存入定义的input内{while((ch=getchar())!='\n'){putchar(ch); //ch直接与下面的putchar语句连起来}printf("is not a number\n");printf("Please enter a number such as 2.5, -1.78E8 or 3: ");}return input; //最后再返回“经过检验”的数}
这题写了好久好久(枯),还是靠着查了解析,半写半抄码完的
这题涉及了蛮多知识点的,要多看几遍