int a[]={2,3,4,5,6,7,8,9};
for(i=0; i<8; ) /* 请补充完整循环语句 */ sum+=a[i];
printf(\}
(五)编写一程序,将100以内的素数存放到一个数组中。
编程提示:这是一个双层循环嵌套的程序。
1.首先复习教材上的内容,掌握判断素数的方法。
2.定义一个数组存放100以内的素数,想一想该数组的大小应该为多少? 3.定义一个整型变量作循环变量。
4.定义一个整型变量作为数组元素下标的计数器,想一想该变量应赋什么样的初值? 5.在外层循环中,对1~100之间的所有整数进行判断;内层循环则判断每个整数是否为素数。如果是素数,存放到数组中,并使数组下标变量加1;否则继续判断下一个整数。
6.用循环语句输出数组中的所有素数,注意循环变量的初值和终值如何确定。
(六)将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1,2,要求改为按2,1,4,5,6,8的顺序存放(注意是逆序存放而不是逆序输出)。
编程提示: 1.定义一个数组,为该数组赋值(可以在定义时初始化,也可以用循环语句)。 2.在循环中,使第0个元素与第5个元素交换,第1个元素与第4个元素交换,第2个元素与第个3元素交换(注意循环次数按n/2确定,n为数据个数)。
3.输出逆序存放后的各数组元素(使用循环语句)。
五、实验注意事项
(一)C规定,数组的下标下界为0,因此数组元素下标的上界是该数组元素的个数减1。 例如,有定义:int a[10]; 则数组元素的下标上界为9。
(二)由于数组的下标下界为0,所以数组中下标和元素位置的对应关系是:第一个元素下标为0,第二个元素下标为1,第三个元素下标为2,依次类推,第n个元素下标为n-1。
(三)数值型数组要对多个数组元素赋值时,使用循环语句,使数组元素的下标依次变化,从而为每个数组元素赋值。
例如:int a[10],i;
for(i=0;i<10;i++) scanf(\不能通过如下的方法对数组中的全部元素赋值。
int a[10],i; scanf(\
六、思考题
(一)定义一个数组名为ftop且有5个int类型元素的一维数组,同时给每个元素赋初值为0,请写出数组的定义语句 。
(二)下面程序的功能是:为一维数组a中的元素赋值,并按照逆序输出。请在程序中的横线上填入正确的内容。
#include \
28
void main( )
{ int i,a[10]; /* 定义循环变量i和一维数组a */ for(i=0;i<=9;i++)
scanf(\ for( ;i>=0;i--)
printf(\ /* 按照逆序输出 */ printf(\}
(三)下面程序的功能是:输出一维数组a中的最小值及其下标。请在程序中的横线上填入正确的内容。
#include \void main( )
{ int i,p=0,a[10]; /* 定义a为数组名,p为下标名 */ for(i=0; i<10; i++) scanf(\ for(i=1; i<10; i++)
if (a[i]
printf(\ /* 输出一维数组a中的最小值及其下标 */
}
(四)下面程序的功能是:求一维数组中下标为偶数的元素之和并输出。请在程序中的横线上填入正确的内容。
#include \void main( )
{ int i,sum=0;
int a[ ]={2,3,4,5,6,7,8,9}; for(i=0; i<8; ) sum+=a[i];
printf(\ }
29
实验七 二维数组程序设计
一、实验学时
2学时
二、实验目的
(一)掌握二维数组的定义、赋值及输入输出的方法; (二)掌握与二维数组有关的算法如查找、矩阵转置等;
(三)掌握在程序设计中使用数组的方法。数组是非常重要的数据类型,循环中使用数组能更好地发挥循环的作用,有些问题不使用数组难以实现。
(四)掌握在VC++环境下上机调试二维数组程序的方法,并对结果进行分析。
三、预习要求
熟悉二维数组的定义、引用和相关算法(求最大值、最小值)的程序设计,同时要掌握在程序设计中利用双重循环来实现二维数组的输入和输出。
四、实验内容
(一)二维数组的初始化,即给二维数组的各个元素赋初值。下面的几个程序都能为数组元素赋值,请输入程序并运行,比较这些赋值方法有何异同。
1.在定义数组的同时对数组元素分行初始化。 /* c7-1.c 二维数组的初始化(分行)*/ #include \void main( )
{ int i,j,a[2][3]={{1,2,3},{4,5,6}}; for(i=0; i<2; i++) { for(j=0; j<3; j++) printf(\printf(\} }
2.不分行的初始化。把{ }中的数据依次赋值给数组的各个元素。 /* c7-2.c 二维数组的初始化(不分行)*/ #include \void main( )
{ int i,j,a[2][3]={1,2,3,4,5,6}; for(i=0;i<2;i++)
{ for(j=0;j<3;j++)
printf(\printf(\} }
3.为部分数组元素初始化。
30
如:数组定义语句为:int i,j,a[2][3]={{1,2},{4}};
4.可以省略第一维的定义,但不能省略第二维的定义。 如:int a[ ][3]={1,2,3,4,5,6};
依次运行以上程序,比较这四种定义方式的不同之处。
(二)求一个4×4矩阵的主对角线元素之和,填空并运行程序。
编程提示: 1.定义一个4行4列的二维数组a。
2.可利用双重循环的嵌套为该二维数组的各个数组元素赋值,一般格式为: for(i=0; i<4; i++) for(j=0; j<4; j++) scanf(\
3.用循环求和,并注意矩阵对角上线元素的特征是:行下标和列下标相同。 4.输出对角线元素之和。
/* c7-3.c 求一个4×4矩阵的主对角线元素之和*/ #include \void main( )
{ int a[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,sum=0;
for(i=0; i<4; i++)
_____; /*把对角线元素的和放在变量sum中 */ printf(\ /*输出对角线元素的和*/ }
(三)打印出以下的杨辉三角(要求打印出10行) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1
编程提示:
1.杨辉三角的特点是:第1列和对角线上的元素为1,其它各元素的值都是上一行上一列元素和上一行前一列元素之和。
2.定义一个10×10的二维数组a。
3.先用一个单层循环为第一列和对角线上的元素赋值。如: for(i=0; i<10; i++) { a[i][i]=1;a[i][0]=1; } 4.再用一个双重循环嵌套为其它元素赋值。 for( ; i<10; i++)
31
for( ; ; j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; 想一想,划横线的地方应当填入什么内容?
5.计算之后再用一个双重循环嵌套输出杨辉三角。注意各层循环变量的初值和终值怎样确定。
(四)统计3个学生,每个学生4门课程的考试成绩,要求输出每个学生的总成绩,每个学生的平均成绩,3个学生的总平均成绩。填空并运行程序。
/* c7-4.c 学生成绩处理 */ #include \void main( )
{ int stu[3][4],i,j,t[3]; float sum=0,a[3];
for(i=0; i<3; i++) /* 输入三个学生的4门课程考试成绩 */ for(j=0; j<4; j++)
scanf(\ for(i=0; i<3; i++) { t[i]=0;
for(j=0; j<4; j++)
{ sum+=stu[i][j]; /* sum存放三个学生的4门课程总成绩 */ t[i]+=stu[i][j]; /* t[i]存放第i个学生的4门课程成绩 */ }
printf(\输出第i个学生的总成绩 */ ;
printf(\存放第i个学生的4门课程平均成绩*/ }
printf(\}
(五)已知二维数组a中的元素为: 4 4 34 37 3 12 5 6 5
求二维数组a中的最大值和最小值。程序的输出应为:The max is: 37 The min is: 3
填空并运行程序。
/* c7-5.c 求二维数组中元素的最大值与最小值 */ #include \void main( )
{ int a[3][3]={4,4,34,37,3,12,5,6,5},i,j,max,min; max=a[0][0];
; for( i=0; i<3; i++) for( j=0; j<3; j++)
32