当前位置: 代码迷 >> 综合 >> 关于制作一个加减乘除菜单(c primer plus第八章编程练习)
  详细解决方案

关于制作一个加减乘除菜单(c primer plus第八章编程练习)

热度:67   发布时间:2023-12-05 23:02:06.0

题目

编写一个程序,显示一个提供加法、减法、乘法、除法的菜单。获得 用户选择的选项后,程序提示用户输入两个数字,然后执行用户刚才选择的 操作。该程序只接受菜单提供的选项。程序使用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;           //最后再返回“经过检验”的数}

这题写了好久好久(枯),还是靠着查了解析,半写半抄码完的

这题涉及了蛮多知识点的,要多看几遍