zoukankan      html  css  js  c++  java
  • 四则运算

    一、作业信息

    博客班级 ahpu软件工程
    作业要求 实现四则运算
    作业目标 能对需求进行分析并实现;写一个能自动生成小学四则运算题目的程序
    学号 3180701228

    二、作业要求

    写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
    1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
    2)程序要求能处理用户的输入,判断对错,累积分数
    3)程序支持可以由用户自行选择加、减、乘、除运算
    4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目

    三、代码提交

    1.代码结构
    ①加法整/分数运算函数
    void add_oper()
    {
    int a,b,c,q;
    q=rand()%2;//随机选择整数或分数进行运算
    if(q == 1)
    {
    a=rand()%100;
    b=rand()%100;
    printf("请回答: %d + %d = ",a,b);
    scanf("%d",&c);
    if(a+b==c)
    {
    printf("回答正确! ");
    r++;
    }
    else
    {
    printf("回答错误! ");
    w++;
    }
    }
    else
    {
    int nume_1, deno_1, nume_2, deno_2;
    //↑第一个数的分子分母和第二个数的分子分母
    int nume_s, deno_s;
    //↑存储计算机计算出的答案分子分母
    int i, len;//len存储输入字符长度
    int nume=0;
    int deno=0;//存储用户输入的分子分母
    char sum[DIGIT];//存储用户输入字符串

    	deno_1=rand()%100+1;
    	nume_1=rand()%deno_1;
    	deno_2=rand()%100+1;
    	nume_2=rand()%deno_2;
    	printf("%d/%d+%d/%d= 
    ",nume_1,deno_1,nume_2,deno_2);
    	//真分数分母要比分子大且分母不能为0;
    	
    	nume_s=(nume_1*deno_2)+(nume_2*deno_1);
    	deno_s=deno_1*deno_2;
    	//↑计算真分数相加的结果 
    	
    	scanf("%s", sum);
    	len = strlen(sum);
    

    // for(i=0; i<len; i++)
    // {
    // printf("%c", sum[i]);
    //
    // }

    	int flag=0;
    	for(i=0; i<len; i++)//将输入的字符型答案转换成整形的分子分母 
    	{	
    		if(sum[i] != '/')
    		{
    			int i_sum = sum[i] - '0';//将char型转换为int型
    		//	printf("
    i_sum=%d",i_sum);
    			if(flag == 0){
    				nume *= 10;
    				nume += i_sum; 
    			}
    			if(flag == 1){
    				deno *= 10;
    				deno += i_sum;
    			}
    		}
    		
    		else if(sum[i] == '/')
    		{
    		//	printf("
    /");
    			flag = 1;
    		}
    	}
    	
    	if(nume == nume_s && deno == deno_s)
    	{
    	//	printf("转换后的结果 %d/%d", nume, deno); 
    		printf("答案正确!"); 
    		r++;
    	}
    	else
    	{
    	//	printf("转换后的结果 %d/%d", nume, deno); 
    		printf("答案错误!"); 
    		w++;
    	}
    
    }
    

    }
    ②减法整/分数运算函数
    void sub_oper()
    {
    int a,b,c,q;
    q=rand()%2;
    if(q == 0)
    {
    a=rand()%100;
    b=rand()%100;
    printf("请回答: %d - %d = ",a,b);
    scanf("%d",&c);
    if(a-b==c)
    {
    printf("回答正确! ");
    r++;
    }
    else
    {
    printf("回答错误! ");
    w++;
    }
    }
    else
    {
    int nume_1, deno_1, nume_2, deno_2;
    //↑第一个数的分子分母和第二个数的分子分母
    int nume_s, deno_s;
    //↑存储计算机计算出的答案分子分母
    int i, len;//len存储输入字符长度
    int nume=0;
    int deno=0;//存储用户输入的分子分母
    char sum[DIGIT];//存储用户输入字符串

    	deno_1=rand()%100+1;
    	nume_1=rand()%deno_1;
    	deno_2=rand()%100+1;
    	nume_2=rand()%deno_2;
    	printf("%d/%d-%d/%d= 
    ",nume_1,deno_1,nume_2,deno_2);
    	//真分数分母要比分子大且分母不能为0;
    	nume_s=(nume_1*deno_2)-(nume_2*deno_1);
    	deno_s=deno_1*deno_2;
    	//↑计算真分数相减的结果 
    	scanf("%s", sum);
    	len = strlen(sum);
    	
    	int flag=0;//判断比值符 
    	int sign=0;//判断正负符号 
    	for(i=0; i<len; i++)//将输入的字符型答案转换成整形的分子分母 
    	{	
    		if(sum[i] != '/' && sum[i] != '-')
    		{
    			int i_sum = sum[i] - '0';//将char型转换为int型
    			if(flag == 0){
    				nume *= 10;
    				nume += i_sum; 
    			}
    			if(flag == 1){
    				deno *= 10;
    				deno += i_sum;
    			}
    		}
    		
    		else if(sum[i] == '/')
    		{
    			flag = 1;
    		}
    		else if(sum[i] == '-') 
    		{
    			sign = 1;//说明用户输入的结果是负数 
    		}
    	}
    	
    	if(nume_s > 0 && nume == nume_s && deno == deno_s)
    	{
    		printf("答案正确!");
    		r++; 
    	}
    	else if(nume_s < 0 && nume == -nume_s && deno == deno_s && sign == 1)
    	{
    		printf("答案正确!"); 
    		r++;
    	}
    	else
    	{
    		printf("答案错误!"); 
    		w++;
    	} 
    	 
    
     }
    

    }
    ③乘法整/分数运算函数
    void mul_oper()
    {
    int a,b,c,q;
    q=rand()%2;
    if(q == 0)
    {
    a=rand()%100;
    b=rand()%100;
    printf("请回答: %d * %d = ",a,b);
    scanf("%d",&c);
    if(a*b==c)
    {
    printf("回答正确! ");
    r++;
    }
    else
    {
    printf("回答错误! ");
    w++;
    }
    }
    else
    {
    int nume_1, deno_1, nume_2, deno_2;
    //↑第一个数的分子分母和第二个数的分子分母
    int nume_s, deno_s;
    //↑存储计算机计算出的答案分子分母
    int i, len;//len存储输入字符长度
    int nume=0;
    int deno=0;//存储用户输入的分子分母
    char sum[DIGIT];//存储用户输入字符串

    	deno_1=rand()%100+1;
    	nume_1=rand()%deno_1;
    	deno_2=rand()%100+1;
    	nume_2=rand()%deno_2;
    	printf("%d/%d*%d/%d= 
    ",nume_1,deno_1,nume_2,deno_2);
    	//真分数分母要比分子大且分母不能为0;
    	nume_s=nume_1*nume_2;
    	deno_s=deno_1*deno_2;
    

    // printf("%d * %d", nume_s, deno_s);
    //↑计算真分数相乘的结果
    scanf("%s", sum);
    len = strlen(sum);

    	int flag=0;//判断比值符  
    	for(i=0; i<len; i++)//将输入的字符型答案转换成整形的分子分母 
    	{	
    		if(sum[i] != '/')
    		{
    			int i_sum = sum[i] - '0';//将char型转换为int型
    			if(flag == 0){
    				nume *= 10;
    				nume += i_sum; 
    			}
    			if(flag == 1){
    				deno *= 10;
    				deno += i_sum;
    			}
    		}
    		
    		else if(sum[i] == '/')
    		{
    			flag = 1;
    		}
    
    	}
    	
    	if(nume == nume_s && deno == deno_s && nume_s != 0)
    	{
    		printf("答案正确!");
    		r++; 
    	}
    	else if(nume == nume_s && nume_s == 0)
    	{
    		printf("答案正确!"); 
    		r++;
    	}
    	else
    	{ 
    

    // printf("%d", nume);
    printf("答案错误!");
    w++;
    }
    }
    }
    ④除法整/分数运算函数
    void div_oper()
    {
    int a,b,c,q;
    q=rand()%2;
    if(q == 0)
    {
    a=rand()%100;
    b=rand()%100;
    printf("请回答: %d / %d = ",a,b);
    scanf("%d",&c);
    if(a/b==c)
    {
    printf("回答正确! ");
    r++;
    }
    else
    {
    printf("回答错误! ");
    w++;
    }
    }
    else
    {
    int nume_1, deno_1, nume_2, deno_2;
    //↑第一个数的分子分母和第二个数的分子分母
    int nume_s, deno_s;
    //↑存储计算机计算出的答案分子分母
    int i, len;//len存储输入字符长度
    int nume=0;
    int deno=0;//存储用户输入的分子分母
    char sum[DIGIT];//存储用户输入字符串

    	deno_1=rand()%100+1;
    	nume_1=rand()%deno_1;
    	deno_2=rand()%100+2;
    	nume_2=rand()%deno_2;//除数不能为零!!! 
    	printf("%d/%d ÷%d/%d= 
    ",nume_1,deno_1,nume_2,deno_2);
    	//真分数分母要比分子大且分母不能为0;
    	nume_s=nume_1*deno_2;
    	deno_s=deno_1*nume_2;
    

    // printf("%d * %d", nume_s, deno_s);
    //↑计算真分数相乘的结果
    scanf("%s", sum);
    len = strlen(sum);

    	int flag=0;//判断比值符 
    

    // int sign=0;//判断正负符号
    for(i=0; i<len; i++)//将输入的字符型答案转换成整形的分子分母
    {
    if(sum[i] != '/')
    {
    int i_sum = sum[i] - '0';//将char型转换为int型
    if(flag == 0){
    nume *= 10;
    nume += i_sum;
    }
    if(flag == 1){
    deno *= 10;
    deno += i_sum;
    }
    }

    		else if(sum[i] == '/')
    		{
    			flag = 1;
    		}
    
    	}
    	if(nume == nume_s && deno == deno_s && nume_s != 0)
    	{
    		printf("答案正确!");
    		r++; 
    	}
    	else if(nume == nume_s && nume_s == 0)
    	{
    		printf("答案正确!");
    		r++; 
    	}
    	else
    	{ 
    		printf("答案错误!"); 
    		w++;
     	}
    		 	
     }
    

    }
    ⑤头文件、宏定义、全局变量
    include<stdio.h>
    include<math.h>
    include<string.h>
    include<windows.h>
    define N 10 //出十道题
    define DIGIT 20 //用户输入答案数组的大小
    int r = 0;//计数正确答题数
    int w = 0;//计数错误答题数
    void add_oper();//加法整/分数运算函数
    void sub_oper();//减法整/分数运算函数
    void mul_oper();//乘法整/分数运算函数
    void div_oper();//除法整/分数运算函数

    ⑥主函数
    int main()
    {
    int sel_oper, flag=1;
    int con = 0;

    printf("
    			欢迎进入简易四则运算
    
    ");
    
    while(flag <= N)
    {
    	printf("请选择:
    ");
    	printf("			  加法整/分数运算(请输入1)
    ");
    	printf("			  减法整/分数运算(请输入2)
    ");
    	printf("			  乘法整/分数运算(请输入3)
    ");
    	printf("			  除法整/分数运算(请输入4)
    ");
    	printf("			  退出整/分数运算(请输入5)
    ");
    

    // sto = rand()%4;//随机生成四则运算选择数
    if(con0)
    scanf("%d",&sel_oper);
    switch(sel_oper)
    {
    case 1:
    printf("第%d题:", flag);
    add_oper();
    flag++;
    break;
    case 2:
    printf("第%d题:", flag);
    sub_oper();
    flag++;
    break;
    case 3:
    printf("第%d题:", flag);
    mul_oper();
    flag++;
    break;
    case 4:
    printf("第%d题:", flag);
    div_oper();
    flag++;
    break;
    case 5:
    return;
    }
    printf(" 继续运算?(请输入1) ");
    printf(" 重新选择?(请输入2) ");
    printf(" 退出运算?(请输入3) ");
    scanf("%d",&con);
    if(con
    1)
    con=1;
    else if(con2)
    con=0;
    else if(con
    3)
    break;
    else
    printf("抱歉!,你输入的指令有误!请重新输入! ");
    }
    printf("您总共完成了 %d 道题 正确 %d 道 错误 %d 道 ",r+w,r,w);
    return 0;
    }
    2.运行截图
    整数加法

    整数减法

    整数乘法

    整数除法

    四、个人小结

    第一次用博客园来写代码,完成相关作业,感觉对于自己来说还是有一点难度。关于这个题目,完成的还有很多不足,其中最大的不足就是,没有关于真分数的计算。总体来说,通过这次作业可以看出,编程能力还需要提高。

    psp 任务内容 计划完成的时间(min) 实际完成时间(min)
    Planning 计划 30 30
    Estimate 估计这个任务需要多少时间 50 60
    Development 开发 20 20
    Design 设计 15 15
    Test 测试 6 6
    Postmortem & Process Improvement Plan 事后总结 5 5
  • 相关阅读:
    Lucene
    SQL优化以及索引
    Mysql优化
    RocketMQ
    RocketMQ
    Session共享
    Linux安装Nginx
    初识nginx
    跨域,防止表单重复提交
    HttpClient案例
  • 原文地址:https://www.cnblogs.com/weihang/p/13943002.html
Copyright © 2011-2022 走看看