清华大学C++课程第8讲数组上_第1页
清华大学C++课程第8讲数组上_第2页
清华大学C++课程第8讲数组上_第3页
清华大学C++课程第8讲数组上_第4页
清华大学C++课程第8讲数组上_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

清华大学C++课程第8讲数组(上)课前答疑printf,scanf函数的头文件到底是什么?上次问您,您说是在

<stioa。h>中,但我发现很多程序中用到这两个函数时并没有包含这个头文件啊?

对C来说,STDIO.H,但IOSTREAM也包含\n到底什么时候需要加单撇号什么时候不加?我很迷糊,比如在cout中需要,但又在printf中有不需要?不太理解?

都需要加continue语句到底是怎么回事?书上没有讲很清楚,你的讲义中也没有太清楚,希望您能举几个例子!

结束本次循环,进入下次循坏判断10的n次方怎么输入?他的库函数是什么?

DOUBLEPOW(DOUBEX,DOUBLEY)本讲主要内容为什么要引入数组?一维数组定义和引用二维数组定义和引用程序的调试方法*参考教材的第5.1-5.3节程序中的数据

--C++语言数据类型基本类型构造类型指针类型空类型整型字符型实型枚举类型(浮点型)单精度型双精度型数组类型结构体类型共用体类型数据类型图C++的数据类型8.1为啥要引入数组某同学的女朋友来到草原,该同学要从1000只羊群中选一只最肥的羊宴请宾客。但该同学由喜变愁:如何记录每只羊的重量呢?需要定义1000个变量(a1,a2…..)吗?如何找到最肥的羊呢?请同学帮助想想办法?问题:哪只羊最重?程序框图

max=0.0;

将记录最重的羊的重量置0

for(i=0;i<10;i=i+1)

提示输入第i只羊的重量;

键入第i只羊的重量

sheep[i];

max<sheep[i]

max=sheep[i];

k=i;

存重者,记录第i只。

输出

max

(最重的羊的重量

)

输出

k

(最重的羊是第k只

)

用键盘输入1000只羊的重量存放到一个名为sheep的数组中#include<stdio.h>Intmain(){

floatsheep[1000];//数组,有1000个元素存每只重量floatmax; inti,k; max=0.0; for(i=0;i<1000;i=i+1) {printf(“请输入羊的重量sheep[%d]=”,i);scanf(“%f”,&(sheep[i]));//输入第i只羊的重量

if(max<sheep[i]) {max=sheep[i]; //让第i只羊为当前最肥羊

k=i; //记录第i只羊

} } printf(“max=%f\n”,max); printf(“number=%d\n”,k);return0;}8.1、数组的定义数组的定义:类型说明符 数组名[常量表达式]例:floatsheep[10];相当于定义了10个变量;

inta2001[1000];相当于定义了1000个变量说明数组名的第一个字符应为英文字母;用方括号将常量表达式括起;常量表达式定义了数组元素的个数;8.1、数组的定义数组下标从0开始。如果定义5个元素,是从第0个元素至第4个元素;

例如:inta[5]定义了5个数组元素如下:

a[0],a[1],a[2],a[3],a[4]

这是5个带下标的变量,变量的类型是相同的,且存储连续定义形式的常量表达式中不允许包含变量; 例如 intn; n=5;

int

a[n]; 不合法!

但引用时表达式中可以包含变量。8.2、数组的引用C++语言规定,不能引用整个数组,只能逐个引用元素,元素引用方式:数组名[下标][例]使数组元素a[0]~a[9]的值为0~9,然后逆序输出。

main(){inti,a[10];//数组的定义形式for(i=0;i<=9;i++)

a[i]=i;//数组的引用形式for(i=9;i>=0;i--)

printf("%d",a[i]);}8.3、数组的初始化数组初始化:定义数组完成赋初值的任务 例如

inta[5]={3,5,4,1,2}; a[0]=3;a[1]=5;a[2]=4; a[3]=1;a[4]=2;初始化:在定义时指定初始值,编译器把初值赋给数组变量。赋值:使用赋值语句,在程序运行时把值赋给数组变量,如a[0]=2。8.3、数组的初始化一般初始化,例:inta[10]={0,1,2,3,4,5,6,7,8,9};部分元素初始化,例、

staticinta[10]={0,1,2,3,4}; 仅前5个元素赋初值,后5个元素未指顶初值。全部元素均初始化为0。

staticinta[10]={0,0,0,0,0,0,0,0,0,0};

注意:不给数组指定初始值时,编译器作如下处理: (1)编译器自动把静态数组的各元素初始化为0。 (2)编译器不为动态数组自动指定初始值。如果全部元素均指定初值,定义中可省略元素个数:staticinta[5]={1,2,3,4,5};可以写为:

staticinta[]={1,2,3,4,5};8.3、数组的初始化算法重点:对比Fibonacci的3种解法:递推法、递归法和数组法【例】已知A,B,C,D中有一人是小偷,并且,这四个人中每人要么说真话,要么说假话。在审问过程中,这四个人分别回答如下:A说:B没有偷,是D偷的。B说:我没有偷,是C偷的。C说:A没有偷,是B偷的。D说:我没有偷。现要求根据这四个人的回答,写出能确定谁是小偷的条件。假设用整型变量a,b,c,d分别代表A,B,C,D四个人,且变量只取值为0和1,值为1表示该人为小偷,值为0表示该人不是小偷。由于四个人中只有一人是小偷,而且不管是不是小偷,他的回答要么是真话,要么是假话。2.4.5逻辑运算符和逻辑表达式(回顾)应用举例列举法应用举例注意:编译链接成功不等于没有语法错误附:程序的调试逐过程调试:F10逐过程调试:F10逐过程调试:F10逐过程调试:F10逐过程调试:F10逐过程调试:F10怎么办?

如何表示a和b?8.4二维数组定义形式:类型说明符数组名[常量表达式][常量表达式]例、(1)floata[3][4];a为3×4(3行4列)的数组,共12个元素,分别是:a[0][0],a[0][1],a[0][2],a[0][3],a[1][0],a[1][1],a[1][2],a[1][3],a[2][0],a[2][1],a[2][2],a[2][3](2)注意:排列(存储)顺序,先列后行;下标变化,即二维数组中元素的引用8.4二维数组二维数组的理解:二维数组a[3][4]理解为:有三个元素a[0]、a[1]、a[2],每一个元素是一个包含4个元素的数组。8.4三维数组三维数组:floata[2][3][4]在内存中的存放顺序:a[0][0][0]→a[0][0][1]→a[0][0][2]→a[0][0][3]→a[0][1][0]→a[0][1][1]→a[0][1][2]→a[0][1][3]→a[0][2][0]→a[0][2][1]→a[0][2][2]→a[0][2][3]→a[1][0][0]→a[1][0][1]→a[1][0][2]→a[1][0][3]→a[1][1][0]→a[1][1][1]→a[1][1][2]→a[1][1][3]→a[1][2][0]→a[1][2][1]→a[1][2][2]→a[1][2][3]8.5二维数组的初始化

分行赋值如:staticinta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};全部数据写在一个大括号内如:staticinta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};部分元素赋值如:staticinta[3][4]={{1},{5},{9}}; 仅对a[0][0]、a[1][0]、a[2][0]赋值,其余元素未赋值(对于静态数组,编译器自动为未赋值元素指定初值0。如果对全部元素赋初值,则第一维的长度可以不指定,但必须指定第二维的长度。如:staticinta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};与下面定义等价:staticinta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};8.6应用举例[例]将一个二维数组行和列交换,存到另一个二维数组中。例如8.6应用举例逐过程调试:F10逐过程调试:F10逐过程调试:F10断点调试:F5断点调试:F5断点调试:F58.6应用举例[例]有一个3×4的矩阵,要求编程序以求出其中值最大的那个元素的值及其所在的行号和列号。算法:“打擂台”,首先把第一个元素a[0][0]作为临时最大值max,然后把临时最大值max与每一个元素a[i][j]进行比较,若a[i][j]>max,把a[i][j]作为新的临时最大值,并记录下其下标i和j。当全部元素比较完后,max是整个矩阵全部元素的最大值。8.6应用举例8.6应用举例本讲重点数组的存储特点:连续存储数组的定义和引用方法数组解题算法逐过程和断点调试程序的方法第3次课后作业1.参考教材P162的第7题。写出算法,上机编程,按逐过程调试方法,分析(参考答案)程序中max,maxj和flag3个变量在程序运行过程的整个变化情况。要求:算法描述,程序运行结果,调试过程max,maxj;flag3个变量运行时的所有值。2.参考教材P163的第9题。要求,建一个

温馨提示

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

评论

0/150

提交评论