第八周实验

与2252309合作结对编程

四则混合运算
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int score=0;

int add(int a,int b)
{
	int c=a+b;
	if(c<1000) return c;
	else return -1;
}

int substract(int a,int b)
{
	int c=a-b;
	if(c>=0&&c<=1000) return c;
	else return -1; 
}

int multify(int a,int b)
{
	int c=a*b;
	if(c<1000) return c;
	else return -1;
}

int divide(int a,int b)
{
	int c=a/b;
	if(a%b==0&&b!=0) return c;
	else return -1;
}

int rand_num()
{
	int num;
	srand((unsigned)time(NULL) + (unsigned)rand());//初始化随机数种子
	num=rand()%100;//生成一百以内的随机数
	return num;
}

void menu()
{
	printf("四则混合运算游戏\n");
	printf("目前您的积分是%d\n",score);
	printf("1、进行游戏  2、退出游戏\n");
	printf("请选择:");
}

void menu_()
{
	printf("----------------\n");
	printf("1、加法(+)\n");
	printf("2、减法(-)\n");
	printf("3、乘法(*)\n");
	printf("4、除法(/)\n");
	printf("请选择两个运算符:");
}

void play()
{
	int i,j;
	int oper[2];//运算符
	int num[5];//运算数字
	int answer;//答案
	menu_();
	scanf("%d %d",&oper[0],&oper[1]);
	if((oper[0]<=2&&oper[1]<=2)||(oper[0]>=3&&oper[1]>=3)){
	//同一级别运算
		j=0;
		for(i=0;i<=2;i=i+2){
			if(i==0) num[i]=rand_num();
			num[i+1]=rand_num();
			switch(oper[j++])
			{
				case 1:num[i+2]=add(num[i],num[i+1]);break;
				case 2:num[i+2]=substract(num[i],num[i+1]);break;
				case 3:num[i+2]=multify(num[i],num[i+1]);break;
				case 4:num[i+2]=divide(num[i],num[i+1]);break;
			}
			if(num[i+2]<0||num[i+2]>100) {
			//重置
				i=i-2;
				j=j-1;
			}
		}
	}
	else{
	//不同一级别运算
	//先乘除,后加减
		int temp,flag=0;
		if(oper[0]<=2&&oper[1]>=3){
			temp=oper[1];oper[1]=oper[0];oper[0]=temp;
			flag=1;
		}
		
		j=0;
		for(i=0;i<=2;i=i+2){
			if(i==0) num[i]=rand_num();
			num[i+1]=rand_num();
			switch(oper[j++])
			{
				case 1:num[i+2]=add(num[i],num[i+1]);break;
				case 2:{
					if(flag==1&&i==2) num[i+2]=substract(num[i+1],num[i]);
					else num[i+2]=substract(num[i],num[i+1]);
					break;
				}
				case 3:num[i+2]=multify(num[i],num[i+1]);break;
				case 4:num[i+2]=divide(num[i],num[i+1]);break;
			}
			if(num[i+2]<0||num[i+2]>100) {
			//重置
				i=i-2;
				j=j-1;
			}
		}
		
		if(flag==1){
			temp=oper[1];oper[1]=oper[0];oper[0]=temp;//交换运算符
			temp=num[3];num[3]=num[1];num[1]=num[0];num[0]=temp;//交换数字
		}
	}
	
	char OPER[2];
	for(i=0;i<=1;i++){
		switch(oper[i])
		{
			case 1:OPER[i]='+';break;
			case 2:OPER[i]='-';break;
			case 3:OPER[i]='*';break;
			case 4:OPER[i]='/';break;
		}
	}
	
	printf("请计算:%d %c %d %c %d =",num[0],OPER[0],num[1],OPER[1],num[3]);
	scanf("%d",&answer);
	if(answer==num[4]){
		score++;
		printf("回答正确,您当前积分为:%d\n",score);
	}
	else{
		if(score==0) score++;
		score--;
		printf("回答错误,正确答案为%d,您当前积分为:%d\n",num[4],score);
	}
	system("pause");
	system("cls");
}

int main()
{
	int X;
	while(1)
	{
		menu();
		scanf("%d",&X);
		switch(X){
			case 1:play();break;
			case 2:printf("您已成功退出游戏\n");
					 return 0;
		}
		system("cls");
	}
}
2. 运行结果
  • 初始界面

  • 同级运算

  • 不同级运算

  • 计算错误

  • 退出游戏

  1. 实验体会
    在具体编程中要注意细节,如积分不可以是负数,故当积分为0时不会减1;在不同级别的运算中要注意运算顺序,要秉持先乘除后加减的原则;除数不能为零这一数学原则问题;还有考虑到小学计算难度,本游戏中的运算都是大于0且小于100的自然数运算等等。
    结对编程的好处就在于此,一个人专心编程的同时另一个人就更能注意到这些细节处的问题。由于每个人的思考方式都有所差异,所以对于同一问题就有不同的解决方式,我们可以在比较之后选择更适用于实际情况的方式。同时结对编程也是个实时性的过程,边编写边检查边边反馈边交流,这能大大提升编程效率。不用为了一些常识性的语法小错误而寻找困惑,也不用担心在大致框架上出错,对于两个人的结对编程来说这是能保证的基本优势。结对编程还能参考学习别人的编程方式,对锻炼我们的代码风格和代码阅读能力有极大的好处。
posted @   lijin_001  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示