1. 像阿超那样,花20分钟写一个能自动生成小学四则运算的程序。
①主要函数:
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;
}
2. 在一周之内,快速看完整部教材,列出你不懂的5~10个问题,发布在你的个人博客上。
(1)为什么软件开发过程中,输入上很小的变化,会引起输出上极大地变化?
说明:这个问题在第一章的软件的特殊性这一节,软件开发过程中具有非连续性的难题,在我们的日常认知里,增加输入,就能看到相应输出的增加,但是为什么有的软件却不具备这样的特性,我具有这样的困惑。
(2)所谓软件工程,软件中的bug可以都去除掉吗?
说明:这个问题是根据第一章软件工程的目标-”创造足够好”的软件提出的。所谓好软件,就是软件没有bug,但是软件一直再被开发。bug漏洞真的可以完全消除吗?
(3)如何判断一个软件的好与坏,软件的用户体验是一个软件好坏的决定性的因素吗?
说明:这个问题是由概论里提出的,一个好的软件,即使功能和同类软件区别不大,但却是两种截然不同的效果,这便是由用户体验引起的,但是用户体验真的可以决定软件的好坏吗?
(4)大众都不喜欢创新,就连创新者也不列外,但是创新者真的不喜欢创新吗?
说明:书中16.1.2迷思之二:”大家都喜欢创新”中谈到创新者为什么也不喜欢创新呢?书中后文举了电话发明和雅卡尔改进织布机的例子,并不能有效证明创新者不喜欢创新者,甚至恨创新。以我的实际经验来看,创新者还是喜欢创新的并推进创新的。
(5)单元测试必选用最熟悉的人来写吗?
说明”代码的作者最了解代码的特性,目的与代码的局限性,但是根据我所知,自己的错误与缺点往往自己难以发现,有些疏漏很容易视而不见,所以不是很理解作者的观点。
4.
一 游戏类软件
游戏有很多种类,分类方式有很多。比如说按照游戏内容分,分为射击游戏,益智游戏,策略游戏休闲游戏......等等。还可以按照游戏平台分类,游戏大小分类,运行方式分类等多种分类方式。本类软件可以说是最受欢迎的软件,几乎人人都会使用,但是每个人玩的都不尽相同,因为人的喜好不同。游戏最大的乐趣在于,它可以实现现实中我们想做却不能做的事,(比如杀人)这个例子可能不太好,不过很说明问题,它可以满足人类的邪恶欲望
二.学校组织的软件
这些软件是学校统一组织的,目标在于让学生掌握更多的知识,并不存在盈利效果这些软件是学校推荐过来,上大学期间推荐。同一类型软件,比如图书类软件,当然比那个书的种类多,质量高。
三. 系统类软件
我对系统类软件不是很了解,在这里先科普一下:系统软件是指控制和协调计算机及外部设备,支持应用软件开发和运行的系统,是无需用户干预的各种程序的集合,主要功能是调度,监控和维护计算机系统;负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。 我第一次使用是时2016年,当时使用的是智能手机Android系统。原因很简单苹果手机价格高,安卓更加亲民。
5. 软件工程是不是教那些不怎么会写程序的人开发软件,你怎么看?
答:软件工程并不是教不会写程序的人开发软件,而是提供一种科学的、有效的开发思想、开发理念、开发模式和开发流程,使得开发团队更有效地工作,提供更可靠的、更优秀的产品。
6.你所在的学校有计算机科学专业和软件工程专业么?相关专业的教学计划和毕业出路有什么不同?
我所在的学校有软件工程专业,计算机科学专业侧重于科学,也就是学术,侧重于数学和计算机的具体方向,如图论、图形图像、并行计算等,也有硬件开发等。
软件工程专业侧重于软件开发,如语言类课程、设计模式、操作系统、需求分析、软件体系结构、UML建模语言、软件项目管理等。
两者的主要区别在于软件工程是涉及人类活动的,考虑这个软件做什么,怎么组织团队,怎么完成软件,怎么更好地开发等;而计算机科学则更多地从理论的角度出发,并不直接考虑工程方面的问题。