3.1 构建组件

类型允许我们指定如何利用特定位的各种操作,函数允许我们指定在数据上所进行的操作。

利用C结构(structure)类型把各种不同类型的信息集成在一起,并利用指针(pointer)间接引用这些信息。

在C语言中,程序都是由几种基本数据类型构建的:
· 整数(ints)
· 浮点数(floats)
· 字符(chars)

定义3.1 数据类型是值的集合和在这些值上的操作集。

操作关联类型,反之不成立。当我们执行一个操作时,我们必须确保操作数和结果有正确类型。忽略这一点是程序设计的常见错误。在某些情况下,C语言程序可以进行隐式的类型转换,而在其它一些情况下,我们利用显式的类型转换(cast)。

例如,如果x和N是整数,则表达式:((float)x)/N中包含两种类型转换,(float)是一种显式转换,把x的值转换为浮点类型,接着用C语言中隐式类型转换规则对N进行隐式转换,使除法操作符的两个参数都变味浮点数。

数据类型的概念不局限于内置的整数、浮点数和字符类型。作为一种组织软件的高效方式,我们还定义自己的数据类型。

当定义C语言中的一个简单函数时,就高效地创造了一种新的数据类型,其中函数实现的操作添加到用该函数参数表示的数据类型定义的操作中。

实际上,每个C程序在某种意义上都是一种数据类型,也就是说,是数值集合(内置类型或其它类型)及其相关操作(函数)的一个列表。

程序3.1 函数定义

#include <stdio.h>
int lg(int);
int main()
{int i,N;for(i=1,N=10;i<=6;i++,N*=10){printf("%7d %2d %9d \n",N,lg(N),N*lg(N));}
}
int lg(int N)
{int i;for(i=0;N>0;i++,N/=2);return i;
}

在C语言中用于实现对数据进行新操作的机制就是函数定义。

所有函数都有一个参数列表和可能的一个返回值。

通过给出函数名和它的返回值类型来说明(declare)函数。

在函数定义中,对变量命名(称为参数),并根据这些名字表达计算,把它们作为局部变量看待。

当调用函数时,这些变量初始化为参数传递的值,接着执行函数代码。

return语句是函数执行结束的指令,它还向调用函数返回值。

原则上,调用函数不受其他函数的影响,但也有很多例外情况。

定义和声明的分开为组织程序提供了灵活性。

在写程序时,目标是组成程序,以使重用旧程序解决新问题。

首先,通过仔细了解和准确确定程序所使用的操作,可以容易地把它扩展到支持这些操作的任意的数据类型上。
其次,通过仔细了解和准确确定程序的作用,可以把它执行的抽象操作添加到求解新问题所用的操作中。

程序3.2 数字类型


#include <math.h>
#include <stdlib.h>
#include <stdio.h>
typedef int Number;
Number randNum()
{return rand();
}
main (int argc,char *argv[])
{int i,N=atoi(argv[1]);float m1=0.0,m2=0.0;Number x;for(i=0;i<N;i++){x=randNum();m1+=((float)x)/N;m2+=((float)x*x)/N;}printf("Average:%lf \n",m1);printf("Std.deviation:%lf \n",sqrt(m2-m1*m1));
}

备受推荐的软件工程实践是把程序分为三个文件:
· 一个接口(interface),定义了数据结构以及声明用于操作这个数据结构的函数。
· 在接口中声明的函数的一个实现(implementation)。
· 一个客户(client)程序,调用接口中声明的函数,以便在更高抽象层次上使用。

结构体是集合类型,用于定义数据的集合,以便将整个集合作为一个单元来操纵,但仍可以通过一个给定数据集的个体成员的名字来引用它。

《算法:C语言实现》—— 第二部分 —— 第3章 —— 基本数据结构相关推荐

  1. 数据结构C语言版第二版第六章原创总结

    数据结构C语言版第二版第六章原创总结 图章节原创总结

  2. 补学图论算法:算法竞赛入门经典(第二版)第十一章:

    补学图论算法:算法竞赛入门经典(第二版)第十一章: 倒排索引还没有实现! 下面是左神的图论算法,并查集笔记.和一个美团题目. ''' https://www.nowcoder.com/live/11? ...

  3. c语言程序设计 算法,C语言程序设计第二章算法

    <C语言程序设计第二章算法>由会员分享,可在线阅读,更多相关<C语言程序设计第二章算法(38页珍藏版)>请在人人文库网上搜索. 1.C程序设计,主讲人:袁丽,燕大里仁基础教学部 ...

  4. 数据结构c语言版第二版第三章课后答案,数据结构(C语言版)习题集答案第三章.doc...

    数据结构(C语言版)习题集答案第三章.doc 习题三3.1 3.10 3.13 3.5 3.6 3.15 3.17 3.19 3.24 3.29 3.31 3.51 给定操作序列P1P2P3PiPn( ...

  5. c语言程序设计第二版第五章课后答案甘勇,郑州工程技术学院副院长甘勇来校讲学和指导工作...

    12月12日,郑州工程技术学院副院长甘勇一行莅临我校讲学和指导工作.黄河交通学院评建办公室主任汤迪操.教务处处长贾宗璞,智能工程学院领导班子.主任及骨干教师参加了本次会议,会议由智能工程学院党总支书记 ...

  6. 数据结构与算法 c语言 百度网盘,【资料分享】 数据结构与算法全集(C源代码+详细注释)!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 │ │ BiTree.cpp │ │ BiTree.h │ │ LinkQueue.cpp │ │ LinkQueue.h │ │ main.cpp │ ...

  7. 《算法导论》第三版第10章 基本数据结构 练习思考题 个人答案

    10.1 栈和队列 10.1-1 仿照图10-1,画图表示依次执行操作PUSH(S, 4).PUSH(S, 1).PUSH(S, 3).POP(S).PUSH(S, 8)和POP(S)每一步的结果,栈 ...

  8. 《算法设计手册》面试题解答 第三章:数据结构

    3-18. 你查字典时用的是什么方法? 解析: 既然要和算法相关,除了随机尝试,明显应该用二分查找. 不要嫌它简单,其实这是道MS和Google用过的面试题. 3-19. 假设你有一个装满T恤衫的衣柜 ...

  9. 《算法导论》读书笔记之第10章 基本数据结构之二叉树

    摘要 书中第10章10.4小节介绍了有根树,简单介绍了二叉树和分支数目无限制的有根树的存储结构,而没有关于二叉树的遍历过程.为此对二叉树做个简单的总结,介绍一下二叉树基本概念.性质.二叉树的存储结构和 ...

最新文章

  1. Visual Studio 快捷键 转载
  2. 添加高精度计时器测量处理能力
  3. sass和less的优缺点
  4. c语言行列倒置算法,循环行列的元素倒置。求指点
  5. mysql最左_Mysql最左原则
  6. java计算加速减速_java – 使用JOCL / OPENCL计算强度的加速总和
  7. Sqlserver存储过程和C#分页类简化你的代码!
  8. 成绩查询数据结构c语言,学生成绩管理系统(数据结构c语言版源代码)09169.pdf
  9. 在pfSense下设置GoDaddy动态DNS API记录
  10. 面向对象之自动生成助记码
  11. 区块链+高薪,你还等什么?
  12. 视频教程-DelphiXE10零基础实战快速入门-其他
  13. 使用wxjava实现发表内容、预览信息以及推送文章
  14. Nuki智能锁安全性分析
  15. vue 中provide的用法_vue中provide和inject的用法
  16. 相机光学(十二)——面阵相机与线阵相机
  17. 解决微信(扫码)无法直接下载apk的问题
  18. 2020年起重机司机(限门式起重机)多少分及格及起重机司机(限门式起重机)考试内容
  19. 权力的游戏击杀和家族知识图谱(python+neo4j)
  20. mybatisplus--使用说明书

热门文章

  1. KnockoutJS 3.X API 第一章 简介
  2. 最短路径算法整理(二)
  3. Memcache所有方法及参数详解以及使用方法
  4. asp:UpdatePanel中使用下拉时不得不注意的问题
  5. MS讲座:可视化的软件架构设计和Portal Starter Kit挖宝记
  6. 计算机软件工作总结,计算机软件培训总结及小结-工作总结
  7. 软件体系结构课后作业03
  8. django orm 操作符
  9. exports、module.exports和export、export default到底是咋回事
  10. CCF2016.4 - A题