【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语言学习,大体算是在这个编程语言上入了门,能够通过一些代码解决特定的问题.当然,每次成功将问题转换成代码都小有激动,虽然只是在黑框上输出了一些数字或是字符串. 编程,虽然还不是很懂,但 ...
随机推荐
- 习题:最短路计数(SPFA最短路计数)
最短路计数(洛谷1144)题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条.输入输出格式输入格式:输入第一行包含2个正整数N,M,为图的顶点数 ...
- POJ 1364:King(差分约束)
题目大意:判断是否存在一个长度为n的序列满足给出的不等关系. 分析: 将序列和转化成用两个前缀和之差来表示即可变为差分约束系统. 需要注意的是不能忘记n要加+1,因为还有一个特殊源点,自己因为n:=n ...
- 【bzoj3944/bzoj4805】Sum/欧拉函数求和 杜教筛
bzoj3944 题目描述 输入 一共T+1行 第1行为数据组数T(T<=10) 第2~T+1行每行一个非负整数N,代表一组询问 输出 一共T行,每行两个用空格分隔的数ans1,ans2 样例输 ...
- hihoCoder #1809 : 本题数据范围五千
Analysis (一) 猜想:答案跟 $q_1, q_2, q_3$ 无关:考虑排列 $q$ 是 $1, 2, 3$ 的情况,此时符合要求的排列 $p$ 实际上满足: 对于任意 $i < j ...
- hihoCoder #1661 数组区间
题目大意 给出 $1$ 到 $n$ 的一个排列($n\le 10^5$),记做 $a_1, a_2, \dots, a_n$ .(注:原题面表述为:"给定 $n$ 个互不相同且不超过 $n$ ...
- 【距离GDOI:141天】 滚入数位DP的坑
作为博客园的第一篇...我都不知道要写什么了 ... 其实今天很没状态,就当吐槽吧... 嗯,被黄神带去写treap+可持久化线段树,然后在可持久化的删除上面跪了两天,真的是一跪不起.我已经连续多久没 ...
- [CQOI2014][bzoj3504] 危桥 [最大流]
题面 传送门 思路 这道题中惟一的特别之处,就在于"危桥"这一个只能走两次的东西 我的第一想法是做一个dp,但是这道题只需要能不能走,也没有必要 网络流?貌似是个很好的选择 我们把 ...
- web标准,可用性和可访问性
web标准,简单的说,是指html,css,JavaScript三者的分离. 网页由三部分组成:结构,表现和行为.对应的标准分为三方面: 1.结构化标准语言XHTML和XML2.表现标准语言主要包括c ...
- php合并图片
<?php class image{ /** * @param string $backgroundImage 背景图 * @param string $smallImage 小图 * @par ...
- cmp 指令
(lldb) disassemble -n comp2 untitled6`comp2: 0x10d065f40 <+>: pushq %rbp 0x10d065f41 <+> ...