




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章数组 6 1问题的提出6 2一维数组6 3二维数组6 4字符串与字符串函数 6 1问题的提出 第一个问题是 输入100个学生的 C程序设计 课程的成绩 将这100个分数从小到大输出 第二个问题是输入100个学生的 C程序设计 课程的期中和期末成绩 算出总评成绩 总评成绩为 30 期中成绩 70 期末成绩 计算总评成绩的分数段情况 6 2一维数组 6 2 1一维数组的定义从概念上来说 数组是一组变量 这组变量应该满足下列条件 1 具有有相同的名字 2 具有相同的数据类型 3 在存储器中连续存放 每个变量称为数组的一个 数组单元 保存在其中的数据值称为 数组元素 不论是数组单元 还是数组元素 在不引起混淆的情况下 可以简称为元素 数组对象的整体有一个名称 这个名称表示整个数组 每个数组在使用之前都需要定义 定义数组的语法是 数据类型说明符数组名 数组长度 数据类型说明符是C语言提供的任何一种基本数据类型或构造数据类型 数组名是用户定义的标识符 方括号中的数组长度是一个常量表达式 它表示了数组单元的个数 注意 数组长度只能是常量 例如 intdata 5 说明整型数组a 有5个元素 floatb 10 c 20 说明单精度浮点型数组b 有10个元素 单精度浮点型数组c 有20个元素 charstring 20 说明字符型数组string 有20个元素 注意 1 数组的数据类型定义的是每个数组元素的取值类型 对于一个数组来说 所有数组元素的数据类型应该都是相同的 2 数组名要符合用户定义字的书写规则 也就是与普通变量一样 3 在C语言的一个函数中 数组名不能与本函数的其它变量名同名 4 数组长度不能是变量 也不能是或包含变量的表达式 可以是常量或常量表达式 并且常量表达式应是整型数 不能是小数 程序段一 defineSize5main inta Size b Size 10 正确 程序段二 main intn 5 intdata n 错误 6 2 2一维数组的引用引用数组单元的一般形式为 数组名 下标 数组下标可以是整型变量或整型表达式 但不能是浮点型的变量或浮点型表达式 并且下标不能大于 数组长度 1 因为超过部分没有被定义过 是不能正确使用的 图 例如 data 4 data i j data i 都是合法的引用方式 例6 1用数组方式读入5个整数 并求和 sumof5interger include stdio h voidmain inti data 5 sum 0 printf nPleaseenter5integer for i 0 i 5 i scanf d 在 语言中只能逐个地使用每个数组单元进行操作 而不能一次引用整个数组 例如 不能用printf d data 来代替下面的语句 for i 0 i 4 i printf d data i 因为 C语言规定数组名本身代表数组的首地址 printf u data 语句输出的是数组的首地址 而不是数组单元的内容 6 2 3一维数组的初始化初始化是指在数组定义时给数组元素赋予初值 需要注意的是 数组初始化是在编译阶段进行的 而不是在程序开始运行以后 由可执行语句完成的 因此不能将初始化的 与赋值号混淆 一维数组初始化的一般形式是 数据类型说明符数组名 数组长度 数值 数值 数值 intdata 5 1 2 3 4 5 注意 1 允许初始化一部分元素 而不是全部 intdata 5 1 2 2 初始化数组时 允许省略数组的长度 intdata 1 2 3 4 5 与intdata 5 1 2 3 4 5 是完全等价的 3 初始化数组时 不能对整个数组初始化 例如 intdata 5 1 6 2 4程序举例例6 2用数组方式解决Fibonacci数列问题 求出Fibonacci数列的前20项存储在数组中 并将数组内容输出 include stdio h voidmain inti fib 20 1 1 初始化 printf n for i 2 i 20 i fib i fib i 1 fib i 2 for i 1 i 20 i printf 10d fib i 1 if i 5 0 printf n 换行 每行输出5个 例6 3输入100个整数 求出最小的数以及第一个最小的数在数组中的下标 例6 4输入100个整数 从小到大排列并输出 选择排序例6 5输入100个学生的 C程序设计 课程的期中和期末成绩 算出总评成绩 总评成绩为 30 期中成绩 70 期末成绩 计算总评成绩的分数段情况 本题要使用三个平行的数组才能解决问题 这三个数组的第i个元素记录了一个学生的期中成绩 期末成绩和总评成绩 6 3二维数组 如果一维数组的数组单元不是一个变量 而是另一个一维数组 就构成了二维数组 图 e score是一个一维数组 它的每个数组单元是一个变量 分别是e score 0 e score 1 e score 2 e score 3 e score 4 而stu score的每个数组单元不是一个变量 而是一个有三个变量的一维数组 这就构成了二维数组 stu score有5个数组单元 每个数组单元又有3个元素 我们称stu score是一个5 3的二维数组 该二维数组行的个数是5 列的个数是3 6 3 1二维数组的定义定义二维数组的语法是 数据类型说明符数组名 行数 列数 例如 intdata 5 3 说明整型数组a 有5行3列共15个整型变量 floatb 10 20 说明单精度浮点型数组b 有10行20列共200个单精度浮点型变量 charstring 20 50 说明字符型数组string 有20行50列共1000个字符型变量 地址二维数组在概念上是二维的 可以说是数组的数组 二维数组的下标在行和列两个方向变化 但是 计算机的内存是连续编址的 也就是说存储器单元是按一维线性排列的 那么 如何按照地址的顺序存放二维数组呢 一般有两种方式来存储二维数组 第一种称为按行排列 方法是先存储完第一行中的每个元素 再存放下一行的每个元素 第二种称为按列排列 方法是先存储完第一列中的每个元素 再存放下一列的每个元素 C语言的编译系统采用按行排列 6 3 2二维数组的引用引用二维数组的一般形式为 数组名 行下标 列下标 行下标不能大于 行数 1 列下标不能大于 列数 1 如果有intstu score 5 3 stu score 0 0 stu score 1 2 stu score 3 1 都是正确的引用方式 但是stu score 3 3 是不正确的 例6 7判断下面程序的运行结果 include stdio h voidmain inti j a 3 2 定义 for i 0 i 3 i 赋值 for j 0 j 2 j a i j i j for i 0 i 3 i for j 0 j 2 j printf 10d a i j printf n 每输出一行换行 6 3 3二维数组的初始化二维数组初始化的一般形式是 数据类型说明符数组名 行数 列数 数值 数值 数值 数值 数值 数值 或者数据类型说明符数组名 行数 列数 数值 数值 数值 第一种方法是按行分段初始化 即在外面的花括号里面再嵌套花括号 里面的每个花括号分别为每行元素初始化 第二种方法则是按行连续初始化 不用加内嵌的花括号 这两种方法有时没有区别 有时区别却很大 例如 对数组a 3 2 inta 3 2 5 6 7 8 9 10 按行分段初始化 inta 3 2 5 6 7 8 9 10 按行连续初始化 上面两种初始化的结果是完全相同的 inta 3 2 5 7 9 按行分段初始化 inta 3 2 5 7 9 按行连续初始化 则结果却完全不一样 对于二维数组的全部元素进行初始化 则行数可以省略 编译系统会自动计算出行数 但是绝对不能省略列数 例如 inta 3 2 4 5 6 7 8 9 可以写为 inta 2 4 5 6 7 8 9 但是不能写为 inta 3 4 5 6 7 8 9 6 3 4程序举例例6 8将用二维数组a表示的矩阵转置存入b中 输出a和b 例6 9输入100个学生的 C程序设计 课程的期中和期末成绩 算出总评成绩 总评成绩为 30 期中成绩 70 期末成绩 计算总评成绩的分数段情况 要求用一个二维数组存储期中成绩 期末成绩和总评成绩 本题将使用二维数组的的第i个元素记录一个学生的期中成绩 期末成绩和总评成绩 6 4字符串与字符串函数 6 4 1字符数组字符数组就是定义一个数据类型是字符型的数组 字符数组的初始化 charstr 10 H e l l o 例6 10以 符号为终止符号接收一组字符 并逆序输出这组字符 include stdio h voidmain charc 80 inti puts Pleaseinputastring for i 0 c i getchar i 读入一组字符 for i i 0 i 从最后一个字符开始逆向输出 putchar c i 6 4 2字符串变量C语言的字符串变量不是真正的字符串类型 C语言的字符串变量从形式上还是定义一个字符数组 但是 在概念上 字符串是带有字符串结束符 0 的一组字符 不论它是常量还是变量 有了 0 标志以后 在处理字符数据时 就不必再用数组的长度来控制对字符数组的操作 而是用 0 来判断字符串的结束位置 这是字符串变量与其它类型的数组 包括一般的字符数组 在操作上的根本区别 字符串变量需要用字符串常量对其进行初始化 例如 charstr Hello 或charstr Hello 用上面两种方式初始化str以后 str字符串变量所占的内存空间是6字节 最后一个字节是字符串结束标志 0 6 4 3字符串变量的输入与输出1 使用printf函数输出字符串变量的方式是 使用转换字符序列 s 例6 11使用printf函数输出字符串变量 include stdio h voidmain charstr Hello printf s str 运行结果 Hello 例6 12请判断下面程序的运行结果 include stdio h voidmain charstr 10 H e l l o 0 printf s str 运行结果 2 使用scanf函数输入字符串给字符串变量也使用转换字符序列 s 例6 13使用scanf函数输入字符串给字符串变量 include stdio h voidmain charstr 10 scanf s str printf s str 2 使用scanf函数输入字符串给字符串变量也使用转换字符序列 s 例6 13使用scanf函数输入字符串给字符串变量 include stdio h voidmain charstr 10 scanf s str printf s str 运行结果 Welcomeyou 3 puts 是字符串输出函数 其调用格式为 puts 字符串变量 它的功能是把字符串变量的内容 一定要有 0 结束符 显示在屏幕上 例6 14使用puts 字符串输出函数 include stdio h voidmain charstr Hello puts str 运行结果 Hello include stdio h voidmain charstr Hello printf s str printf s str 运行结果 include stdio h voidmain charstr Hello puts str puts str 运行结果 4 gets 是字符串输入函数 其调用格式为 gets 字符串变量 它的功能是 从标准输入设备键盘上输入一个字符串 例6 15使用gets 字符串输入函数 include stdio h voidmain charstr 20 gets str puts str 若输入为Welcomeyou 输出 6 4 4字符串函数1 字符串连接函数strcat其调用格式为 strcat 字符串变量1 字符串2 它的功能是 将字符串2的字符串连接到字符串变量2中的字符串的后面 并删去字符串变量1中的字符串结束符 0 strcat的返回值是字符串变量1的首地址 字符串变量1应定义足够的长度 以便能装入连接以后的字符串 例6 16字符串连接函数的使用 include stdio h include string h voidmain charstr1 30 Iam charstr2 10 astudent strcat str1 str2 puts str1 运行结果 Iamastudent 2 字符串拷贝函数strcpy其调用格式为 strcpy 字符串变量1 字符串2 它的功能是 将字符串2的字符串复制到到字符变量1中 字符串结束符 0 也一起复制 字符串2既可以是字符串常量也可以是字符串变量 strcpy函数要求字符串变量1有足够的长度 以便能装入要复制的字符串 例6 17使用函数strcpy将一个字符串的内容拷贝到另一个字符串中 include stdio h include string h voidmain charstr1 30 Iam charstr2 10 astudent strcpy str1 str2 puts str1 运行结果 astudent 3 字符串比较函数strcmp其调用格式为 strcmp 字符串1 字符串2 它的功能是 按照ASCII码顺序比较两个数组中的字符串 并由函数返回值返回比较结果 若字符串1 字符串2 返回值为0 若字符串1 字符串2 返回值为一正整数 若字符串1 字符串2 返回值为一负整数 字符串1和字符串2既可以是字符串常量也可以是字符串变量 4 求字符串长度函数strlen其调用格式为 strlen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年现代艺术画廊店面升级改造装修项目施工合同
- 2025年生态公园景观园林施工质量监督协议书
- 常规疫苗培训课件
- 2025年度智慧城市综合体商业空间租赁与一体化运营服务协议
- 2025年生物医药研发中心厂房租赁安全防护责任协议
- 医院培训课件模板
- 2025年电子信息产品集中采购合同样本集
- 2025公务员乘法考试题及答案
- 2025年绿色有机蔬菜种子供应链合作采购合同
- 2025年智能电网建设与新能源并网合同执行标准规范
- 2025《煤矿安全规程》新旧对照专题培训
- 甲乳外科护士进修汇报
- 2025年幼儿园初级保育员测试题(含答案)
- 2025年摄影测量竞赛题库及答案
- 安全注射培训课件
- 中国现代国防教学课件
- 基于SSM的在线办公平台系统设计与实现
- 航天器再入轨道的实时监测与数据处理技术-洞察阐释
- 信息化项目监理规划
- TAOPA《固定式无人机反制设备技术规范》
- 新生儿院感管理
评论
0/150
提交评论