实验05 求最大值和最小值实验报告
c语言实验报告册

c语言实验报告册C语言实验报告册。
实验一,C语言基本程序设计。
1. 实验目的。
通过本实验,掌握C语言的基本程序设计方法,包括变量的定义和使用、表达式的计算、控制结构的使用等。
2. 实验内容。
(1)编写一个C程序,实现输入两个整数,然后输出它们的和、差、积和商。
(2)编写一个C程序,实现输入一个实数,计算并输出它的绝对值。
3. 实验步骤。
(1)定义两个整型变量a和b,用来存储输入的整数。
(2)使用printf函数提示用户输入两个整数,并使用scanf函数将用户输入的值分别赋给变量a和b。
(3)定义四个整型变量sum、diff、product和quotient,分别用来存储a和b的和、差、积和商。
(4)分别计算a和b的和、差、积和商,并将结果分别赋给sum、diff、product和quotient。
(5)使用printf函数输出sum、diff、product和quotient的值。
4. 实验结果。
输入:a = 5。
b = 3。
输出:sum = 8。
diff = 2。
product = 15。
quotient = 1。
5. 实验结论。
通过本实验,我掌握了C语言的基本程序设计方法,包括变量的定义和使用、表达式的计算、控制结构的使用等。
在实际编程中,我需要注意变量的类型和范围,以避免数据溢出和精度丢失的问题。
实验二,C语言函数的使用。
1. 实验目的。
通过本实验,学习C语言函数的定义和调用,掌握函数参数的传递和返回值的使用。
2. 实验内容。
(1)编写一个C程序,实现输入两个整数,计算它们的最大公约数和最小公倍数。
(2)编写一个C程序,实现输入一个整数n,计算并输出1到n的阶乘之和。
3. 实验步骤。
(1)定义一个函数gcd,用来计算两个整数的最大公约数。
(2)定义一个函数lcm,用来计算两个整数的最小公倍数。
(3)定义一个函数factorial,用来计算一个整数的阶乘。
(4)在主函数中,调用gcd和lcm函数计算最大公约数和最小公倍数;调用factorial函数计算阶乘之和。
算法设计与分析实验报告

实验一找最大和最小元素与归并分类算法实现(用分治法)一、实验目的1.掌握能用分治法求解的问题应满足的条件;2.加深对分治法算法设计方法的理解与应用;3.锻炼学生对程序跟踪调试能力;4.通过本次实验的练习培养学生应用所学知识解决实际问题的能力。
二、实验内容1、找最大和最小元素输入n 个数,找出最大和最小数的问题。
2、归并分类将一个含有n个元素的集合,按非降的次序分类(排序)。
三、实验要求(1)用分治法求解问题(2)上机实现所设计的算法;四、实验过程设计(算法设计过程)1、找最大和最小元素采用分治法,将数组不断划分,进行递归。
递归结束的条件为划分到最后若为一个元素则max和min都是这个元素,若为两个取大值赋给max,小值给min。
否则就继续进行划分,找到两个子问题的最大和最小值后,比较这两个最大值和最小值找到解。
2、归并分类使用分治的策略来将一个待排序的数组分成两个子数组,然后递归地对子数组进行排序,最后将排序好的子数组合并成一个有序的数组。
在合并过程中,比较两个子数组的首个元素,将较小的元素放入辅助数组,并指针向后移动,直到将所有元素都合并到辅助数组中。
五、源代码1、找最大和最小元素#include<iostream>using namespace std;void MAXMIN(int num[], int left, int right, int& fmax, int& fmin); int main() {int n;int left=0, right;int fmax, fmin;int num[100];cout<<"请输入数字个数:";cin >> n;right = n-1;cout << "输入数字:";for (int i = 0; i < n; i++) {cin >> num[i];}MAXMIN(num, left, right, fmax, fmin);cout << "最大值为:";cout << fmax << endl;cout << "最小值为:";cout << fmin << endl;return 0;}void MAXMIN(int num[], int left, int right, int& fmax, int& fmin) { int mid;int lmax, lmin;int rmax, rmin;if (left == right) {fmax = num[left];fmin = num[left];}else if (right - left == 1) {if (num[right] > num[left]) {fmax = num[right];fmin = num[left];}else {fmax = num[left];fmin = num[right];}}else {mid = left + (right - left) / 2;MAXMIN(num, left, mid, lmax, lmin);MAXMIN(num, mid+1, right, rmax, rmin);fmax = max(lmax, rmax);fmin = min(lmin, rmin);}}2、归并分类#include<iostream>using namespace std;int num[100];int n;void merge(int left, int mid, int right) { int a[100];int i, j,k,m;i = left;j = mid+1;k = left;while (i <= mid && j <= right) {if (num[i] < num[j]) {a[k] = num[i++];}else {a[k] = num[j++];}k++;}if (i <= mid) {for (m = i; m <= mid; m++) {a[k++] = num[i++];}}else {for (m = j; m <= right; m++) {a[k++] = num[j++];}}for (i = left; i <= right; i++) { num[i] = a[i];}}void mergesort(int left, int right) { int mid;if (left < right) {mid = left + (right - left) / 2;mergesort(left, mid);mergesort(mid + 1, right);merge(left, mid, right);}}int main() {int left=0,right;int i;cout << "请输入数字个数:";cin >> n;right = n - 1;cout << "输入数字:";for (i = 0; i < n; i++) {cin >> num[i];}mergesort(left,right);for (i = 0; i < n; i++) {cout<< num[i];}return 0;}六、运行结果和算法复杂度分析1、找最大和最小元素图1-1 找最大和最小元素结果算法复杂度为O(logn)2、归并分类图1-2 归并分类结果算法复杂度为O(nlogn)实验二背包问题和最小生成树算法实现(用贪心法)一、实验目的1.掌握能用贪心法求解的问题应满足的条件;2.加深对贪心法算法设计方法的理解与应用;3.锻炼学生对程序跟踪调试能力;4.通过本次实验的练习培养学生应用所学知识解决实际问题的能力。
分治法求最大值和最小值

实验报告一、实验名称:分治法求最大值和最小值二、实验学时:4三、实验器材和环境:PC机一台四、实验内容和目的:1、实验目的:加深对分治算法原理及实现过程的理解。
2、实验任务:实现用分治算法解决问题。
3、实验内容:给定一个顺序表,编写一个求出其最大值和最小值的分治算法。
分析:由于顺序表的结构没有给出,作为演示分治法这里从简顺序表取一整形数组数组大小由用户定义,数据随机生成。
我们知道如果数组大小为 1 则可以直接给出结果,如果大小为 2则一次比较即可得出结果,于是我们找到求解该问题的子问题即: 数组大小 <= 2。
到此我们就可以进行分治运算了,只要求解的问题数组长度比 2 大就继续分治,否则求解子问题的解并更新全局解以下是代码。
五、实验原理:分治算法基本原理,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
大概分为“分治合“策略:分:将要求解的较大规模的问题分割成K个更小规模的子问题;治:对这K个子问题分别求解。
如果子问题的规模仍然不够小则再划分为K个子问题,如此递归的进行下去;划分到基础问题,则设计可行算法直接求解;合:将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。
一个分治法将规模为n的问题分成k个规模为n/m的子问题去解。
设分解阀值n0=1,且adhoc解规模为1的问题耗费1个单位时间。
再设将原问题分解为k个子问题以及用merge将k个子问题的解合并为原问题的解需用f(n)个单位时间。
用T(n)表示该分治法解规模为|P|=n的问题所需的计算时间,则有:11)()/()1()(>=⎩⎨⎧+=n n n f m n kT O n T通过迭代法求得方程的解:∑-=+=1log0log )/()(n m j jj k m m n f k n n T 六、实验步骤:1、设定参数: s 为当前分治段的开始下标,e 为当前分治段的结束下标,meter 表的地址,max 为存储当前搜索到的最大值,min 为存储当前搜索到的最小值2、获取局部解,并更新全局解,不是子问题的话就继续分治3、用一组随机数据填充数组并以表的形式输出4、用分治法获取最大值和最小值七、实验数据及结果分析:分治算法代码:#include <stdio.h>#include <stdlib.h>#include <limits.h>#include <time.h>#define M 40// 分治法获取最优解void PartionGet(int s,int e,int *meter,int *max,int *min){int i;if(e-s <= 1){// 获取局部解,并更新全局解if(meter[s] > meter[e]){if(meter[s] > *max)*max = meter[s];if(meter[e] < *min)*min = meter[e];}else{if(meter[e] > *max)*max = meter[s];if(meter[s] < *min)*min = meter[s];}return ;}i = s + (e-s)/2; // 不是子问题继续分治PartionGet(s,i,meter,max,min);PartionGet(i+1,e,meter,max,min);}int main(){int i,meter[M];int max = INT_MIN; // 用最小值初始化int min = INT_MAX; // 用最大值初始化printf("The array's element as followed:\n\n"); srand(time(0)); // 初始化随机数发生器for(i = 0; i < M; i ++){ // 随机数据填充数组meter[i] = rand()%10000;if(!((i+1)%10)) // 输出表的随机数据printf("%-6d\n",meter[i]);elseprintf("%-6d",meter[i]);}PartionGet(0,M - 1,meter,&max,&min); // 分治法获取最值printf("\nMax : %d\nMin : %d\n",max,min);system("pause");return 0;}实验结果:。
统计学实验报告_模板

西南科技大学经济管理学院统计学实验报告姓名:学号:班级:统计学实验报告姓名:学号:班级:成绩:一、实验步骤总结成绩:<一>、数据的搜集与整理(一)数据的搜集统计数据主要来源于两种渠道:一种是来源于别人的调查或实验数据,称为间接数据;另一种是来源于科学实验或者直接的调查数据,称为直接数据。
(二)数据的整理利用Excel对搜集的数据进行整理,使数据系统化、科学化、并建立数据库和数据文件。
下面举例说明数据搜集和整理的实验步骤:例1:查询北京市2008年的人口数。
(数据的搜集)查询2009年北京统计年鉴,可通过纸质年鉴,也可以通过网络获取。
如果通过网络获取,步骤如下:第一步:浏览器中输入地址/,进入北京统计信息网;第二步:选择“统计数据——年度数据”,在年度选择下拉框中选择2009年,点击查询,进入北京市2009年度统计年鉴,第三步:在年鉴中点击“3-1人口状况(1978-2008年)”,第四步:查询得到北京市2008年常住人口1695.0万人,户籍人口1229.9万人。
例2:大学生生活费收支状况调查(1)数据的编码,编码是对数据进行初步分组和确定数字代码的过程。
(2)数据的录入,数据的录入是将搜集到的数据直接输入到数据库文件中。
(3)数据文件的导入,Excel数据文件的导入是将别的软件形成的数据或数据库文件,转换到Excel工作表中。
导入的方法有二,一是使用“文件-打开”菜单,二是使用“数据-导入外部数据-导入数据”菜单,两者都是打开导入向导,按向导一步步完成对数据文件的导入。
(4)数据的筛选数据的筛选是从大数据表单中选出分析所要用的数据。
Excel 中提供了两种数据的筛选操作,即“自动筛选”和“高级筛选”。
(6)数据的分组数据分组是将数据整理形成汇总表或频数分布表的过程。
(5)数据的排序数据的排序是将数据的次序排列整理并显示出来的过程。
7)数据文件的保存保存经过初步处理的Excel数据文件。
课内计算实验报告

实验名称:课内计算实验实验目的:1. 熟悉并掌握常用的计算方法。
2. 提高数学计算能力,培养严谨的数学思维。
3. 通过实验,加深对数学理论知识的理解。
实验时间:2023年3月15日实验地点:教室实验器材:计算器、笔记本、白板实验步骤:一、实验准备1. 学生提前复习相关数学知识,熟悉实验所需计算方法。
2. 教师讲解实验目的、步骤和注意事项。
二、实验过程1. 计算题目一:求下列各式的值。
(1)$ \sqrt{16} $(2)$ 3^2 $(3)$ \frac{5}{7} \times \frac{3}{4} $(4)$ \frac{7}{12} \div \frac{3}{4} $2. 计算题目二:求下列函数在指定区间的最大值和最小值。
(1)$ f(x) = x^2 - 2x + 1 $,在区间$[-1, 3]$上求最大值和最小值。
(2)$ g(x) = \frac{1}{x} + 2x $,在区间$[1, 2]$上求最大值和最小值。
3. 计算题目三:解下列方程。
(1)$ 2x + 3 = 7 $(2)$ 3x^2 - 5x + 2 = 0 $三、实验结果与分析1. 计算题目一结果如下:(1)$ \sqrt{16} = 4 $(2)$ 3^2 = 9 $(3)$ \frac{5}{7} \times \frac{3}{4} = \frac{15}{28} $(4)$ \frac{7}{12} \div \frac{3}{4} = \frac{7}{9} $2. 计算题目二结果如下:(1)$ f(x) = x^2 - 2x + 1 $,在区间$[-1, 3]$上求最大值和最小值。
- 当$ x = 1 $时,$ f(x) $取得最小值$ f(1) = 0 $。
- 当$ x = 3 $时,$ f(x) $取得最大值$ f(3) = 4 $。
(2)$ g(x) = \frac{1}{x} + 2x $,在区间$[1, 2]$上求最大值和最小值。
算法设计与分析实验报告

算法设计与分析报告学生姓名学号专业班级指导教师完成时间目录一、课程内容 (3)二、算法分析 (3)1、分治法 (3)(1)分治法核心思想 (3)(2)MaxMin算法分析 (3)2、动态规划 (4)(1)动态规划核心思想 (4)(2)矩阵连乘算法分析 (5)3、贪心法 (5)(1)贪心法核心思想 (5)(2)背包问题算法分析 (6)(3)装载问题算法分析 (7)4、回溯法 (7)(1)回溯法核心思想 (7)(2)N皇后问题非递归算法分析 (7)(3)N皇后问题递归算法分析 (8)三、例子说明 (9)1、MaxMin问题 (9)2、矩阵连乘 (10)3、背包问题 (10)4、最优装载 (10)5、N皇后问题(非递归) (11)6、N皇后问题(递归) (11)四、心得体会 (12)五、算法对应的例子代码 (12)1、求最大值最小值 (12)2、矩阵连乘问题 (13)3、背包问题 (15)4、装载问题 (17)5、N皇后问题(非递归) (19)6、N皇后问题(递归) (20)一、课程内容1、分治法,求最大值最小值,maxmin算法;2、动态规划,矩阵连乘,求最少连乘次数;3、贪心法,1)背包问题,2)装载问题;4、回溯法,N皇后问题的循环结构算法和递归结构算法。
二、算法分析1、分治法(1)分治法核心思想当要求解一个输入规模为n,且n的取值相当大的问题时,直接求解往往是非常困难的。
如果问题可以将n个输入分成k个不同子集合,得到k个不同的可独立求解的子问题,其中1<k≤n, 而且子问题与原问题性质相同,原问题的解可由这些子问题的解合并得出。
那末,这类问题可以用分治法求解。
分治法的核心技术1)子问题的划分技术.2)递归技术。
反复使用分治策略将这些子问题分成更小的同类型子问题,直至产生出不用进一步细分就可求解的子问题。
3)合并技术.(2)MaxMin算法分析问题:在含有n个不同元素的集合中同时找出它的最大和最小元素。
关于遗传算法的实验报告

关于遗传算法得实验报告一、实验目得:ﻩ理解与掌握遗传算法得应用及意义,能用一门自己擅长得语言实现遗传算法得基本功能,在此基础上进一步理解与巩固对遗传算法得重要,以便在今后得学习与工作中能有效得运用与借鉴!需要指出得就是遗传算法并不就是能保证所得到得就就是最佳得答案但通过一定得方法可以将误差控制在一定得范围内!二、实验原理与题目:1、遗传算法就是一种基于空间搜索得算法,它通过自然选择、遗传、变异等操作以及达尔文得适者生存得理论,模拟自然进化过程来寻找所求问题得答案。
其求解过程就是个最优化得过程。
一般遗传算法得主要步骤如下:(1)随机产生一个确定长度得特征字符串组成得初始种群。
(2)对该字符串种群迭代地执行下面得步骤a与步骤b,直到满足停止准则为止:a计算种群中每个个体字符串得适应值;b应用复制、交叉与变异等遗传算子产生下一代种群。
(3)把在后代中表现得最好得个体字符串指定为遗传算法得执行结果,即为问题得一个解。
2、通过编码、设置种群、设置适应度函数、遗传操作、解码产生需要得解。
f(x)=x*sin(x)+1,x∈[0,2π],求解f(x)得最大值与最小值。
三、实验条件硬件:微型计算机。
ﻩ语言:本实验选用得为C++语言。
四、实验内容:建造针对f(x)得遗传算法程序,然后进行运行求解。
五、实验步骤:ﻩ1、确定基本功能:本实验就是实现f(x)得最大值与最小值得求解。
2、对f(x)进行编码:用一个二进制矢量表示一个染色体,由染色体来代表变量x得实数值,这里精度取小数点后6位数,变量x得域长为2π,整个区间被分为2π*1000000个等长得区间。
由于2π*1000000在23位二进制数得表示范围呢,所以,编码长度为23位。
3、设计适应度函数:由于要求f(x)得最值,所以适应度函数可根据f(x)做适当得改变。
最大值:f(x)=x*sin(x)+5;最小值:f(x)=1/(x*sin(x)+5);4、针对f(x)得设计并且实现遗传算法程序:遗传操作主要包括复制、交叉与变异。
多元最大值与最小值的求解方法

多元最大值与最小值的求解方法在数学中,求解多元最大值和最小值是一项非常重要的任务。
这是因为在实际生活和科学研究中,很多问题需要找到一个最优解或最劣解,而这些问题往往涉及到多个变量。
最常用的求解多元最大值和最小值的方法有两种:一种是解析法,另一种是数值法。
解析法是指通过解方程或求导等数学方法,得到问题的解析解。
因此,这种方法要求问题的解具有解析解的形式。
例如,对于二元函数$y=f(x_1, x_2)$,如果它的偏导数存在、连续,且二阶偏导数均存在,那么我们可以使用偏导数法求解它的最大值和最小值。
以某个例子为说明,假设有二元函数$f(x_1,x_2)=x_1^2+2x_1x_2+x_2^2-4x_1-6x_2$,我们需要求解它的最小值。
我们先计算出它的两个偏导数:$\frac{\partial f}{\partial x_1}=2x_1+2x_2-4$$\frac{\partial f}{\partial x_2}=2x_1+2x_2-6$把这两个方程联立,再解出$x_1$和$x_2$的值,即可得到$f(x_1,x_2)$的最小值。
但是,在实际问题中,有很多函数都没有解析解,或者解析解非常复杂难以求得。
这时,我们就需要采用数值法求解多元最大值和最小值。
数值法是指通过数值逼近的方式,求出函数在一定范围内的最大值和最小值。
一般来说,数值法分为两类:最优化算法和随机化算法。
最优化算法是指一种寻找全局最优解或局部最优解的算法。
常见的最优化算法包括梯度下降、拟牛顿法、共轭梯度法、Nelder-Mead法等。
这些算法都是基于给定的函数和初始解,通过迭代计算,最终寻找到函数的最优解。
随机化算法是指一种通过随机操作来寻找解的算法。
其中,蒙特卡罗方法是最为典型的一种。
蒙特卡罗方法通过随机采样生成许多点,再通过这些点的统计信息得到函数的最优解。
这种方法在计算比较复杂或无法求导的函数时特别有用。
同时,求解多元最大值和最小值的数值方法还有其他一些方法,例如遗传算法、模拟退火算法、粒子群优化算法等,都可以在特定条件下得到较好的结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五求最大值和最小值
实验日期:2013-11-13
学校:安徽农业大学经济技术学院星期:三节次:1、2 实验课时:姓名:江珊珊学号:专业、班级:通信三班得分:
1、实验目的
(1)、学习子程序的定义和调用方法。
(2)、掌握子程序设计、调试。
2、实验内容
对内存中给定的几个无符号字节数,求其最大值和最小值。
3、实验步骤
(1)在内存4000H~4007H中写入任意八个字节的数。
(2开始运行程序。
4、实验运行结果:
编程代码如下所示:
ORG 0100H
START0: MOV SI,4000H
MOV CX,0008
MAXMIN:MOV BH,[SI]
MOV BL,BH
CON2: LODSB
CMP AL,BH
JNA X1
MOV BH,AL
JMP X2
X1: CMP AL,BL
JNB X2
MOV BL,AL
X2: LOOP CON2
MOV AH,4CH
INT 21H
结果截图如下所示:
5、思考题解答
按如下要求编写程序:
设4000H单元开始有10个数,编程计算这十个数的平均值(存放在DH中),并统计这十个数中,大于平均值的个数(存放在DL中)。
找出这十个数的最大值和最小值(存在在BH和BL 中)
(1)其求平均值并将10个数中大于平均值的个数保存到DL中的编程如下所示:
MOV SI,4000H
MOV AX,0
MOV BH,0
ABC:MOV BL,[SI]
ADD AX,BX
INC SI
LOOP ABC
MOV CL,10
DIV CL
MOV DH,AL
MOV SI,4000H
MOV DL,0
CON1:LODSB
CMP AL,DH
JNA X1
INC DL
X1:LOOP CON1
MOV AH,4CH
INT 21H
其执行结果截图(一)如下所示:
(2)求10个数中的最大和最小值分别放在BH和BL中:其编程如下所示:
ORG 0100H
START0: MOV SI,4000H
MOV CX,0010
MAXMIN:MOV BH,[SI]
MOV BL,BH
CON2: LODSB
CMP AL,BH
JNA X1
MOV BH,AL
JMP X2
X1: CMP AL,BL
JNB X2
MOV BL,AL
X2: LOOP CON2
MOV AH,4CH
INT 21H
其运行结果截图(二)如下:
2、在变量BUFF中存放10个有符号字节数,编程实现如下功能:统计此数据区中正数、负数和零的个数,并分别将统计结果保存在字节变量AH、AL和BL。
此程序的编程如下所示:(取DB为20H,30H,40H,50H,60H,70H,0,90H,0,0B2H)
ASSUME CS:CSEG,SS:SSEG,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV AH,0
MOV DH,0
MOV SI,OFFSET BUFF
MOV CX,10
LLL1:MOV AL,[SI]
INC SI
CMP AL,0
JZ ZERO
JG ZHENGSHU
FUSHU:INC BH
JMP LOOP11
ZERO:INC DH
JMP LOOP11 ZHENGSHU:INC AH
LOOP11:LOOP LLL1
MOV AL,BH
MOV BL,DH
HLT
其运行结果截图如下所示:。