全国计算机等级考试三级上级C语言教程——函数,结构体,指针_第1页
全国计算机等级考试三级上级C语言教程——函数,结构体,指针_第2页
全国计算机等级考试三级上级C语言教程——函数,结构体,指针_第3页
全国计算机等级考试三级上级C语言教程——函数,结构体,指针_第4页
全国计算机等级考试三级上级C语言教程——函数,结构体,指针_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、函数、结构体、指针 函数上机练习 第第7777套套 请编写函数请编写函数countvalue(int n),countvalue(int n),它的功能是:它的功能是: 求求n n以内(不包括以内(不包括n n)同时能被)同时能被3 3与与7 7整除的所有整除的所有 自然数之和的平方根自然数之和的平方根s,ss,s作为函数返回值,最后作为函数返回值,最后 结果结果s s输出到文件输出到文件out.datout.dat中。中。 例如若例如若n n为为10001000时,函数值应为:时,函数值应为:s = s = 153.909064153.909064。 第第6666套套 程序程序prog1.c

2、prog1.c的功能是的功能是: : 将大于整数将大于整数m m且紧靠且紧靠m m的的 k k个素数存入数组个素数存入数组xxxx。请考生编写函数。请考生编写函数 num(int num(int m, int k, intm, int k, int xx) xx)实现程序的要求实现程序的要求, , 最后调最后调 用函数用函数readwritedatreadwritedat( )( )把结果输出到把结果输出到out.datout.dat 文件中。文件中。 例如,若输入例如,若输入17, 517, 5,则应输出:,则应输出:19, 23, 29, 19, 23, 29, 31, 3731, 37。

3、 结 构 体 v数组是一组同类型的数据集合。 v结构体是一种构造数据类型 v用途:把不同类型的数据组合成一个 整体-自定义数据类型 1 1引言引言 结构体类型定义结构体类型定义 structstruct 结构体名结构体名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; . . ; 成员类型可以是 基本型或构造型 struct是关键字, 不能省略 例 struct student int number; char name8; char sex; int age; ; student stu1,stu2; 结构体变量的定义结构体变量的定义 n先定义结构体类型,再定

4、义结构体变量先定义结构体类型,再定义结构体变量 n一般形式:一般形式: structstruct 结构体名结构体名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; . . ; 结构体名结构体名 变量名表列;变量名表列; 结构体变量的引用和初始化结构体变量的引用和初始化 对结构体变量中成员的引用对结构体变量中成员的引用 例如:例如: stu1.numer stu1.numer 相当于一个长整型的变量相当于一个长整型的变量 相当于一个数组名相当于一个数组名 如果一个结构体类型中又嵌套一个结构体类型,如果一个结构体类型中又嵌套一

5、个结构体类型, 访问该类型的变量时应采取逐级访问的方法,访问该类型的变量时应采取逐级访问的方法, 直到得到所需访问的成员为止。直到得到所需访问的成员为止。 例如:例如: stu1.birthday.yearstu1.birthday.year stu1.birthday.month stu1.birthday.month 结构体数组结构体数组 n结构体数组的定义结构体数组的定义 struct student int num; char name8; char sex; int age; ; student stu2; struct student int num; char name8; ch

6、ar sex; int age; stu2; 经常与结构一起考的函数经常与结构一起考的函数 strcmp 原型:原型:extern int strcmp(charextern int strcmp(char * *s1,char s1,char * * s2); s2); 用法:用法:#include string.h#include 功能:比较字符串功能:比较字符串s1s1和和s2s2。 说明:说明: 当当s1s2s1s2时,返回值时,返回值0s2s1s2时,返回值时,返回值00 strcmpstrcmp举例举例 #include #include void main() char * s1

7、=hello programmers!; char * s2=hello programmers!; int r; r=strcmp(s1,s2); if(!r) printf(s1 and s2 are identical); else if(r0) printf(s1 is less than s2); else printf(s1 is greater than s2); 结构上机练习 第第9 9套套(1010,3434,3535,5858,5959,6060,83.8483.84,8585) v 已知在文件已知在文件in.datin.dat中存有中存有100100个产品销售记录个产品销

8、售记录, ,每个产品每个产品 销售记录由产品代码销售记录由产品代码dm(dm(字符型字符型4 4位位), ), 产品名称产品名称mc(mc(字符字符 型型1010位位), ), 单价单价djdj( (整型整型), ), 数量数量slsl( (整型整型),),金额金额jeje( (长整长整 型型) )五部分组成。其中五部分组成。其中: :金额金额= =单价单价* *数量计算得出。函数数量计算得出。函数 readdatreaddat()()读取这读取这100100个销售记录并存入个销售记录并存入结构数组结构数组sellsell中。中。 请编制函数请编制函数sortdatsortdat(),(),其

9、功能要求其功能要求: :按金额从大到小进按金额从大到小进 行排列行排列, , 若金额相等若金额相等, , 则按产品代码从小到大进行排列则按产品代码从小到大进行排列, , 最终排列结果仍存入结构数组最终排列结果仍存入结构数组sellsell中。中。最后最后main()main()函数函数 调用函数调用函数writedatwritedat()()把结果输出到文件把结果输出到文件out.datout.dat中。中。 v 提示提示: : 若中间变量为若中间变量为pro temp, pro temp, 则可以直接使用结则可以直接使用结 构赋值语句进行解题。构赋值语句进行解题。 v 例如例如: selli

10、: selli = temp ; = temp ; 第第4444套(同类型题套(同类型题6969) v 在数据文件在数据文件in.datin.dat中有中有200200组数据组数据, , 每组有每组有3 3个数个数, , 每个每个 数均是三位数。函数数均是三位数。函数readdatreaddat()()是读取这是读取这200200组数据存放组数据存放 到结构数组到结构数组aaaa中。请编制函数中。请编制函数jssortjssort(), (), 其函数的功能其函数的功能 是是: :要求在要求在200200组数据中组数据中找出条件为每组数据中的第一个找出条件为每组数据中的第一个 数大于第二个数与

11、第三个数之和数大于第二个数与第三个数之和, , 其中满足条件的个数其中满足条件的个数 作为函数作为函数jssortjssort()()的返回值的返回值, , 同时同时把满足条件的数据存把满足条件的数据存 入结构数组入结构数组bbbb中中, , 再对再对bbbb中的数据按照每组数据的第一中的数据按照每组数据的第一 个数与第三个数之和的大小进行升序排列个数与第三个数之和的大小进行升序排列( (第一个数与第一个数与 第三个数的和均不相等第三个数的和均不相等),), 排序后的结果仍重新存入结排序后的结果仍重新存入结 构数组构数组bbbb中中, ,最后调用函数最后调用函数writedatwritedat

12、()()把结果把结果bbbb输出到输出到 out.datout.dat文件中。文件中。 指 针 寻址方式寻址方式 v如何读写内存中的数据? n通过变量的地址访问变量所通过变量的地址访问变量所 在的存储单元在的存储单元 v两种寻址方式 v直接(寻址)访问 n直接按变量地址来存取变量直接按变量地址来存取变量 内容的访问方式内容的访问方式 v间接(寻址)访问 n通过指针变量来间接存取它通过指针变量来间接存取它 所指向的变量的访问方式所指向的变量的访问方式 0 内存用户数据区 2000 3 变量 i 2002 6 变量 j 2004 9 变量 k 3010 2000 变量 i_pointer 指针(指

13、针(pointerpointer)的概念)的概念 v指针也是一种数据类型 v指针变量 n具有指针类型的变量,专门存放地址数据的变量具有指针类型的变量,专门存放地址数据的变量 v变量的指针 n变量的地址变量的地址 如何定义指针变量?如何定义指针变量? v定义指针变量 vint *p; n定义了一个指针定义了一个指针变量变量p p,简称指针,简称指针p p np p是变量名,是变量名,intint* *是类型是类型 np p里保存一个地址。此时这个地址是哪呢(里保存一个地址。此时这个地址是哪呢(p p指向哪呢)?指向哪呢)? v指针变量初始化 np = p = n* *p p就像普通的变量一样使用

14、,其值是就像普通的变量一样使用,其值是p p指向的内存的内指向的内存的内 容(在上例和容(在上例和a a等价,但寻址方式不同)等价,但寻址方式不同) np p可以动态(任意)地指向不同内存,从而使可以动态(任意)地指向不同内存,从而使* *p p代表不代表不 同的变量同的变量 指针变量与其它类型变量的对比指针变量与其它类型变量的对比 v共性 n在内存中占据一定大小的存储单元在内存中占据一定大小的存储单元 n先定义,后使用先定义,后使用 v特殊性 n它的内容只能是地址,而不能是数据它的内容只能是地址,而不能是数据 n必须初始化后才能使用,否则指向不确定的存储单元必须初始化后才能使用,否则指向不确定的存储单元 n只能指向同一基类型的变量只能指向同一基类型的变量 n可参与的运算:加、减一个整数,自增、自减、关系、可参与的运算:加、减一个整数,自增、自减、关系、 赋值赋值 指针运算指针运算 v算术运算 vint *p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论