zoukankan      html  css  js  c++  java
  • 《构建之法(第三版)》第一章

    **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=
    ",x,y) ; 
    	}
    	if(z==1) {
    		y=(y%10)+1;//除数不能为0
                    printf("%d÷%d=
    ",x,y) ; 
    	}
    	if(z==2) {
    		if((x+y)>100) {        
    			x=x/2;
    			y=y/2;//和不大于100
    	}   
        printf("%d+%d=
    ",x,y) ;      
        }
        if(z==3) {
            if(x<y){
    			t=y;
                y=x;
                x=t;//差不能是负数
    		}
        printf("%d-%d=
    ",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=
    ",x1,x2,y1,y2) ; 
    	}
    	if(z==1) {
            x2=(x2%10)+1;    
    		y2=(y2%10)+1;
            printf("%d/%d ÷ %d/%d=
    ",x1,x2,y1,y2) ; 
    	}
    	if(z==2) {
            printf("%d/%d + %d/%d=
    ",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=
    ",x1,x2,y1,y2) ;
        } 
    	}  
    }
    

  • 相关阅读:
    01.mp4v2应用—mp4转h264
    00.mp4v2工具的用法
    交叉编译x264和ffmpeg
    pcm2aac
    保存一下东西
    05.移植内核3.4.2
    04.移植u-boot
    03.应用程序调试
    关于 jxl 下载 excel (java)
    JXL 对excle 操作(单元格合并,列宽,格式等)
  • 原文地址:https://www.cnblogs.com/Jspo/p/7955622.html
Copyright © 2011-2022 走看看