C语言程序设计课程课件之第四章简单构造数据类型
第四章 简单构造数据类型 目录 4.1 一维数组 4.2 二维数组 4.3 字符数组 4.4 数组与指针 4.5 数组及指针作为函数参数 4.1 一维数组 数组元素的下标从0开始。例如:int a[5]; 其元素的表示为a[0]、 a[1]、 a[2]、 a[3]、 a[4]。 如果用a[5]则是错误的。 3、补充说明: ①、数组名由用户定义,命名规则和变量名相同。 ②、元素个数为常量表达式而不能是变量表达式。 如下错误:int n; scanf(“%d”,&n); int a[n]; ③、每一个元素相当于一个变量。 二、数组的编程使用特色 注意:对下标的引用不要超过下标的最大值。尽管超过最大值时不出现编译错误,但数组越界,取的是下一个单元的值,这个单元有可能存放的是其它的变量值,运算结果错误,甚至出现严重错误。 学生练习 定义一个长度为5的一维整型数组,将一个5位数的各个位存入该一维数组中,然后将各个位数逆序输出。 例:一个5位数为12345,将其各个位数求出来,并依次存入数组各元素中后,将各元素逆序输出,结果应该为54321。要求该数应由用户从键盘上输入。 三、一维数组初始化: 在程序运行之前,使数组各下标变量有一个初值。 1、在数组定义的同时对数组元素初始化。 int a[5]={1,2,3,4,5}; 2、可以仅对一部分下标元素赋初值。 如:static int a[5]={1,2,3}; 如果不对某些下标元素赋初值,则对于数值型元素初值均为0,对于字符型元素均为空操作符’\0’. 3、如果想对所有的元素全部赋初值,可以省略定义元素个数。如:static int aa[ ]={1,2,3,4,5}; 4.2 二维数组 4.3 字符数组与字符串 gets( )与scanf(%s)的区别: gets( )输入的字符串可含空格,而%s格式符输入的字符串不能包含空格,遇到空格、回车都认为是数据输入结束。 实际用gets( )的多。 4.4 数组与函数 4.4.2 用数组名作函数参数 用数组名作函数参数的本质 4.4 数组与指针 一个变量有地址,一个数组包含若干个元素,每个数组元素都在内存中占存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组元素。 所谓数组元素的指针就是数组元素的地址。 指向数组元素的指针变量的定义: 定义一个指向数组元素的指针变量的方法,与前面指向变量的指针变量相同,观察指针变量的赋值特征。 通过指针引用数组元素 用多种方法访问一维数组各元素 掌握这一部分在宗旨是:分清哪些表达是地址,当前地址是哪个元素的地址;哪些表达是元素,用地址引用元素最主要的特征是前面有“*”。 字符串与指针 用指针访问字符数组 用指针访问字符串常量 字符串指针作函数参数 对使用字符指针和字符数组的讨论 4.6.4 字符指针作为函数参数 函数设计的首部信息如下: 请写出main主函数调用该函数的程序 牢记黄色的方法 例如:int a[10],*p; p=a; ? p=&a[0]; 引用数组元素可以用下标法([]),也可以用指针法,即可以通过指向数组元素的指针找到所需的元素。使用指针法能使目标程序质量高(占内存少、运行速度快) #include main( ){ int a[5], i ; for (i=0;i<5;i++) scanf(“%d”,&a[i]); for (i=0;i<5;i++) printf(“%d”,&a[i]);} #include main( ){ int a[5] , *p; for (p=a;p