C语言程序设计



《C语言程序设计》由会员分享,可在线阅读,更多相关《C语言程序设计(65页珍藏版)》请在装配图网上搜索。
1、,,,,,,,,,,,,,,,,,,,,,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,,,*,,,,,,,,,,,,,,,,,,,,,,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,,,*,,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,,*,,,单击此处编辑母版标题样式,单击此处编辑母版文
2、本样式,第二级,第三级,第四级,第五级,*,,*,C语言程序设计,数组的概念和使用,一个数组在内存中占一片连续的存储单元。,定义一维数组的一般格式为,类型标识符 数组名[常量表达式];,例如,int a[10];,用方括号括起来的常量表达式表示下标值,如下面的写法是合法的:,int a[2*5];,int a[n*2]; //,假设前面已定义了,n,为常变量,常量表达式中可以包括常量、常变量和符号常量,但不能包含变量。,例如,下面这样定义数组是不行的:,int n;,cin>>n; //,输入,a,数组的长度,int a[n];,,如果把第1,2行改为下
3、面一行就合法了:,const int n=5;,,(1) 在定义数组时分别对数组元素赋予初值。例如,int a[10]={0,1,2,3,4,5,6,7,8,9};,(2) 可以只给一局部元素赋值。例如,int a[10]={0,1,2,3,4};,(3)在对全部数组元素赋初值时,可以不指定数组长度。例如,int a[5]={1,2,3,4,5};,可以写成 int a[]={1,2,3,4,5};,数组元素也可以作函数实参,其用法与变量一样。数组名也可以作实参和形参,传递的是数组的起始地址。,1.4 用数组作函数参数,1. 用数组元素作函数实参,由于实参可以是表达式,而数组元素可以是表
4、达式的组成局部,因此数组元素当然可以作为函数的实参,与用变量作实参一样,将数组元素的值传送给形参变量。,2. 用数组名作函数参数,,可以用数组名作函数参数,此时实参与形参都用数组名,实例30:,(1) 如果函数实参是数组名,形参也应为数组名,(2) 需要特别说明的是: 数组名代表数组首元素的地址,并不代表数组中的全部元素。,(3)用数组名作函数实参时,改变形参数组元素的值将同时改变实参数组元素的值。,3. 用多维数组名作函数参数,如果用二维数组名作为实参和形参,在对形参数组声明时,必须指定第二维(即列)的大小,且应与实参的第二维的大小一样。第一维的大小可以指定,也可以不指定。如,int arr
5、ay[3][10]; //形参数组的两个维都指定,或 int array[][10]; //第一维大小省略,二者都合法而且等价。但是不能把第二维的大小省略。,实例31:,指针,直接访问和间接访问,间接:将3送到指针变量i_pointer所指向的单元〔这就是变量i所标识的单元〕中。,,,,,所谓指向,就是通过地址来表达的。,由于通过地址能找到所需的变量单元,因此可以说,地址指向该变量单元。因此将地址形象化地称为“指针〞。一个变量的地址称为该变量的指针。,如果有一个变量是专门用来存放另一变量地址〔即指针〕的,那么它称为指针变量。指针变量的值〔即指针变量中存放的值〕是地址〔即指针〕。,变量与指针
6、,&:,取地址运算符,*:指针运算符,int,*,p=&a,;,&a,为变量,a,的地址,*,p,为指针变量,p,所指向的变量。,为了表示指针变量和它所指向的变量之间的联系,在C++中用“*〞符号表示指向,例如,i_pointer是一个指针变量,而*i_pointer表示i_pointer所指向的变量,下面两个语句作用一样:,int *i_pointer=,① i=3;,② *i_pointer=3;,,必须将指针变量定义为指针类型。先看一个具体例子:,,int i,j; //,定义整型变量,i,j,int *pointer_1, *pointer_2;,pointer_1=,poin
7、ter_2=,,在定义指针变量时要注意:,,(1) 不能用一个整数给一个指针变量赋初值。,(2) 在定义指针变量时必须指定基类型。,指针作为函数参数,,将一个变量的地址传送给被调用函数的形参。,实例1-2:,,指针作为函数参数,数组与指针,在,C++,中,数组名代表数组中第一个元素(即序号为0的元素)的地址。因此,下面两个语句等价:,int *p= //p,的初值为,a[0],的地址,也可以写成,int *p=a;,,,,(1),p+i,和,a+i,就是,a[i],的地址,或者说,它们指向,a,数组的第,i,个元素,见图6.12。,(2) *(,p+i),或*(,a+i),是,p
8、+i,或,a+i,所指向的数组元素,即,a[i]。,,实例:数组指针,实例,30,实参形参都用数组名,/,数组变量,实参用指针变量,形参为数组变量,,实例,31,实参用数组名,形参用指针变量,实参形参都用指针变量,构造体,概述,在实际应用中,有不少应用问题如果只采用已学的变量和数组作为数据构造显得很不方便。,例:输入100个学生的学号、姓名和考试成绩,编写程序找出高分者和低分者。,用变量和数组作数据构造可编写程序如下:,main(),{ int i, num, maxnum, minnum;,char name[20];,char maxname[20], minname[20];,in
9、t score, maxscore, minscore;,maxscore=0; minscore=100;,,for(i=1; i<=100; i++),{ scanf(%d%s%d〞,,if(score>maxscore),{ maxscore=score;,maxnum=num; strcpy(maxname,name); },if(score 10、。,②操作不便〔如更新过程〕。,显然,选用一种能把一个学生的数据构造成一个整体的构造型数据构造更适宜,但不能是数组。,对于这种情况,可以将一个学生的数据定义为一个构造体类型:,,struct student 类型名,{,int num; 成员表,char name[20];,int score;,};,,定义了一个构造体类型,它包含三个成员。,定义构造体类型变量的方法,前面定义的构造体类型只是一种“模型〞,还必须定义构造体变量后才能存放数据。,定义构造体变量有三种方法:,1、先定义构造体类型再定义构造体 11、变量,定义了构造体类型后:,struct student st, stmax, stmin;,类型符 变量名,定义了三个构造体变量,每个变量包含三个成员,每个变量可存放一个学生的数据。,2、在定义构造体类型的同时定义构造体变量,struct student,{,int num;,char name[20];,int score;,}st, stmax, stmin;,,,3、直接定义构造体类型变量,struct 不出现类型名,{,int num;,char name[20];,int score;,}st, stmax, stmin;, 12、,常用第一种方法,说明: ①类型与变量不同,只对变量分配空间与操作。,②对成员可以单独使用,相当于普通变量。,③成员也可以是一个构造体变量。,struct date struct student,{ int month; { int num;,int day; char name[20];,int year; struct date birthday;,}; }st1, st2;,④成员名可以与程序中的 13、变量名一样,两者代表不同的对象。,构造体变量的引用 ■成员引用,可以对成员单独引用,形式为:,构造体变量名 . 成员名,,成员运算符,st.num=1001;st.score=90;,strcpy(st.name,〞Li〞);,printf(“%d%s%d〞,st.num,st.name,st.score);,scanf(“%d%s%d〞,,可以引用成员的地址,如果成员本身又属一个构造体类型,那么要用假设干个成员运算符,一级一级地找到最低一级的成员,只能对最低级的成员进展存取与运算。,,st1.birthday.year=1960;,st1.birthday.month=5;,st1.b 14、irthday.day=15;,■整体引用,可以对构造体变量进展整体赋值:,stmax=st; 将st中的所有内容赋值给stmax。,,对构造体变量的整体操作只限于赋值操作和参数传递,而且要求类型一致。不能对构造体变量进展整体输入输出。,构造体应用举例:,编写程序输入100个学生的学号、姓名和考试成绩,找出高分者和低分者。,,struct student,{ int num;,char name[20];,int score;,};,main(),{,int i;,struct student st,stmax,stmin;,stmax.score=0;,stmin.scor 15、e=100;,,for(i=1;i<=100;i++),{ scanf(“%d%s%d〞,,if(st.score>stmax.score),stmax=st;,if(st.score 16、r name[20];,int score;,}st={1001,〞wang〞,95};,构造体数组 可以定义构造体数组来存放批量数据,■构造体数组的定义,struct student,{,int num;,char name[20];,int score;,};struct student a[100];,定义a数组,可以存放100个学生的数据,a数组的每个元素又是一个构造体变量。,■构造体数组的初始化,在定义构造体数组的同时指定初值。,struct student,{,int num;,char name[20];,int score;,};,struct st 17、udent a[2]=,{{1001,〞LiLi〞,85},{1002,〞wang〞,90}};,或:,struct student,{,int num;,char name[20];,int score;,} a[2]=,{{1001,〞LiLi〞,85},{1002,〞wang〞,90}};,■构造体数组元素的引用,成员引用:,a[0].num=1001;,strcpy(a[0].name,〞wang〞);,a[0].score=85;,整体引用:,a[1]=a[0]; 与普通数组元素的引用一样,,■构造体数组的应用,输入100个学生的学号、姓名和考试成绩,然后按从高分到低分的
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。