C语言实验报告4_56学时二版 (1)

实验报告四

实验题目(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;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值