(1)掌握一维数组的定义与初始化,会正确访问数组元素,并利用循环对元素成批访问。
(2)掌握二维数组的定义与初始化,会利用双层循环对元素访问,实现一些基本算法。
(3)会用一维数组作为参数实现特定功能的函数,能正确实现一维数组中的一些经典算法。
硬件: 微型计算机
软件: Windows 操作系统、Microsoft Visual Studio 2010
实验题目(1)【见实验教材实验五的题目1】:编写程序exp5_1.c,在主函数中定义一维数组int array[10],自定义以下函数:输入数组元素,输出数组元素、求数组元素平均值、输出数组元素最大值、输出数组元素最小值、查找某数值元素是否存在(若存在,请输出下标)、给数组元素排序,要求在主函数中对各子函数进行调用和测试。
实验解答:
① 写出完整的源程序代码并做适当注释:
#include
#define N 10
void input(int array[], int n)
{
int i;
printf("please input %d numbers:",n);
for (i = 0; i < n; i++)
{
scanf("%5d", &array[i]);
}
printf("\n");
}
void print(int array[], int n)
{
int i;
printf("The elements are:");
for (i = 0; i < n; i++)
{
printf("%5d", array[i]);
}
printf("\n");
}
double aveNum(int array[], int n)
{
int i, sum = 0;
for (i = 0; i < n; i++)
{
sum += array[i];
}
return sum * 1.0 / n;
}
int maxNum(int array[], int n)
{
int i, max;
max = array[0];
for (i = 1; i < n; i++)
{
if (array[i] > max)
{
max = array[i];
}
}
return max;
}
int minNum(int array[], int n)
{
int i, min;
min = array[0];
for (i = 1; i < n; i++)
{
if (array[i] < min)
{
min = array[i];
}
}
return min;
}
int find(int array[], int n, int x) //查找下标
{
int i = 0;
while (i < n)
{
if (x == array[i])
{
break;
}
i++;
}
return i;
}
void bubbleSort(int array[], int n) //数组排序
{
int i, j, temp;
for (i = 0; i < n - 1; i++)
for (j = n - 1; j > i; j--)
if (array[j] < array[j - 1])
{
temp = array[j - 1];
array[j - 1] = array[j];
array[j] = temp;
}
}
int main()
{
int array[N], x, n, pos, max, min;
double ave = 0;
do
{
printf("please enter the number of elements(1<=number<=10):\n");
scanf("%d", &n);
} while (n<1 || n>N);
input(array, n);
print(array, n);
ave = aveNum(array, n);
printf("The avenum is %f\n", ave);
max = maxNum(array, n);
printf("The maxnum is %d\n", max);
min = minNum(array, n);
printf("The minnum is %d\n", min);
printf("please input x be searched:");
scanf("%d", &x);
pos = find(array, n, x);
if (pos < n)
{
printf("value=%d,index=%d\n", x, pos);
}
else
{
printf("Not present!\n");
}
printf("new order");
bubbleSort(array, n);
print(array, n);
printf("\n");
return 0;
}
【见实验教材实验五的题目2】:编写程序exp5_2.c,定义一个3*3的矩阵,要求实现读入矩阵、输出矩阵、矩阵转置、输出矩阵主对角线元素之和,所有功能均采用子函数实现。
实验解答:
①源程序exp5_2.c的源代码如下:
#include
#define ROW 3
#define COL 3
void input(int array[][COL],int n)
{
int i,j;
printf("please input 9 intergers:");
for(i=0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
scanf("%4d",&array[i][j]);
}
}
}
void print(int array[][COL],int n)
{
int i,j;
printf("before transpose:\n");
for(i=0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
printf("%4d",array[i][j]);
}
printf("\n");
}
}
void transposition(int array[][COL],int array2[][ROW],int n)
{
int i,j;
for(i=0;i<COL;i++)
{
for(j=0;j<ROW;j++)
{
array2[i][j]=array[j][i];
}
}
printf("After transpose:\n");
for(i=0;i<COL;i++)
{
for(j=0;j<ROW;j++)
{
printf("%4d",array2[i][j]);
}
printf("\n");
}
}
int getSum(int array[][COL],int n,int diag[3])
{
int i,sum=0;
for(i=0;i<3;i++)
{
diag[i]=array[i][i];
sum+=diag[i];
}
return sum;
}
int main()
{
int array[ROW][COL], array2[COL][ROW], diag[3], sum;
input(array, 3);
print(array, 3);
transposition(array, array2, 3);
sum=getSum(array, 3, diag);
printf("Sum of main diagonal elements:%d\n", sum);
return 0;
}
②输入的数据及运行结果是:
输入的数据:1 3 5 7 9 2 4 6 8
运行的结果:
Before transpose:
1 3 5
7 9 2
4 6 8
After transpose:
1 7 4
3 9 6
5 2 8
Sum of main diagonal elements : 18
【见实验教材实验五的题目6】:编写程序exp5_6.c,请判断花瓶是谁打碎的。教师花瓶碎了,班级只有四个小同学,老师询问小同学,已知是其中1人打碎的,还知道4人中每个人要么是诚实的,要么总是说谎的。
小同学回答老师的问题是:
甲说:“乙没有打碎,是丁打碎的。”
乙说:“我没有打碎,是丙打碎的。”
丙说:“甲没有打碎,是乙打碎的。”
丁说:“我没有打碎。”
根据四人回答判断谁打碎了花瓶。
实验解答:
①源程序exp5_6.c的源代码如下:
#include
int main()
{
int array[4]={0},i;
for(i=0;i<4;i++)
{
array[i]=1;
if(array[3]+array[1]&&array[2]+array[1]&&array[0]+array[1])
{
printf("打碎花瓶的是:%d\n",i);
break;
}
array[i]=0;
}
printf("(0,1,2,3别代表甲,乙,丙,丁)\n");
return 0;
}
②运行结果是:
打碎花瓶的是:1
(0,1,2,3分别代表甲,乙,丙,丁)