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

现代软件工程 第一章 【概论】练习与讨论

时间:2016-04-13 20:45:25      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

1.像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的“软件”,和同学们比较一下各自程序的功能、实现方法的异同等等。

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
int moshi;
int count;

void plus(int first,int second)
{
int result;
printf("%d + %d =",first,second);
scanf("%d",&result);
if(result == first+second)
{
printf("Right!\n");
}
else
{
printf("wrong!\nThe correct answer is:%d\n",first+second);
}
}

void minus(int first,int second)
{
int result;
printf("%d - %d =",first,second);
scanf("%d",&result);
if(result == first-second)
{
printf("Right!\n");
}
else
{
printf("wrong!\nThe correct answer is:%d\n",first+second);
}
}

void multiply(int first,int second)
{
int result; //运算结果
printf("%d * %d =",first,second);
scanf("%d",&result);
if(result == first*second)
{
printf("Right!\n");
}
else
{
printf("wrong!\nThe correct answer is:%d\n",first*second);
}
}

void divide(int first,int second)
{
float result; //运算结果
float temp;
second = rand()%100;
printf("%d / %d =",first,second);
if(second==0)
{
printf("Error!\n");
return;
}
scanf("%f",&result);
temp=result*100 - ((float)first/(float)second)*100;
if(abs(temp)<0.01)
{
printf("Right!\n");
}
else
{
printf("wrong!\nThe correct answer is:%f\n",(float)first/(float)second);
}
}

void menu()
{
printf("请选择模式:\n\n");
printf("----------1:练习模式\n");
printf("----------2:计算模式\n");
}
void practice()
{
int n;
int first,second;//保存两个运算的数字
while(1)
{
n=first%4; //除以4取余数,随机确定调用函数
srand(time(NULL));
first = rand()%100;
second = rand()%100;
if(count==5)
return ;
switch(n)
{
case 0:
{
plus(first,second);
count++;
break;
}
case 1:
{
minus(first,second);
count++;
break;
}
case 2:
{
multiply(first,second);
count++;
break;
}
case 3:
{
divide(first,second);
count++;
break;
}
default:
{
count++;
break;
}
}//switch
}//while
}
void jisuan()
{
int first,second;
printf("请输入两个值之间的运算\n");
char c,c1; //保存运算符
while(1)
{
if(count==5)
return ;
scanf("%d%c%d%c",&first,&c,&second,&c1);
switch(c)
{
case ‘+‘:
{
printf("%d+%d=%d\n",first,second,first+second);
count++;
break;
}
case ‘-‘:
{
printf("%d-%d=%d\n",first,second,first-second);
count++;
break;
}
case ‘*‘:
{
printf("%d*%d=%d\n",first,second,first*second);
count++;
break;
}
case ‘/‘:
{
printf("%d/%d=%f\n",first,second,(float)first/(float)second);
count++;
break;
}
default:
{
count++;
break;
}

}//switch
}//while
}

 

int main()
{
printf("每种模式默认运行5次,中途退出直接按Ctrl+c!\n");
printf("请选择模式:\n\n");
printf("1)练习模式\n");
printf("2)计算模式\n");

scanf("%d",&moshi);
while(1)
{

switch(moshi)
{
count=0;
case 1:
{
practice();
break;
}//case1
case 2:
{
jisuan();
break;
}
//case2
default:
{
break;
}
}
menu();
scanf("%d",&moshi);
}
return 0;
}

感悟:简单的只实现了两个值的运算,软件还需要扩充满足任意数值的需要,而且这个程序存在明显的BUG,软件必须处理用户一些错误的输出导致的程序的崩溃,软件工程就是解决这些问题的。

 

2  软件有很多种 选取三种软件分析他们特点

1)这些软件开发者如何说服你成为他们用户的?他们的目标都是盈利吗?他们的目标都是赚取用户的现金吗?还是别的

2)这些软件如何到你手上?

3)这些软件如何处理BUG?如何更新版本?

4)同一类型软件如何竞争

 

游戏:英雄联盟

1)开发者没有说服我,是我自愿玩的,目标当然是盈利,应该是赚取现金。(但是玩家多多少少自愿花钱)

2)自己去下载的

3)退出程序,发出报告,让我提交。更新版本通过下载更新包。

4)游戏的场景,环节,技能释放等

 

工具软件:迅雷

1)开发者没有说服我,是我自愿下载的,目标当然是盈利,应该是赚取现金

2)自己去下载的

3)暂时没发现BUG

4)谁下载快谁厉害

 

通信软件:微信

1)开发者没有说服我,是我自愿下载的,目标当然是盈利,应该是赚取现金

2)当时是同学介绍的,然后去下载

3)暂时没发现BUG

4)至于腾讯,好像不需要竞争了?

 

2.列举你在使用软件的时候观察到的“特殊”现象,它们能说明软件的某些本质特性么?

     软件对于用户来说好像是黑科技一样,它为我们带来我们说需要的东西,但是我们并不知道它真正工作原理(不可见)等等

 

 

3.上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
 
TFS(Team Foundation Server )是一个工作流协作的引擎,它允许一个团队使用他们自定义的流程,并使用在项目历史中实时收集起来的一个集中的数据仓库。
优点:集成性。版本控制系统和工作项存储器在注册时集成在一起。当注册时,可以将其与一个或多个工作项关联。新概念:搁置集
 
GitHub:Ruby社区的程序员使用Git以后,找不到好的Git托管网站,于是就开发了Github出来。
优点:重视社区活动,在GitHub,用户可以十分轻易地找到海量的开源代码。
 
Trac是一个为软件开发项目需要而集成了Wiki和问题跟踪管理系统的应用平台,是一个开源软件应用。
优点:力求不影响现有团队的开发过程,良好的扩充性,以里程碑的方式进行项目管理。
 
Bugzilla:是一款具有追踪系统的软件。
优点:开源免费,缺陷跟踪。强大的检索功能。
 
xcode集成了svn源代码管理客户端。
优点:分支管理系统,易于管理,集中式服务器更能保证安全性,管理方便,逻辑明确,符合一般人思维习惯 
 
这些我现在好像到现在没用过,是不是我菜?
 
4 软件工程是不是教那些不怎么会写程序的人开发软件? 你怎么看?
 
软件工程不仅是教不会写程序的人开发软件,更是再教已经懂得开发语言的程序员如何更好地开发软件。
 

5.你所在的学校有计算机科学专业和软件工程专业么?相关专业的教学计划和毕业出路有什么不同?阅读有关软件工程和计算机科学的区别的文章,谈谈你的看法。

当然有这些专业。教学计划针对专业不同,所以出路不同(比如软工和云计算,动画)

难道这道题是想说软件工程和计算机科学很不同?

个人觉得SE侧重实践,偏向于现实世界     CS侧重理论,偏向于完美世界

 

  6 中文编程是不是一种银弹?

这个问题不同人有不同的看法,我觉得如果中文编程真的能达到像英文那样的效果,是不错的(但是好像我们又要把原来所学的英文关键词换成中文,这样好像又有点难受),但是或者说外国的编程技术比较先进,他们可能有一些思维偏向于他们,造成我们不好理解,我觉得中文编程是不是银弹或许还要让时间来证明吧!

 

现代软件工程 第一章 【概论】练习与讨论

标签:

原文地址:http://www.cnblogs.com/HJL085/p/5388540.html

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