这是第一次作业,而且是个人项目,说实话一开始得到作业还是很紧张的。虽然题目比较简单,但是由于自身动手能力很差,所以还是慌得要死。
经过思考和审题,我渐渐有了思路。四则运算主要的难点在于选取数是否是随机数而且是否能保证整数相除能否除尽。
一开始关于选取数是否随机我很苦恼,因为从前写程序变量基本都是自己赋值,没想到怎么随机取数。后来经过同学的点拨,我想到了随机选取函数。比如十以内的四则运算就将0-9赋给a1 再加1就变成1-10了。而保证除尽的问题也很快想到了解决方案,只需要添加一个判断两数相除记过是否为0就可以了。而且我添加了计算正确率的功能,十个题为一组,结束可以算出正确率,用10减去错误的个数n再除10乘以100%就可以了。
在这两个问题得到解决之后我就开始动手写代码了。但是写完整数部分的时候又遇到了问题,我不会真分数的四则运算T=T
既然是真分数,肯定小于1,要保证分子小于分母。但是由于选取的数的随机性,所以无法保证分子一定小于分母,这才是难点啊,我太天真了=-=
我有个思路,但是尝试失败了,不知道是否正确,希望老师帮我看一下。
给四个变量a1 a2 a3 a4,先随机1-10 取一个数赋值给a1,然后再从a1-10随机取一个数赋值给a2,然后输出成分数格式,a3和a4同理,这样就保证了是真分数。
但是我不清楚是不是这个思路不正确,我尝试过后总是输出格式不正确,希望老师帮帮我T-T
通过这次的作业,我发现了自身上很多的不足之处,比如动手能力差,遇到问题容易慌张,虽然我很努力想做到完美,但是还是没有完成老师的全部要求。。。。我有罪T-T
但是我还是很有收获的,我能将以前学的知识串起来真正做点东西,做到学以致用,而且是自己一个人,所以我很感激老师给予这次机会,我也会好好努力,跟上老师的步伐,在之后的团体作业中加倍努力。
以上就是我的心得体会及编写过程,下面是我的程序介绍及源代码。望老师批评指正。
随机数四则运算程序介绍:
该软件主要用于训练并测试使用者的四则运算能力。
进入软件主界面,界面上会显示3个选项,分别是:
1.10以内的四则运算训练。
2.20以内的四则运算训练。
0.退出。
使用者根据自己的需要选择不同的选项:
按“1”进入10以内的四则运算训练;
按“2”进入20以内的四则运算训练;
按“0”退出程序主界面。
10以内的四则运算和20以内的四则运算均为10题一组;
在这10个题中,加减乘除均有,操作数均为整数,且加减乘除出现的顺序不定,除法给出的两个操作数能除尽。
对于给出的题目,当操作者计算正确时,操作界面上无特殊显示;当操作者计算错误时,操作界面上会显示“FAULT!”,提示操作者该题计算错误并同时进入下一题。
操作者每做完10道题,界面上会显示此轮计算的正确率,并询问操作者是否继续。此时操作者可根据自己的需要,
按“1”进入10以内的四则运算训练;
按“2”进入20以内的四则运算训练;
按“0”退出程序主界面。
源代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void calculation1();
void calculation2();
void main()
{
int number;
char m;
redo:
printf(" 欢迎使用四则运算生成
");
printf("<1>.10以内的四则运算训练.
");
printf("<2>.20以内的四则运算训练.
");
printf("<0>.退出.
");
printf("请选择功能号( 1 / 2 / 0 ): ");
scanf("%d",&number);
srand((unsigned)time(0));
loop: if(number==1) calculation1();
else if(number==2) calculation2();
else exit(0);
printf("
");
printf("继续吗?(Y/N):");
getchar();
scanf("%c",&m);
if(m=='Y') goto loop;
if(m=='N') goto redo;
}
void calculation1()
{
int i,j,n=0;
int a1,a2,result;
float rate;
char c='%';
printf("您选择的是10以内的四则运算。
");
for(i=1;i<=10;i++)
{
j=rand()%4+1;
switch(j)
{
case 1:a1=rand()%10+1;a2=rand()%10+1;
printf("(%d) %d+%d=",i,a1,a2);
scanf("%d",&result);
if(result!=a1+a2)
{
printf("FAULT!
");
n++;
}
break;
case 2: while((a1=rand()%10+1)&&(a2=rand()%10+1))
{
if(a1<a2) continue;
else break;
}
printf("(%d) %d-%d=",i,a1,a2);
scanf("%d",&result);
if(result!=a1-a2)
{
printf("FAULT!
");
n++;
}
break;
case 3:a1=rand()%10+1;a2=rand()%10+1;
printf("(%d) %d*%d=",i,a1,a2);
scanf("%d",&result);
if(result!=a1*a2)
{
printf("FAULT!
");
n++;
}
break;
case 4:while((a1=rand()%10+1)&&(a2=rand()%10+1))
{
if(a1%a2!=0) continue;
else break;
}
printf("(%d) %d/%d=",i,a1,a2);
scanf("%d",&result);
if(result!=a1/a2)
{
printf("FAULT!
");
n++;
}
break;
}
}
rate=(10.0-n)/10.0*100;
printf("正确率为%.0f%c
",rate,c);
}
void calculation2()
{
int i,j,n=0;
int a1,a2,result;
float rate;
char c='%';
printf("您选择的是20以内的四则运算。
");
for(i=1;i<=10;i++)
{
j=rand()%4+1;
switch(j)
{
case 1:a1=rand()%20+1;a2=rand()%20+1;
printf("(%d) %d+%d=",i,a1,a2);
scanf("%d",&result);
if(result!=a1+a2)
{
printf("FAULT!
");
n++;
}
break;
case 2:while((a1=rand()%20+1)&&(a2=rand()%20+1))
{
if(a1<a2) continue;
else break;
}
printf("(%d) %d-%d=",i,a1,a2);
scanf("%d",&result);
if(result!=a1-a2)
{
printf("FAULT!
");
n++;
}
break;
case 3:a1=rand()%20+1;a2=rand()%20+1;
printf("(%d) %d*%d=",i,a1,a2);
scanf("%d",&result);
if(result!=a1*a2)
{
printf("FAULT!
");
n++;
}
break;
case 4:while((a1=rand()%20+1)&&(a2=rand()%20+1))
{
if(a1%a2!=0) continue;
else break;
}
printf("(%d) %d/%d=",i,a1,a2);
scanf("%d",&result);
if(result!=a1/a2)
{
printf("FAULT!
");
n++;
}
break;
}
}
rate=(10.0-n)/10.0*100;
printf("正确率为%.0f%c
",rate,c);
}