刚学习完C后,做的关于C的课程设计是在一个源文件里放了几百行代码,并且各个功能之间都是相互依赖的,这样就会非常麻烦。

由于当我要改动某个地方的时候,就会牵连着要改动喝多的地方。而在实际的程序设计中。这也是不可取的。因此,模块化和封装的思想就显得非常重要了。。!

★static变量

static变量的一个显著的作用就是能够实现一个模块的封装。

static存储类别的特性决定了static声明的全局变量仅仅能被本源文件的函数引用。当在一个源文件里定义一个static全局变量后,其它文件就不能通过使用“extern”关键词来引用该全局变量,而仅仅能通过该源文件提供的接口函数来訪问这个全局变量

★实例

我写了一个简单的实现杨辉三角的程序。当中,定义了一个静态全局变量数组a[100][100]。然后后面的函数就是对该数组的一些操作。而该源文件之外的函数就仅仅可以通过调用这些函数来完毕对数组的操作。

Pascal_triangle.c

#include <stdio.h>

static int a[100][100];

void Pascal_triangle(int num)
{
int i,j; for(i = 1; i <= num; i ++)
{
a[i][0] = 1;
a[i][i-1] = 1;
} for(i = 2;i < num; i ++)
{
for(j = 0; j < i -1; j ++)
{
a[i + 1][j + 1] = a[i][j] + a[i][j + 1];
}
} for(i = 1; i <= num;i ++)
{
for(j = 0; j < num; j ++)
{
printf("%d ",a[i][j]);
if(i == (j + 1))
{
printf("\n");
break;
}
}
}
}

Pascal_triangle.h

#ifndef PASCAL_TRIANGLE_H_INCLUDED
#define PASCAL_TRIANGLE_H_INCLUDED extern void Pascal_triangle(int num); #endif // PASCAL_TRIANGLE_H_INCLUDED

main.c

#include <stdio.h>
#include "Pascal_triangle.h" int main(void)
{
int num;
printf("请输入数据:\n");
scanf("%d",&num);
Pascal_triangle(num);
return 0;
}

这样做就实现了杨辉三角的实现程序对外界的封住一个project中的其它源文件中的函数不用了解杨辉三角函数里面的详细操作是怎样进行的,仅仅须要使用模块中提供的接口函数就能够了。这样杨辉三角的实现模块就全然的独立于其它的模块了。

如图所看到的:

Pascal_triangle.h头文件就是向外界提供一个实现杨辉三角的接口函数的声明,这一点是非常重要的。

当这样处理好一个源文件之后。无论如何操作改动杨辉三角的实现函数,对其它的代码没有不论什么影响。

可是有一点要注意:不要改动函数接口本身,由于一旦改动,其它代码就可能会有大的改动

【C语言学习】封装和模块化思想的更多相关文章

  1. 【转】朱兆祺教你如何攻破C语言学习、笔试与机试的难点(连载)

    原文网址:http://bbs.elecfans.com/jishu_354666_1_1.html 再过1个月又是一年应届毕业生应聘的高峰期了,为了方便应届毕业生应聘,笔者将大学四年C语言知识及去年 ...

  2. 足球运动训练心得及经验分析-c语言学习调查

    在准备预备作业02之前,我参考娄老师的提示,阅读了<[做中学(Learning By Doing)]之乒乓球刻意训练一年总结>一文. 在文章描述的字里行间,给予我的印象是系统.负责,娄老师 ...

  3. 5332盛照宗 如何获取新技能+c语言学习调查

    如何获取新技能+c语言学习调查 你有什么技能比大多人(超过90%以上)更好? 如果问我有没有什么技能比大多数人,并且是90%的人好,我还真不敢说有,因为世界上有70亿人,要比63亿人做的好才行啊.我也 ...

  4. 技能学习经验与C语言学习调查

    技能学习经验与C语言学习调查 前言 要说的话,这还是我第一次写博客.不论是为了作业也好,为了将来的学习工作也好,写博客都是必不可少的,也算是个自我提升的途径吧.不过第一次写博客,就用从来没听说过的ma ...

  5. 20165320 预备作业2:技能学习心得与C语言学习

    一.技能学习心得 1.你有什么技能比大多数人好? 我觉得我的篮球打得比一般的人好吧,但是也仅仅掌握了大部分基本的篮球技巧,算不上精通. 2.针对这个技能的获取你有什么成功的经验? 我觉得要打好篮球需要 ...

  6. 20155332 如何获取新技能+c语言学习调查

    如何获取新技能+c语言学习调查 你有什么技能比大多人(超过90%以上)更好? 如果问我有没有什么技能比大多数人,并且是90%的人好,我还真不敢说有,因为世界上有70亿人,要比63亿人做的好才行啊.我也 ...

  7. c语言学习目标

    运行c语言环境codeblocks. codeblocks的安装: 安装地址:http://www.codeblocks.org/downloads/26 codeblocks-16.01mingw- ...

  8. 技能收获与C语言学习

    你有什么技能比大多人(超过90%以上)更好? 我会的东西很多,喜欢的东西太多,但是很遗憾广而不专,会而不精.学了很多东西我都是为了娱乐,因为以前我们那里过于强调学习,很多爱好也都被扼杀在摇篮里.我觉得 ...

  9. 大一上学期C语言学习心得总结

    经过一个学期的C语言学习,大体算是在这个编程语言上入了门,能够通过一些代码解决特定的问题.当然,每次成功将问题转换成代码都小有激动,虽然只是在黑框上输出了一些数字或是字符串. 编程,虽然还不是很懂,但 ...

随机推荐

  1. Codeforces Round #316 (Div. 2) C 思路/模拟

    C. Replacement time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  2. sql 学习相关问题

    ---恢复内容开始--- 1.sql上面改变列的数据类型是 ALTER TABLE table_nameALTER COLUMN column_name datatype mysql上面是ALTER ...

  3. swarm 发布服务

    1.发布服务 2.发布服务 服务发现:Swarm模式内置DNS组件,自动为每个服务分配DNS记录,然后服务的DNS名称在集群内的服务直接分发请求.负载均衡:在Swarm集群中创建服务时,Ingress ...

  4. Idea下maven的配置和使用

    maven的主要功能就是依赖管理,jar包仓库.和C#中的NuGet仓库差不多.另外也提供打包构建,启动插件等功能.下面主要讲一下,在使用Idea开发时,maven的配置和使用. maven的安装和配 ...

  5. 纯js实现网页tab选项卡切换效果

    纯js实现网页tab选项卡切换效果 百度搜索     js 点击菜单项就可以切换内容的效果

  6. js81:Image对象,几张图像缓存完之后动画显示,form.elements[],document.images[]

    原文发布时间为:2008-11-09 -- 来源于本人的百度文章 [由搬家工具导入] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...

  7. Docker(六):容器

    一.启动容器 启动容器有两种方式,一种是基于镜像新建一个容器并启动,另一个是将一个在终止状态的容器重新启动,因为Docker的容器实在是太轻量了,很多用户都可以随时删除和新创建容器. 新建并启动 $s ...

  8. Virtualbox 设置虚拟机上网并和主机互通(如ping等)

    我的主机是Ubuntu12.04, 安装virtualbox虚拟了一个xp系统.把xp作为一个开发用的机器,需要上网,并且和主机以及虚拟机之间互相访问. 1. 在virtual设置界面,将xp系统的网 ...

  9. 查询/删除/建立DB2数据表的主键

    一.查询表主键. describe indexes for table <instancename>.<tablename> 例: describe indexes for t ...

  10. CSU 1777: 大还是小?【模拟/后导0】

    293419 roniking 1777 Accepted 2032 0 C++ 2000 2018-04-03 19:21:25 Description 输入两个实数,判断第一个数大,第二个数大还是 ...