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


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

  • 相关阅读:
    洛谷 P1706 全排列
    n皇后问题
    跳马
    [HDOJ4612]Warm up(双连通分量,缩点,树直径)
    [POJ3177]Redundant Paths(双连通图,割边,桥,重边)
    [POJ3352]Road Construction(缩点,割边,桥,环)
    [POJ3694]Network(LCA, 割边, 桥)
    [UVA796]Critical Links(割边, 桥)
    [UVA315]Network(tarjan, 求割点)
    [HDOJ2586]How far away?(最近公共祖先, 离线tarjan, 并查集)
  • 原文地址:https://www.cnblogs.com/Jspo/p/7955622.html
Copyright © 2020-2023  润新知