【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语言学习,大体算是在这个编程语言上入了门,能够通过一些代码解决特定的问题.当然,每次成功将问题转换成代码都小有激动,虽然只是在黑框上输出了一些数字或是字符串. 编程,虽然还不是很懂,但 ...
随机推荐
- BootStrap导入及其使用
BootStrap主要是一个CSS框架,用于页面布局 <!DOCTYPE html> <html lang="en"> <head> <m ...
- AngularJs 特性 之 双向数据绑定
<!DOCTYPE html> <html lang="en" ng-app> <head> <meta charset="UT ...
- [ZJOI2011][bzoj2229] 最小割 [最小割树]
题面 传送门 思路 首先我们明确一点:这道题不是让你把$n^2$个最小割跑一遍[废话] 但是最小割过程是必要的,因为最小割并没有别的效率更高的算法(Stoer-Wagner之类的?) 那我们就要尽量找 ...
- hdu5834 Magic boy Bi Luo with his excited tree 【树形dp】
题目链接 hdu5834 题解 思路很粗犷,实现很难受 设\(f[i][0|1]\)表示向子树走回来或不回来的最大收益 设\(g[i][0|1]\)表示向父亲走走回来或不回来的最大收益 再设\(h[i ...
- windows系统——常用命令
1.cleanmgr: 打开磁盘清理工具2.compmgmt.msc: 计算机管理3.conf: 启动系统配置实用程序4.charmap: 启动字符映射表5.calc: 启动计算器6.chkdsk.e ...
- vue经验总结
1. vue中获取dom节点时机 vue组件中获取dom节点一定要在mounted周期之后的下一次事件循环,包括 component.$refs,component.$el,component.$ch ...
- java写文件的基本操作
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOExce ...
- iOS资讯详情页实现—WebView和TableView混合使用(转)
iOS资讯详情页实现—WebView和TableView混合使用 如果要实现一个底部带有相关推荐和评论的资讯详情页,很自然会想到WebView和TableView嵌套使用的方案. 这个方案是WebVi ...
- Linux下常用的命令记录
本文章记录我在linux系统下常用或有用的系统级命令,包括软硬件查看.修改命令,有CPU.内存.硬盘.网络.系统管理等命令.但本文不打算介绍生僻命令,也不介绍各个linux发行版下的特有命令,且以后会 ...
- Xcode打包和生成ipa文件
1.生成Archive文档 a) 需将左上角红色方框里的设备类型选为ios device,不能选择具体的设备类型,否则不能生成Archive文档: b) 中部选择Team的方框,可此时选,也在后续ex ...