实验三 模块化编程实验目的一1)理解模块化程序设计的基本概念与常用思路;熟悉模块化程序设计的基本方法;2)3)熟悉静态变量使用方法,了解外部变量的概念。二程序示例[源程序2-1]模块化程序设计[count.h]1#ifndef COUNT_H_INCLUDED2#defineCOUNT_H_INCLUDED3extern int counter;4voidinc_counter(void);//函数声明5#endif//COUNT_H_INCLUDED[count.c]1int counter;2void inc_counter())//函数定义3{4++counter;51[main.c]1#include<stdio.h>2#include"count.h"3int main()4{5int index;6for(index=0;index<10;index++)//循环调用函数7inc_counter();819printf("Counter is %d)n", counter);
实验三 模块化编程 一 实验目的 1) 理解模块化程序设计的基本概念与常用思路; 2) 熟悉模块化程序设计的基本方法; 3) 熟悉静态变量使用方法,了解外部变量的概念。 二 程序示例 [源程序 2-1] 模块化程序设计 [count.h] 1 #ifndef COUNT_H_INCLUDED 2 #define COUNT_H_INCLUDED 3 extern int counter; 4 void inc_counter(void); //函数声明 5 #endif // COUNT_H_INCLUDED [count.c] 1 int counter; 2 void inc_counter() //函数定义 3 { 4 ++counter; 5 } [main.c] 1 #include <stdio.h> 2 #include "count.h" 3 int main() 4 { 5 int index; 6 for(index = 0; index < 10; index++){ //循环调用函数 7 inc_counter(); 8 } 9 printf("Counter is %d\n", counter);
10return O;11)[程序输出]Counteris10[程序分析]C语言允许将一个程序分解成若干模块,分别放在几个源文件中,形成一个项目,编译器会单独编译每个源文件,再将他们的目标代码连同标准函数库中的函数链接在一起,形成可执行文件。这样做的最大好处是使程序的模块结构更清晰。本例为模块化编程以及静态变量的使用示例。程序count.h中第1-2行和第5行均为预处理指令,表示如果没有定义COUNT_H_INCLUDED宏,则定义COUNT_H_INCLUDED宏,第3行声明外部变量counter,表示此变量在别的文件中定义,第4行为函数inc_counter的声明,此函数无输入和输出。注意:程序中变量可以声明多次,但只能定义一次。程序count.c中第1行定义整型变量counter,第2-5行为函数inc_counter定义,函数体为counter变量自增运算。注意,由于变量counter为外部变量,因此其初始值为0。程序main.c中第1-2行为预编译指令,包含系统头文件stdio.h和自定义模块头文件count.h。第5-10行为主程序,其中第5行定义整型变量index,第6-8行为for循环,循环体为函数inc_counter的调用语句,一共循环1o次,调用函数inc_counter总计10次,而counter的初始值为O,执行10次自增运算后counter结果为10,程序第9行通过printf语句输出counter最终结果为10。第10行的return语句返回整型值0,表示主程序运行正常。[源程序2-2]静态变量的使用1#include<stdio.h>1//函数test1和test2声明3void test1();4void test2();56int main()78int index;9for(index=O; index<5;++index)
10 return 0; 11 } [程序输出] Counter is 10 [程序分析] C 语言允许将一个程序分解成若干模块,分别放在几个源文件中,形成一个 项目,编译器会单独编译每个源文件,再将他们的目标代码连同标准函数库中的 函数链接在一起,形成可执行文件。这样做的最大好处是使程序的模块结构更清 晰。本例为模块化编程以及静态变量的使用示例。 程序 count.h 中第 1-2 行和第 5 行均为预处理指令,表示如果没有定义 COUNT_H_INCLUDED 宏,则定义 COUNT_H_INCLUDED 宏,第 3 行声明外部变量 counter,表示此变量在别的文件中定义,第 4 行为函数 inc_counter 的声明,此 函数无输入和输出。注意:程序中变量可以声明多次,但只能定义一次。 程序 count.c 中第 1 行定义整型变量 counter,第 2-5 行为函数 inc_counter 定义,函数体为 counter 变量自增运算。注意,由于变量 counter 为外部变量, 因此其初始值为 0。 程序 main.c 中第 1-2 行为预编译指令,包含系统头文件 stdio.h 和自定义模 块头文件 count.h。第 5-10 行为主程序,其中第 5 行定义整型变量 index,第 6-8 行为 for 循环,循环体为函数 inc_counter 的调用语句,一共循环 10 次,调用函 数 inc_counter 总计 10 次,而 counter 的初始值为 0,执行 10 次自增运算后 counter 结果为 10,程序第 9 行通过 printf 语句输出 counter 最终结果为 10。第 10 行的 return 语句返回整型值 0,表示主程序运行正常。 [源程序 2-2] 静态变量的使用 1 #include <stdio.h> 2 // 函数 test1 和 test2 声明 3 void test1(); 4 void test2(); 5 6 int main() 7 { 8 int index; 9 for(index = 0; index < 5; ++index)
10(11test1();12test2();13114return O;15 )16//函数test1定于17 voidtesti()18(19intcount=O;//局部变量count20printf("test1 count= %d)t", ++count);21 122//函数test1定义23 void test2()24{25staticintcount=O;//静态局部变量count26printf("test2 count=%d)n", ++count);27)[程序输出]test1count=1test2count=1test1count=1test2count=2test1count=1 test2count=3test1count=1 test2count=4test1count=1 test2count=5[程序分析]源程序2-2给出了静态变量定义和使用的例子。第1行为预编译语句,包含系统库头文件stdio.h。第3-4行声明函数test1和test2,两个函数均无输入参数和输出。第6-15行为主程序,其中第8行定义整型变量index,第9-13行为for循环,每次循环首先调用函数test1后再调用函数test2,共循环5次。第17-21行为函数test1的定义,其中第19行定义局部变量count并初始化为O,第2o行首先进行count的自增操作,而后通过printf函数输出变量count的值,由于count为局部变量,因此主函数每次调用test1函数的时候,count
10 { 11 test1(); 12 test2(); 13 } 14 return 0; 15 } 16 // 函数 test1 定于 17 void test1() 18 { 19 int count = 0; // 局部变量 count 20 printf("test1 count = %d\t", ++count); 21 } 22 // 函数 test1 定义 23 void test2() 24 { 25 static int count = 0; // 静态局部变量 count 26 printf("test2 count = %d\n", ++count); 27 } [程序输出] test1 count = 1 test2 count = 1 test1 count = 1 test2 count = 2 test1 count = 1 test2 count = 3 test1 count = 1 test2 count = 4 test1 count = 1 test2 count = 5 [程序分析] 源程序 2-2 给出了静态变量定义和使用的例子。 第 1 行为预编译语句,包含系统库头文件 stdio.h。 第 3-4 行声明函数 test1 和 test2,两个函数均无输入参数和输出。 第 6-15 行为主程序,其中第 8 行定义整型变量 index,第 9-13 行为 for 循环, 每次循环首先调用函数 test1 后再调用函数 test2,共循环 5 次。 第 17-21 行为函数 test1 的定义,其中第 19 行定义局部变量 count 并初始化 为 0,第 20 行首先进行 count 的自增操作,而后通过 printf 函数输出变量 count 的值,由于 count 为局部变量,因此主函数每次调用 test1 函数的时候,count
都会重新申请空间并被初始化为0,再通过自增运算为1后输出,所以主函数5次调用test1函数的输出结果都是test1count=1。第23-27行为函数test2的定义,其中第25行定义静态局部变量count并初始化为0,第26行通过先进行count的自增操作,而后printf函数输出变量count的值。由于test2函数中的count为静态局部变量,因此编译器只将它初始化一次,初始化操作是在程序开始之前进行的,所以静态变量只要在程序开始执行的时候就一直存在,主函数每次调用test2函数的时候,count都会通过自增运算加1后输出,所以主函数5次调用test2函数的输出结果都是变化的。三、程序编写1、编写一个比较两个数据大小的模块,主函数调用此模块实现键盘输入两个数据的大小比较功能并输出比较结果。2、利用静态变量实现一个计数模块,按下任意键一次计数一次,主程序中输出计数结果,要求此变量不能定义为全局变量
都会重新申请空间并被初始化为 0,再通过自增运算为 1 后输出,所以主函数 5 次调用 test1 函数的输出结果都是 test1 count = 1。 第 23-27 行为函数 test2 的定义,其中第 25 行定义静态局部变量 count 并初 始化为 0,第 26 行通过先进行 count 的自增操作,而后 printf 函数输出变量 count 的值。由于 test2 函数中的 count 为静态局部变量,因此编译器只将它初始化一 次,初始化操作是在程序开始之前进行的,所以静态变量只要在程序开始执行 的时候就一直存在,主函数每次调用 test2 函数的时候,count 都会通过自增运 算加 1 后输出,所以主函数 5 次调用 test2 函数的输出结果都是变化的。 三、程序编写 1、 编写一个比较两个数据大小的模块,主函数调用此模块实现键盘输入两个数 据的大小比较功能并输出比较结果。 2、 利用静态变量实现一个计数模块,按下任意键一次计数一次,主程序中输出 计数结果,要求此变量不能定义为全局变量