西安交大数学实验报告

时间:2024.4.29

数学实验报告

题目:四种特殊自然数编程

作者:

学号:

班级:

1. 题目:四种特殊自然数编程,计算出所有的水仙花数,完美数,

亲和数,回文数。

2. 环境:Windows系统 PC MATLAB软件

3. 问题分析

1) 水仙花数:若一个自然数的各位数字的立方和等于该数本身,

则称该自然数为水仙花数。

由水仙花数的定义可知,首先要将一个三位数的百位,十位,个位三个数字分离出来,

同时用for-end循环语句对自然数赋值,然后将三个数字分别赋值给三个变量(如a,b,c),用if条件语句选出符合水仙花数定义的自然数即可。

2) 完美数:对于一个自然数而言,若它的真因子之和小于数本身,

则称该数为盈数,若它的真因子之和大于数本身,则称该数为亏数,若它的真因子之和等于数本身,则称该数为完美数(完全数)。(它的两个特点:它可以写成若干连续自然数之和;它的全部因数的倒数和都是2)

首先考虑到要输出一系列满足条件的自然数,可以使用for-end循环语句,在一定范围内(在此我们考虑2~10000内的自然数)对每一个自然数进行完美数的验证,可以赋值i=2:1:10000,然后就要找出每一个自然数的所有真因子,在此又需要用for-end语句找出一个自然数的所有真因子,分离出真因子并赋值给一个变量如b,最后将所有真因子的和与该自然数比较,此时需要if条件语句,筛选出符合条件的自然数后输出即可。

3) 亲和数:亲和数又叫友好数,是指两个自然数,其中每个自然

数的真因子数之和等于另一个数。例如:220与284就是一对亲和数。

类比完美数,亲和数同样需要求出一个自然数的所有真因子,在此需求出两个自然数的所有真因子对应的和,然后比较。首先需要使用for-end循环语句,while-end循环语句以及if-end条件语句求出一定范围内(在此以2~10000为例)每一个自然数的所有真因子,然后用赋值语句赋值多个变量,利用这些变量以及if-end条件语句选择符合条件的自然数组即可。

4) 回文数:对于一个自然数,若将各位数字倒叙排除,加到原来

的数字上,反复这样多次后,若能得到一个从左到右读与从右到左读完全一样的数,则称该自然数能产生回文数或者对称数。 首先我们可以选定取值范围(在此去1~100),其次我们需要使用

赋值语言,同时需要将数字倒叙的程序,然后用循环和选择语句,即可选出1~100的回文数。

4. 问题解答(实验过程)

1) 水仙花数的编程代码 for i=100:1:999

a=mod(i,10);

b=mod(((i-a)/10),10); c=(i-10*b-a)/100; if i==a^3+b^3+c^3 i

end

end

2) 完美数编程代码 for i=2:1:10000;

a=0;

for b=1:1:i-1

if mod(i,b)==0 a=a+b; end

end

if i==a

i

end

end

3) 亲和数编程代码 for a=2:1:10000

t=1;

n=2;

s=sqrt(a);

s=fix(s);

if a==s^2

t=t+s;

end

while n<s

m=mod(a,n); if m==0

t=t+n+a/n; end

n=n+1;

end

if t>a

b=t;

l=1;

d=2;

p=sqrt(b); p=fix(p);

if b==p^2

l=l+p;

end

while d<p

m=mod(b,d); if m==0

l=l+d+b/d; end

d=d+1;

end

if l==a

[a,b]

end

end

end

4) 回文数编程代码 clear;clc

for n=1:1000

t=0; p=0;

c=n; c1=n;

while p<2

while (c>0)

t=t*10+mod(c,10);

c=c/10;

c=fix(c);

end

if c1==t

fprintf('huiwenshu=%d\n',n);

p=1001;

else

c=t+c1;

p=p+1;

c1=c;

t=0;

end

end

end

5. 实验结果

1)所有水仙花数:153 370 371 407

2)2~10000的所有完美数:6,28,496,8128

3)2~10000的所有亲和数组:220 284, 1184 1210, 2620 2924,5020 5564,6232 6368

4)能产生无数个回文数,有无数个能产生回文数的数,二者最小的数都是1.

6.结果分析

1)水仙花数

153=1^3+5^3+3^3 370=3^3+7^3+0^3

371=3^3+7^3+1^3 407=4^3+0^3+7^3

都符合水仙花数定义

2)完美数

6的所有真因子为1,2,3且6=1+2+3

28的所有真因子为1,2,4,7,14且28=1+2+4+7+14

496有真因子为1,2,4,8,16,31,62,124,248且

496=1+2+4+8+16+31+62+124+248

8128的所有真因子为1,2,4,8,16,32,64,127,254,508,1016,2032,4064.

8128=1+2+4+8+16+32+64+127+254+508+1016+2032+4064

都符合完美数定义

3)亲和数

220的真因子:1,2,4,5,10,11,20,22,44,55,110

284的真因子:1,2,4,71,142

220=1+2+4+71+142 284=1+2+4+5+10+11+20+22+44+55+110

二者符合亲和数定义

1184的真因子:1,2,4,8,16,32,37,74,148,296,592 1210的真因子:1,2,5,10,11,22,55,110,121,242,605 二者符合亲和数定义

2620的真因子:1,2,4,5,10,20,131,262,524,655,1310 2924的真因子:1,2,4,17,34,43,68,86,172,731,1462 二者符合亲和数定义

5020的真因子:1,2,4,5,10,20,251,502,1004,1255,2510 5564的真因子:1,2,4,13,26,52,107,214,428,1391,2782 二者符合亲和数定义

6232的真因子:1,2,4,8,19,38,41,76,82,152,164,328,779,1558,3116

6368的真因子:1,2,4,8,16,32,199,398,796,1592,3184 二者符合亲和数定义

4)回文数

1+1=2 2是回文数 1是产生回文数最小的自然数

7.实验反思与结论

第一次做数学实验,第一次接触MATLAB软件,第一次进行简单编程,有许多错误和茫然指出,我在不断的尝试努力中进步着。

通过这次数学实验,我基本掌握了for-end,while-end循环语句以及if-end,if-else-end语句,同时还有各种赋值语句。当然还有MATLAB软件中的一些特殊符号,对实验理论课上学的一些基本操作更加熟练。最重要的是,很好的提高了我的数学逻辑思维,以及上机动手实验操作的能力,这对我以后的学习工作有很大帮助。


第二篇:西安交大C++第一章实验报告


西安交通大学实验报告

课程_C++程序设计教程_实验名称__ C++集成开发环境的使用____第    页    共    页

系    别___             _______ 实   验   日   期       年   月   日

专业班级_  ___组别___________ 实 验 报 告 日 期       年   月   日

姓    名________学号__ 报   告   退   发  ( 订正 、 重做  )

同 组 人_________________________________ 教 师 审 批 签 字

一.      实验目的

了解,学会,

1.C++程序基本要素和结构;

2.算法与程序;

3.用C++解块实际问题的步骤。

二.      实验内容

(-)实验题目一:修改例1-3的加法计算程序,编写一个乘法计算器程序。

1.要点分析

为了可以计算乘法,需要使用支持实数运算的双精度(double)数据类型的变量a,b,c进行运算。

程序在接收输入数据之前,首先显示一行提示信息,告诉用户应该如何输入数据,并在输入结果的同时输出计算公式。

2.程序源代码

#include <iostream.h>

int main()

{

     double  a,b,c;   //定义3个可对实数进行操作的双精度类型变量

     cout<<"Please input two numbers: ";

     cin>>a>>b;

     c = a*b;

     cout<<a<<"*"<<b<<"="<<c<<endl;

     return 0;

}

   3实验结果

(二)实验题目二:参考例1-5,使用梯形法计算下列定积分值。

                    

其中,积分区域等分数可取为200,并比较计算结果和手算结果。

1.要点分析

不失一般性,将积分区域等分为n(这里题目给出是200)份,其中第i个小区间上的定积分

可以使用梯形面积来近似表示。

(f(a+ih)+f(a+(i+1)h))

因此整个积分区域上的定积分可以表示为

(f(a+ih)+f(a+(i+1)h))=h()

2.程序源代码

#include <iostream.h> // 用梯形法计算定积分

#include <math.h> //包含标准数学函数的math.h函数库

int main()

{  

    double a=-1.0, b=1.0;  // 双精度类型变量: 积分上下限

    double h;  // 双精度类型变量: 积分步长

    double sum;// 双精度类型变量: 存放最后为积分值

    int n=200; // 整型变量 : 积分区间等分数

    int i=-1;  // 整型变量 : 循环工作变量

    h = (b-a)/n;// 计算小区间长度

    sum=(sin(a)+exp(a)+sin(b)+exp(b))/2;

    for(i=1;i<n;i=i+1)     // 循环计算公式中的Σ和式

       sum=sum+(sin(a+i*h)+exp(a+i*h));

        sum=sum*h;

    // 输出计算结果

    cout<<"The result is " << sum << endl;

    return 0;

}

3实验结果

(三)实验题目三: 实现整数拼接。即输入两个只有二位十进制的整数,将这两个整数拼接成四位十进制数,两个数中较大的数放在高位上,较小的数放在低位上。例如:输入45和89,则输出整数8945。

1.要点分析

按题目要求,欲要得到结果,必须先找到哪个是两个数中最大的一个。需要使用支持实数运算的双精度(double)数据类型的变量p,q,r进行运算。

如果p>q,则r自然等于p*100+q

因为不会出现p=q的情况,所以另一种情况只能是p<q,则r就等于q*100+p

2.程序源代码

#include <iostream.h>

int main()

{

    //说明3个整行变量

     double  p,q,r;

//提示用户由键盘输入两个正整数

     cout<<"Please input two numbers: "<<endl;

     cin>>p>>q;

     if(p>q)

     {

        r = p*100+q;

     }

     else

        r=q*100+p;

     cout<<r<<endl;

     return 0;

}

3实验结果

(四)实验题目四: 编写程序:实现在屏幕上输出汉字“曲”的形状。(提示:采用英文字符*构成图案形状)

1.要点分析

根据题目要求,程序要显示八行表示“曲”字的横竖比划的“*”符号。

一个空格算一个字符。

所以可以用空格和“*”来表示“曲”字。

2.程序源代码

#include <iostream.h>

int main()

{  

    cout<< "    *  *    " << endl;

    cout<< "    *  *    " << endl;

    cout<< " **********" << endl;

    cout<< " *  *  *  *" << endl;

    cout<< " *  *  *  *" << endl;

    cout<< " **********" << endl;

    cout<< " *  *  *  *" << endl;

    cout<< " *  *  *  *" << endl;

    cout<< " **********" << endl;

    return 0;

}

3实验结果

三.      个人小结

本人的收获:

(1)  对用C++语言编写较简单的程序程有了一定的了解。

(2)  对课本上的几个例题基本上都已领略了个中精髓。

(3)  在学习过程中,遇到了不少困难,比如有些东西还是很难,无法理解,发现了一些有待解决的问题。

(4)  最后一题,本来自己没有一点思路,看了例题,却不知如何办才好,多亏和同班的同学探讨了一番,受益颇深。

更多相关推荐:
东南大学高等数学实验报告

高等数学数学实验报告实验人员院系学号姓名实验地点计算机中心机房实验一一实验题目设数列xn由下列递推关系式给出x观察数列1x111x211xn1112xn1xnxnn122的极限二实验目的和意义利用数形结合的方法...

大学数学实验报告----素数

数学实验报告实验五素数学院:数学与信息科学学院班级:09级数学(4)班姓名:***学号:***实验五素数

北京科技大学数学实验报告---第7次

数学实验报告实验名称matlab学院专业班级姓名学号20xx年6月一实验目的通过课后习题的练习掌握利用matlab进行概率运算和数理统计的方法二实验任务完成习题14和15加深matlab在概率计算和数理统计的应...

重庆大学数学实验实验报告(参考)

重庆大学学生实验报告实验课程名称数学实验开课实验室学院年级专业班学生姓名学号开课时间学期数学与统计学院制开课学院实验室数学与统计DS1421实验时间20xx年3月23日

数学实验报告

西安交通大学数学实验报告高等数学实验报告MATLAB实验操作报告同组人髙加西20xx年04月10日电气工程学院电气工程与自动化专业电气12崔彧菲西安交通大学数学实验报告实验一非线性方程组求解一实验目的1熟悉MA...

数学实验报告

数学实验报告20xx年12月16日西安交通大学数学实验报告数学实验报告题目一实验目的1练习使用matlab软件2掌握使用循环语句判断语句等编写程序3掌握绘图的方法4能用matlab编写程序解决实际数学问题二实验...

数学实验报告

数学实验报告学生姓名学号院部专业班级任课教师实验报告1实验课程大学数学实验实验名称Mathematica入门实验日期20xx911指导老师费文龙专业统计学年级20xx姓名陆莹学号20xx1315021得分实验目...

兰州大学数学与统计学院20xx年本科教学质量报告

兰州大学数学与统计学院20xx年本科教学质量报告二一三年四月目录第一部分本科教育基本情况第1页第二部分师资队伍建设第2页第三部分第四部分第五部分第六部分第七部分教学建设与改革教学质量保障体系学生成长与发展特色发...

武汉大学数学与统计学院 数值分析实验报告

武汉大学数学与统计学院数值分析实验报告武汉大学数学与统计学院数值分析原始书记记录实验名称关于正定矩阵cholesky分解的研究实验时间20xx年12月16日姓名雷锦江邢周华学号20xx3100017420xx3...

东华理工大学《数学实验》报告

东华理工大学数学实验报告学号姓名成绩实验名称定积分的近似计算一实验目的及要求掌握Excel产生均匀随机数的方法了解Excel的一些常用数学函数了解通过蒙特卡罗MonteCarlo方法模拟随机事件的方法二实验环境...

matlab——大学数学实验报告

济南大学20##~20##学年第二学期数学实验上机考试题班级计科1201学号##姓名##考试时间20##年6月17日授课教师##说明:每题分值20分。第5题,第6题,第7题和第8题可以任选其一,第9题和第10题…

武汉大学数学与统计学院 数值分析实验报告

武汉大学数学与统计学院数值分析实验报告234567891011武汉大学数学与统计学院数值分析原始书记记录实验名称关于正定矩阵cholesky分解的研究实验时间20xx年12月16日姓名雷锦江邢周华学号20xx3...

大学数学实验报告(36篇)