除整数外,还要实现真分数的四则运算
①主要函数:
char getSignal(); //获取随机运算符函数
int random(double,double); //获取随机数函数
int getResult(int,int,char); //结果计算函数
int takeTest(); //题目生成函数
②主函数
void main()
{
int n,a,right=0;
double percent;
printf("Please enter the number of the test:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
a=takeTest();
right=right+a;
}
printf("Powerful!\n");
printf("The number of right:%d\n",right);
percent=((double)right*100.00)/(double)n;
printf("The percent of right:%0.2f %%\n",percent);
}
③获取随机运算符函数:
char getSignal()
{
char signal[4]={'+','-','*','/'};
srand((unsigned)time(NULL));
return signal[rand()%4];
}
④获取随机数函数:
int random(double start, double end)
{
return (int)(start+(end-start)*rand()/(RAND_MAX+ 1.0));
}
⑤结果计算函数:
int getResult(int num1,int num2,char signal)
{
int res;
switch(signal)
{
case '+':
res=num1+num2;break;
case '-':
res=num1-num2;break;
case '*':
res=num1*num2;break;
case '/':
res=num1/num2;break;
default:
printf("运算符错误!\n");
}
return res;
}
⑥题目生成函数:
int takeTest()
{
int get;
int num1,num2,a;
char signal;
srand((unsigned)time(NULL));
signal=getSignal();
num1=random(0,1000);
num2=random(1,1000);
if(signal=='-')
{
if(num1<num2)
{
int temp;
temp=num1;
num1=num2;
num2=temp;
}
}
if(signal=='/')
{
if(num2==0)
{
int temp;
temp=num1;
num1=num2;
num2=temp;
}
}
printf("%d%c%d=",num1,signal,num2);
scanf("%d",&get);
fflush(stdin); //清空输入缓冲区
if(getResult(num1,num2,signal)==get)
{
printf("You're right!\n");
a=1;
}
else
{
printf("It's wrong!\n");
printf("The right answer is: %d\n",getResult(num1,num2,signal));
a=0;
}
return a;
}
支持多个运算符
# include <stdio.h>
int main(void)
{
double a, b;
int chose;
printf("欢迎使用我的计算器\n");
while (1)
{
printf("********************\n");
printf("1、两数相加\n");
printf("2、两数相减\n");
printf("3、两数相乘\n");
printf("4、两数相除\n");
printf("5、退出\n");
printf("********************\n");
scanf("%d", &chose);
/* if (chose<1 || chose>5)
{
printf("你的输入有误,请重新输入!\n");
continue;
}*/
switch (chose)
{
case 1:
printf("请输入第一个数字:\n");
scanf("%lf", &a);
printf("请输入第二个数字:\n");
scanf("%lf", &b);
printf("%lf+%lf = %lf\n", a, b, a+b);
break;
case 2:
printf("请输入第一个数字:\n");
scanf("%lf", &a);
printf("请输入第二个数字:\n");
scanf("%lf", &b);
printf("%lf-%lf = %lf\n", a, b, a-b);
break;
case 3:
printf("请输入第一个数字:\n");
scanf("%lf", &a);
printf("请输入第二个数字:\n");
scanf("%lf", &b);
printf("%lf*%lf = %lf\n", a, b, a*b);
break;
case 4:
printf("请输入第一个数字:\n");
scanf("%lf", &a);
printf("请输入第二个数字:\n");
scanf("%lf", &b);
printf("%lf/%lf = %lf\n", a, b, a/b);
break;
case 5:
printf("再见!\n");
return ;
default:
printf("你的输入有误,请重新输入!\n");
continue;
}
}
}
2.博客作业:我是吕越新,一名计算机应用技术专业的大二学生,我想通过对构建之法的学习,了解软件相关知识,从需求分析到最后软件投入市场过程中如何提高软件质量,了解相关流程,针对不同章节提炼出有内涵的东西,充分利用教材,弥补知识上的空缺,除了课上时间学习外,还要花费5小时闲暇时光在本书上,好好预习,复习,提高学习知识的能力,和小组成员共同进步,学会合作和互相配合,实现共赢。
3.快速看完整章教材,列出你不懂的5-10个问题,发布在你的个人博客上。
1我在《构建之法》第三版的26页看到这样一段话“如果用随机数以增加测试的真实性,好吗?
答:一般情况下不好,如果某个随机数导致程序出错,但是下一次运行又不能重复这一错误,则于事无补。我们还是要用随机数等办法“增加测试真实性”,但不是在单元测试中。单元测试不能解决所有问题,不必期望它会发现所有的缺陷。
2.单元测试是应在最基本的功能/参数上验证程序的正确性
答:单元测试应该测试程序中最基本的单元—如在c++/c#/java中的类,在此基础上,可以测试一些系统中最基本的功能点(这些功能由几个基本点组成),从面向对象设计原理出发,系统中最基本的功能点也该由一个类及其方法来表现。单元测试API中的每一个方法及每一个参数。
3.单元测试应覆盖所有代码路径
单元测试应覆盖所测单元的代码路径,包括错误处理路径。为了保证代码覆盖率,单元测试必须测试公开的和私有的函数/方法。(基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法)。
4.单元测试必须要用最熟悉代码的人(程序的作者来写)
代码的作者最了解代码的目的、特点和实现的局限性。所以,写单元测试没有比作者更适合的人选了。根据我实践的经验,自己的错误和缺点往往很难由自己发现,即使发现所需花费的时间成本也比较大。所以,才需要互测、互评。代码的作者虽然熟悉代码,但脑中倾向于验证代码的正确性而不是检查错误。有些疏忽很明显但容易视而不见,心中想象的代码是完美的,而屏幕上的代码却有失误。罗杰老师在第一节课时也提到,一般公司的开发人员和测试人员比例是1:1,有时甚至可能达到1:7.可见测试人员不可或缺。开发人员同时作测试人员既越俎代庖又效率低下。所以,我不是很理解和信服书作者的观点。
5.对于“回归测试”中的"回归”,我们可以将其理解为“回归到以前不正常的状态”。
回归测试最好要自动化,因为这样就可以对于每一个构建快速运行所有回归测试,以保证尽早发现问题。单元测试是回归测试的基础。在专注于模块基本功能的单元测试之外,还有功能测试------从用户的角度检车功能完成得怎么样。在微软的实践中,在一个项目的最后稳定阶段,所有人都要参加全面的测试工作,把以前发现并修复的Bug找出来,一个一个验证,以保证所有已经修复过的Bug的确得到了修复,并且每在最后一个版本中"复发",这是一个大规模的,全面的“回归测试”。
4.
一 游戏类软件
游戏有很多种类,分类方式有很多。比如说按照游戏内容分,分为射击游戏,益智游戏,策略游戏休闲游戏......等等。还可以按照游戏平台分类,游戏大小分类,运行方式分类等多种分类方式。本类软件可以说是最受欢迎的软件,几乎人人都会使用,但是每个人玩的都不尽相同,因为人的喜好不同。游戏最大的乐趣在于,它可以实现现实中我们想做却不能做的事。
二. 工具类软件
我对工具类软件是这样理解的:任何对我们有帮助作用的软件,比如WinRar它是我们压缩文件的工具,浏览器是我们上网的工具,暴风影音是我们看视频的工具,我第一次使用这类软件是大一初,决定我使用它有这么几个条件:1.互联网购物兴起。2.我拥有了自己的银行卡。3.淘宝网是我国最大的网购平台,支付宝对应淘宝。4.移动支付的快捷方便。
我国现在有超过四亿的智能机用户,使用移动平台支付的有不到2个亿,所以还有很大的发展空间,在未来20年,还会大行其道。
三 系统类软件
我对系统类软件不是很了解,在这里先科普一下:系统软件是指控制和协调计算机及外部设备,支持应用软件开发和运行的系统,是无需用户干预的各种程序的集合,主要功能是调度,监控和维护计算机系统;负责管理计算机系统中各种独立的硬件,使得它们可以协调工作 我第一次使用是时2016年,当时使用的是智能手机Android系统。原因很简单苹果手机价格高,安卓更加亲民。
5.软件工程是不是教那些不怎么会写程序的人开发软件? 你怎么看?
软件工程是教那些不会开发复杂项目的人怎样去编程的学科。当学习一门编程语言时,我们会在学习过程中试着编写一些小程序,这些程序可能只有几十行代码,而当我们编写的程序变得复杂,需要成千上万行代码和复杂的逻辑结构时,我们会发现自己变得又不会编程了;就会试着像以前一样按自己所想去实现这个复杂的程序,但是当程序的代码越来越多,结构越来越复杂时,会发现出现的错误也越来越多,同时很难去修改,甚至可能会出现不能修复的错误。所以,一个复杂系统的开发,需要一套规范的管理方法去管理这个开发的过程,软件工程就是关于怎样管理开发过程的学科。软件工程会使你知道怎样去做需求分析以了解程序需要实现的功能,怎样去做系统设计以构建程序的框架,怎样测试以验证程序功能的正确等。你可以通过软件工程的指导去实现一个结构清晰、可维护和健壮的程序。软件工程会教给你如何从工程的角度去完成一个项目的开发,如何处理开发过程中的各种问题,如何创造一个完美的软件系统。
6.你所在的学校有计算机科学专业和软件工程专业么?相关专业的教学计划和毕业出路有什么不同?
有,关于软件工程的教学计划有软件测试和软件开发,学习的相关软件知识更侧重于测试,相对于开发的偏写代码的不同,测试行业试讲开发人员写的程序进行测试,检测其程序是否存高危bug,并能及时的使开发人员修正错误,减少软件开发需要使用的资金,同时软件测试也不一定需要很强的专业能力,相对开发对来说更希望测试一类的工作。