c语言实现:练习算术的小程序

本文介绍了一个C语言程序,该程序能够随机生成包含加、减、乘、除的四则运算题目,用户输入答案后,程序会判断正误并计算正确率。程序还涉及到了随机数生成、四舍五入处理以及用户交互,提供了代码实现和运行结果展示。
摘要由CSDN通过智能技术生成

一、小程序功能描述

 编写加减乘除4个自定义函数add,sub,mul,div,在主函数中调用这4个函数去完成以下功能:

  1. 随机生成5道四则运算题,题目的类型自加,减,乘,除中任意混合出题(即5道题目中有各种类型的题目),每道题目的两个整数是20以内的随机数,题目显示在屏幕上,由用户输入答案(如下图所示)
  2. 程序判断用户输入的答案是否正确,统计答题的正确率。运行结束时,询问是否继续练习,如果回答"Y"则继续进行练习,如果回答“N”则退出练习。

 二、题目分析

根据题意能得到以下相关信息:

        1.c语言中随机函数的应用

//导入随机函数所需的头文件
#include<stdlib.h>
#include<time.h>

//设置随机种子
srand((int)time(NULL));

//使用随机函数
//生成0-20之间的整数,用于随机生成两个20以内的整数
rand()%21
//生成1-4之间的整数,用于随机取四则运算
rand()%4+1

        2.结构化编程

对题目中所需要的四则运算分别定义为add,sub,mul,div四个函数,供主函数调用。

        3.四舍五入保留两位小数

在样例图黑窗口第二行文字中可以看到四舍五入保留2小数的字样,提示我们需要对计算机内部的除法运算进行四舍五入处理。另外,还有就是c语言中的浮点数直接进行比较会遇到精度问题,直接比较会出错,因此可以对计算机除法运算的浮点数结果进行四舍五入保留两位小数处理,提示用户输入除法运算四舍五入保留两位小数的数值,用处理后的结果进行比较就会避免精度问题。

float f(float a)
{
	a=a*1000;
	int t=(a+5)/10;
	return (float)t/100;
}

三、功能实现

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
float f(float a)
{
	a=a*1000;
	int t=(a+5)/10;
	return (float)t/100;
}
float add(float a,float b){
	return a+b;
}
float sub(float a,float b){
	return a-b;
}
float mul(float a,float b){
	return a*b;
}
float divv(float a,float b){
	if(b==0) b=1;
	float result=f(a/b);
	return result;
}

int main(){
	srand((int)time(NULL));
	char flag='Y';
	printf("计算练习,电脑随机生成5道题目\n");
	printf("十以内加、减、乘、除(四舍五入保留2小数),请答题:\n");
	float s=0,result=0;
	
	while (flag=='Y'){
		float num=0;
		for(int i=0;i<5;i++)
		{
			float a=rand()%21;
			float b=rand()%21;
			int c=rand()%4+1;
			char ch; 
			switch(c)
			{
				case 1:ch='+';s=add(a,b);break;
				case 2:ch='-';s=sub(a,b);break;
				case 3:ch='*';s=mul(a,b);break;
				case 4:ch='/';s=divv(a,b);break;
			}
			printf("%.0f%c%.0f=",a,ch,b);
			scanf("%f",&result); 
			if(s==result)
			{
			
			num++;	
			 } 
		}
		printf("正确率为%.0f%%",num/5*100);
		printf("是否继续,如果是输入Y,否则输入N\n");
		getchar();
		scanf("%c",&flag);
	}
	return 0;
} 

四、运行结果

五、扩展

除了四舍五入这种方法外还可以使用相减判断精度方法来判断两数是否相等。

程序设计中最为常用的精度为1e-6也就是0.000001,所以对于两个浮点数a,b:

如果a==b,那么就会满足fabs(a-b)<=1e-6
如果a>b,那么就会满足a>b&&fabs(a-b)>1e-6

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进阶的菜熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值