简单计算器

Mathbox软件,有两个子命令:calc和exam
calc子命令类似于计算器,给定计算符(-s add/sub/mul/div)和参数(-o/-p)然后输出算式和结果。
exam子命令为计算机出题(10以内的加减法),然后用户作答,答对打错给出结论,并给出用户计算所用的时间。


```c
#include<stdio.h>
#include<stdlib.h>
#include <getopt.h>
#include <string.h>
#include <time.h>
//命令格式:  ./Mathbox  calc -s add/sub/mul/div -o x -p y
//             ./Mathbox exam

static const char short_opts[] =
    "s:o:p:e";
clock_t start, stop;
double duration;
static int
add (int x, int y)
{
    printf ("%d + %d = %d\n", x, y, x+y);
    return 0;
}
static int
sub (int x, int y)
{
    printf ("%d - %d = %d\n", x, y, x-y);
    return 0;
}
static int
mul (int x, int y)
{
    printf ("%d * %d = %d\n", x, y, x*y);
    return 0;
}
static int
d (int x, int y)
{
    if(y!=0)
    {
        printf ("%d / %d = %d\n", x, y, x/y);
    }
    else
        printf("Divisor can not Be zero!!");
    return 0;
}
int main(int argc, char *argv[])
{
    int a,b,an,r,myan;
    char c,s[10];
    int x,y;
    if ( argc <=1 )
    {
        printf ("Use sub-command!\n");
        return 1;
    }
    if ( strcmp (argv[1], "calc") == 0 )
    {
        while ( (c = getopt (argc, argv,
                             short_opts)) != -1 )
        {
            switch ( c )
            {
            case 's':
                strcpy(s,optarg);
                break;
            case 'p':
                y=atoi(optarg);
                break;
            case 'o':
                x=atoi(optarg);
                break;
            }
        }
        if ( strcmp (s, "add") == 0 )
        {
            add (x, y );
        }
        else if ( strcmp (s, "sub") == 0 )
        {
            sub (x, y );
        }
        else if ( strcmp (s, "mul") == 0 )
        {
            mul (x, y);
        }
        else if ( strcmp (s, "div") == 0 )
        {
            d (x, y );
        }
        else
        {
            printf ("ERROR: Unknown sub-command!\n");
            return 2;
        }
    }
    if ( strcmp (argv[1], "exam") == 0 )
    {
        srand((unsigned)time(NULL));
        a=rand()%10+1;
        b=rand()%10+1;
        r=rand()%10+1;
        if(r>5)//随机加法或加法
        {
            printf("%d + %d= ?\n",a,b);
            an=a+b;
            printf("you answer:");
            time(&start);
            scanf("%d",&myan);
            time(&stop);
            duration=(double)(stop-start);
            if(myan==an)
            {
                printf("Correct answer!!\n");
                printf("Time:%f s",duration);

            }
            else
            {
                printf("Wrong!!\n");
                printf("Time:%f s\n",duration);
            }

        }
        else if(r<=5)
        {
            printf("%d - %d= ?\n",a,b);
            an=a-b;
            printf("you answer:");
            time(&start);
            scanf("%d",&myan);
            time(&stop);
            duration=(double)(stop-start);
            if(myan==an)
            {
                printf("Correct answer!!\n");
                printf("Time:%f s",duration);
            }
            else
            {
                printf("Wrong!!\n");
                printf("Time:%f s\n",duration);
            }
        }
    }
    return 0;
}


package com.softeem.train.calculator; import java.util.Scanner; import java.io.*; public class Calculator { private int m; // 第一个输入的数字 private int n; // 第二个输入的数字 public Calculator() { this.m = 0; this.n = 0; } /* * public void use() { System.out.println("你是否继续使用?继续输入Y,退出输任意键?"); Scanner * in5= new Scanner(System.in); String zz=in5.next(); * if(zz.equals("Y")||zz.equals("y")) this.gui(); else System.exit(0); * * } */ public void graphic() { //3 System.out.println("=========================="); System.out.println("欢迎使用 So easy 计算机简易系统 "); System.out.println(" 请选择计算类型:"); System.out.println(" 1.加法"); System.out.println(" 2.减法"); System.out.println(" 3.乘法"); System.out.println(" 4.除法"); System.out.println(" 5.输入表达式计算"); System.out.println(" 6.退出"); System.out.println("=========================="); Scanner in3 = new Scanner(System.in); int n = in3.nextInt(); switch (n) { //4 case 1: this.add(); //8 break; case 2: this.sub(); break; case 3: this.mul(); break; case 4: this.div(); break; case 5: this.cal(); break; case 6: System.exit(0); default: break; } } public void add() // 实现加法的方法 { //5 System.out.println("欢迎使用加法操作"); this.in(); //7 int sum; sum = this.m + this.n; System.out.println("你输入的数据的和是:" + sum); // this.use(); } public void sub() // 实现减法的方法 { System.out.println("欢迎使用减法操作"); this.in(); int cha; cha = this.m - this.n; System.out.println("你输入的数据的差是:" + cha); // this.use(); } public void mul() // 实现乘法的方法 { System.out.println("欢迎使用乘法操作"); this.in(); int ji; ji = this.m * this.n; System.out.println("你输入的数据的积是:" + ji); // this.use(); } public void div() // 实现除法的方法 { System.out.println("欢迎使用除法操作"); this.in(); if (n == 0) { System.out.println("被除数不能为零!"); this.graphic(); } int shang; shang = this.m / this.n; System.out.println("你输入的数据的和是:" + shang); // this.use(); } public void cal() // 实现表达式运算方法 { String s = ""; // 接收表达式的字符串 String ss1 = ""; // 分离数字m的字符串 String ss2 = ""; // 分离数字n的字符串 char c1 = ' '; // 存放运算符 int m = 0; // 第一个数字 int n = 0; // 第二个数字 System.out.print("请输入一个表达式:"); try { BufferedReader in = new BufferedReader(new InputStreamReader( System.in)); s = in.readLine(); } catch (IOException e) { } for (int i = 0; i < s.length(); i++) { if ((s.charAt(i) == '+') || (s.charAt(i) == '-') || (s.charAt(i) == '*') || (s.charAt(i) == '/')) { c1 = s.charAt(i); // 第一个数 for (int j = 0; j < i; j++) { ss1 += s.charAt(j); m = Integer.parseInt(ss1); } // 第二个数 for (int j = i + 1; j < s.length(); j++) { ss2 += s.charAt(j); n = Integer.parseInt(ss2); } break; } } if (c1 == '+') System.out.println(m + "+" + n + "=" + (m + n)); if (c1 == '-') System.out.println(m + "-" + n + "=" + (m - n)); if (c1 == '*') System.out.println(m + "*" + n + "=" + (m * n)); if (c1 == '/') System.out.println(m + "/" + n + "=" + (m / n)); } public void in() // 实现接收数据的方法 { //6 System.out.println("请输入第一个数:"); Scanner in1 = new Scanner(System.in); this.m = in1.nextInt(); System.out.println("请输入第二个数:"); Scanner in2 = new Scanner(System.in); this.n = in2.nextInt(); } public static void main(String[] args) throws java.io.IOException { //1 String ifquit = ""; // 用于接收是否退出 Calculator c = new Calculator(); do { //2 c.graphic(); // 调用界面方法 //9 System.out.println("你是否继续使用?继续输入Y,退出输任意键?"); Scanner in5 = new Scanner(System.in); ifquit = in5.nextLine(); //10 } while (ifquit.equals("Y") || ifquit.equals("y")); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值