刚学习完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. hibernate运行常见错误

    错误一: Exception in thread "main" org.hibernate.MappingException: Could not determine type f ...

  2. Markdown语法图解

    Markdown语法图解 文章目录 快捷键 基本语法 对字体设置斜体.粗体.删除线 分级标题 链接 分割线 代码块 引用 列表 表格 常用技巧 换行 缩进字符 如何打出一些特殊符号 字体.字号与颜色 ...

  3. [USACO12Jan][luogu3041] Video Game Combos [AC自动机+dp]

    题面 传送门 思路 首先,有一个非常显然的思路就是dp: 设$dp[i][j]$表示前i个字符,最后一个为j 然后发现这个东西有后效性 改!设$dp[i][j]$代表前i个字符,最后15个的状态为j( ...

  4. [luogu1707] 刷题比赛 [矩阵快速幂]

    题面: 传送门 思路: 一眼看上去是三个递推......好像还挺麻烦的 仔细观察一下,发现也就是一个线性递推,但是其中后面的常数项比较麻烦 观察一下,这里面有以下三个递推是比较麻烦的 第一个是$k^2 ...

  5. [AGC004D] Teleporter [贪心]

    题面: 传送门 思路: 分析可知,这道题中的图是一个环套内向树,首都在环上 首先有一个结论:当首都的出边指向首都时,一定最优(不然首都出发可能无法按时到达首都)(可以按时到达的情况也一定有到不了的) ...

  6. linux系统初始化——inittab文件解析

    inittab文件解析 inittab配置文件每行的基本格式如下. id:runlevels:action:process 其中某些部分可以为空,下面我们逐一介绍. 1.id 1-2个字符,配置行的唯 ...

  7. webpack+babel+ES6+react环境搭建

    webpack+babel+ES6+react环境搭建 步骤: 1 创建项目结构 注意: 先创建一个项目目录  react  这个名字自定义,然后进入到这个目录下面 mkdir app //创建app ...

  8. OpenGL入门学习(二)

    http://developer.178.com/201103/94954661733.html 一.点.直线和多边形我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念在计算机中 ...

  9. solr6.6安装

    1. 确保系统已经安装jdk1.8,以及Tomcat8. 注:使用Tomcat7会出现很多问题,我遇到的是直接打不开solr的index页面,看网上有网友说还会遇到各种css.js资源404..还有l ...

  10. 微信工作汇报系统2——IOS原型设计

    上一篇博客:一款自动汇报工作的微信机器人 上一篇博客中说道,我打算自己做一款能自动汇报工作的微信机器人,可惜学识有限,最后不知道怎么实现让机器人学习我的文本说话,所以就一直耽搁了,见天又打开这个系列, ...