码迷,mamicode.com
首页 > 其他好文 > 详细

四则运算2.0版

时间:2015-03-30 00:55:19      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

#include <stdio.h>
#include <stdlib.h>
main() 
{  	
	printf("\n\t欢迎使用四则运算练习软件\n\n");
	Chioce();
}
Chioce()
{
	int ch1=0;
	printf("\t1.整数运算\n\t2.真分数运算\n\t请选择:");
	scanf("%d",&ch1);
	if(ch1==1)
	{
		ZhengShuYunSuan();	
	}
	FenShuYunSuan();
}

ZhengShuYunSuan() 
{  
	int ranswer=0;   //正确答案  
	int uanswer=0;   //用户输入的答案  
	int t=0,n=0,m=0;    //临时变量  
	char op;       //运算类别  
	int num1=0;    //操作数1  
	int num2=0;    //操作数2
	int ch,count=0;
	
	while(1)
	{
		if(count==10)
		{
			printf("恭喜你在10道练习里做对了%d题! \n",n);
			printf("\t1.继续练习\n\t2.退出\n\t请选择:");
			scanf("%d",&ch);
			if(ch==2)
			{
				break;
			}
			
			count=0;
			n=0;
			Chioce();
		}
		srand(time(NULL));  //初始化随机数  
		num1=rand()%10;   //取0-9之间的随机数  
		num2=rand()%10;  
		m=rand()%4+1;  
		switch(m)  
		{  
		case 1:    
			op=‘+‘;  
			break;
		case 2:  
			op=‘-‘; 
			break;
		case 3:  
			op=‘*‘;    
			break;
		case 4:  
			op=‘/‘;  
			break; 
		}
		//加入一条防止"不够减"的语句,当选择减法且num1小于num2时不够减
		//不够减的时候,用临时变量交换两个操作数 
		if((op==‘-‘) && (num1<num2)) 
		{   
			t=num1; 
			num1=num2;
			num2=t;  
		}
		//防止"除数为0"的程序漏洞 
		//当num2被随机取值到0时,就将num2强制置为1
		//做除法时,将num1的值强制赋值给num1*num2,防止不能整除  
		if(op==‘/‘)  
		{   
			if(num2==0)
			{    
				num2=1;  
			}   
			num1=num1*num2; 
		}
		//防止num1不能被num2整除的语句  }
		//输出测试题本身、提示用户输入  
		printf("   %d%c%d= ",num1,op,num2);  
		while(!(scanf("%d",&uanswer)))
		{
			printf("\n   非法输入,请重新输入答案:");
			fflush(stdin);
		}
		//程序计算正确结果  
		switch(op) 
		{  
		case ‘+‘:   ranswer=num1+num2;   break;
		case ‘-‘:   ranswer=num1-num2;   break;
		case ‘*‘:   ranswer=num1*num2;   break;
		case ‘/‘:   ranswer=num1/num2;   break;  
		} 
		//评判,做对返回1,做错返回0 
		if(uanswer==ranswer) 
		{   
			printf("   做对了!\n");  
			n++; 
		}  
		else
		{   
			printf("   做错了!\n");  
		} 
		count++;
	}
	
}
FenShuYunSuan()
{
	int a=0,b=0,c=0,d=0;
	int x=0,y=0,z=0,ux=0,uy=0,uz=0;
	int n=0,t=0,i=0,m=0;
	char op,uop;	
	int ch=0,count=0;
	
	while(1)
	{
		if(count==10)
		{
			printf("恭喜你在10道练习里做对了%d题! \n",n);
			printf("\t1.继续练习\n\t2.退出\n\t请选择:");
			scanf("%d",&ch);
			if(ch==2)
			{
				exit (0);
			}
			
			count=0;
			n=0;
			Chioce();
		}
		srand(time(NULL));		
		a=rand()%10+1;			
		b=rand()%10+1;
		c=rand()%10+1;
		d=rand()%10+1;
		
		
		
		if(a>b)
		{
			t=a;
			a=b;
			b=t;
		}
		if(c>d)
		{
			t=c;
			c=d;
			d=t;
		}
		
		m=rand()%4+1;
		switch(m)
		{
		case 1:
			op=‘+‘;
			x=a*d+b*c;
			y=b*d;
			break;
			
		case 2:
			op=‘-‘;
			if((a*d<b*c) && (a!=c))
			{
				t=a;
				a=c;
				c=t;
				t=b;
				b=d;
				d=t;
			}
			x=a*d-b*c;
			y=b*d;
			break;
			
		case 3:
			op=‘*‘;
			x=a*c;
			y=b*d;
			break;
			
		case 4:
			op=‘/‘;
			x=a*d;
			y=b*c;
			break;
		}
		
		if(x>y)
		{
			i=y;
		}
		else
		{
			i=x;
		}
		
		while(i>1)
		{
			if((x%i==0)&&(y%i==0))
			{
				x=x/i;
				y=y/i;
				continue;
			}
			i--;
		}
		printf("\n%d/%d %c %d/%d=",a,b,op,c,d);
		if(y==1)
		{
			z=x;
			
			while(!(scanf("%d",&uz)))
			{
				printf("\n 非法输入,请重新输入答案:");
				fflush(stdin);
			}
			if(z==uz)
			{
				printf("\n答对了!!");
				n++;
			}
			else
			{
				printf("\n答错了!!");
			}
		}
		else if(x==y)
		{
			z=1;
			
			while(!(scanf("%d",&uz)))
			{
				printf("\n 非法输入,请重新输入答案:");
				fflush(stdin);
			}
			if(z==uz)
			{
				printf("\n答对了!!");
				n++;
			}
			else
			{
				printf("\n答错了!!");
			}
			
		}
		else
		{
			
			while(!(scanf("%d%c%d",&ux,&uop,&uy)))
			{
				printf("\n 非法输入,请重新输入答案:");
				fflush(stdin);
			}
			if((x==ux)&&(y==uy))
			{
				printf("\n答对了!!");
				n++;
			}
			else
			{
				printf("\n答错了!!");
			}
		}
		count++;
	}
}

 技术分享

本次按老师的要求,把真分数的功能添加进去了,老师要求的是和运算,但为了方便,我将加减乘除都添加进去了,即菜单2,菜单1和第一次的博客实现的功能一样。真分数的运算不能说是很难,就是分数在约分时会有点困难,还有最后答案是一个分数还是整数也要判断,再提示用户输入。

四则运算2.0版

标签:

原文地址:http://www.cnblogs.com/ouqifeng/p/4376802.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!