- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
提问:用什么样的方法可以实现象 输入输出学生成绩那样,让一批同 类型的相关数据共用一个标识符, 而不必为每个数据选定一个名称?
引出数组概念。
东软信息学院计算机系 2020年2月19日星期三
分析与讲解
输入学生成绩到数组中(用函数实现) 输出学生成绩(用函数实现)
东软信息学院计算机系 2020年2月19日星期三
数组的概念
数组是一组变量,满足下列条件: (1)具有相同的名字 (2)具有相同的数据类型 (3)在存储器中连续存放
每个变量名字相同下标不同,称为“数组元素”
“数组名”代表整个数组,其值是这组变量在内存 中所占连续存储空间的首地址。
数组要先定义后使用。
数组名不能与相同作用域的其他变量名重名
东软信息学院计算机系 2020年2月19日星期三
例:a={1,3,5,7,9}; 错误,应单独为每个元素赋值 例:a=1; 错误,应单独为每个元素赋值 对数组的整体赋值只能在初始化时进行
东软信息学院计算机系 2020年2月19日星期三
一维数组的遍历
东软信息学院计算机系 2020年2月19日星期三
从键盘输入5个整数,保存到数组a中; 再逆序输出。
if(a[]>a[max_id]) max_id=i;
printf(“最大数是%d\n",a[max_id]);
}
东软信息学院计算机系 2020年2月19日星期三
课堂练习
1、完成学生成绩输入的功能。
在主菜单中增加“输入成绩”一项; 在程序中增加ssmsV1.0_04模块的函数,函数原型为:int
对应的中文意义 数组 引用 元素 地址 应用 下标
东软信息学院计算机系 2020年2月19日星期三
回顾与提问
1. 回顾上次课主要内容 2. 检查学生课后实训与作业完成
情况(包括小组评价) 3. 讲解ssmsv1.0案例主要功能
东软信息学院计算机系 2020年2月19日星期三
演示程序
演示学生成绩管理案例中 输入、 输出成绩函数。
printf(“%d\n”,a[3]);
printf(“%d\n”,a[2]);
printf(“%d\n”,a[1]);
printf(“%d\n”,a[0]);
} 东软信息学院计算机系 2020年2月19日星期三
从键盘输入5个整数,保存到数组a中; 再逆序输出。
main()
{
int a[5];
scanf(“%d”,&a[0]);
if(a[i]>max) max=a[i];
printf(“最大数是%d\n", max);
}
解法2:记下最大数相应的下标 main() {
int i, max_id,a[10]; printf("enter data:\n"); for(i=0;i<10;i++) scanf("%d", &a[i]); max_id=0; //假定下标为0的元素最大 for(i=1;i<10;i++)
scanf(“%d”,&a[1]);
scanf(“%d”,&a[2]);
scanf(“%d”,&a[3]);
scanf(“%d”,&a[4]);
printf(“%d\n”,a[4]);
printf(“%d\n”,a[3]);
printf(“%d\n”,a[2]);
printf(“%d\n”,a[1]);
main()
{
int a0,a1,a2,a3,a4;
scanf(“%d”,&a0);
scanf(“%d”,&a1);
scanf(“%d”,&a2);
scanf(“%d”,&a3);
scanf(“%d”,&a4);
printf(“%d\n”,a4);
printf(“%d\n”,a3);
printf(“%d\n”,a2);
printf(“%d\n”,a1);
printf(“%d\n”,a0);
}
main()
{
int a[5];
scanf(“%d”,&a[0]);
scanf(“%d”,&a[1]);
scanf(“%d”,&a[2]);
scanf(“%d”,&a[3]);
scanf(“%d”,&a[4]);
printf(“%d\n”,a[4]);
一维数组的初始化和赋值
东软信息学院计算机系 2020年2月19日星期三
一维数组的初始化
定义数组之后,与普通变量一样,数组是沒有 初始值的,各存储单元的值都是不定的
初始化:定义数组的同时赋初值
语法:
数据类型说明符 数组名[长度]={数值1,数值2,…}; 如 : int data[5]={1,2,3,4,5};
东软信息学院计算机系 2020年2月19日星期三
一维数组的初始化
初始化注意事项:
(1) 允许初始化一部分元素,其他没有赋初值的元素初值为0; int a[5]={1,2}; 相当于 int a[5]={1,2,0,0,0};
(2)允许初始化时省略数组的长度,数组的长度为赋初值的个数; int a[]={1,2,3,4,5}; 相当于 int a[5]={1,2,3,4,5};
译系统对下标的越界不做检查)
东软信息学院计算机系 2020年2月19日星期三
例题:从键盘输入10个整数存放在数组中,找出其
中最大的一个数,输出该最大数。
解法1:记下最大数其值 main() {
int i, max,a[10]; printf("enter data:\n"); for(i=0;i<10;i++) scanf("%d", &a[i]); max=a[0]; //假定a[0]的元素最大 for(i=1;i<10;i++)
数组下标从0开始 数组名代表数组首地址,是一个常量 C语言不允许动态定义数组,即定义数组时数
组长度表达式不能含有变量 数组元素与普通变量具有相同属性,可以进行
算术运算和比较大小等操作
东软信息学院计算机系 2020年2月19日星期三
作业
1、从键盘输入10个整数保存到数组中,求和、平均 值并输出。
2、从键盘输入10个整数保存到数组中,求值最小的 元素,将这个值最小的元素与数组的第一个元素交换。 最后输出整个数组。
3、从键盘输入10个浮点数保存到数组中,将这10个 数逆序存放后输出。
注意用watch调试工具跟踪下标变 量的值的变化情况。
东软信息学院计算机系 2020年2月19日星期三
进行调用,调试程序。
东软信息学院计算机系 2020年2月19日星期三
课堂练习
3、新建一个项目,建立一个能存放N(N是一 个常量)个数据的数组,数组元素值为此数组元 素下标的10倍,然后按正序和逆序输出
定义输入函数:int input(int a[], int len); 定义正序输出函数:int outz(int a[], int len); 定义逆序输出函数:int outn(int a[], int len); 编写main函数调用上述函数,实现输入和输出
更进一步
3) 想一想(或讨论),对数组元素初始化时
有什么要求,对数组元素赋值采用初始化和从 键盘输入两种方式各有什么利弊?对数组元素 的下标有什么要求?
东软信息学院计算机系 2020年2月19日星期三
更进一步
4) 总结与评价
东软信息学院计算机系 2020年2月19日星期三
本次课小结
数组的定义、初始化、引用、输入、输出概念、 操作必须掌握
a[0], a[1],a[2], a[3], a[4] int a[N]; 下标的取值范围:0~N-1 ,其中N为数组的大小 下标是整型值,可以是整型常量、整型变量或整型表达式
如:a[i] a[3+1] a[2*i-1] 注意:下标不能越界,否则可能覆盖其他数据,造成严重后果
东软信息学院计算机系 2020年2月19日星期三
ssmsV1.0__输入输出功能
程序演示 程序分析
数组的概念 一维数组的定义和引用 一维数组的初始化和赋值 数组元素的遍历
课堂练习 课程小结
东软信息学院计算机系 2020年2月19日星期三
专业英语词汇
英文词汇 array reference element adress application Subscript
(3)不能对整个数组初始化; int data[5]=1; 错误,应为: int data[5]={1,1,1,1,1};
东软信息学院计算机系 2020年2月19日星期三
一维数组的赋值
数组的赋值只能对数组元素单独操作, 不能对数组整体操作。
赋值的两种方式:int a[5]; 1. 赋值运算符 如:a[3]=8; 2. 输入函数 如:scanf(“%d”,&a[3]);
inputScore(int score[],int length) 在程序开头处声明该函数,并在main函数的switch语句中
进行调用,调试程序。
2、完成学生成绩输出的功能。
在主菜单中增加“输出成绩”一项; 在程序中增加ssmsV1.0_05模块的函数,函数原型为:int
outputScore(int score[],int length) 在程序开头处声明该函数,并在main函数的switch语句中
printf(“%d\n”,a[0]);