大学C程序设计教程.ppt_第1页
大学C程序设计教程.ppt_第2页
大学C程序设计教程.ppt_第3页
大学C程序设计教程.ppt_第4页
大学C程序设计教程.ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

大学C+程序设计教程 西安交通大学 计算机教学实验中心 第4章 数组和结构体 u本章目标 掌握数组定义的规则。 掌握数组的初始化方法及数组元素的引用。 掌握有关数组的基本算法。 掌握字符串处理函数的应用。 掌握结构体定义和使用的规则 学会使用VC+6.0开发环境中的Debug调试功能: 单步执行、设置断点、观察变量值。 2 授 课 内 容 u4.1 数组 u4.2 字符型数组和字符串处理库函数 u4.3 结构体类型 u4.4 数组和结构体 u4.5 构体嵌套 u程序设计举例 u调试技术 3 4.1、数组 u迄今为止,我们使用的都是属于基本 类型(整型、字符型、实型)的数据,c语 言还提供了构造类型的数据,它们有: 数组类型、结构体类型、共用体类型。 u构造类型数据是由基本类型数据按一 定规则组成的,因此有的书称它们为“导 出类型”。 4 问题的引出: u实际应用的程序设计中,只用几个变量的情况是极 少的;更多的情况是处理大批量的相同类型或不同类 型的数据。 u相同类型数据举例:统计交大15,000学生英语4级 统考成绩; u不同类型数据举例:管理交大15,000学生学籍信 息记录,包括:姓名、学号、出生日期、班级、各科 成绩等。 u用什么样的数据结构来描述这类应用更简洁? 5 一维数组 u常用于处理大批量数据; u数据特点:存在内在联系; u数组具有相同数据类型的变量集合; u这些变量都有相同名字,但下标不同; u称这些变量为数组元素; u只有一个下标一维数组; u有两个下标二维数组 例如: int array10; 6 一维数组定义 u数组是具有一定顺序关系的若干变量 的集合体,组成数据的变量称为该数组 的元素变量,简称元素。 u一维数组的定义方式为: 类型说明符 数组名常量表达式 u 例如: int a10; u它表示数组名为a,有10个元素。 7 说明 (1) 数组名定名规则和变量名相同,遵循标识符定 名规则。 (2) 数组名后是用方括弧括起来的常量表达式,不 能用圆括弧,下面用法不对:int a(10); (3)方括弧中的下标表示元素在数组中的位置。C语 言的下标从0,必须是整型变量或常量。 (4)编译系统处理数组说明语句时,为它在内存中 分配一定的存储空间,数组在内存中存储时,按 下标递增的顺序连续存储各元素的值。 8 一维数组的初始化 u(1) 在定义数组时对数组元素赋以初值 。 例如:int a10=0,1,2,3,4,5,6 ,7,8,9; u(2) 可以只给一部分元素赋值。例如: int a10=0,1,2,3,4; u定义a数组有10个元素,但花括弧内只 提供5个初值,这表示只给前面5个元素 赋初值,后5个元素值为0。 9 u(3) 如果想使一个数组中全部元素值为 0,可以写成 int a10=0,0,0,0,0,0,0,0 ,0,0; u 不能写成 int a10=0*10; 10 u(4) 在对全部数组元素赋初值时,可以 不指定数组长度。例如: int a5=1,2,3,4,5; u 可以写成 int a=1,2,3,4 ,5; u在第二种写法中,花括弧中有5个数, 系统就会据此自动定义a数组的长度为5 。 11 一维数组初始化 u例:int A5; 在内存存储如图 u数组的首地址是数组名A u数组的首地址也是第一个元素的地址赋值如图 A0A1A2A3 A4 12 例4-1 u题目:给一维数组x输入10个整数,找出x数 组中的最大数和最小数。 u算法分析: u1、假设数组中第1个元素最大, 令xmax=a0 u2、将ai(0 int main() int array7; coutarrayi; int big = array0; for(int j=0; jbig) big = arrayj; cout ; u例如,三个学生四门课程成绩数据如下: 85 87 93 88 86 90 95 89 78 91 82 95 u利用二维数组存放这些数据更能表现数据之 间相互联系的特征。每一行数据表示该学生的 各门课程的成绩,而每一列数据表示该门课程 各学生的成绩。该数组定义为: int matrix34; 15 二维数组存储结构 u逻辑结构: u 二维数组恰似一张表格(或矩阵)。数组元素中的 第一个下标值表示该元素在表格中的行号,第二个下 标为列号。 M33具有如下逻辑结构: M00 M01 M02 M10 M11 M12 M20 M21 M22 u存贮结构: 二维数组在内存中按一维数组存放、占据一片连续的存贮 单元;是“按行顺序”在内存中分配存贮单元。 16 二维数组初始化 u1按照二维数组元素的物理存储次序 给所有或部分数组元素提供数据值 int score34= 85,87,93,88,86,90,95,89,78,91,82,95; u/给数组stu_score每个元素都提供初值 ufloat matrix23= 1.0,3.0; u/仅为数组matrix的前个元素提供初 值 17 u2以行结构方式提供各数据值 int score34= 85,87,93,88, 86,90,95,89, 78,91,82,95 ; 18 4.2 字符型数组和字符串处理库 函数 u字符串用双引号括起来,例如,”abc” ; u用字符型数组存放字符串,存放时, 在有效字符后自动加0; u称0为空值,是字符串结束标志; u有效字符的个数称为字符串长度。 u例如,”abc”的长度为3,但占4个字节 u (0占一位) 。 19 字符型数组的定义和初始化 char weekday 7= “MONDAY“; char weekday 7= “MONDAY“; u字符串的输入与输出 char name20; cinname; cin.get(name, n); /第一个是字符数组变量,第二个指定向这个变量 /中读入几个字符 cout int main() char name120, name220; coutname2; cout stpcpy(): 字符串拷贝; strcat(): 字符串连接; strchr(): 在字符串中查找字符; strcmp(): 字符串比较; strlen(): 求字符串长度; strlwr(): 将字符串中的大写字母转换为小写字母; strrev(): 反转字符串; strstr(): 在字符串中查找另一个字符串; strupr(): 将字符串中的小写字母转换为大写字母 ; 23 例4-3 u编写一个用来计算字符串长度的函数 mystrlen(),并用主函数验证 u算法分析: u1)设一个计数器变量len=0 u2)从数组slen第一个元素开始进行处理 u3)若当前的元素值slen非空(0),则 len+1,继续执行3;否则,退出循环。 u4)打印结果len 24 程序逻辑功能框图 len = 0 strn len=len+1 打印结果len strlen=0?是 否 25 / Example 4-3:求字符串的长度 u#include u/计算字符串的长度的函数 uint mystrlen(char string) u u int len = 0; u while(stringlen!=0) u len = len+1; u return len; u 26 /测试计算字符串长度的主函数 int main() char string100; int len = 0; coutstring; cout int main() const int L=4;const int M=5;const int N=3; double aL*M=1.0, 3.0, -2.0, 0.0, 4.0, -2.0, -1.0, 5.0, -7.0, 2.0, 0.0, 8.0, 4.0, 1.0, -5.0, 3.0, -3.0, 2.0, -4.0, 1.0; double bM*N=4.0, 5.0, -1.0, 2.0, -2.0, 6.0, 7.0, 8.0, 1.0, 0.0, 3.0, -5.0, 9.0, 8.0, -6.0; double cL*N; int i, j, k; 39 / 4-5:计算两个矩阵的乘积(续) for(i=0; iA(I+1),则交换 它们的位置 A(I) A(I+1); u(2)对剩下的N-1个元素,再两两进行比较,按 同样规则交换它们的位置,经过N-2次比较,将 次最大值交换到A(N-1)的位置; u(3)如法炮制,经过N-1趟的“冒泡处理”,每趟 进行N-i次的比较,全部数列有序。 41 42 / Example 4-6:冒泡排序 #include int main() const int COUNT=16; int listCOUNT=503, 87, 512, 61, 908, 170, 897, 275, 653, 426, 154, 509, 612, 677, 765, 703; for(int i=0; ii; j=j-1) if(listj-1listj) int tmp = listj-1;listj-1 = listj;listj = tmp; cout int main() char str=“This is a sample“; cout=a inti, j; coutstudenti0;studentiCOURSE+1=0; for(j=1; jstudentij; studentiCOURSE+1=studentiCOURSE+1+studentij ; studentiCOURSE+1=studentiCOURSE+1/ COURSE; 47 /4-8: 统计学生课程的平均分 cout #definePERSON6 #defineCOURSE3 struct StudentType char id10;/学号 int scoreCOURSE;/课程成绩 int GPA;/平均分 ; 50 int main() StudentType xjtuStudentPERSON; int i, j; cout xjtuStudenti.id; xjtuStudenti.GPA=0; 51 for(j=0; j xjtuStudenti. scorej; xjtuStudenti. GPA = xjtuStudenti. GPA + xjtuStudenti. scorej; xjtuStudenti. GPA = xjtuStudenti. GPA / COURSE; 52 cout“学号 高数 英语 体育 平均分“endl; cout“-“endl; for(i=0; i PERSON; i=i+1) coutxjtuStudenti.id“t“; for(j=0; j COURSE; j=j+1) cout xjtuStudenti.scorej“t“; cout xjtuStudenti.GPAendl; return 0; 53 Developer Studio的跟踪调试功能 u(1)Restart(快捷键:Ctrl+Shift+F5) u(2)Stop Debugging(快捷键:Shift+F5) u(3)Break Execution: u(4)Apply Code Changes(快捷键:Alt+F10) u(5)Show Next Statement(快捷键:Alt+Num *) u(6)Step Into(快捷键:F11) u(7)Step Over(快捷键F10) u(8)Step Out(快捷键:Shift+F11) u(9)Run To Cursor(快捷键:Ctrl+F10) 54 第4区有6个调试器窗口 u(1)观察窗口(Watch) u(2)变量窗口(Variables) u

温馨提示

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

最新文档

评论

0/150

提交评论