C语言数组教程ppt课件
合集下载
C语言数组PPT课件

}
第18页/共52页
例5-8 将一维数组中的n(n<=50)个数按逆序存放。
3 45 2 -6 -17 66 50
50 66 -17 -6 2 45 3
for(i=0;i<=(n-1)/2;i++) { t=a[i];
a[i]=a[n-1-i]; a[n-1-i]=t; 第19页/}共52页
#include "stdio.h" main( ) { int a[50],t,n,i;
等价
第6页/共52页
三、 随机函数random和rand
2. rand函数的用法: 格式: rand ( ) 说明: (1) 该函数包含在头文件"stdlib.h"中。 (2) 该函数产生0到整型最大值之间的一个随机整数。
产生[a,b]区间上任意整数的方法: rand( )%(b-a+1)+a
srand函数 (头文件time.h) srand(time(0))
for(j=2;j<10;j++) if(a[j]<a[1]) {t=a[1]; a[1]=a[j]; a[j]=t;} 执行9次
……
for(i=0;i<9;i++) for(j=i+1;j<10;j++) if(a[j]<a[i]){t=a[i]; a[i]=a[j]; a[j]=t;}
第13页/共52页
第4页/共52页
2. 一维数组的引用
只能逐个引用数组元素,而不能一次引用整个数组。 引用形式: 数组名[ 下标 ]
例5-1 数组元素的引开始。
{int i, b[10];
C语言教程——数组.ppt

main() {
char str[80]; int c,i,j; printf("Enter a string:\n"); scanf("%s",str); for(i=0,j=strlen(str)-1;i<j;i++,j--) {
c=str[i]; str[i]=str[j]; str[j]=c; } printf("\nReversed string:\n%s\n",str); }
• 注-- 意输用出"%字s"符输运运不出s行H行Hco包字oa时w时w括符nf输a输a串(r'r"入e\时入e%0s数y',数y%oo输s据u据u%?出?s::"项,是st字r1内符,数s存t组r中2名,变(st量不r3状加)&;态)如,下:
- 输用出sc时an遇f内输到存入'\多中0'个变结字束量符。串str时内,容以如空格下分:s隔tr1;: 输H入单o个w字符\0
数组属于构造类型。
Page 3
C语言程序设计
一维数组—定义和引用
• 一维数组的定义
类型说明符 数组名[ 常量表达式 ];
合法的标识符 可以是常量 和 符号常量,不能用变量。
例如: int a[10]; 说明: a 为整型数组名,它有10个元素:a0...a9
存储顺序:数组元素在内存中顺次存放,它们的地址是连续的。 例如:数组 a,在内存中的存放次序如下:
- 数据结构 • 定义两个数组,存放字符串。
- 算法要点 • 将小写字母 转换为大写字母:小写字母-'a'+'A'。
Page 28
char str[80]; int c,i,j; printf("Enter a string:\n"); scanf("%s",str); for(i=0,j=strlen(str)-1;i<j;i++,j--) {
c=str[i]; str[i]=str[j]; str[j]=c; } printf("\nReversed string:\n%s\n",str); }
• 注-- 意输用出"%字s"符输运运不出s行H行Hco包字oa时w时w括符nf输a输a串(r'r"入e\时入e%0s数y',数y%oo输s据u据u%?出?s::"项,是st字r1内符,数s存t组r中2名,变(st量不r3状加)&;态)如,下:
- 输用出sc时an遇f内输到存入'\多中0'个变结字束量符。串str时内,容以如空格下分:s隔tr1;: 输H入单o个w字符\0
数组属于构造类型。
Page 3
C语言程序设计
一维数组—定义和引用
• 一维数组的定义
类型说明符 数组名[ 常量表达式 ];
合法的标识符 可以是常量 和 符号常量,不能用变量。
例如: int a[10]; 说明: a 为整型数组名,它有10个元素:a0...a9
存储顺序:数组元素在内存中顺次存放,它们的地址是连续的。 例如:数组 a,在内存中的存放次序如下:
- 数据结构 • 定义两个数组,存放字符串。
- 算法要点 • 将小写字母 转换为大写字母:小写字母-'a'+'A'。
Page 28
C语言数组详解ppt课件

}
ppt课件完整
10
§ 1.4一维数组程序举例
程序举例1:用选择排序法进行排序。
int a[5] = {3,6,1,9,4};
选择排序法是编程中经常用的一种排序算 法。具体如下:
先将5个数中最小的数与a[0]对换,再将 a[1]到a[4]中最小的数与a[1]对换,这样每比 较一轮,找出一个未经排序的数中最小的一 个。共比较4轮。
表示元素 的个数, 即数组长
度。 4
(一)一维数组(1)——定义及使用
注意: 1.数组名不能与其它变量名相同
void main() {
int a; float a[10]; …… }
ppt课件完整
5
(一)一维数组(1)——定义及使用
2. 不能在方括号中用变量来表示元素的个 数,但可以是符号常数或常量表达式。
6与 a[3] 对换
ppt课件完整
12
main() { int i,j,k,t;
int a[5] = {3,6,1,9,4}; for( i = 0; i < sizeof(a)/sizeof(int) – 1; i++) { k = i;
for( j = i + 1; j < sizeof(a); j++ ){ if(a[j] < a[k] ) k = j;
g[i]:第i个学生的成绩等等
ppt课件完整
2
(一)一维数组(1)——定义及使用
类型说明符 int
任一种基 本数据类 型或构造 数据类型。
数组名[常量表达式] a[10]
用户自定义的数组 名字,其定名规则 与变量名定名规则 一样,都需遵循标
识符定名规则
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语言-数组PPT课件

12
34
56
78
9
a[0]
a[1]
a[2]
a[3]
a[4]
×
2020/5/27
6
一维数组的赋值
数组赋值和普通变量赋值一样 – 只能逐个对数组元素进行操作! – 不能整体赋值! – 切忌下标越界!
int a[4];
√
a[0]=1; a[1]=3;
a[2]=5; a[3]=7;
int a[4];
√
for (i=0; i<4; i++)
int f[YEAR_MONTH+1] = {0,1,1}; int month;
兔子问题 (数组版)
for (month=3; month<=YEAR_MONTH; month++) {
f[month] = f[month-1] + f[month-2]; }
for (month=1; month<=YEAR_MONTH; month++) {
反转并打印数组
for (i = 0; i < N/2; {
temp = a[i]; a[i] = a[N-1-i]; a[N-1-i] = temp; }
++i)
for (i = 0; i < N; ++i)
printf(“%3d ", a[i] ) ;
2020r/5e/2t7 urn 0;
16
求数组最小元素及其所在下标
2020/5/27
× //长度n不可以是变量
5
一维数组的初始化
√ int a[5] = {12, 34, 56, 78, 9};
C语言程序设计ppt数组

存储类型阐明符:extern、static 类型修饰符:const、volatile 数组名:是一种标识符,是一种地址常量,用以表
达数组中打头元素旳地址
2024/10/10
6
8.2.1 一维数组旳申明
例8.1 具有基本数据类型旳一维数组旳申明
#define SIZE 10 int array[5]; double d[5],e[SIZE]; char name[SIZE*5];
13. double even;
21. course_even[i]=course_su
/*分别为全部课程旳总分、平均分 m[i]/5.0;
*/
22. sum+=course_sum[i];
14. int i;
23.
} /* 计算各门课平总分 */
24. even=sum/(3.0*SIZE);
2024/10/10
2024/10/10
17
例8.10
8. int course_sum[3]={0,0,0}; 15. for(i=0;i<5;i++){
9. double course_even[3];
16. course_sum[0]+=math[i];
/组**分/ 别为各门课程总分、平均分数17. course_sum[1]+=physics[i];
用若干个数字序号(下标)来区别各数组元素
例如定义float score[30],可表述30位学生成绩 用数组具有什么好处?
2024/10/10
3
8.1 数组概述
问题
计算全班30位同学某门课程旳平均成绩
处理措施
设置30个float型变量来统计成绩 设置一种有30个float型元素旳数组来统计成绩
达数组中打头元素旳地址
2024/10/10
6
8.2.1 一维数组旳申明
例8.1 具有基本数据类型旳一维数组旳申明
#define SIZE 10 int array[5]; double d[5],e[SIZE]; char name[SIZE*5];
13. double even;
21. course_even[i]=course_su
/*分别为全部课程旳总分、平均分 m[i]/5.0;
*/
22. sum+=course_sum[i];
14. int i;
23.
} /* 计算各门课平总分 */
24. even=sum/(3.0*SIZE);
2024/10/10
2024/10/10
17
例8.10
8. int course_sum[3]={0,0,0}; 15. for(i=0;i<5;i++){
9. double course_even[3];
16. course_sum[0]+=math[i];
/组**分/ 别为各门课程总分、平均分数17. course_sum[1]+=physics[i];
用若干个数字序号(下标)来区别各数组元素
例如定义float score[30],可表述30位学生成绩 用数组具有什么好处?
2024/10/10
3
8.1 数组概述
问题
计算全班30位同学某门课程旳平均成绩
处理措施
设置30个float型变量来统计成绩 设置一种有30个float型元素旳数组来统计成绩
C语言数组PPT课件

一、一维数组的初始化
除了在定义数组变量时用初值列表为数组做整体赋值之外, C语言无法用C语句对数组变量做整体赋值。也就是说, 下面的做法是错误的:
int a[5]; a={1,2,3,4,5};//错误 a[]={1,2,3,4,5};//错误 首先,a是数组名,表示数组在内存中的地址,不能被赋 值,其次{1,2,3,4,5}不是合法表达式,=右边必须是 合法表达式,再次,a[ ]也不是合法的表达式。下面的做 法也是错误的:
5、C程序为数组a在内存中开辟8个连续的存储单元,如图可见 每个存储单元的名字,可以用这样名字来引用各存储单元。
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
一、一维数组的定义
例如:int a[20];定义了一个20个单元的int型数组。变量 名是a,数组的每个数据单元都是int型,表达式sizeof(a) 的值是20*2=40。
int a[10],k; for(k=0;k<10;k++) a[k]=k*2+1;
想输入数组中各单元的数据,必须利用循环语句调用 scanf等函数逐个输入各数组单元的数据,而不能做到所 谓的“整体输入”。下面的程序是错误的:
int a[3];scanf("%d%d%d",a);
scanf函数的第一个参数中有3个%d,因此,后面必须跟 着3个其他参数,不能只有一个a。上面的程序必须改成:
其中j 和i+k是下标表达式 其值>=0&&<8 注意: 1、一个数组元素实质上就是一个变量名,代表内存中的一
个存储单元。一个数组占有一串连续的存储单元。 2、在C语言中,一个数组不能整体引用,不能用x代表x[0]到
C 数组ppt课件

一维数组元素的使用
数组是由数组元素组成的。一个数组元素实际上就 是一个变量,那如何来使用这些变量呢? int a[10]; 使用格式: 数组名[下标] scanf(“%d”,a); int i; for(i=0;i<10;i++) 下标从0 开始。如int a[5]表示该数组有5个元素, scanf(“%d”,&a[i]); 分别为a[0],a[1],a[2],a[3],a[4] 。 for(i=9;i>=0;i--) printf(“%d”,a); 下标表示了元素在数组中的顺序号。只能为整型常 printf(“%d”,a[i]); 量或整型表达式。如为小数时,将自动取整。 数组元素通常也称为下标变量。必须先定义数组, 才能使用下标变量(先定义后使用)。只能逐个地使用 下标变量,而不能一次使用整个数组。
从键盘输入10个整数,求出这 10个数的最大值并输出。
例:求等差数列2 6 10 14 18的和。 main() main() { { int a[5],i,sum=0; int a[5],i,sum=0; a[0]=2; a[0]=2; a[1]=6; for(i=1;i<5;i++) a[2]=10; a[3]=14; a[i]=a[i-1]+4; a[4]=18; for(i=0;i<5;i++) for(i=0;i<5;i++) 对数组的赋值: sum=sum+a[i]; sum=sum+a[i]; (1)对元素逐个赋值。 printf(“sum=%d\n",sum); printf(“sum=%d\n",sum); (2)与循环语句结合。 } } 数组的输出: (1)逐个输出。 (2)与循环语句结合。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
输入理想的程序,输出快乐的人生
二维数组的初始化
按行赋初值: 例如: int a[2][3]={{1, 2, 3}, {4, 5, 6}};
123 456
int a[2][3]={{1}, {4, 5}}; 按数组元素存放顺序赋初值:
例如:
100 450
int a[2][3]={1, 2, 3, 4, 5, 6};
Rate 1.5 3.2 0.09 45.3987
0
1 下标
2
下标标明了元素在数
3
组中的位置 ,从0开始
输入理想的程序,输出快乐的人生
数组类型
输入理想的程序,输出快乐的人生
本章主要内容
输入理想的程序,输出快乐的人生
定义一维数组
数组和变量一样,必须先定义后使用; 数组大小定义好后,将不能改变;
datatype arrayName[size];
数据类型 数组名[行大小][列大小];
输入理想的程序,输出快乐的人生
二维数组的存储结构—思考该如何存?
二维数组元素在内存中的存放顺序: 先按行存放,再按列存放,即
➢ 先顺序存放第0行的元素 ➢ 再存放第1行的元素,…
int a[2][3];
a[0][0] a[0][1] a[0][2] a[0]
a[1] a[1][0] a[1][1] a[1][2]
类型说明符 int、char、float …
数组名 常量表达式: 数组大小
int num[50]; char list_of_initials[20]; double pressure_level[6];
#define LIMIT 20 ... int emp_codes[LIMIT];
数组大小最好用宏来定义,以适应未来可能的变化
应数组元素的下标
int a[10],i;
动态赋值方法:
输出方法:
输入第3个数组元素: scanf("%d",&a[2]);
输入整个数组元素:
for (i=0;i<10;i++) scanf("%d", &a[i] );
输出第1个数组元素: printf("%d", a[0]);
输出整个数组元素:
for (i=0;i<10;i++) printf("%d", a[i] );
int num[4][2];
4X2=8
错误的定义: int a[3,4], b(3,4); int c[ ][ ], d(3)(4);
为了便于理解,二维数组 一般理解为几行几列的矩阵
num[0][0] num[1][0] num[2][0] num[3][0]
num[0][1] num[1][1] num[2][1] num[3][1]
int a[3][4],i,j;
输入方法:
输入第i行第j列元素的值: scanf(“%d”, &a[i][ j]); 输入整个数组元素:
for (i=0; i<3; i++) for( j=0; j<4; j++) scanf(“%d”, &a[i][ j]);
输出方法:
输出第i行第j列元素的值: printf(“%d“, a[i][ j]); 输出整个数组元素:
【例2】用数组来求Fibonacci数列前20项
Fibonacci数列:
1,1,2,3,5,8, 13,21,34…
1
(n=1)
Fn = 1
(n=2)
Fn-2+Fn-1 (n≥3)
#include <stdio.h> #define N 20 int main() {
int i,f[N]={1,1}; for(i=2;i<N;i++)
为了方便的使用这些数据,C语言提供了一种构造数 据类型:数组。 一定要理解并用好数组!
输入理想的程序,输出快乐的人生
本章主要内容
输入理想的程序,输出快乐的人生
C 语言中的数组
• 数组是具有相同类型的数据的顺序集合 • 数组可以在内存中连续存储多个元素
Rate[0] Rate[1] 数组元素 Rate[2] Rate[3]
sum = sum + data[i] ; } printf( "Sum = %d\n", sum ); for( i=N-1; i>=0; i-- )
printf( " %d", data[i] ) ; printf("\n"); return 0; }
输入理想的程序,输出快乐的人生
一维数组示例
输入理想的程序,输出快乐的人生
定义一维数组
• C89:定义数组时不能使用变量定义数组的大小 ,即使在此之前变量已经赋值,只能使用整形 常量定义数组的大小
• C99:允许用变量定义数组的大小
int array(10); int n=5; float score[n]; int n; scanf("%d", &n); int data[n]; char str[ ]; float char[10];
•下列二维数组的定义都是错误的:
int a[][], b[3][], c[][2]; int arr[2][] = {{1,2,3}, {4,5,6}}; int b[2][3]={1, 2, 3, 4, 5, 6, 7, 8};
输入理想的程序,输出快乐的人生
二维数组值的输入和输出
一般二维数组的处理用二重循环来实现,用循环变量 的值控制数组元素的下标
一维数组的初始化
• 初始化:在定义数组时给数组元素赋初值
– 形式:数据类型 数组名称[数组长度]={数值列表}
• 在定义数组时,对全部数组元素赋初值:
– 例如:int a[5]={0,1,2,3,4};
• 此时也可省略数组长度
– 例如:int a[ ]={0,1,2,3,4}; //只写int a[];是错误的
int main()
不需要也不可能保留变量的历史值
{ int i;
float num, sum=0;
printf("input 10 numbers: \n");
for (i=1; i<=10; i++)
{ scanf("%f",&num);
sum +=num;
}
printf("average =%.2f \n", sum/10.);
输入理想的程序,输出快乐的人生
下标越界是大忌!
• int a[10]; scanf("%d",&a[10]); /*下标越界*/ – 编译程序不检查是否越界 – 下标越界,将访问数组以外的空间,可能带来严重后果
#include <stdio.h> int main() {
int a = 1, c = 2, b[5] = {0}, i; printf("%p, %p, %p\n", b, &c, &a); for (i=0; i<=8; i++)
return 0;
}
输入理想的程序,输出快乐人生
问题的提出
• 一个人n门课的成绩怎样存储和处理? • 一个班n门课的成绩怎样存储和处理? • 如何从键盘输入100个数然后按相反顺序输出? • 输入10个数,将高于平均值的数输出? • ......
这些数据的特点: 1.具有相同的数据类型 2.使用过程中需要保留原始数据
score
85
0
数组元素 数组名(首地址)
93 77 88 score[ 4 ]
1
下标
2
3
下标标明了元素在 数组中的位置 ,从0
开始
数组大小
输入理想的程序,输出快乐的人生
本章主要内容
输入理想的程序,输出快乐的人生
二维数组的定义—思考为何需要二维数组?
数据类型 数组名[常量表达式1] [常量表达式2];
b[0
0
]b[1
1
]
b[2
2
]b[3
3
]b[4
4
]
c
5
{
a
6
b[i] = i;
printf("%d ", b[i]);
i
79
}
b[8
8
]
printf("\nc=%d, a=%d, i=%d\n", c, a, i);
return 0;
}
输入理想的程序,输出快乐的人生
40
44
48
4c
50
54 运行程序或单 58 步执行观察变 5c 量变化情况可 60 以看到,变量 64 c和a的值因数 68 组越界而被悄 6c 悄破坏了
123
int a[2][3]={1, 2, 3};
000
省略行数(根据初值个数和列声明自动确定行数)
例如:
4行
int b[][3]={1, 2, 3, 4, 5, 6, 7, 8, 9,10};
int c[][3]={{1, 2}, {3}};
120 30 0
输入理想的程序,输出快乐的人生
二维数组的初始化
输入理想的程序,输出快乐的人生
一维数组在内存的存放
int score[5];
数组下标从0开始 数组元素在内存中按顺 序连续存放
数组名代表数组的首地 址,即score的值与 score[0]的地址值相同
二维数组的初始化
按行赋初值: 例如: int a[2][3]={{1, 2, 3}, {4, 5, 6}};
123 456
int a[2][3]={{1}, {4, 5}}; 按数组元素存放顺序赋初值:
例如:
100 450
int a[2][3]={1, 2, 3, 4, 5, 6};
Rate 1.5 3.2 0.09 45.3987
0
1 下标
2
下标标明了元素在数
3
组中的位置 ,从0开始
输入理想的程序,输出快乐的人生
数组类型
输入理想的程序,输出快乐的人生
本章主要内容
输入理想的程序,输出快乐的人生
定义一维数组
数组和变量一样,必须先定义后使用; 数组大小定义好后,将不能改变;
datatype arrayName[size];
数据类型 数组名[行大小][列大小];
输入理想的程序,输出快乐的人生
二维数组的存储结构—思考该如何存?
二维数组元素在内存中的存放顺序: 先按行存放,再按列存放,即
➢ 先顺序存放第0行的元素 ➢ 再存放第1行的元素,…
int a[2][3];
a[0][0] a[0][1] a[0][2] a[0]
a[1] a[1][0] a[1][1] a[1][2]
类型说明符 int、char、float …
数组名 常量表达式: 数组大小
int num[50]; char list_of_initials[20]; double pressure_level[6];
#define LIMIT 20 ... int emp_codes[LIMIT];
数组大小最好用宏来定义,以适应未来可能的变化
应数组元素的下标
int a[10],i;
动态赋值方法:
输出方法:
输入第3个数组元素: scanf("%d",&a[2]);
输入整个数组元素:
for (i=0;i<10;i++) scanf("%d", &a[i] );
输出第1个数组元素: printf("%d", a[0]);
输出整个数组元素:
for (i=0;i<10;i++) printf("%d", a[i] );
int num[4][2];
4X2=8
错误的定义: int a[3,4], b(3,4); int c[ ][ ], d(3)(4);
为了便于理解,二维数组 一般理解为几行几列的矩阵
num[0][0] num[1][0] num[2][0] num[3][0]
num[0][1] num[1][1] num[2][1] num[3][1]
int a[3][4],i,j;
输入方法:
输入第i行第j列元素的值: scanf(“%d”, &a[i][ j]); 输入整个数组元素:
for (i=0; i<3; i++) for( j=0; j<4; j++) scanf(“%d”, &a[i][ j]);
输出方法:
输出第i行第j列元素的值: printf(“%d“, a[i][ j]); 输出整个数组元素:
【例2】用数组来求Fibonacci数列前20项
Fibonacci数列:
1,1,2,3,5,8, 13,21,34…
1
(n=1)
Fn = 1
(n=2)
Fn-2+Fn-1 (n≥3)
#include <stdio.h> #define N 20 int main() {
int i,f[N]={1,1}; for(i=2;i<N;i++)
为了方便的使用这些数据,C语言提供了一种构造数 据类型:数组。 一定要理解并用好数组!
输入理想的程序,输出快乐的人生
本章主要内容
输入理想的程序,输出快乐的人生
C 语言中的数组
• 数组是具有相同类型的数据的顺序集合 • 数组可以在内存中连续存储多个元素
Rate[0] Rate[1] 数组元素 Rate[2] Rate[3]
sum = sum + data[i] ; } printf( "Sum = %d\n", sum ); for( i=N-1; i>=0; i-- )
printf( " %d", data[i] ) ; printf("\n"); return 0; }
输入理想的程序,输出快乐的人生
一维数组示例
输入理想的程序,输出快乐的人生
定义一维数组
• C89:定义数组时不能使用变量定义数组的大小 ,即使在此之前变量已经赋值,只能使用整形 常量定义数组的大小
• C99:允许用变量定义数组的大小
int array(10); int n=5; float score[n]; int n; scanf("%d", &n); int data[n]; char str[ ]; float char[10];
•下列二维数组的定义都是错误的:
int a[][], b[3][], c[][2]; int arr[2][] = {{1,2,3}, {4,5,6}}; int b[2][3]={1, 2, 3, 4, 5, 6, 7, 8};
输入理想的程序,输出快乐的人生
二维数组值的输入和输出
一般二维数组的处理用二重循环来实现,用循环变量 的值控制数组元素的下标
一维数组的初始化
• 初始化:在定义数组时给数组元素赋初值
– 形式:数据类型 数组名称[数组长度]={数值列表}
• 在定义数组时,对全部数组元素赋初值:
– 例如:int a[5]={0,1,2,3,4};
• 此时也可省略数组长度
– 例如:int a[ ]={0,1,2,3,4}; //只写int a[];是错误的
int main()
不需要也不可能保留变量的历史值
{ int i;
float num, sum=0;
printf("input 10 numbers: \n");
for (i=1; i<=10; i++)
{ scanf("%f",&num);
sum +=num;
}
printf("average =%.2f \n", sum/10.);
输入理想的程序,输出快乐的人生
下标越界是大忌!
• int a[10]; scanf("%d",&a[10]); /*下标越界*/ – 编译程序不检查是否越界 – 下标越界,将访问数组以外的空间,可能带来严重后果
#include <stdio.h> int main() {
int a = 1, c = 2, b[5] = {0}, i; printf("%p, %p, %p\n", b, &c, &a); for (i=0; i<=8; i++)
return 0;
}
输入理想的程序,输出快乐人生
问题的提出
• 一个人n门课的成绩怎样存储和处理? • 一个班n门课的成绩怎样存储和处理? • 如何从键盘输入100个数然后按相反顺序输出? • 输入10个数,将高于平均值的数输出? • ......
这些数据的特点: 1.具有相同的数据类型 2.使用过程中需要保留原始数据
score
85
0
数组元素 数组名(首地址)
93 77 88 score[ 4 ]
1
下标
2
3
下标标明了元素在 数组中的位置 ,从0
开始
数组大小
输入理想的程序,输出快乐的人生
本章主要内容
输入理想的程序,输出快乐的人生
二维数组的定义—思考为何需要二维数组?
数据类型 数组名[常量表达式1] [常量表达式2];
b[0
0
]b[1
1
]
b[2
2
]b[3
3
]b[4
4
]
c
5
{
a
6
b[i] = i;
printf("%d ", b[i]);
i
79
}
b[8
8
]
printf("\nc=%d, a=%d, i=%d\n", c, a, i);
return 0;
}
输入理想的程序,输出快乐的人生
40
44
48
4c
50
54 运行程序或单 58 步执行观察变 5c 量变化情况可 60 以看到,变量 64 c和a的值因数 68 组越界而被悄 6c 悄破坏了
123
int a[2][3]={1, 2, 3};
000
省略行数(根据初值个数和列声明自动确定行数)
例如:
4行
int b[][3]={1, 2, 3, 4, 5, 6, 7, 8, 9,10};
int c[][3]={{1, 2}, {3}};
120 30 0
输入理想的程序,输出快乐的人生
二维数组的初始化
输入理想的程序,输出快乐的人生
一维数组在内存的存放
int score[5];
数组下标从0开始 数组元素在内存中按顺 序连续存放
数组名代表数组的首地 址,即score的值与 score[0]的地址值相同