实验报告四
实验题目(1)编写程序exp4_1.c,在主函数中定义一维数组double array[10],从键盘上读入数组元素,自定义以下函数:输出数组所有元素、求平均值、寻找最大元素、查找某元素是否存在、排序,并在主函数中对各函数进行调用和测试。
源代码:
#include<stdio.h>
void input(double a[], int n)
{
int i;
for (i = 0; i < n; i++)
scanf_s("%lf", &a[i]);
}
double aver(double a[], int n)
{
int i;
double s = 0;
for (i = 0; i < n; i++)
s += a[i];
return s / n;
}
double max(double a[], int n)
{
int i;
double M = a[0];
for (i = 1; i < n; i++)
if (a[i] > M)
M = a[i];
return M;
}
int search(double a[], int n, double s)
{
int i;
for (i = 0; i < n; i++)
if (a[i] == s)
return i;
return -1;
}
void sort(double a[], int n)//排序
{
int i, j;
double t;
for (i = 0; i < n - 1; i++)
for (j = i + 1; j < n; j++)
if (a[i] > a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
void print(double a[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%f", a[i]);
printf("\n");
}
int main()
{
double array[10], av, ser;
int t;
input(array, 10);
printf("aver=%f\n", aver(array, 10));
printf("max=%f\n", max(array, 10));
scanf_s("%lf ", &ser);
t = search(array, 10, ser);
if (t == -1)
printf("not found\n");
else
printf("%f locate in %d\n", ser, t);
sort(array, 10);
print(array, 10);
return 0;
}
实验题目(2) 编写程序exp4_2.c,完成如下功能: ① 由计算机随机产生1000个[0,10000]之间的整数,保存到数组中。 ② 统计数组中不同元素的个数,并且以序对方式输出所有元素值及对应出现的次数,例如:(23,5)表示随机数23作为数组的元素出现了5次。(各主要功能建议定义函数)
① 用流程图描述你实现统计每个元素分别出现次数这一功能的算法思想
源代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
main()
{
int a[1000], b[10001] = { 0 },i;
srand(time(NULL));
for (i = 0; i < 1000; i++)
{
a[i] = rand() % 10001;
b[a[i]]++;
}
for (i = 0; i < 10001; i++)
if (b[i] != 0)
printf("(%d,%d)\n", i, b[i]);
return 0;
}
实验题目(3)定义一个5*5的整型二维数组arr作为一个矩阵,求矩阵的主对角线与次对角线元素之和。输出该矩阵及所求的和值。(建议输入、输出、求值分别定义函数)
源代码:
#include<stdio.h>
void input(int a[5][5], int n)
{
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
scanf_s("%d", &a[i][j]);
}
void output(int a[5][5], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
printf("%4d", a[i][j]);
printf("\n");
}
}
int sum(int a[5][5], int n)
{
int s = 0, i;
for (i = 0; i < 5; i++)
s += a[i][i] + a[i][4 - i];
return s;//主对角线+副对角线
}
main()
{
int a[5][5];
input(a, 5);
output(a, 5);
printf("sum=%d\n", sum(a, 5));
return 0;
}
实验题目(4)定义一个3*3的整型二维数组arr作为一个矩阵,再定义3个函数,分别实现:读入数组中所有元素、按行输出数组中所有元素、矩阵转置。主函数中调用这些函数,实现:读入数组,输出原始矩阵、矩阵转置、输出转置后的矩阵。
源代码:
#include<stdio.h>
void input(int a[3][3], int n)
{
int i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
scanf_s("%d", &a[i][j]);
}
void inv(int a[3][3], int n)
{
int i, j,t;
for(i=0;i<2;i++)//左上角元素
for (j = i + 1; j < 3; j++)
{
t = a[i][j];
a[i][j] = a[j][i];//转置
a[j][i] = t;
}
}
void output(int a[3][3], int n)
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%4d", a[i][j]);
printf("\n");
}
}
int main()
{
int a[3][3];
input(a, 3);
inv(a, 3);
output(a, 3);
return 0;
}