精华内容
下载资源
问答
  • C语言程序设计基础 刘新国 1 第五章 函数 结构程序设计(Structured Programming) 将复杂程序分解为若干个简单的模块用函数进行实现 模块之间相对独立通过参数进行调用 C语言中的函数 众多函数是平等的兄弟关系 ...
  • 第7章:用函数实现模块化程序设计 7.1为什么要用函数  7.2怎样定义函数  7.2.1为什么要定义函数  7.2.2定义函数的方法  7.3调用函数174  7.3.1函数调用的形式  7.3.2函数调用时的数据传递  7.3.3函数调用的...
  • 编译原理 C语言实现词法分析

    热门讨论 2011-05-14 00:48:46
    通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 编制一个读单词过程,从输入的源程序中,识别出各个具有独立...
  • c语言教程(课件)8.ppt

    2020-08-01 06:14:04
    引子 第8章 函 数 C语言通过函数来实现模块化程序设计的所以较大的C语言应用程序往往是由多个函数组成的每个函数分别对应各自的功能模块 7.1 概述 7.2 函数的定义与调用 7.3 函数的嵌套调用与递归调用 7.3 数组...
  • C语言之函数

    2018-03-31 17:09:00
    对于一个层序来说,模块化设计是极其重要的,而函数就体现了一种分而治之的思想,使用函数可以避免程序中代码的重复使用、另外也可以对程序起到自顶向下,逐步细化的作用,同时使程序在测试和优化更加容易。...

    函数

    对于初学C语言的人来说可能会问函数是什么?在这里我有一个通俗的解释;函数就是一个盒子,在这个盒子里面可以封装你想实现的功能,之后通过主函数进行调用即可

    为什么要使用函数?

    对于一个层序来说,模块化设计是极其重要的,而函数就体现了一种分而治之的思想,使用函数可以避免程序中代码的重复使用、另外也可以对程序起到自顶向下,逐步细化的作用,同时使程序在测试和优化更加容易。对于一门语言来说,它里面一般都会有定义好的函数库,当开发者需要使用的时候可以直接进行调用。C语言也是如此,他也拥有自己的标准库函数。如果自身的标准库函数达不到开发者的开发需求,那么开发者也可以使用自定义的函数;当然,这些函数都是由main()函数统一进行调用管理的。

    举一个关于函数的简单的例子:

    eg:用函数写一个计算整数n的阶乘。

    long Fact(int n)      //声明一个函数,函数名为Fact,在函数名括号里的为形式参数

    {

      int i;

      long result=1;

      for(int i=2;i<=n;i++)

      {

      result *=i;        //实现阶乘的功能

      }

      return result;      //返回函数的结果

    }

    对于一个函数来说,首先应当明白他的功能,这个例子中的函数是用来计算阶乘的,函数名后的形式参数代表一个函数的入口,如果不需要入口,就用void来代表形参里面的内容;另外,一个函数也应该有相应的返回值类型,在声明函数的时候要进行表明,如果一个函数没有返回值类型,那么这个函数名前面就要用void来进行声明。

    那么将上面的函数合并成一个完整的程序:

    #include<stdio.h>
    long Fact(int n);    //函数原型
    int main()
    {
      int m;
      long ret;
      printf("please enter m:");
      scanf("%d",&m);
      ret=Fact(m);    //调用函数,把函数的结果传给ret
      printf("%d!=%ld\n",m,ret);
      return 0;
    }
    long Fact(int n)    //相当于一个子函数
    {
      int i;
      long result=1;
      for(i=2;i<=n;i++)
      {
      result*=i;
      }
      return result;
    }

    函数原型的主要作用是告诉编译器,函数Fact()将会从调用程序接收一个int型参数,编译器检查函数调用语句中实参的类型和数量于函数原型是否匹配。

    在函数中还要特别注意的是函数的封装,也就是对于这个盒子的保护作用,增加函数的安全判断,就像是上面的程序不可以输入负数一样,这也是增强了程序的健壮性。

    函数设计的基本原则:

    1.函数的规模要小,因为这样的代码易于维护,出错几率比较小;

    2.每个函数的功能尽量要单一,不要设计具有多个用途的函数。

    3.每个函数只有一个入口和一个出口。

    4.在函数接口中清楚的定义函数的行为,包括入口参数,出口参数,返回类型,异常处理等,让调用者清楚函数所能进行的操作是否成功,应尽可能的考虑出错的情况。

    5.在函数的入口处,对参数的有效性进行检查。

    6.在执行某些敏感性操作之前,应检查操作数及其类型的合法性,以避免发生数据除零,数据溢出而引起的错误。

    函数的递归调用和递归函数

    首先举个例子:斐波那契数列问题。

    用递归方法实现:

    #include<stdio.h>
    long Fact(int n);
    int main()
    {
      int n,i,x;
      printf("Input n:");
      scanf("%d",&n);
      for(i=1;i<=n;i++)
      {
      x=Fact(i);
      printf("Fact(%d)=%d\n",i,x);
      }
      return 0;
    }
    long Fact(int n)
    {
      if(n==0)
      return 0;
      else if(n==1)
      return 1;
      else
      return (Fact(n-1)+Fact(n-2));
    }

    所谓的递归就是函数自身的一种调用,调用自己来实现功能;递归的用法在内存空间的占用上浪费很大,所以对于一个问题而言可能不是最优的算法.为提高程序的执行效率,应尽量用迭代形式替代递归形式

     

    转载于:https://www.cnblogs.com/huolan520/p/8683025.html

    展开全文
  • c语言课程设计

    2016-05-23 21:25:00
    1.查看该程序,体会C语言的中的核心语句是如何使用的 1)该程序采用函数组成模块化结构 2)main函数中,首先调用menu()函数产生菜单 3)然后通过不停接收用户的按键,分别判断是什么操作 4)然后设置飞机和子弹移动 5)...

    1.查看该程序,体会C语言的中的核心语句是如何使用的
    1)该程序采用函数组成模块化结构
    2)main函数中,首先调用menu()函数产生菜单
    3)然后通过不停接收用户的按键,分别判断是什么操作
    4)然后设置飞机和子弹移动
    5)显示

    2.分析该程序是如何工作的

    1)读取程序初始变量、读取switch case语句实现飞机左右移动,射击等操作

    2)读取敌机密度,移动速度数据

    3)按任意键开始游戏,esc进入设置

    3.能修改程序,体会各个部分的作用

    1)修改左右移动按键为QE

    2)修改默认敌机密度

    4)能用这个程序修改成其他的什么功能

     使用switch case做了个小程序。按键数字对应字母

    转载于:https://www.cnblogs.com/140302528yuyue/p/5521474.html

    展开全文
  • C语言的科学和艺术.pdf

    热门讨论 2012-01-19 14:09:05
    第一部分 c语言程序设计基础 .第2章 通过例子学习 16 2.1 “hello world”程序 17 2.1.1 注释 17 2.1.2 库包含 18 2.1.3 主程序 18 2.2 两个数的加法程序 20 2.2.1 输入阶段 21 2.2.2 计算阶段 23 2.2.3 ...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且...
  • 1.7 函数及模块化编程 13 1.8 常见错误 17 1.9 要点 17 1.10 小结 18 1.11 习题 18 第2章 编程初步 19 2.1 计算机的内存 19 2.2 什么是变量 21 2.3 存储数值的变量 21 2.3.1 整数变量 21 2.3.2 变量的命名...
  • 答:模块化 (8) 软件的调试方法主要有:强行排错法、______和原因排除法。 答:回溯法 (9) 数据库系统的三级模式分别为______模式、内部级模式与外部级模式。 答:概念#概念级 (10) 数据字典是各类数据描述的集合...
  • 模块化 C. 自底向上 D. 信息隐蔽 (38) 索引属于(B) A. 模式 B. 内模式 C. 外模式 D. 概念模式 (39) 在关系数据库中,用来表示实体之间联系的是(D) A. 树结构 B. 网结构 C. 线性表 D. 二维表 (40) 将E-R图转换到关系...
  • C语言开始讲,C语言是一种结构化语言,模块化编程,便于程序的调试,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够...

    Java的前世

    为什么会产生Java?Java的特点是什么?

    从C语言开始讲,C语言是一种结构化语言,模块化编程,便于程序的调试,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。其缺点就是封装性弱,程序的安全性上不是很好。C语言的异常处理一般使用setjmp()与longjmp(),在捕获到异常时进行跳转;或者使用abort()和exit()两个函数,强行终止程序的运行。如果要实现多线程,应该要直接操作底层操作系统,语言本身没有封装该机制。

    C语言是一门面向过程的语言,所谓面向过程指的是以“事件过程”为中心的编程思想,即按照事件的解决步骤,在函数中一步一步实现。其实,生活中大部分事情都可以用面向过程的思想来解决。然而,当问题的规模变大,且问题中有多个部分是共同的特征时,我们仍然需要对这件事情建立一步一步操作,此时面向过程就显得繁重冗余,因此产生了面向对象的思想。

    面向对象的思想是将事件中的一些共同特征抽象出来作为一个对象,一个对象包括属性和方法,比如说一个班级中的同学,大家都拥有姓名、成绩、年龄、兴趣爱好,在操作这些数据的时候,我们只需要将共同的部分抽象出来,然后给每个同学一个对象的实例。如果是面向过程的方法,我们需要为每一个同学定义属性变量,执行某个动作需要定义独立的方法。因此,产生了C++语言。

    C++继承自C语言,可以进行面向过程的程序设计,也可以抽象化出对象进行基于对象的程序设计,也可以进行继承、多态为特点的面向对象的程序设计。在C++的面向对象设计中,将数据和相关操作封装在一个类中,类的实例为一个对象。支持面向对象开发的四个特性:封装、抽象、继承、多态。在C++语言中,内存分为堆(程序运行时分配内存)和栈(函数内部声明的变量)两部分,往往需要手动管理内存,通过new,delete动态划分内存并进行内存的回收;类中包含构造函数和析构函数,分别为建立对象和删除对象释放资源。

    Java也是一门面向对象的语言,不仅吸收了C++的各种优点,同时摒弃了C++种难以理解的多继承、指针等概念,功能更加强大且简单易上手。其特点:简单、OOP、平台无关性(JVM的功劳);相比于面向对象的语言C++而言,Java JVM的动态内存管理非常优秀。在发展的过程中,逐渐更新了更多强大的功能:XML支持、安全套接字soket支持、全新的I/O API、正则表达式、日志与断言;泛型、基本类型的自动装箱、改进的循环、枚举类型、格式化I/O及可变参数。

    在C语言、C++、Java的演化过程中,并不会导致新语言取代旧语言,每种语言按照自身的特点有了自己适合的领域。如追求程序的性能和执行效率,如系统底层开发,就需要使用C++,甚至C语言;安卓开发、网站、嵌入式、大数据技术等领域,一般使用Java语言,由于其安全性、便携性、可移植性、可维护性等,很容易实现多线程,代码的可读性高。

    C语言和C++是编译型的语言,而Java是解释型的语言:

    • 编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件。

      程序执行效率高,依赖编译器,跨平台性差

    • 解释型语言:程序不需要编译,程序运行时才翻译成机器语言,每执行一次都要翻译一次。

      效率比较低,依赖解释器,跨平台性好

    Java是静态-强类型语言,关于静态、动态、强类型、弱类型查看这里!

    多态

    多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。

    一般实现形式:

    • 重载@Overload:同一类种方法名相同,参数不同;返回类型不要求
    • 重写@Override:子类继承自父类的方法重写实现过程,返回值、形参不能变、只能重写函数体内的语句,便于子类根据自身需要定义自己的行为。Animal b = new Dog();
    • 接口
    • 抽象类、抽象方法

    重写规则:

    • finalstatic方法不可被重写
    • 参数列表:与被重写方法的参数列表必须完全相同
    • 返回类型:与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类
    • 访问权限:不能比父类中被重写的方法的访问权限更低(public > protected > private > )
    • 抛异常:如果父类方法抛异常,子类不能抛更广泛的异常
    • 同包:除了private final可以重写所有父类方法
    • 不同包:只能重写public 或者 protected的非final方法
    • 子类中调用父类被重写方法可以用super.method()

    Java中多态的底层实现

    多态性特征的最基本体现有“重载”和“重写”,其实这两个体现在Java虚拟机中时分派的作用。分派又分为静态分派动态分派,静态分派是指所有依赖静态类型来定位方法执行版本的分派动作,动态分派是指在运行期根据实际类型确定方法执行版本的分派过程。

     Animal animal = new Bird();
    

    在上面代码中Animal是父类,Bird是继承Animal的子类;那么在定义animal对象时前面的“Animal”称为变量的静态类型(Static Type),或者叫外观类型(Apparent Type),后面的“Bird”则称为变量的实际类型(Actual Type),静态类型和实际类型在程序中都可以发生一些变化,区别是静态类型的变化仅仅在使用时发生,变量本身的静态类型不会被改变,并且最终的静态类型是在编译器可知的;而实际类型变化的结果在运行期才可以确定,编译器在编译程序的时候并不知道一个对象的实际对象是什么。

    //实际类型变化
    Animal bird = new Bird();
    Animal eagle = new Eagle();
    //静态类型变化
    sd.sayHello((Bird)bird);
    sd.sayHello((Eagle)eagle);
    

    详细
    1 2

    animal对象的静态类型是Animal,实际类型是Bird。静态类型在编译期可知,实际类型在运行时可知。

    1 重载

    同一个类中相同方法名的不同方法。

    重载,使用哪个重载版本,就完全取决于传入参数的数量数据类型
    方法重载是通过静态分派实现的,静态分派是发生在编译阶段,因此匹配到静态类型Animal。

    例如下面代码:

    package test;
     
    /**
    * @Description: 方法静态分派演示
    * @version: v1.0.0
     */
    public class StaticDispatch {
        
    	static abstract class Animal{ }
    	
    	static class Bird extends Animal{ }
    	
    	static class Eagle extends Animal{ }
    	
    	public void sayHello(Animal animal) {
    		System.out.println("hello,animal");
    	}
    	
    	public void sayHello(Bird bird) {
    		System.out.println("hello,I'm bird");
    	}
    	
    	public void sayHello(Eagle eagle) {
    		System.out.println("hello,I'm eagle");
    	}
    	
    	public static void main(String[] args){
    	    Animal bird = new Bird(); // 静态类型Animal(编译期可知)--实际类型Bird(运行期可知)
    	    Animal eagle = new Eagle(); // 静态类型Animal(编译期可知)--实际类型Eagle(运行期可知)
    	    StaticDispatch sd = new StaticDispatch();
    	    sd.sayHello(bird);
    	    sd.sayHello(eagle);
    	}
    }
    /* 结果:
    hello,animal
    hello,animal
    */
    

    代码中刻意地定义了两个静态类型相同Animal,实际类型不同的变量,但虚拟机(准确的是编译器)在重载时是通过参数的静态类型而不是实际类型来作为判断依据的。并且静态类型是编译期可知的,因此,在编译阶段,Javac编译器会根据参数的静态类型决定使用哪个重载版本,因此选择了sayHello(Animal)作为调用目标。

    方法重载是通过静态分派实现的,并且静态分派是发生在编译阶段,所以确定静态分派的动作实际上不是由虚拟机来执行的;另外,编译器虽然能确定出方法重载的版本,但在很多情况下这个版本并不是“唯一的”,往往只能确定一个“更加适合”的版本。

    2 重写

    方法的重写:与虚拟机中动态分派的过程有着密切联系。

    package test;
     
    /**
    * @Description: 方法动态分派演示
    * @version: v1.0.0
     */
    public class DynamicDispatch {
        
    	static abstract class Animal{
    		protected abstract void sayHello();
    	}
    	
    	static class Bird extends Animal{
     
    		@Override
    		protected void sayHello() {
    			System.out.println("Bird say hello");
    		}
    		
    	}
    	
    	static class Eagle extends Animal{
    		@Override
    		protected void sayHello() {
    			System.out.println("Eagle say hello");
    		}
    		
    	}
    	
    	public static void main(String[] args){
    	    Animal bird = new Bird();
    	    Animal eagle = new Eagle();
    	    bird.sayHello();
    	    eagle.sayHello();
    	    bird = new Eagle();
    	    bird.sayHello();
    	}
    }
    
    /* 结果:
    Bird say hello
    Eagle say hello
    Eagle say hello
    */
    

    通过javap反编译命令来看一段该代码的字节码:

    >javap -c DynamicDispatch.class
    Compiled from "DynamicDispatch.java"
    public class com.carmall.DynamicDispatch {
      public com.carmall.DynamicDispatch();
        Code:
           0: aload_0
           1: invokespecial #1                  // Method java/lang/Object."<init>":()V
           4: return
    
      public static void main(java.lang.String[]);
        Code:
           0: new           #2                  // class com/carmall/DynamicDispatch$Bird
    
           3: dup
           4: invokespecial #3                  // Method com/carmall/DynamicDispatch$Bir
    d."<init>":()V
           7: astore_1
           8: new           #4                  // class com/carmall/DynamicDispatch$Eagl
    e
          11: dup
          12: invokespecial #5                  // Method com/carmall/DynamicDispatch$Eag
    le."<init>":()V
          15: astore_2
          16: aload_1
          17: invokevirtual #6                  // Method com/carmall/DynamicDispatch$Ani
    mal.sayHello:()V
          20: aload_2
          21: invokevirtual #6                  // Method com/carmall/DynamicDispatch$Animal.sayHello:()V
          24: new           #4                  // class com/carmall/DynamicDispatch$Eagle
          27: dup
          28: invokespecial #5                  // Method com/carmall/DynamicDispatch$Eagle."<init>":()V
          31: astore_1
          32: aload_1
          33: invokevirtual #6                  // Method com/carmall/DynamicDispatch$Animal.sayHello:()V
          36: return
    }
    

    上面的指令,invokevirtual表示运行时按照对象的类来调用实例方法;invokespecial根据编译时类型来调用实例方法,也就是会调用父类。

    0~15行的字节码是准备动作,作用时建立birdeagle的内存空间、调用BirdEagle类型的实例构造器,将这两个实例的引用存放在第1、2个局部变量表Slot之中。

    接下来的16~21行时关键部分;这部分把刚刚创建的两个对象的引用压到栈顶,这两个对象是将要执行的sayHello()方法的所有者,称为接收者(Receiver);17和21句是方法调用命令,这两条调用命令单从字节码角度来看,无论是指令(invokevirtual)还是参数(都是常量池中第6项的常量,注释显示了这个常量是sayHello方法的符号引用)完全一样的,但是这两句执行的目标方法并不同,这是因为invokevirtual指令的多态查找过程引起的,该指令运行时的解析过程可分为以下几个步骤:

    • 找到操作数栈第一个元素所指向的对象的实际类型,记为C。如果在类型C中找到了与常量中描述符和简单名称都一样的方法,则进行访问权限校验,如果通过则返回该方法的的直接引用,查找过程结束;如果不通过,则返回java.lang.IllegalAccessError异常。
    • 否则,按照继承关系从下往上一次对C的各个父类进行第二步的搜索和验证过程。
      如果始终都没有找到合适的方法,则抛出java.lang.AbstractMethodError异常。
    • 由于invokevirtual指令执行的第一步就是在运行期确定接收者的实际类型,所以两次调用的invokevirtual指令把常量池中的类方法符号引用解析到了不同的直接引用上,这个过程就是Java语言中重写的本质。
    package java.lang;
    
    import java.lang.annotation.*;
    
    /**
     * Indicates that a method declaration is intended to override a
     * method declaration in a supertype. If a method is annotated with
     * this annotation type compilers are required to generate an error
     * message unless at least one of the following conditions hold:
     *
     * <ul><li>
     * The method does override or implement a method declared in a
     * supertype.
     * </li><li>
     * The method has a signature that is override-equivalent to that of
     * any public method declared in {@linkplain Object}.
     * </li></ul>
     *
     * @author  Peter von der Ah&eacute;
     * @author  Joshua Bloch
     * @jls 9.6.1.4 @Override
     * @since 1.5
     */
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.SOURCE)
    public @interface Override {
    }
    

    参考:

    展开全文
  • 第7章 用函数实现模块化程序设计 7.1 为什么要用函数 7.2 怎样定义函数 7.2.1 为什么要定义函数 7.2.2 定义函数的方法 7.3 调用函数 7.3.1 函数调用的形式 7.3.2 函数调用时的数据传递 7.3.3 函数调用的过程 7.3.4 ...
  • windows 程序设计

    2011-07-24 21:16:30
    Windows/386(在Windows 2.0之后不久发行的)使用Intel 386微处理器的「虚拟8086」模式,实现将直接存取硬件的多个MS-DOS程序窗口和多任务。为了统一起见,Windows版本2.1被更名为Windows/286。 Windows 3.0是...
  • C程序设计(第四版)【谭浩强】

    热门讨论 2011-05-25 15:55:43
    第7章 用函数实现模块化程序设计170 7.1为什么要用函数170 7.2怎样定义函数172 7.2.1为什么要定义函数172 7.2.2定义函数的方法173 7.3调用函数174 7.3.1函数调用的形式174 7.3.2函数调用时的数据传递175 7.3.3函数...
  • C程序设计(第四版).谭浩强.扫描版

    热门讨论 2011-05-31 10:02:13
    第7章 用函数实现模块化程序设计170 7.1为什么要用函数170 7.2怎样定义函数172 7.2.1为什么要定义函数172 7.2.2定义函数的方法173 7.3调用函数174 7.3.1函数调用的形式174 7.3.2函数调用时的数据传递175 7.3.3函数...
  • 模块化实现的具体方法是使用子程序。结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。 ...
  • Proteus仿真—40个单片机初学程序.

    热门讨论 2009-04-13 13:00:56
    7. C语言程序 #include sbit L1=P1^0; void delay02s(void) //延时0.2秒子程序 { unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); } void main(void) { while(1) { L1=0; ...
  • 8.1 模块化和界面 148 8.2 名字空间 150 8.2.1 带限定词的名字 151 8.2.2 使用声明 152 8.2.3 使用指令 153 8.2.4 多重界面 154 8.2.5 避免名字冲突 157 8.2.6 名字查找 159 8.2.7 名字空间别名 159 8.2.8 ...
  • C++程序设计语言(特别版)--源代码

    热门讨论 2012-04-23 07:33:51
    8.1 模块化和界面 148 8.2 名字空间 150 8.2.1 带限定词的名字 151 8.2.2 使用声明 152 8.2.3 使用指令 153 8.2.4 多重界面 154 8.2.5 避免名字冲突 157 8.2.6 名字查找 159 8.2.7 名字空间别名 159 8.2.8 ...
  • 8.1 模块化和界面 148 8.2 名字空间 150 8.2.1 带限定词的名字 151 8.2.2 使用声明 152 8.2.3 使用指令 153 8.2.4 多重界面 154 8.2.5 避免名字冲突 157 8.2.6 名字查找 159 8.2.7 名字空间别名 159 8.2.8 ...
  • 从算法设计到硬线逻辑的实现 复杂数字逻辑系统的VerilogHDL设计技术和方法 夏宇闻 编著 --------------------------------------- ...练习十 通过模块之间的调用实现自顶向下的设计 编者后记 参考资料
  • Tcl_TK编程权威指南pdf

    热门讨论 2011-03-25 09:30:55
    本书共分为55章,依次详细讲述了Tcl基础、Tcl高级特性、TK基础、TK组件、TK详解、C语言编程、各版本之间的差异等方面的知识,并通过大量实例,生动翔实地向读者介绍了Tcl/Tk编程,是读者掌握Tcl/Tt的必备参考书。...
  •  5、黑月的Dll可以使用类似其它语言DLLMAIN入口函数(黑月为“Dll入口函数”),可以通过Dll的模块句柄访问Dll的PE资源、注入进程、多线程应用等等优点。  6、黑月可以突破易语言自身的限制,实现对__cdecl调用...
  • ● 编程(用程序语言实现每个模块,简单容易); ● 测试(发现并改正错误,分为模块测试、集成测试和系统联调三级); ● 运行维护(扩充功能、纠错等)。 习题二答案 一、 选择题 1. 需求分析的主要目的是(B C)...
  •  C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程编程于一体的编程语言, 是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序详细而全面地阐 述了C++的基本...
  •  C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程编程于一体的编程语言, 是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序详细而全面地阐 述了C++的基本...
  •  C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程编程于一体的编程语言, 是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序详细而全面地阐 述了C++的基本...

空空如也

空空如也

1 2 3 4
收藏数 70
精华内容 28
关键字:

c语言程序模块化通过什么实现

c语言 订阅