【C语言学习】封装和模块化思想
刚学习完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语言学习】封装和模块化思想的更多相关文章
- 【转】朱兆祺教你如何攻破C语言学习、笔试与机试的难点(连载)
原文网址:http://bbs.elecfans.com/jishu_354666_1_1.html 再过1个月又是一年应届毕业生应聘的高峰期了,为了方便应届毕业生应聘,笔者将大学四年C语言知识及去年 ...
- 足球运动训练心得及经验分析-c语言学习调查
在准备预备作业02之前,我参考娄老师的提示,阅读了<[做中学(Learning By Doing)]之乒乓球刻意训练一年总结>一文. 在文章描述的字里行间,给予我的印象是系统.负责,娄老师 ...
- 5332盛照宗 如何获取新技能+c语言学习调查
如何获取新技能+c语言学习调查 你有什么技能比大多人(超过90%以上)更好? 如果问我有没有什么技能比大多数人,并且是90%的人好,我还真不敢说有,因为世界上有70亿人,要比63亿人做的好才行啊.我也 ...
- 技能学习经验与C语言学习调查
技能学习经验与C语言学习调查 前言 要说的话,这还是我第一次写博客.不论是为了作业也好,为了将来的学习工作也好,写博客都是必不可少的,也算是个自我提升的途径吧.不过第一次写博客,就用从来没听说过的ma ...
- 20165320 预备作业2:技能学习心得与C语言学习
一.技能学习心得 1.你有什么技能比大多数人好? 我觉得我的篮球打得比一般的人好吧,但是也仅仅掌握了大部分基本的篮球技巧,算不上精通. 2.针对这个技能的获取你有什么成功的经验? 我觉得要打好篮球需要 ...
- 20155332 如何获取新技能+c语言学习调查
如何获取新技能+c语言学习调查 你有什么技能比大多人(超过90%以上)更好? 如果问我有没有什么技能比大多数人,并且是90%的人好,我还真不敢说有,因为世界上有70亿人,要比63亿人做的好才行啊.我也 ...
- c语言学习目标
运行c语言环境codeblocks. codeblocks的安装: 安装地址:http://www.codeblocks.org/downloads/26 codeblocks-16.01mingw- ...
- 技能收获与C语言学习
你有什么技能比大多人(超过90%以上)更好? 我会的东西很多,喜欢的东西太多,但是很遗憾广而不专,会而不精.学了很多东西我都是为了娱乐,因为以前我们那里过于强调学习,很多爱好也都被扼杀在摇篮里.我觉得 ...
- 大一上学期C语言学习心得总结
经过一个学期的C语言学习,大体算是在这个编程语言上入了门,能够通过一些代码解决特定的问题.当然,每次成功将问题转换成代码都小有激动,虽然只是在黑框上输出了一些数字或是字符串. 编程,虽然还不是很懂,但 ...
随机推荐
- BZOJ3524 [Poi2014]Couriers 【主席树】
题目 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. 输入格式 第一 ...
- 物理课(physics)
物理课(physics) 题目描述 wzy正在上物理课!他发现了一个完全不会的题目:caoxia在一个奇妙的星球上(重力加速度为gg)踢了一只猫,猫飞起的路线与地面夹角为θθ (角度制),初速度为vv ...
- nodeJS学习(10) --- 事件模块
转载:http://www.cnblogs.com/zhongweiv/p/nodejs_events.html 目录 简介及资料 事件常用函数及使用 emitter.on(event, listen ...
- 数学作业(codevs 2314)
题目描述 Description 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M ,要求计算 Concatenate (1 .. N ) Mod M 的值 ...
- sql2008百万级数据排除重复信息
--高性能排除重复select userid from table where userid in ( select userid from ( select userid, row_number() ...
- Eclipse与MyEclipse修改注释字体颜色
修改配置路劲 Window--->Preferences--->Java--->Editor--->Syntax Coloring--->Element--->Co ...
- sublime 常用快捷键备忘
转一篇sublime常用的快捷键备忘 sublime常用快捷键 选择类Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本.Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本 ...
- Codeforces 920G List Of Integers 二分 + 容斥
题目链接 题意 给定 \(x,p,k\),求大于 \(x\) 的第 \(k\) 个与 \(p\) 互质的数. 思路 参考 蒟蒻JHY. 二分答案 \(y\),再去 \(check\) 在 \([x,y ...
- 剖析CPU温度监控技术【转】
转自:http://blog.csdn.net/hunanchenxingyu/article/details/46476545 迄今为止还没有一种cpu散热系统能保证永不失效.失去了散热系统保护伞的 ...
- ext4向后兼容代码
ext.h: #define EXT4_GOOD_OLD_INODE_SIZE 128 ... #define EXT4_GOOD_OLD_REV 0 /* The good old (origina ...