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

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

时间:2017-12-02 22:15:23      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:工作   好的   i++   修改   软件企业   发布   生成   null   部分   

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

技术分享图片

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

标签:工作   好的   i++   修改   软件企业   发布   生成   null   部分   

原文地址:http://www.cnblogs.com/Jspo/p/7955622.html

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