1. 程式人生 > >《構建之法(第三版)》第一章

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

include 四則運算 不但 目標 軟件需求 輸入 .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) ;
    } 
    }  
}

技術分享圖片

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