第四章数组和结构体

更新时间:2023-09-13 18:24:02 阅读量: 教学研究 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章 数组和结构体

本章目标掌握数组定义的规则。

掌握数组的初始化方法及数组元素的引用。 掌握有关数组的基本算法。 掌握字符串处理函数的应用。 掌握结构体定义和使用的规则

学会使用VC++6.0开发环境中的Debug调试功能:单步执行、设置断点、观察变量值。

授 课 内 容 4.1 数组4.2 字符型数组和字符串处

理库函数 4.3 结构体类型

4.4 数组和结构体4.5 构体嵌套 程序设计举例调试技术

4.1、数组 迄今为止,我们使用的都是属于基本类型(整

型、字符型、实型)的数据,c语言还提供了构造类型的数据,它们有:数组类型、结构体类型、共用体类型。构造类型数据是由基本类型数据按一定规则组成的,因此有的书称它们为“导出类型”。 问题的引出:

实际应用的程序设计中,只用几个变量的情况是极少的;更多的情况是处理大批量的相同类型或不同类型的数据。

相同类型数据举例:统计交大15,000学生英语4级统考成绩; 不同类型数据举例:管理交大15,000学生学籍信息记录,包括:姓名、学号、出生日期、班级、各科成绩等。 用什么样的数据结构来描述这类应用更简洁?一维数组

例如:intarray[10];1

常用于处理大批量数据; 数据特点:存在内在联系;

数组——具有相同数据类型的变量集合; 这些变量都有相同名字,但下标不同; 称这些变量为数组元素;

只有一个下标——一维数组; 有两个下标——二维数组。

一维数组定义 数组是具有一定顺序关系的若干变量的

集合体,组成数据的变量称为该数组的元素变量,简称元素。 一维数组的定义方式为: 例如: int a[10]; 它表示数组名为a,此数组有10个元素。 说明:

(1) 数组名定名规则和变量名相同,遵循标识符定名规则。

(2) 数组名后是用方括弧括起来的常量表达式,不能用圆括弧, 下面用法不对:int a(10);

(3)方括弧括中的下标表示元素在数组中的位置。C语言的下标从0, 必须是整型变量或常量。

(4) 编译系统处理数组说明语句时,为它在内存中分配一定的存储 空间,数组在内存中存储时,是按下标递增的顺序连续存储各 元素的值的。

一维数组的初始化(1) 在定义数组时对数组元素赋

以初值。例如:

int a[10]={0,1,2,3,4,5,6,7,8,9}; (2) 可以只给一部分元素赋值。例如: int a[10]={0,1,2,3,4};

定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。

(3) 如果想使一个数组中全部元素值为0,可以写成 int a[10]={0,0,0,0,0,0,0,0,0,0}; 不能写成 int a[10]={0*10};

这是与FORTRAN语言不同的,不能给数组整体赋初值。

(4) 在对全部数组元素赋初值时,可以不指定数组长度。例如: int a[5]={1,2,3,4,5};

可以写成 int a[]={1,2,3,4,5};

在第二种写法中,花括弧中有5个数,系统就会据此自动定义a数组的长度为5。 A[0]A[1]A[2]A[3]A[4]2

例:int A[5]; 在内存存储如图 数组的首地址是数组名A

数组的首地址也是第一个元素的地址&A[0]

C语言中,数组的整体不能参加数据处理,参加处理的只能是数组中的元素变量。所以要对数组进行初始化。 例如:int data[5]={,4,,8,};赋值如图

例4-1题目:给一维数组x输入10个整数,找出x数组中的最大

数和最小数。 算法分析:

1、假设数组中第1个元素最大,令xmax=a[0] 2、将a[i](0<= i < n)与max进行比较, 若a[i] < xmax ,i=i+1,再执行2 否则,令xmax=a[i],i=i+1,再执行2 3、循环结束,求出最大元素并输出max。

#include int main()

{ int array[7];

cout<<\ for(int i=0; i<7; i++) cin>>array[i]; int big = array[0];

for(int j=0; j<7; j=j+1) if(array[j]>big) big = array[j]; cout<<\ return 0; }

输入输出2 1 7 3 12 4 9max=12二维数组定义格式:

<类型> <数组名>[<常量表达式1>][<常量表达式2>];3

例如,三个学生四门课程成绩数据如下: 85 87 93 88 86 90 95 89 78 91 82 95

利用二维数组存放这些数据更能表现数据之间相互联系的特征。每一行数据表示该学生的各门课程的成绩,而每一列数据表示该门课程各学生的成绩。该数组定义为: int matrix[3][4];

二维数组存储结构逻辑结构:

二维数组恰似一张表格(或矩阵)。数组元素中的第一个下标值表示该元素在表格中的行号,第二个下标为列号。 M[3][3]具有如下逻辑结构:

M[0][0] M[0][1] M[0][2] M[1][0] M[1][1] M[1][2] M[2][0] M[2][1] M[2][2]

存贮结构: 二维数组在内存中按一维数组存放、占据一片连续的存贮单元;是“按行顺序”在内存中分配存贮单元。M数组在内存中排列如下: m00m01 m02 m10 m11 m12 m20 m21 m22

二维数组初始化 1.按照二维数组元素的物理存储次序给所有

或部分数组元素提供数据值

int score[3][4]={ 85,87,93,88,86,90,95,89,78,91,82,95}; //给数组stu_score每个元素都提供初值 float matrix[2][3]={ 1.0,3.0};

//仅为数组matrix的前2个元素提供初值 2.以行结构方式提供各数据值

int score[3][4]={ {85,87,93,88}, {86,90,95,89},

{78,91,82,95} }; 4.2 字符型数组

和字符串处理库函数字符串用双引号括起来,例

如,”abc”;

用字符型数组存放字符串,存放时,在有效字符后自动加’\\0’; 称’\\0’为空值,是字符串结束标志; 有效字符的个数称为字符串长度。

例如,”abc”的长度为3,但占4个字节 (’\\0’占一位) 。

字符型数组的定义和初始化char weekday [7]={ \

4

char weekday [7]= \字符串的输入与输出 char name[20]; cin>>name;

cin.get(name, n);

//第一个是字符数组变量,第二个指定向这个变量//中读入几个字符 cout<

4-2 字符串的输入与输出#include

int main() {

char name1[20], name2[20]; cout<<\input a name with blank(within 19 characters): \

cin.get(name1, 20);

cout<<\ cin>>name2;

cout<<\function get, the name storing in the variable is: \

cout<<\<<, the name storing in the variable is: \ return 0; }

字符串处理库函数需要添加#include stpcpy():

字符串拷贝;

strcat(): 字符串连接;

strchr(): 在字符串中查找字符; strcmp(): 字符串比较; strlen(): 求字符串长度;

strlwr(): 将字符串中的大写字母转换为小写字母; strrev(): 反转字符串;

strstr(): 在字符串中查找另一个字符串;

strupr(): 将字符串中的小写字母转换为大写字母; ? ?例

4-3

编写一个用来计算字符串长度的函数mystrlen(),并

用主函数验证 算法分析: 1)设一个计数器变量len=0

2)从数组s[len]第一个元素开始进行处理 3)若当前的元素值s[len]非空(‘\\0’),则len+1,继续执行3;否则,退出循环。

4)打印结果len#include //计算字符串的长度的函数 int mystrlen(char string[]) {

int len = 0;

5

本文来源:https://www.bwwdw.com/article/tphh.html

Top