第9章C语言课件数组

合集下载

《C语言程序设计教程(第二版)》 第09章-指针(1)

《C语言程序设计教程(第二版)》 第09章-指针(1)

访问p_int所 指向的变量
getch();
}
程序运行结果: num_int=12, *p_int=12 num_f=3.14, *p_f=3.14 num_ch=p, *p_ch=p
2019/2/22
11
1、指针变量的定义
指针变量的定义标识符
数据类型 *指针变量[,*指针变量2……];
例如, [案例9.1]中的语句:
int num_int=12, *p_int ;
特别说明:定义而未初始化的指针变量(例如 p_int)是悬空的。
使用悬空指针变量,很容易破坏系统,导致系统 瘫痪。
2019/2/22
12
2、取地址运算 : &变量名 例 如 , [ 案 例 9.1] 中 的 &num_int 、 &num_f 、 &num_ch 的结果,分别为对应变量的地址 (num_int 、 num_f、num_ch)。 注意:指针变量只能存放相同数据类型变量的 地址。 例如, [案例9.1]中的指针变量p_int、p_f、p_ch, 只能接收int型、float型、char型变量的地址,否则出 错。
使p_int指向变量num_int
2019/2/22
10
printf(“num_int=%d, *p_int=%d\n”, num_int, *p_int); printf(“num_f=%4.2f, *p_f=%4.2f\n”, num_f, *p_f); printf(“num_ch=%c, *p_ch=%c\n”, num_ch, *p_ch);
9.3* 1维数组的指针与列指针变量 9.4 字符串的指针和指向字符串的指针变量 9.5 指针数组与主函数main()的参数 9.6 返回指针值的函数

北京大学计算概论(C语言)经典课件Lecture 9——循环语句复习及数组(上)页PPT文档

北京大学计算概论(C语言)经典课件Lecture 9——循环语句复习及数组(上)页PPT文档
18
数组元素的赋值
每个数组元素,就是一个变量。 每个数组元素占用的空间大小是由定义数组
变量时给定的类型决定的。例如:
cards每个元素占1字节(char类型的长度) distance每个元素占8字节(double 类型的长度)。
19
数组元素的赋值
在给数组元素赋值时,可以把数组元素看作 单个变量,例如:
给数组元素赋值,数据类型必须匹配。
20
数组元素的访问
数组元素可以用在任何单个变量可能出现的地 方。例如:
int max, min; max = score [0]; min = score[3];
17
数组元素
定义一个数组变量相当于定义一组变量,这组 变量中的每一个都可以通过“数组变量名[下 标]”形式来访问。例如:score[0], score[1], score[2] 等等。
这组变量在内存中是连续存放的,它们的下标 从0开始计数。
在数组中(设N是数组的元素总数)
第一个数组元素的下标是0 最后一个数组元素的下标是N-1
continue;
8
课堂练习
1.已知:int a=5;执行语句while(a>0)
{
a--;
}
a的值是(
)。
A. 5
B. 0 C. –1 D. -2
2.已知:int a=5;执行语句while(--a>0)
{
a--;
}
a的值是(
)。
A. 5
B. 0 C. –1 D. -2
3.已知:int a=5;执行语句while(a-->0)
表达式必须是数值表达式 一次循环
计算表达式的值 如果表达式值为真,执行循环体,为假退出

《计算机c语言》课件

《计算机c语言》课件
数据
关闭文件:使用fclose()函 数,关闭打开的文件
程序调试技巧和方法
单步调试:逐行执行代码, 观察变量值和程序状态
异常处理:使用try-catch 语句捕获和处理异常,避免
程序崩溃
代码审查:与他人共同审查 代码,发现潜在问题
断点调试:设置断点,逐 步执行代码,观察变量值
和程序状态
打印调试:在关键位置打 印变量值,观察程序状态
数组的定义:使用关键字 "int[]"、"char[]"等定义数

添加标题
数组的访问:通过数组下标 访问数组元素,下标从0开始
添加标题
数组的修改:可以通过数组 下标修改数组元素
数组的查找:可以使用查找 算法在数组中查找元素,如
二分查找、顺序查找等
字符串的处理和操作
字符串的定义:由字符组成 的序列,用双引号括起来
嵌套控制结构
概念:在一个控制 结构中嵌套另一个 控制结构
应用场景:循环嵌 套、条件嵌套等
语法:使用{}、() 等符号表示嵌套关 系
示例:for(int i=0;i<10;i++){if(i %2==0){...}}
函数和程序结构
函数的定义和调用
函数的定义:函数是完成特定任务的独立代码块,可以重复使用。 函数的调用:在程序中使用函数名和参数列表来调用函数。 函数的参数:函数可以接受参数,参数可以是变量、常量或表达式。 函数的返回值:函数可以返回一个值,返回值可以是任何类型的数据。
数据类型和运算 符
变量和常量
变量:在程序运行过程中可以改变的值
常量类型:整型、浮点型、字符型、布 尔型等
常量:在程序运行过程中不能改变的值

C语言完整 ppt课件

C语言完整 ppt课件
1.4.1 宏定义
用一个标识符来表示一个字符串,称为“宏”,标识符称为“宏名”。在 程序中 用宏名替代字符串称为“宏调用”。在编译预处理时,将对程序中所有出现的 “宏 名”,都用宏定义中的字符串代换,这个过程称为“宏展开”。
1.4.1.1 不带参数的宏定义
格式为:#define 标识符 字符串
1.4.1.2 带参数的宏定义
1-4
1.3 C程序上机步骤
C源程序编好后,要经过编辑、编译、连接, 生成可执行文件后,才可运行。
运行集成开发软件
编辑源程序
编译
有 有错? 无 连接
不正确
运行
结果正确? 正确
结束
1-5
1.4 编译预处理
编译预处理是指,在C编译程序对C源程序进行编译之前,由编译预处理程 序对源程序中的预处理命令进行处理的过程。
1.2.1 C语言程序举例
1.2.2 C语言程序的结构
1.2.2.1 函数是C语言程序的基本单位。
1.2.2.2 函数的一般结构
任何函数(包括main()函数)都是由函数首部和函数体两部分组成。
1. 函数首部: 函数首部即函数第一行,由函数类型、函数名和函数参数表三部分组成。
2. 函数体: 函数体为函数首部下面的花括号{……}内的部分。 函数体一般由声明部分和执行部分构成:声明部分定义所用到的变量,声明所调用的函数等; 执行部分有若干语句组成。
2.6.1 运算符及表达式简介 2.6.1.1 运算符
C语言中的运算符具有2个特点: ⑴ 运算符的优先级 C语言中,运算符的优先级共分为15级,1级最高,15级最低。 ⑵ 运算符的结合性 C语言中各运算符的结合性分为左结合性(从左到右)和右结合性(从右到左)。 2.6.1.2 表达式 表达式是由常量、变量、函数和运算符组成的式子。 表达式求值是按运算符的优先级和结合性规定的顺序进行的。

全国计算机二级c语言学习指南课件与历年真题精讲精析 第9章

全国计算机二级c语言学习指南课件与历年真题精讲精析 第9章

2、1个数组元素,实质上就是1个变量,它具有和相 同类型单个变量一样的属性,可以对它进行赋值和参 与各种运算。 3、一个数组不能整体引用,数组名中存放的是一个地 址常量,它代表整个数组的首地址。 例如:double x[8], *p, q; p=x; q=x;
不能将数组名赋给一个类型不同的普通变量
C语言规定,数组名代表数组的首地址,因此, 数组名实际上也是指针,但它是一个固定不变的 指针常量。
如:int a[5]; a是数组名,也是指针,它永远指向数组的首地址 ,即不能将新地址赋给该指针。但可以通过形如 a+k的形式(k是整数)来表达该数组其它元素的地 址。 如:for(k=0;k<5;k++) scanf(“%d”,a+k);
15 67 3 26 98
a[0]
a[1] a[2] a[3] a[4]
高地址
9.1.2 一维数组元素的引用 数组名[下标表达式] 如:double x[8]; 则x[0]、x[j]、x[i+k]均合法。 注意:i+k是下标表达式而不是两个下标。 说明:
1、“下标表达式”可以是任何非负整型数据,取值范
for(k=0;k<10;k++) printf(“%4d”, *(p+k));
for( k=0;k<10;k++) {printf(“%4d”,*p);p++;}
for( k=0;k<10;k++) printf(“%4d”,*p++);
for( ;p-a<10;p++) printf(“%4d”,*p);
围是0~(元素个数-1)。

C语言程序设计教程数组PPT课件

C语言程序设计教程数组PPT课件

{ if (max<a[i]) { max=a[i];j=i;}/*把当前最大值送max,下标送j*/
else if (min>a[i]){ min=a[i];k=i;}
}
printf("max:a[%d]=%d,min:a[%d]=%d",j,max,k,min);
}
第11页/共78页
212021/4/6
2021/4/6
4
第4页/共78页
6.1.2 数组元素的引用
定义了数组以后,就可使用它了。
但不能利用数组名来整体引用一个数组,只能单个的使用数组 元素
数组元素的描述 : 由 数组名加方括号中的下标 组成,即:
数组名[下标]

标:数组元素在数组中的顺序号,使用整序型表达
式。
a[5]=80;
取值范围:从0到元素个数-1。 C语言不a[对2.5下]=标60;越?界作语法
③ #define N 5
long data[N]; /* 定义一个有5个元素的长整型数组
data */
2021/4/6
3
第3页/共78页
例:试判断下列数组定义是否合法:
int student[35]; char name[20]; float score[35]; #define student 35 float n_student[student]; int score_student[student*3]; int person(10); int n=10, a[n];
若不对auto数组进行初始化,则其初值是不可知的。
若一个static或外部数组未进行初始化,则对数值型 数组元素,初值为0,而对字符型数组元素,初值为空字 符‘\0’.

C语言第九章 数组总结

C语言第九章 数组总结

基本概念:数组 :一组具有相同名字、不同下标、个数固定的同类型变量的集合数组元素 :数组中的一个变量数组的类型 :数组元素的类型(基本类型包括:整型(int )浮点型(float )双精度浮点型(double )字符型(char )无值型(void ))数组的维数 :确定数组中各元素之间相对位置的下标个数(1.下标必须是正数常数或整形表达式 2.下标的取值从0开始,最大下标值为数组元素个数减一 3.下标不要越界)例如:int a[6];int 是类型,a[6]是一维数组说明符 为a 开辟a[0] a[1]a[2]a[3]a[4]a[5] 六个连续的存储单元。

一维数组的初始化:1.数组不初始化,其元素值为随机值 2.所赋初值少于定义个数系统为后面元素自动补零 3.当全部数组元素赋初值时,可不指定数组长度例如:int a[5]={1,2,3,4,5} 等价于a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;应用:例如:定义一个数组,使a[0]到a[7]的值为0~7,然后输出。

#include <stdio.h>main(){int i,a[8]; /*一维数组的定义*/for(i=0;i<=7;i++)a[i]=i; /*一维数组的初始化*/for(i=0;i<=7;i++)printf("%d ",a[i]); /*一维数组的引用*/}例如:读十个正数存入数组,找到其中最大值和最小值。

思路:1.用for 循环出入10个正数 2.处理:(a)先令max=x[0] (b)依次用x[i]和max 比较(循环)若max<x[i],令max=x[i] 3.输出:max#include <stdio.h>#define SIZE 10main(){ int x[SIZE],i,max;printf("Enter 10 integers:\n");for(i=0;i<SIZE;i++) scanf("%d",&x[i]);max=x[0];for(i=1;i<SIZE;i++)if(max<x[i])max=x[i];}二维数组的定义方式:数据类型 数组名[常量表达式][常量表达式] (按行序先)例如:int a[3][4]用for 出入10个正数(有一个m*n 的二维数组a ,其中i 行j 列元素a[i][j]在数组中的位置计算公式是:i*n+j+1)可把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组例如:把 a[3][4] 看作是一个一维数组,有3个组元素:a[0]、a[1]、a[2],每个组元素中又包含 4 个元素的一维数组。

《C语言中的数组》课件

《C语言中的数组》课件

2
返回数组:
函数可以返回指向数组的指针,以便在其他地方使用。
3
数组作为参数:
您可以将数组作为参数传递给函数,使得函数能够处理数组的各种操作。
数组的常见问题和注意事项
虽然数组是强大且常用的数据结构,但在使用数组时也需要注意一些常见问题和注意事项。
1 数组越界
2 数组大小
注意数组索引的范围,避免越界访问数组 元素。
排序算法
通过数组实现的排序算法可以 帮助您对数据进行排序。
搜索算法
您可以使用数组实现各种不同 的搜索算法,如线性搜索、二 分搜索等。
动态规划
动态规划算法通常涉及到对数 组进行填表和计算。
总结和要点
通过这个PPT课件,您已经了解了C语言中数组的定义、基本用法、多维数组、函数应用、问题和注意 事项、与指针的关系,以及在算法中的应用。希望这些知识对您的学习和工作有所帮助。
《C语言中的数组》PPT 课件
通过本课件,您将深入了解C语言中的数组:从基本用法和多维数组,到数组 在函数中的应用和常见问题,再到数组与指针的关系和在算法中的实际应用。
数组的定义和基本用法
数组是一种数据结构,用于存储一组相同类型的数据。学习数组的定义和基本用法将帮助您更好地理解 如何使用数组来存储和处理数据。
确保定义数组时给出正确的数组大小,以 避免内存溢出。
3 组初始化
4 数组排序
在使用数组之前,确保对数组进行正确的 初始化。
了解并实践常用的数组排序算法,以便在 需要时进行数组排序。
数组与指针的关系
数组和指针在C语言中密不可分。了解数组与指针之间的关系将帮助您更好地理解C语言的内存管理和 数组操作。
数组名和指针
数组名可以看作是指向数组 首元素的指针。

C语言数组详解PPT课件

C语言数组详解PPT课件

int a[5] = {1,2,3,4,5};
#include <stdio.h>
void main()
{ a[4]
5
2020
inat [a3[]5]={0,1,2,3,4}; 4
2016
a pfproraaaiirnn[[[(ptt210irnff]]]it((n""t数数i=f(0组组";aai的[<在%数 的5首一d;内组起i]地+个=存+名始%址地)中d表地为址,占其示址:321常%字地数,d量节址组是\n数是",:%a%)d;d\\nn""222,,is000,iaz100[ei284]o,f&(aa[))i];);
#define FD 5
void main()
{
……
int a[3+2],b[7+FD]; int n;
……
scanf("%d",&n);/*表示维
}
数的只能是常量*/
int a[n];
编辑版
6
(一)一维数组(1)——定义及使用
3. 方括号中常量表达式表示数组元素 的个数。如int a[5]: 数组a有5个元 素,其下标从0开始,分别为 a[0],a[1],a[2],a[3],a[4]。 如果出现数
g[i]:第i个学生的成绩等等
编辑版
2
(一)一维数组(1)——定义及使用
类型说明符 int
任一种基 本数据类 型或构造 数据类型。
数组名[常量表达式] a[10]
用户自定义的数组 名字,其定名规则 与变量名定名规则 一样,都需遵循标
识符定名规则

C语言数组教程ppt课件

C语言数组教程ppt课件

a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
输入理想的程序,输出快乐的人生
二维数组元素的引用
• 二维数组元素的引用形式:
数组名[行下标] [列下标];
• 例如:
int a[3][4]; a[0][0]=3; a[0][1]=a[0][0]+10;
a[3][4]=5; /*下标越界*/
数据类型数组名数组大小一维数组可用一个循环动态赋值而二维数组可用二重嵌套循环动态赋值c把数组名解释为该数组第1个元素a0的首地址并且c编译器不检查所引用的数组元素下标是否越界地址传递1值传递方式实参与形参占用不同的内存单元includestdiohvoidswapinttemp
输入理想的程序,输出快乐的人生
for (i=0; i<3; i++) for( j=0; j<4; j++) printf(“%d”, a[i][ j] );
输入理想的程序,输出快乐的人生
二维数组的输入和输出
为一个3行4列的二维数组输入/输出数据
int main() { int a[3][4], i, j; for (i=0; i<3; i++) for (j=0; j<4; j++) scanf(“%d”,&a[i][j]); for (i=0; i<3; i++) { for (j=0; j<4; j++) printf(“%5d”, a[i][j]); printf(“\n”); } return 0;
输入理想的程序,输出快乐的人生
下标越界是大忌!
• int a[10]; scanf("%d",&a[10]); /*下标越界*/ – 编译程序不检查是否越界 – 下标越界,将访问数组以外的空间,可能带来严重后果

C语言第9讲 字符数组

C语言第9讲  字符数组

1 2 3
4 7 5 8 a[i][j]=i*1+j*3+1 6 9 #include <stdio.h> void main(void) { int a[3][3],i,j; for(i=0;i<3;i++) 生成如下矩阵?? for(j=0;j<3;j++) 1 5 9 13 a[i][j]=i+j*3+1; 5 9 13 17 for(i=0;i<3;i++) 9 13 17 21 { for(j=0;j<3;j++) printf(“%4d”,a[i][j]); printf(“\n”); } }
专题二、字符数组
例1 输入一个字符串,按逆序存放后输出。(见p109 例4.22) #include <stdio.h> #include<string.h> void main(void) { char s[80], ch; int i, len ; gets(s) ; len=strlen(s); for(i=0; i<len/2; i++) 交 { ch=s[i]; s[i]=s[len-i-1]; 换 s[len-i-1]=ch; 字 符 } printf("s=%s\n",s); }
合 肥 ★ 课堂作业: 输入一组整数给一个数组a[3][3],编程以矩阵形式输出该数 工 组,并求此矩阵的主对角线元素之和。 业 大 学
则输出的结果是 __________。
Xuan shanli
合 肥 工 业 大 学
⑵ 矩阵的转置运算
例1:将一个二维数组中的行和列元素互换,存放到另一个二 维数组中( p98~99 例4.7 )。

C语言数组的定义PPT课件

C语言数组的定义PPT课件
Page 3
1.为什么要引入数组
前面各章所使用的数据都属于 基本数据类型(整型、实型、字符型) C语言除了提供基本数据类型外,还提供了 构造类型的数据(数组类型、结构体类型、共 同体类型)。 构造数据类型是由基本数据类型的数据按照一 定的规则组成,所以也称为“导出类型”。
Page 4
1.为什么要引入数组
• 下列是不正确的 • Int a=5; • Int b[a];
Page 12
举例: int n;
scanf(“%d”,&n);
int a[n];
/*在程序中临时输入数 组的大小 */
数组说明中其他常见的错误
① float a[0]; /* 数组大小为0没有意义 */
② int b(2)(3); /* 不能使用圆括号 */ ③ int k, a[k]; /* 不能用变量说明数组大小*/
成员 a[0]
a1]
a[2]
a[3]
a[4]
地址 #2000 #2002 #2004 #2006 #2008
Page 15
2、一维数组
4)类型说明:指的是数据元素的类型,可以是 基本数据类型,也可以是构造数据类型。类型 说明确定了每个数据占用的内存字节数。
2 Int a[5]//表示向系统申请了( 5 )x 字节大小的内存空间,共
Page 7
1.为什么要引入数组
下面简单介绍一下数组概念: 1、数组:一组具有相同数据类型的数据的有序的 集合。 2、数组元素:构成数组的数据。数组中的每一个 数组元素具有相同的名称,不同的下标,可以作为 单个变量使用,所以也称为下标变量。 3、数组的下标:是数组元素的位置的一个索引或 指示。 4、数组的维数:数组元素下标的个数。根据数组 的维数可以将数组分为一维、二维、三维、多维数 组。

数据结构-C语言描述(第二版)(耿国华)章 (9)

数据结构-C语言描述(第二版)(耿国华)章 (9)

第9章 内部排序
我们知道, 在进行直接插入排序时, 若待排序记录序 列已经有序时, 直接插入排序的时间复杂度可以提高到 O(n)。 可以设想, 若待排序记录序列基本有序时, 即序 列中具有特性 r[i].key<Max{ r[j].key},(1≤j<i) 的记录较少时, 直接插入排序的效率会大大提高。 希尔排 序正是从这一点出r[0];
/*将待插入记录插入到已排序的序列
}
第9章 内部排序
【算法9.1 直接插入排序】 该算法的要点是:① 使用监视哨r[0]临时保存待插入 的记录; ② 从后往前查找应插入的位置;③ 查找与移动在同一 循环中完成。 直接插入排序算法分析: 从空间角度来看,它只需要一个辅助空间r[0]。从时间 耗费角度来看, 主要时间耗费在关键字比较和移动元素上。 对于一趟插入排序,算法中的while循环的次数主要取决 于待插记录与前i-1个记录的关键字的关系上。
· 向量结构:将待排序的记录存放在一组地址连续的存 储单元中。 由于在这种存储方式中,记录之间的次序关系由其存 储位置来决定,所以排序过程中一定要移动记录才行。
第9章 内部排序
· 链表结构:采用链表结构时,记录之间逻辑上的相 邻性是靠指针来维持的,这样在排序时,就不用移动记录元素, 而只需要修改指针。 这种排序方式被称为链表排序。
第9章 内部排序 第9章 内部排序
9.1 9.2 插入类排序 9.3 交换类排序法 9.4 选择类排序法 9.5 9.6 分配类排序 9.7 各种排序方法的综合比较
第9章 内部排序 9.1 排序的基本概念
1. 排序
有n个记录的序列{R1,R2,…,Rn},其相应关键字的序列 是{K1,K2,…,Kn},相应的下标序列为1,2,…,n。通过排序, 要求找出当前下标序列1,2,…, n的一种排列p1,p2, …,pn, 使得相应关键字满足如下的非递减(或非递增)关系,即: Kp1≤Kp2≤…≤Kpn , 这 样 就 得 到 一 个 按 关 键 字 有 序 的 记 录 序 列 {Rp1,Rp2,…,Rpn}。

C语言编程课件数组

C语言编程课件数组

四、二维数组的初始化(按行存放) 1、按存放顺序赋值 如:int x[2][3]={1,2,3,4,5,6}; 结果为:x[0][0]=1,x[0][1]=2,x[0][2]=3 x[1][0]=4,x[1][1]=5,x[1][2]=6 2、按行赋值 如:int x[2][3]={{1,2,3},{4,5,6}}; 结果同上。 3、部分赋值 如:static int x[2][3]={1,2,4}; 结果为:x[0][0]=1,x[0][1]=2,x[0][2]=4 x[1][0]=0,x[1][1]=0,x[1][2]=0 如:static int x[2][3]={{1,2},{4}}; 结果为:x[0][0]=1,x[0][1]=2,x[0][2]=0 x[1][0]=4,x[1][1]=0,x[1][2]=0
3、若对全部数组元素赋初值时,可以不指定数组长度。 如:int c[]={1,2,3,4,5}; 自动定义c数组长度为5 注意:若被定义数组长度与提供初值的个数不相同, 则数组长度不能省略。 如:int a[10]={1,2,3,4};
#include <stdio.h> void main() {int a[5]={1,2,3,4,5}; int b[5]={1,2,3}; int c[ ]={1,2,3,4,5}; static int d[5]; int e[5]; int i; for(i=0;i<5;i++)printf(“%d”,a[i]);printf(“\n”); for(i=0;i<5;i++)printf(“%d”,b[i]);printf(“\n”); for(i=0;i<5;i++)printf(“%d”,c[i]);printf(“\n”); for(i=0;i<5;i++)printf(“%d”,d[i]);printf(“\n”); for(i=0;i<5;i++)printf(“%d”,e[i]);printf(“\n”); }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

引例:
思考: 如果能使用 ai ( i=1,2,…..10 ) 的形式? 使用循环来写程序 C语言中表示下标变量就是通过定义数组 来实现
第9章 数组
数组是有序数据的集合。 数组中的每一个元素都属 于同一个数据类型。用一 个统一的数组名和下标来 唯一地确定数组中的元素。
什么是 数组呢?
9.1.1 一维数组的定义
F1 = 1 F2 =1 Fn = Fn- 1 + Fn- 2
( n = 1) ( n = 2) ( n ³ 3)
1 1 2 3 5 ……... f[19]
f[0] f[1] f[2] f[3] f[4] f[5]
f[19]
9.2一维数组和指针
9.2.1一维数组和数组元素的地址
一个数组的元素在内存中是连续存放的,数组第
数组d 的内存情况:
此时的 q+1 等价于 d+1, 也等价于 &d[1] q+i 等价于 d+i, 也等价于 &d[i]
9.2.2 通过数组的首地址引用数组元素
例如:int a[ ] ={ 1,2,3,4,5,6,7,8,9,10} ;
* (a+5)= 50;
/*相当于a[5 ]= 5O;* /
78.0 73.0 95.0 83.0 67.0 34.0 92.0 89.0 74.0 67.0
9.1.5一维数组的定义和数组元素引用举例
思考:用数组求Fibonacci数
列前20个数,每行5个,如 何编写程序?
用数组求Fibonacci数列前20个数
#include <stdio.h> main( ) 0 { int i; 1 int f[20]={1,1}; 2 for(i=2;i<20;i++) 3 4 f[i]=f[i-2]+f[i-1]; 5 for(i=0;i<20;i++) { if(i%5==0) printf("\n"); printf("%12d",f[i]); 19 } }
1. 定义:数据类型 数组名[常量表达式]; 例:int a[10]; float b[20],c[15]; 数据类型:是数组元素的数据类型。 数组名:遵循C语言标识符规则。 常量表达式:表示数组中有多少个元素,即数组 的长度。它可以是整型常量、整型常量表达式或 符号常量。
9.1.1 一维数组的定义
函数指针变量赋值:如p=max;
设有函数定义: 函数调用形式: c=max(a,b); int max(…) c=(*p)(a,b); {…….} 对函数指针变量pn, p++, p--无意义 int (*p) (… ); /*定义指向函数的指针变量*/
11.2通过实参向函数传递函数名或指向函数的指 针变量
9.1.1 一维数组的定义
2.在内存分配若干连续空间给数组.
int a[10];
分配内存
a[0] a[1] … a[9]源自9.1.2 数组元素的引用
引用格式: 数组名[下标表达式]
例如:输入学生成绩 for(i=0;i<5;i++) scanf("%f",&score[i]); 例如:fib[n]=fib[n-1]+fib[n-2]; 下标表达式的值必须是整型表达式。 数组同变量一样,必须先定义后引用
以下数组定义是正确的: #define N 10 float score1[N], score2[N]; int num[10+N]; 以下数组定义是不正确的: char c[26]; int array(10); int n; float score[n]; double b['a'.. 'd']; char str[ ];
指令1 指令2
数据类型 (*指针变量名)(函数参数表列)
如 int (*p)( int,int) 专门存放函数入口地址 ( )不能省 函数返回值的数据类型 或 int (*p)( ); 可指向返回值类型相同的不同函数 int (*p)( ) 与 int *p( )不同
…...
11.2通过实参向函数传递函数名或指向 函数的指针变量
引例:输入10个数,输出它们的平均值
及大于平均值的那些数?
如果使用:a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 int n; float s, ave;int a1, a2, a3,a4,a5,a6,a7,a8,a9, a10; scanf(“%d%d%d%d%d”,&a1,&a2,&a3,&a4,&a5); scanf(“%d %d%d%d%d”,&a6,&a7,&a8,&a9,&a10); s=a1+a2+a3+a4+a5+a6+a7+a8+a9+a10; ave=s/10; if (a1>ave) printf(“%d”,a1); if (a2>ave) printf(“%d”,a2); if (a3>ave) printf(“%d”,a3); ……….. ‘ 实际程序是不能这样写
91.5 34.5 67.5 72.0
84.0
score[0]
score[1]
score[2] score[3] score[4]
9.1.3一维数组的初始化
初始化:在定义数组时给数组元素赋初值。
1.在定义数组时,对全部数组元素赋初值 例如:int a[5]={0,1,2,3,4};
此时可以省略数组长度,例如:int a[ ]={0,1,2,3,4};
double (*f2)(double),
double x) { return (*f1)(x) / (*f2)(x); }
第9章数组
第9章 数组
9.1 一维数组的定义和一维数组元素的引用
9.2 一维数组和指针
9.3 函数之间对一维数组和数组元素的引用
9.4 一维数组应用举例
9.5 二维数组的定义和二维数组元素的引用 9.6 二维数组和指针 9.7 二维数组名和指针数组作为实参 9.8 二维数组程序举例
11.2通过实参向函数传递函数名或指向 函数的指针变量 指针和函数的关系主要有三个方面: 一是 指针可以作为函数的参数 二是 函数的返回值可以是指针 三是 指针可以指向函数
11.2通过实参向函数传递函数名或指向 函数的指针变量
函数指针:函数在编译时被分配的入口地址,用
函数名表示
max
1、指向函数指针变量的定义
5.5,6.6},* q= d;
假设数组a的首地址是2000,假设数组d的 首地址是3000.
9.2.1一维数组和数组元素的地址
上述两个数组分配的内存情况如图所示
应注意整型数组(short int)每下移一个元素 地址加2字节,双精度实型数组(double)每 下移一个元素地址加 8字节。
9.2.1一维数组和数组元素的地址
在C语言中, 若定义 int a[6]; 则: a[0]的地址是a (等价于 &a[0]); a[1]的地址是a+1(等价于&a[1] ); a[2]的地址是a+2(等价于&a[2] );
a[ i ]的地址是a+ i(等价于&a[i] );
9.2.1一维数组和数组元素的地址
例如,有下述程序段:
short int a[6]= {1,2,3,4,5,6},* p= a; double d[ 6 ]={ 1.l,2.2,3.3,4.4,
一个元素的地址称数组的首地址。在C语言中,数
组名是该数组的首地址。
例如有定义语句: int a[10] , * p; 则语句p= a;和p= &a[o];是等价的( 即a 等 价于&a[o] )
数组首地址的值是一个地址常量,是不
能改变的。因此,语句 a= p;或 a++;都是非法 的.
9.2.1一维数组和数组元素的地址
2.在定义数组时,对部分数组元素赋初值
例如:int a[5]={1,2,3};系统为其余元素赋 0 。
3.当初值的个数多于数组元素的个数时,编译出错 例如: int a[5]={0,1,2,3,4,5};
9.1.5一维数组的定义和数组元素引用举例
【例】将10个人的成绩输入计算机后按逆序显示。
#define N 10 main( ) { int i;float score[N]; for (i=0; i<N; i++) scanf("%f",&score[i]); for (i=N-1; i>=0; i--) printf("%6.1f",score[i]); 运行情况如下: } 比较P108例9.1和本例的区别? 67 74 89 92 34 67 83 95 73 78
A 0,5 C 0,6 B1,5 D1,6
{ int a[ ]={1,2,3,4,5,6},*p;
9.2.4用带下标的指针变量引用一维数组元素
地址 a a+1 a+2 a[0] a[1] a[2] a[3] a[9] ...
a[i] *(a+i)
元素 地址 元素 a[0] a[1] a[2] a[3] a[9] ... *p p[0] *(p+1) p[1] *(p+2) p[2] p a[0] *a a[1] *(a+1) p+1 a[2] *(a+2) p+2
2、函数名或指向函数的指针变量作为实参
例如: main( ) { int max(int ,int); int (*p) (int, int ); /*定义指针变量*/ int a,b,c; p=max; /*指针变量赋值*/ scanf("%d,%d",&a,&b); c=(*p)(a,b); /*调用函数*/ printf("a=%d,b=%d,max=%d",a,b,c); }
相关文档
最新文档