**1.软件=程序(程序=算法+数据结构)+软件工程 **
一个复杂的软件不但要有合理的软件架构、软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数、链接参数等。这些都是软件的构建过程。
和软件开发活动(构建管理、源代码管理、软件设计、软件测试、项目管理)用关的内容是软件工程的核心部分,由此推论软件企业 = 软件+商业模式。
程序(算法、数据结构)是基本功(即使算法别人都已经实现只需调用即可,数据结构和算法还是要掌握,对代码的改进很有帮助。看到一个比喻:写程序和开车一样,经验可以起到很大作用,但如果不知道底层是怎么工作的,就永远只能开车,既不会修车,也不能造车),但是在算法和数据结构之上,软件工程决定了软件的质量;商业模式决定了一个企业的成败。
2.软件工程
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。包括软件需求分析、软件设计、软件构建、软件测试和软件维护领域。
软件开发具有复杂性、不可见性(没办法看到机器内部怎么运行的)、易变性(正确修改软件很困难)、服从性(服从硬件,服从用户需求)、非连续性(输入很小的变化,会引起输出上极大的变化)。
计算机科学中的理论研究部分,大多可以从形式上证明,与数学、离散数学、数理逻辑密切相关;计算机科学中与时间相关的部分,都和数据以及其他学科发生关系;软件工程则和人的行为、现实社会社会的需求息息相关。
计算机理论的进展会帮助软件工程(例如对程序正确性的分析);软件工程的进展(更好的工具,更多的应用领域)会帮助计算机科学家更有效地进行实验和探索。
软件工程的目标是创造“足够好”的软件,在时间、成本等多种约束条件下决定一个软件在什么时候能“足够好”,可以发布。
3.简单的四则运算
随机出30道题,因为是二年级,所以加法不过百,减法不变负,乘数除数不过十。提到随机数我就想到了rand(),去搜了一下该函数产生的数的范围,rand()%m可以产生从0~m-1,所以现在想产生100以内的数,就应该用rand()%100。但是在实践中虽然使用了rand(),每次生成的随机数都是一样的,查后知道了需要提供一个种子,相同的种子会产生相同的随机数,因此在rand()前添加srand(time(NULL))
就可以了。实践代码如下:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main ( int argc, char *argv[] )
{
int Questions();
Questions();
return 0;
}
int Questions()
{
srand(time(NULL));
int t=0;
for (int i = 0; i < 30; i++) {
printf("%d.",i+1);
int x=rand()%100;
int y=rand()%100;
int z=rand()%4;
if(z==0) {
x=x%10;
y=y%10;//个位数相乘
printf("%d×%d=\\n",x,y) ;
}
if(z==1) {
y=(y%10)+1;//除数不能为0
printf("%d÷%d=\\n",x,y) ;
}
if(z==2) {
if((x+y)>100) {
x=x/2;
y=y/2;//和不大于100
}
printf("%d+%d=\\n",x,y) ;
}
if(z==3) {
if(x<y){
t=y;
y=x;
x=t;//差不能是负数
}
printf("%d-%d=\\n",x,y) ;
}
}
}
如果支持真分数(分子小于分母)四则运算,代码改为以下:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main ( int argc, char *argv[] )
{
int Questions();
Questions();
return 0;
}
int Questions()
{
srand(time(NULL));
int t;
for (int i = 0; i < 30; i++) {
printf("%d.",i+1);
int x1=rand()%100;
int x2=rand()%100;
int y1=rand()%100;
int y2=rand()%100;
if(x2<=x1){
t=x2;
x2=x1;
x1=t;
if(x1==x2) {
x1=x1-1;//保证分子比分母小
}
}
if(y2<=y1){
t=y2;
y2=y1;
y1=t;
if(y1==y2 ) {
y1=y1-1;
}
}
int z=rand()%4;
if(z==0) {
printf("%d/%d × %d/%d=\\n",x1,x2,y1,y2) ;
}
if(z==1) {
x2=(x2%10)+1;
y2=(y2%10)+1;
printf("%d/%d ÷ %d/%d=\\n",x1,x2,y1,y2) ;
}
if(z==2) {
printf("%d/%d + %d/%d=\\n",x1,x2,y1,y2) ;
}
if(z==3) {
if(x1/x2>y1/y2) {
t=x1;
x1=y1;
y1=t;
t=x2;
x2=y2;
y2=t;
}
printf("%d/%d - %d/%d=\\n",x1,x2,y1,y2) ;
}
}
}