内容正文:
(清华大学出版)
C 语言程序设计
同步教学
C 语言程序设计
第六章 数 组
2
1. 编程求一个寝室 6 名同学 C 语言成绩的平均分。
2. 编程求一个班级 30 名同学 C 语言成绩的平均分。
3. 编程求一个专业 120 名同学 C 语言成绩的平均分。
#include<stdio.h>
void main()
{
float a, b, c, d, e, f, sum, ave;
printf("输入成绩
");
scanf("%f%f%f%f%f%f",
&a, &b, &c, &d, &e, &f);
sum=a+b+c+d+e+f;
ave=sum/6;
printf("
平均分为:%.2f
", ave);
}
3
如果要输入更多的数值呢?
有没有一种更简便的方式,
可以一次定义一组变量?
1. 编程求一个寝室 6 名同学 C 语言成绩的平均分。
2. 编程求一个班级 30 名同学 C 语言成绩的平均分。
3. 编程求一个专业 120 名同学 C 语言成绩的平均分。
4
第六章 数 组(Array)
6.1 一维数组
6.2 二维数组
6.3 字符数组
5
第六章 数 组
数组是 什么?
数组是 一组变量的集合
6.1 一维数组
数组是 一组同名、同数据类型变量的集合
数组是 一组有序、同名、同数据类型变量的集合。
数组中的变量称为数组元素,变量的个数称为数组的长度。将数组与循环结合,能有效地处理大批量数据,可大大提高工作效率。
6
如何声明 一个数组
int a[10];
数组的类型
数组名
数组中元素的数目
必须是一个常量
第六章 数 组
7
数组中元素的 编号
int a[10];
0 1 2 3 4 5 6 7 8 9
a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]
第六章 数 组
数组中元素的 编号
从 0 开始;
到 (数组的长度-1) 结束。
规定:
8
对于 int a[10]:
编译系统为数组 a 分配 连续的 10 * sizeof (int) 个字节的存储区域。
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
a a+1 a+2 a+3 a+4 a+5 a+6 a+7 a+8 a+9
数组名表示
数组的首地址
a+i 表示 &a[i]
第六章 数 组
9
float s[6]={ 82,74, 93, 68, 80, 53 };
数组在内存中的首地址
即 s=0x11ff60
s+3 = ?
s+3 = 0x11ff6c
0x11ff60
0x11ff64
0x11ff68
0x11ff6c
0x11ff70
s[0]
s[1]
s[2]
s[3]
s[4]
s[5]
0x11ff74
82
74
93
68
80
53
.
.
.
10
如何引用 数组中的元素
int a[10];
a[0]=5;
a[1]=2*a[3/4];
a[5]=a[3%2]+a[6-6];
…a[2]…;
数组名
元素编号
第六章 数 组
注:在 C 语言中只能 对数组元素进行操作,不能对数组
整体进行操作。
11
数组元素赋值的 一种特殊方式
声明时赋值
全部赋初值,可不指定长度,如
int a[ ]={0, l, 2, 3, 4, 5, 6, 7, 8, 9};
2) 部分赋初值,长度不能省略,如
int a[10]={1, 2, 3}; /* 其余为 0 */
char b[5]={'+', '-'}; /* 其余为 '\0' */
3) 初值不能多于数组长度,如
int a[3]={1, 2, 3, 4}; 是错误的!
第六章 数 组
12
第六章 数 组
1. 编程求一个寝室 6 名同学 C 语言成绩的平均分。
2. 编程求一个班级 30 名同学 C 语言成绩的平均分。
#include<stdio.h>
void main()
{
int i;
printf("输入成绩
");
for(i=0; i<30; i++)
scanf("%f",&s[i]);
sum = sum+s[i]; // 求和
ave=sum/30; // 求平均分
printf("
平均分是:%.2f
",ave);
}
sum ,
ave ;
float s[30],
{
}
sum=0.0 ,
13
第六章 数 组
#include<stdio.h>
void main()
{
int i;
printf("输入成绩
");
for(i=0; i<30; i++)
scanf("%f",&s[i]);
sum = sum+s[i]; // 求和
ave=sum/30; // 求平均分
printf("
平均分是:%.2f
",ave);
}
sum ,
ave ;
float s[30],
{
}
sum=0.0 ,
1. 编程求一个寝室 6 名同学 C 语言成绩的平均分。
2. 编程求一个班级 30 名同学 C 语言成绩的平均分。
3. 编程求一个专业 120 名同学 C 语言成绩的平均分。
120
14
第六章 数 组
#include<stdio.h>
void main()
{
int i;
printf("输入成绩
");
for(i=0; i< 120 ; i++)
scanf("%f",&s[i]);
sum = sum+s[i]; // 求和
ave=sum/ 120 ; // 求平均分
printf("
平均分是:%.2f
",ave);
}
sum ,
ave ;
float s[ 120 ],
{
}
sum=0 ,
1. 编程求一个寝室 6 名同学 C 语言成绩的平均分。
2. 编程求一个班级 30 名同学 C 语言成绩的平均分。
3. 编程求一个专业 120 名同学 C 语言成绩的平均分。
# define N 120 // 宏定义 N
N
N
N
15
第六章 数 组
#include<stdio.h>
void main()
{
int i;
printf("输入成绩
");
for(i=0; i< 120 ; i++)
scanf("%f",&s[i]);
sum = sum+s[i]; // 求和
ave=sum/ 120 ; // 求平均分
printf("
平均分是:%.2f
",ave);
}
sum ,
ave ;
float s[ 120 ],
{
}
sum=0 ,
# define N 120 // 宏定义 N
N
N
N
1. 编程求一个寝室 6 名同学 C 语言成绩的平均分。
2. 编程求一个班级 30 名同学 C 语言成绩的平均分。
3. 编程求一个专业 120 名同学 C 语言成绩的平均分。
30
16
第六章 数 组
2. 若定义语句int a[10];则下列对 a 中数组元素正确引用的是 。
A) a[10]
B) a(1)
C) a[4.5]
D) a[10/2-5]
1. 下列能正确定义一维数组的语句是 。
A) int a(10);
B) int n=10, a[n];
C) int n;
scanf("%d",&n);
int a[n];
D) # define n 10
int a[n];
答案:D,n为符号常量。
课堂练习:
答案:D
17
第六章 数 组
数组(Array):
数组是一组有序、同名、同数据类型的变量(元素)的集合。定义方式为:
类型标识符 数组名[ 元素个数 ];
char str[ 81 ];
str[ 0 ], str[ 1 ], ……, str[ 80 ];
注意:在C语言中不能对整个数组进行赋值或其他运算,只能对数组元素进行操作。
例如:int a[5];
a[5]={1,2,3,4,5}; a={1,2,3,4,5};都是错误的!
小 结:
18
1. 学校举行校园歌手大赛,请为大赛组委会编一个程序,计算评委为每位歌手打分的平均分(共20名评委)。
思考题:
第六章 数 组
19
第六章 数 组
#include<stdio.h>
void main()
{
int i;
printf("请输入评委打分
");
for( )
// 求平均分
printf("
平均分1:%.2f
",ave1);
}
ave1 ;
float J[N],
{
}
sum=0.0,
1. 学校举行校园歌手大赛,请为大赛组委会编一个程序,计算评委为每位歌手打分的平均分(共20名评委)。
// 宏定义 N
// 累加求和
// 输入分数
20
第六章 数 组
#include<stdio.h>
void main()
{
int i;
printf("请输入评委打分
");
for( )
// 求平均分
printf("
平均分1:%.2f
",ave1);
}
ave1 ;
float J[N],
{
}
sum=0.0,
1. 学校举行校园歌手大赛,请为大赛组委会编一个程序,计算评委为每位歌手打分的平均分(共20名评委)。
// 宏定义 N
// 累加求和
// 输入分数
# define N 20
i=0;
i<N;
i++
sum +=J[i];
scanf("%f", J+i);
ave1=sum/N ;
21
1. 学校举行校园歌手大赛,请为大赛组委会编一个程序,计算评委为每位歌手打分的平均分(共20名评委)。
2. 去掉一个最高分和一个最低分,计算每位歌手的平均分。
思考题:
第六章 数 组
22
第六章 数 组
#include<stdio.h>
void main()
{
int i;
printf("请输入评委打分
");
for(i=0; i<N ; i++)
scanf("%f", J+i);
sum +=J[i]; // 累加求和
ave1=sum/N ; // 求平均分
printf("
平均分1:%.2f
",ave1);
}
ave1 ;
float J[N],
{
}
sum=0,
1. 学校举行校园歌手大赛,请为大赛组委会编一个程序,计算评委为每位歌手打分的平均分(共20名评委)。
2. 去掉一个最高分和一个最低分,计算每位歌手的平均分。
# define N 20 // 宏定义 N
,max,min,ave2;
max=J[0];
for(i=1; i< N; i++)
{ if(max<J[i])
}
max=J[i];
min=J[0];
if(min>J[i])
min=J[i];
ave2=(sum-max-min)/(N-2);
printf("
平均分2:%.2f
",ave2);
23
1. 学校举行校园歌手大赛,请为大赛组委会编一个程序,计算评委为每位歌手打分的平均分(共20名评委)。
2. 去掉一个最高分和一个最低分,计算每位歌手的平均分。
3. 去掉 2 个最高分 和 2 个最低分,计算每位歌手的平均分。
思考题:
第六章 数 组
24
谢谢观看
$$