• 四则运算自动生成程序


    博客班级 ahpu软件工程
    作业要求 实现四则运算
    作业目标
    学号 3160303242

    一。题目要求:

    写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:

    1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24

    2)程序要求能处理用户的输入,判断对错,累积分数

    3)程序支持可以由用户自行选择加、减、乘、除运算

    4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目

    二、代码如下:
    include <stdio.h>
    include <stdlib.h>
    include <time.h>
    include <math.h>

    int gcd(int a,int b)
    {
    int t;
    if (a>b){
    t=a;
    a=b;
    b=t;
    }
    while (a!=0){
    t=a;
    a=b%a;
    b=t;
    }
    return b;
    }

    int lcm(int a,int b, int g)
    {
    return a*b/g;
    }

    int main()
    {
    while (1){
    int i=0;
    int n=0;
    int x=0;
    int type;
    int t;
    int count=0;
    char flag;
    int left, right;
    float result;
    srand((unsigned)time(NULL));//srand(seed)的随机数种子不同,rand()的随机数值就不同
    printf("请输入要出的题目数量 ");
    scanf("%d",&n);
    while(x<n)
    {
    int f;
    printf("请选择:1、整数 2、真分数 ");
    x++;
    scanf("%d",&f);
    if (f==1){//整数四则运算
    printf("请选择:1、加法 2、减法 3、乘法 4、除法 ");
    scanf("%d",&type);
    type--;
    left = rand() % 100;
    right = rand() % 100;
    int s=0;
    switch(type)
    {
    case 0:
    printf("%d + %d = ", left, right);
    s = left + right;
    break;
    case 1:
    printf("%d - %d = ", left, right);
    s =left - right;
    break;
    case 2:
    printf("%d * %d = ", left, right);
    s = left * right;
    break;
    case 3:
    printf("%d / %d = ", left, right);
    s = left / right;
    break;
    }
    printf("请输入答案:");
    int temp;
    scanf("%d",&temp);
    if (temp == s){
    printf("答案正确! ");
    count++;
    }
    else{
    printf("答案错误!!正确答案为:%d ",s);
    }
    }
    else{//真分数的四则运算
    printf("请选择:1、加法 2、减法 3、乘法 4、除法 ");
    scanf("%d",&type);
    type--;
    int g,l,temp_g;
    int a1,a2,a3,a4;
    a1=rand()%10+1;
    a2=a1+rand()%10+1;//保证分母大于分子
    a3=rand()%10+1;
    a4=a3+rand()%10+1;//保证分母大于分子
    int s1,s2;//保存结果的分子和分母
    switch(type)
    {
    case 0:
    printf("%d/%d + %d/%d = ", a1, a2, a3, a4);
    g = gcd(a2,a4);//保存分母的最小公倍数
    l = lcm(a2,a4,g);//求分子分母的最大公约数
    a1 = l / a2 * a1;
    a3 = l / a4 * a3;
    a2 = a4 = l;
    s2 = l;
    s1 = a1 + a3;
    temp_g = gcd(s1,s2);
    s1 /= temp_g;//求分子分母的最简整数比
    s2 /= temp_g;//求分子分母的最简整数比
    break;
    case 1:
    printf("%d/%d - %d/%d = ", a1, a2, a3, a4);
    g = gcd(a2,a4);
    l = lcm(a2,a4,g);
    a1 = l / a2 * a1;
    a3 = l / a4 * a3;
    a2 = a4 = l;
    s2 = l;
    s1 = a1 - a3;
    int temp_g = abs(gcd(s1,s2));//保证结果的分子和分母的最大公因数为正
    s1 /= temp_g;
    s2 /= temp_g;
    break;
    case 2:
    printf("%d/%d * %d/%d = ", a1, a2, a3, a4);
    s1 = a1 * a3;
    s2 = a2 * a4;
    temp_g = gcd(s1,s2);
    s1 /= temp_g;
    s2 /= temp_g;
    break;
    case 3:
    printf("%d/%d / %d/%d = ", a1, a2, a3, a4);
    s1 = a1 * a4;
    s2 = a2 * a3;
    temp_g = gcd(s1,s2);
    s1 /= temp_g;
    s2 /= temp_g;
    break;
    }
    printf("请输入答案:");
    int temp_s1,temp_s2;
    scanf("%d/%d",&temp_s1,&temp_s2);
    if (temp_s1 == s1 && temp_s2 == s2){
    printf("答案正确! ");
    count++;
    }
    else{
    printf("答案错误!!答案为:%d/%d ",s1,s2);
    }
    }

    	}
    	printf("一共对了%d题!
    ",count);
    	printf("
    ");
    	printf("是否继续?(Y/N):");
    	char flag1;
    	getchar();
    	flag1 = getchar();
    	if (flag1 == 'n' || flag1 == 'N')
    		break; 
    }
    

    }


    三.个人小结

    psp 任务内容 计划完成的时间(min) 实际完成时间(min)
    Planning 计划 30 30
    Estimate 估计这个任务需要多少时间 50 60
    Development 开发 20 20
    Design 设计 15 15
    Test 测试 6 6
    Postmortem & Process Improvement Plan 事后总结 5 5
  • 相关阅读:
    兼容各浏览器,背景透明,内容不透明
    101 个 MySQL 的调节和优化的提示
    二手房买卖砍价最新攻略 帮你花少钱买好房
    “中国互联网100强”(2013)发布
    写入文件,创建xunlei批量任务
    武汉选房
    Java并发编程(十一)线程池的使用
    Retrofit 代理模式
    Java并发编程(十)阻塞队列
    不要在Android的Application对象中缓存数据!
  • 原文地址:https://www.cnblogs.com/weisai123/p/13942563.html
Copyright © 2020-2023  润新知