当前位置:首页 > Lab6-1 - 一维数组
班级: 学号: 姓名:
请设计人员务必控制好数组下标,防止越界访问。
6. Q:数组在内存中如何存放,一个数组会占用多少内存?
A:数组是一种复合数据类型,与变量一样都是用来存放数据,区别在于变量是一个数据,数组是一批数据。系统会为数组在内存中分配一块连续的空间,所占内存大小为:元素个数*sizeof(数据类型)个字节的存储单元,比如CFree和VC6.0等32位开发环境下,int array[10];它共占用10*4=40个字节。数据存放顺序按照a[0], a[1], a[2], ……, a[9]来存放。
7. Q:若有数组声明int a[5];则a代表什么?
A:对于一个变量,它的第一个字节的位置称为该变量的内存起始地址。同样的,一个数组,占用一段连续的内存空间,其中第一个字节的位置成为该数组的起始地址(首地址)。数组名代表了数组的首地址,所以a代表了整个数组的起始地址。a是一个常量,不能被修改。
【实验内容】
1. 从键盘输入10个学生的考试成绩,放入数组中,求数组中最高分、最低分及其所在元素
的位置。
2. 在上题基础上,将数组中最高分换到第0位、最低分放入最后一位。然后输出调整后的
数组。
3. 下面程序段的功能是将一个数组中的值按逆序重新存放,例如下图中第一行是原来的顺
序,第二行是逆序存放后的顺序。
4. 从键盘输入一个班学生的某门课程的成绩(不超过20人),当输入为负值时,输入结束,
分别实现以下功能: 1) 统计不及格人数。
2) 统计成绩在全班平均分以上(含平均分)的学生人数。 3) 统计各分数段的学生人数及所占的百分比。
5. 设计程序模拟骰子的500次投掷,然后统计1~6每一面出现的概率,放入数组
frequency中。提示:随机种子发生器设置语句:srand(time(NULL));利用随机函数产生1~6之间的随机整数:rand()%6+1;以上代码需要stdlib.h以及time.h库支持。
【课后练习】
1. 选择题:
1) C语言中,访问数组元素时,数组下标的数据类型允许是 。
A. 整型常量
B. 整型表达式 D. 任何类型的表达式 B. int n=10, a[n]; D. #define SIZE 10
5
C. 整型常量或者整型表达式 A. int a(10); C. int n;
2) 以下对一维整型数组a的正确说明是 。
班级: 学号: 姓名:
scanf(“%d”, &n);
int a[SIZE];
int a[n];
3) 若有说明 int a[10];则对a数组中元素的正确访问是 。 A. a[10] B. a[3.5] C. a(5) D. a[10-10] 4) 以下对数组的正确定义是 。
A. float b[5.0]; B. float b[5]; C. float b(5); D. float b[]; 5) 对语句int a[10] = {6,7,8,910}; 的正确理解是 。 A. 将5个初值依次赋给a[1]至a[5],其余元素均为0 B. 将5个初值依次赋给a[0]至a[4],其余元素均为0 C. 将5个初值依次赋给a[6]至a[10],其余元素均为0 D. 因为数组长度与初值个数不相同,所以该语句错误
6) 以下能对一维数组a进行正确初始化的语句是 。 A. int a[5];
a={0,1,2,3,4};
B. int a[3]; for(i=0; i<3; i++) scanf(“%d”, a); D. int a[5];
for(i=0; i<3; i++) scanf(“%d”, &a[i]);
C. int a[3] = {0,1,2,3};
2. 概念填空:
1) 构成数组的各个元素必须具有相同的 。如果一维数组的长度为n,则
数组下标的最小值为 ,最大值为 。 2) C语言中,一维数组的定义方式为: 类型说明符 数组名 。 3) 已知数组b定义为int b[ ]={9,6,3}; 则b数组最小下标是_______,最大下标
是____ ___。各元素的值分别是b[0]=_ ___, _=_ _, _=_ _。
3. 有一个已经排好序的数组,输入一个数,要求按原来的顺序规律将其插入到数组中合适的位置上,如下图所示。
#include
int i, pos=0, newNum, a[N]={20, 18, 15, 9, 6, 4, 3, 2, -1};
//插入操作前,输出数组元素 for(i=0; i printf(\ printf(\ 6 班级: 学号: 姓名: } //插入操作完成后,再次输出数组元素 for(i=0; i printf(\printf(\} if( ) a[0]=newNum; //从后向前依次比较,将小于newNum的数据逐个后移 for(i= ; ; i--) { if( ) //遇到大于等于newNum的数据时,停止比较,插入被比较数据之后 { } else //将当前小于newNum的数据后移一个单元 { } break; //接受用户输入一个数据 printf(\scanf(\ 4. 以下是一个交错数列的前10项,请完成以下程序,效果如图所示: #include int i, flag, f[10]; //交错数列f中前10个元素,flag用于符号控制 flag = 1; for( ; ; i++) { f[i] = ; flag = ; } for(i=0; ; i++) { 7 班级: 学号: 姓名: printf(\ ); } printf(\} 5. 以下程序的功能是给一维数组a输入任意6个整数。假设为:0 1 2 3 4 5,如 下图。则程序 1) 将首先输出该数组,再向右轮转该数组,即该数组变为5 0 1 2 3 4。这样 的动作重复6遍,得到以下结果。试完成此程序。 #include int a[ ],n, i, j, k, m; printf(\ scanf(\ for(i=0; i printf(\ ]= \ ); scanf(\ ); } printf(\ /*轮转输出*/ for( i=n-1; i>=0; i--) { /*输出数组*/ for(m= ; ; m++) printf(\ ; printf(\ 8
共分享92篇相关文档