C语言程序设计:第11章 复习C语言的数组与结构体
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
output函数的函数头中的二维数组可以有以下两种 形式: 1>output(int a[][N]) //列数不能省略 2>output(int a[M][N])
注意: 数组名传递给函数的是一个地址值,在函数中
引用的将是实参的数组元素,编译器只为形参开辟一 个存放地址的存储单元。
13ቤተ መጻሕፍቲ ባይዱ
二维数组的练习
思维一转天地宽
24
课后作业与预习
课后作业: 完成对应的实训报告2 预习: 预习第三次课--递归调用、作用域与存储类别 的知识
25
THANKS
26
int i = 0,j = 0;
for(i=0;i<M;i++)//行下标遍历
{
for( j=0;j<N;j++)//列下标遍历
{
printf("%d\t",arr[i][ j]);
}
printf("\n");
}
return 0;
}
11
复习二维数组(作为函数参数)
课堂练习:1.定义一个输出二维数组所有元素的函数。
4
复习一维数组(一维数组的遍历)
课堂练习:编写程序从键盘上接收10个整数存到一个一维数组中,之后
在屏幕上逐个输出这10个数。
#include <stdio.h>
#define ARR_SIZE 10
int main(void)
{
int a[ARR_SIZE] = {0}; int i = 0;
for(i = 0; i < ARR_SIZE ; i++)
int main(void) { //定义别名后,原先的结构体名称也可以用
struct student Jim; STU Tom;//相当于struct student Tom; Tom.age = 18; Jim.age = 20; return 0; }
20
复习结构体(结构体数组的定义)
1.先声明,后定义
课堂练习:1.定义结构体,包含学生的信息(序号、C语言成绩、PS成绩、
平均分),定义结构体变量,在赋值后,输出学生的信息。
//student为结构体名 struct student {
int num; int c_score; int ps_score; float avg; };//定义结构体
int main(void) {
18
复习结构体(typedef的使用)
注意:它不是用来创造类型,而是给已有的类型取
一个别名。
如何知道哪个是类型?
int a;
int a[10];
struct student stu;
规则:将名字去掉,剩下的就是类型
int
int [10]
struct student
语法: typedef 已有的类型 别名;
#define M 3 #define N 4 void output(int a[][N], int r, int c); int main(void) {
int b[M][N] = { { 1, 4, 7, 9 }, { 2, 5, 8, 10 }, { 3, 6, 9, 12 } }; output(b,M,N); return 0; }
语法:
struct 结构体名 数组名[数组长度];
//class3为结构体数组 struct student class3[5]; return 0;
}
21
复习结构体(结构体数组的使用)
课堂练习:1.有n个学生的信息(包括序号、成绩),找出成绩的最高的
学生,并输出该学生的信息。
#define N 5 typedef struct student {
struct student Tom;//Tom为结构体变量 Tom.num = 10; Tom.c_score = 90; Tom.ps_score = 95; Tom.avg = 92.5; printf("序号:%d\n",Tom.num); printf("C语言成绩:%d\n",Tom.c_score); printf("PS成绩:%d\n",Tom.ps_score); printf("平均分:%f\n",Tom.avg); return 0; }
《C语言程序设计》 第十一章
复习C语言的数组与结构体
1
课程回顾
❖循环语句的执行过程与使用 ❖函数的定义 ❖函数的调用
2
本次课议题
❖复习一维数组 ❖复习二维数组 ❖复习结构体
3
复习一维数组(一维数组的定义)
语法: 类型名 数组名1[EXP],数组名2[EXP],...;
int c_score[1000];//相当于定义了1000个int型变量 int mysql_score[1000], ps_score[1000];
一块内存空间,形参数组的长度可以省略,编译器不会检查。
2>实际参数写数组名称。
#define ARR_SIZE 10
void foo(int a[ ], int len)
{
a[1] = 10;
a[2] = 20;//形参数组改变,实参数组值也会一起改变
}
int main(void)
{ int arr[ARR_SIZE] = {0};
void output(int a[][N],int r,int c) {
int i = 0,j = 0; for(i=0;i<row;i++) {
for( j=0;j<column;j++) {
printf("%d ",a[i][ j]); } printf("\n"); } }
12
复习二维数组(作为函数参数cont...)
例如:
//student为结构体名
struct student
{
int num;
int c_score;
int ps_score;
float avg;
};//定义结构体
int main(void)
{
//Tom为结构体变量
struct student Tom;
return 0;
}
17
复习结构体(结构体变量的定义cont...)
例如: //student为结构体名
struct student
struct 结构体名 {
数据类型 成员变量名; 数据类型 成员变量名; 数据类型 成员变量名;
...; };
{ int num; int c_score; int ps_score; float avg;
};//定义结构体 int main(void) {
foo(arr,ARR_SIZE);
printf("%d,%d\n", arr[1], arr[2]);
return 0;
}
6
一维数组的练习
课堂练习:
1.编写函数实现求长度为6的数组中奇数的和,其中数组作为 函数的参数。 2.编写函数实现求长度为6的数组中偶数下标的元素的平均值 ,其中数组作为函数的参数。
22
结构体的练习
课堂练习:
1.定义结构体(使用typedef),包含学生的信息(序 号、3门课的成绩、平均分),从键盘输入学生的信息, 计算平均分,并输出这个学生的信息。 2.有n个警察的信息(包括警号、年龄、工龄),找出 工龄的最大的警察,并输出该警察的信息。
23
总结
❖一维数组的遍历和求最值是常用的知识。 ❖二维数组的遍历都是有套路的。 ❖结构体要掌握好,后期学习面向对象很重要。
2
5
8
11
2
3
6
9
12
10
复习二维数组(二维数组的遍cont...)
课堂练习:1.输出arr[3][4]所有的数组元素的值(按行输出)。
#define M 3
#define N 4
int main(void)
{
int arr[M][N] = {{1,4,7,10},{2,5,8,11},{3,6,9,12}};
if(class3[i].score > class3[max].score)
max = i;
}
printf("成绩最高的学生:\n");
printf("序号:%d\n",class3[max].num);
printf("成绩:%d\n",class3[max].score);
return 0; }
a[0][1] a[1][1]
第2列
a[0][2] a[1][2]
9
复习二维数组(二维数组的遍历)
沿着某条搜索路线,依次对二维数组中的每个元素 做一次访问。
int arr[3][4] = {{1,4,7,10},{2,5,8,11}, {3,6,9,12}};
按行遍历:
行\列
0
1
2
3
0
1
4
7
10
1
课堂练习:
1.定义函数实现:对3*4的二维数组求其最大值 2.定义函数实现:对3*4的二维数组求其平均值
14
本次课议题
❖复习一维数组 ❖复习二维数组 ❖复习结构体
15
复习结构体(结构体的定义)
定义语法: struct 结构体名 {
成员列表 };
说明:
struct student {
int num; int age; float score; double avg; };
int num; int score; }STU;//STU是结构体别名
int main(void)
{
STU class3[N] = {{10,90},{14,70},{8,95}};
int i = 0;
//存放最高分所在的结构体数组元素下标
int max = 0;
for(i=1;i<N;i++)
{
7
本次课议题
❖复习一维数组 ❖复习二维数组 ❖复习结构体
8
复习二维数组(二维数组的定义)
语法: 类型名 数组名1[EXP1][EXP2],...;
int a[2][3];//相当于定义了2个长度为3的一维数组
一维数组a[0] 第0行 一维数组a[1] 第1行
第0列
a[0][0] a[1][0]
第1列
{
printf("请输入第%d 个数:", i+1);
scanf(“%d”, &a[i]);
}
for(i = 0; i < ARR_SIZE ; i++)
{
printf("第%d 个数是:%d\n", i + 1, a[i]);
}
return 0; }
5
复习一维数组(作为函数参数)
1>数组作为函数参数可以理解为形参数组和实参数组共享
1>定义了一个结构体类型,结构体的关键字---struct,结
构体名为student。 2>这个结构体包含了多个不同的基本数据类型。
16
复习结构体(结构体变量的定义)
1.先声明,后定义
struct 结构体名 {
数据类型 成员变量名; 数据类型 成员变量名; 数据类型 成员变量名;
...; };
语法:struct 结构体名 变量名;
注意:别名后面的分号;不能省略
例如: typedef int TYPE;
//TYPE与int 等价,如TYPE a;相当于int a;
19
复习结构体(typedef的使用cont...)
typedef struct student {
int num; int age; }STU;//STU是struct student的别名
注意: 数组名传递给函数的是一个地址值,在函数中
引用的将是实参的数组元素,编译器只为形参开辟一 个存放地址的存储单元。
13ቤተ መጻሕፍቲ ባይዱ
二维数组的练习
思维一转天地宽
24
课后作业与预习
课后作业: 完成对应的实训报告2 预习: 预习第三次课--递归调用、作用域与存储类别 的知识
25
THANKS
26
int i = 0,j = 0;
for(i=0;i<M;i++)//行下标遍历
{
for( j=0;j<N;j++)//列下标遍历
{
printf("%d\t",arr[i][ j]);
}
printf("\n");
}
return 0;
}
11
复习二维数组(作为函数参数)
课堂练习:1.定义一个输出二维数组所有元素的函数。
4
复习一维数组(一维数组的遍历)
课堂练习:编写程序从键盘上接收10个整数存到一个一维数组中,之后
在屏幕上逐个输出这10个数。
#include <stdio.h>
#define ARR_SIZE 10
int main(void)
{
int a[ARR_SIZE] = {0}; int i = 0;
for(i = 0; i < ARR_SIZE ; i++)
int main(void) { //定义别名后,原先的结构体名称也可以用
struct student Jim; STU Tom;//相当于struct student Tom; Tom.age = 18; Jim.age = 20; return 0; }
20
复习结构体(结构体数组的定义)
1.先声明,后定义
课堂练习:1.定义结构体,包含学生的信息(序号、C语言成绩、PS成绩、
平均分),定义结构体变量,在赋值后,输出学生的信息。
//student为结构体名 struct student {
int num; int c_score; int ps_score; float avg; };//定义结构体
int main(void) {
18
复习结构体(typedef的使用)
注意:它不是用来创造类型,而是给已有的类型取
一个别名。
如何知道哪个是类型?
int a;
int a[10];
struct student stu;
规则:将名字去掉,剩下的就是类型
int
int [10]
struct student
语法: typedef 已有的类型 别名;
#define M 3 #define N 4 void output(int a[][N], int r, int c); int main(void) {
int b[M][N] = { { 1, 4, 7, 9 }, { 2, 5, 8, 10 }, { 3, 6, 9, 12 } }; output(b,M,N); return 0; }
语法:
struct 结构体名 数组名[数组长度];
//class3为结构体数组 struct student class3[5]; return 0;
}
21
复习结构体(结构体数组的使用)
课堂练习:1.有n个学生的信息(包括序号、成绩),找出成绩的最高的
学生,并输出该学生的信息。
#define N 5 typedef struct student {
struct student Tom;//Tom为结构体变量 Tom.num = 10; Tom.c_score = 90; Tom.ps_score = 95; Tom.avg = 92.5; printf("序号:%d\n",Tom.num); printf("C语言成绩:%d\n",Tom.c_score); printf("PS成绩:%d\n",Tom.ps_score); printf("平均分:%f\n",Tom.avg); return 0; }
《C语言程序设计》 第十一章
复习C语言的数组与结构体
1
课程回顾
❖循环语句的执行过程与使用 ❖函数的定义 ❖函数的调用
2
本次课议题
❖复习一维数组 ❖复习二维数组 ❖复习结构体
3
复习一维数组(一维数组的定义)
语法: 类型名 数组名1[EXP],数组名2[EXP],...;
int c_score[1000];//相当于定义了1000个int型变量 int mysql_score[1000], ps_score[1000];
一块内存空间,形参数组的长度可以省略,编译器不会检查。
2>实际参数写数组名称。
#define ARR_SIZE 10
void foo(int a[ ], int len)
{
a[1] = 10;
a[2] = 20;//形参数组改变,实参数组值也会一起改变
}
int main(void)
{ int arr[ARR_SIZE] = {0};
void output(int a[][N],int r,int c) {
int i = 0,j = 0; for(i=0;i<row;i++) {
for( j=0;j<column;j++) {
printf("%d ",a[i][ j]); } printf("\n"); } }
12
复习二维数组(作为函数参数cont...)
例如:
//student为结构体名
struct student
{
int num;
int c_score;
int ps_score;
float avg;
};//定义结构体
int main(void)
{
//Tom为结构体变量
struct student Tom;
return 0;
}
17
复习结构体(结构体变量的定义cont...)
例如: //student为结构体名
struct student
struct 结构体名 {
数据类型 成员变量名; 数据类型 成员变量名; 数据类型 成员变量名;
...; };
{ int num; int c_score; int ps_score; float avg;
};//定义结构体 int main(void) {
foo(arr,ARR_SIZE);
printf("%d,%d\n", arr[1], arr[2]);
return 0;
}
6
一维数组的练习
课堂练习:
1.编写函数实现求长度为6的数组中奇数的和,其中数组作为 函数的参数。 2.编写函数实现求长度为6的数组中偶数下标的元素的平均值 ,其中数组作为函数的参数。
22
结构体的练习
课堂练习:
1.定义结构体(使用typedef),包含学生的信息(序 号、3门课的成绩、平均分),从键盘输入学生的信息, 计算平均分,并输出这个学生的信息。 2.有n个警察的信息(包括警号、年龄、工龄),找出 工龄的最大的警察,并输出该警察的信息。
23
总结
❖一维数组的遍历和求最值是常用的知识。 ❖二维数组的遍历都是有套路的。 ❖结构体要掌握好,后期学习面向对象很重要。
2
5
8
11
2
3
6
9
12
10
复习二维数组(二维数组的遍cont...)
课堂练习:1.输出arr[3][4]所有的数组元素的值(按行输出)。
#define M 3
#define N 4
int main(void)
{
int arr[M][N] = {{1,4,7,10},{2,5,8,11},{3,6,9,12}};
if(class3[i].score > class3[max].score)
max = i;
}
printf("成绩最高的学生:\n");
printf("序号:%d\n",class3[max].num);
printf("成绩:%d\n",class3[max].score);
return 0; }
a[0][1] a[1][1]
第2列
a[0][2] a[1][2]
9
复习二维数组(二维数组的遍历)
沿着某条搜索路线,依次对二维数组中的每个元素 做一次访问。
int arr[3][4] = {{1,4,7,10},{2,5,8,11}, {3,6,9,12}};
按行遍历:
行\列
0
1
2
3
0
1
4
7
10
1
课堂练习:
1.定义函数实现:对3*4的二维数组求其最大值 2.定义函数实现:对3*4的二维数组求其平均值
14
本次课议题
❖复习一维数组 ❖复习二维数组 ❖复习结构体
15
复习结构体(结构体的定义)
定义语法: struct 结构体名 {
成员列表 };
说明:
struct student {
int num; int age; float score; double avg; };
int num; int score; }STU;//STU是结构体别名
int main(void)
{
STU class3[N] = {{10,90},{14,70},{8,95}};
int i = 0;
//存放最高分所在的结构体数组元素下标
int max = 0;
for(i=1;i<N;i++)
{
7
本次课议题
❖复习一维数组 ❖复习二维数组 ❖复习结构体
8
复习二维数组(二维数组的定义)
语法: 类型名 数组名1[EXP1][EXP2],...;
int a[2][3];//相当于定义了2个长度为3的一维数组
一维数组a[0] 第0行 一维数组a[1] 第1行
第0列
a[0][0] a[1][0]
第1列
{
printf("请输入第%d 个数:", i+1);
scanf(“%d”, &a[i]);
}
for(i = 0; i < ARR_SIZE ; i++)
{
printf("第%d 个数是:%d\n", i + 1, a[i]);
}
return 0; }
5
复习一维数组(作为函数参数)
1>数组作为函数参数可以理解为形参数组和实参数组共享
1>定义了一个结构体类型,结构体的关键字---struct,结
构体名为student。 2>这个结构体包含了多个不同的基本数据类型。
16
复习结构体(结构体变量的定义)
1.先声明,后定义
struct 结构体名 {
数据类型 成员变量名; 数据类型 成员变量名; 数据类型 成员变量名;
...; };
语法:struct 结构体名 变量名;
注意:别名后面的分号;不能省略
例如: typedef int TYPE;
//TYPE与int 等价,如TYPE a;相当于int a;
19
复习结构体(typedef的使用cont...)
typedef struct student {
int num; int age; }STU;//STU是struct student的别名