《构建之法(第三版)》第一章

Posted 20179202杨晓桐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《构建之法(第三版)》第一章相关的知识,希望对你有一定的参考价值。

**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) ;
    } 
	}  
}

以上是关于《构建之法(第三版)》第一章的主要内容,如果未能解决你的问题,请参考以下文章

《构建之法(第三版)》第二章

速读《构建之法(第三版)》 20199319

《构建之法(第三版)》第四章

2018--20179215--《构建之法(第三版)》第四章 两人合作

阅读《构建之法(第三版)》提出的问题

《构建之法(第三版)》速读提问