计算机科学与专业技术第4次上机试验_第1页
计算机科学与专业技术第4次上机试验_第2页
计算机科学与专业技术第4次上机试验_第3页
计算机科学与专业技术第4次上机试验_第4页
计算机科学与专业技术第4次上机试验_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机科学与技术第4次上机实 验作者:日期:姓 名:号:实验时间:哈尔滨工程大学程序设计基础实验报告基础实践一麦豆班 级:2018 年5 月3 H成绩哈尔滨工程大学计算机基础课程教学中心实验题目 1:写一个函数,Sn=a+aa+aaa+ +aa a求多项式的前n项和,其中Q是一个数字。n由键盘输入。设计思想:声明函数sum,利用循环求得sum最终值并返回sum值实验代码及注释:#include int sum(int a,int n);/sum 函数声明int main()e 慝 OT、=E+Orlunofluno。(+CHVH上)0 oJiunoo aunoo lu-1 1U 一 oHlun

2、s lu-(u -u 一culu-Ens lu-ouruoEns 济国旺軽、(uOJ)Ensc=up 案采矣凰 P%=t3u 匸 d 二 udord 八PXP%HUPOSFcvunJ耀松BU 匸 d寸1U 一c1U 一return sum;验证与D:C语言项目四次上机实验憾目1 :写一函数binD乱ug邀目1 :写Y函敷已灼I请输人臥小:1 4前4J页和为1234Process returned 0 (0x0)execution time : 3.672 sPress any key to continue.总结与心得体会:声明函数时后而一定要有分号,但写函数时不需要。实验题目2:编程实现求2

3、0000以内的回文数。其中,函数实现判断任一正整数是否为回文数。所谓回文数就是将一个数从左向右读与从右向左读是一样的,例如121和1331都是回文数。设计思想:声明judje函数,判断number是否为回文数。在函数内部 先判断数字number位数,由于回文数为对称结构,故通过位数来确 定判断次数,每次判断数字首位与个位然后去掉首位与个位再次判断 直至循环结束。另外需要对个位数另行判断,个位数一定为回文数。 如果为回文数返回1,否则返回0。实验代码及注释:#include #include int judje(int number);/声明 judje 函数int main()int i;mi

4、ddle_number=middle_number/10;对数字除以 10 直到为for(i=0;i10000;i+)if(judje(i)=l)/judje 为 1 的数输出printf(”dt“,i);return 0;int judje(int number)/判断 number 是否为回文数int judjeJ=O,middle_number,parityJ;/回文数判断变量,数字位数, 数字位数中间变量,数字位数奇偶int middle_number2;/取掉首位个位剩余数int shouwei,gewei;首位,个位middle_number2=number; 全部赋初值middl

5、e _nu mber 二 nu mber;do判断数字位数while (middle_number!=O);parity二i/2;运算次数for (j=l;j=parity;j+)shouwei=middle_number/pow(10.0,(double)(i-2*j+l); 首位数字gewei=middle_number2%10;/ 个位数字middle_number2=(middle_number2-shouwei*pow(10.0,(double)(i-2*j+1)/20;将首位与个位去除后剩余的数if(shouwei=gewei) & j二二parity)/个位与首位相等且都己 比较

6、完成judje=l;/l 为真 else if(shouwei!=gewei)judje 二 0; break;if (parity二二0) 如果为个位数一定为回文数judje=l;return judje;D:Cii肓项目嘗四次上肌实验求10000以内的回binDebug10000以内的回翊心已13 4 6 7 9 190467 9616161 1616161616161 113467 91346 7 913 4 6 7 9 1346 719505050 505050505050 L Qd 4 6 7 9 1 3 4 6 7 912 4 5 7 8 1245 7 8494949 494949

7、4949 生 9 oo L 2 4 5 7 8 1 2 4 5 7 812 4 5 7 8 1245 7 8 00 8383 00 oo 8 3 8 oo 8 n.o 8 od 8 3 co 7L2457I812457 CO12 4 5 7 8 L 2 4 5 7 s 2 7 2 7 2 7 s 2 7 2 7 2 7 2 7 2 7 2 7 6L245 7I8124578 48912 4 5 7 8 1245 7 8161616 - AO - 一 fo - - 1X _O 一 Ao - - AO 5L2457I8124578time : 0.12 4 5 7S1245 7 80505 050

8、 5 0 5 0 5 0 5 0 5 0 5L245 7I8124 5 78I | 9 2 3 5689494949 -y Ay Ay -y -y -y 9 2 3 5 6 8 9 2 3 5 6 s 92 3 5 6 COlu23 5 6009(ont 2 3 5 6 8 9 3 8 3 8 3 8 8 90 2 3 8 3 8 3 8 3 8 3 8 o c g 2 3 5 6 8 9 2 3 5 6 8 9177222373525676828979222237735225677682289779 returned126318118rocessress any key to总结与心得体会:

9、通过函数可以使代码更加简洁,流程更加清晰。实验题目3:假设你每月在储蓄账户上存200元,年利率是5%,则每月的利率是0.0硏2二0.00417。第一个月后,账户上的值变成100*(1+0.00417)=100.417;第二个月后,账户上的值变成(100+100.417) *(1+0.00417)=201.252;第三个月后,账户上的值变成(100+201.252)* (1+0.00417) =302.507,以此类推。写一个函数,根据用户输入的每月的存款数、年利率和月份数,计算给定月份后账户上的钱数。设计思想:声明final_money,由题意可知每个月钱数为上个月钱数加每月存的钱数乘以每月利

10、率,在函数内部由循环得到钱数,返回final_moneyo实验代码及注释:#include double final_money(double money,double lilvjnt n);函数声明 int main()double moneyjilv;/每月存款数年利率int n;月份printff请输入每月存款数、年利率和存款月份数(以空格隔开):n);scanf(%lf%lf%d,&money,&lilv,&n);printf(账户上的剩余钱数为 %.3lf/final_money(moneyjilv,n);return 0;double final_money(double mone

11、y,double lilvjnt n)存款数、年利率和月份数double final_money=0;/赋初值int i;循环变量for(i=l;i 二 n ;i+)final_money=(final _money+money)*(l+lilv/12);/ 表达式return final_money;/ 返回钱数验证与结论:* D :GB言项目嘗四次上机实验存款钱数甘nDeb u g存款钱数.exe请输人每月存款数、年刑率和存款月佛数(以空格隔开):100 0. 05 3302.507Process ratuined 0 (0x0) execution timm : 33. 819 s Pr

12、ess any key to continue.总结与心得体会:函数参数可以是多个但返回值只有一个。实验题目4:用递归法将一个整数n转换成字符串。例如,输入483,应输出的字符串“483”,n的位数不确定,可以是任意位数的整数。设计思想:声明函数,在函数将数每次除以20反复递归调用直到为return 0;void change(int n)int i;i=n/10;if (i!二 0)change(i);对n每次除以10反复递归调用直到为0putchar(n%10+0);/余数加上O可以产生相应的字符:* D:CmWSgM四次上机实验儼出字符邸binDebug債出字符目巳3483 :48串n:

13、符裁字整应A相请输,Process returned 0 (0r0) execution time : 18. 200 s Press any key to continue.总结与心得体会:余数可以加上48来得到相应的字符但加会更加简单。函数递归必 须要有限制条件,转换字符串函数限制条件就是i为Oo实验题目5:用递归方法求n阶勒让德多项式的值。设计思想:直接利用函数递归,当阶数值为o返回1,阶数值为1返 回输入的数。另外阶数值在递归时需要强制转换为float类型,否则 式子计算为整型数。实验代码及注释:#include float number(float x,int n);函数声明int

14、main()int n;/ 阶数 float x; 循环变量充当输入的数 printf(nit输入x值和阶数:n“); scanf(%f%d/&x,&n); printf(%.2fn,number(x,n); return 0;float number(float x,int n)if(n=0)return 1;else if(n=l)return x;return(2*n-l)*x*number(x,n-l)/(float)n-(n-l)*number(x/n-2)/(float)n;/ 递归求 n阶勒让德多项式注意n为整数需要强制转换验证与结论 D:C這言項目僚四次上机冥验门阶勒让德雾项式

15、binDubugn阶勒让德多项式ux巳幘输人丈值和阶数:8.8 425946. 65Process returned 0 (0x0)executi门 time : &.991 sPress any key to continue.总结与心得体会:递归是c语言中最基础也是极为重要的算法,核心 是函数自身对自身的调用。注意整型除以整型仍为整型,故需要对阶 数值强制转换。实验题目6:编程求20以内正整数的阶乘。要求:写一函数求任一 整数的阶乘,在函数内部通过定义静态局部变量求阶乘。设计思想:声明一个factorial函数,在函数内部定义静态变量,利用 循环求阶乘值,由于局部静态变量会保留上一次运行的

16、值,故求20 以内正整数的阶乘只能调用一次factorial函数,求19的阶乘然后利 用循环从19往下输出直到1的阶乘。实验代码及注释:#include long long factorial(int number);函数声明int main()int i=19;long long x;数据极大必须用longlong数据类型 x=factorial(i);/仅调用一次函数printf(“ld“,x);for(i=19;i0;i-)printf(%d!%lldnJ/x);/longlong 用1忆输出x/二i;除掉之后多余的数的到当前i的阶乘return 0;long long factoria

17、l(int number)/求任意整数阶乘函数static long long y二1;/静态变量只赋一次初值以后函数调用会保 留上一次的值int i;for (i=l;inumber;i+)y=y*(i+l); 用循环求阶乘return y;返回阶乘值D:C這言项目庠四次上机实验WWbi nDebug阶乘.exe121645100408832000355687428096000#20922789888000 6227020800479001600.3628800136288087654 Qo 212462140320 5040 是720Process returned 0 (0x0,) exscution tints : 0. 542 g Press any key to corrticue.总结与心得体会:局部静态变量会保留上一次运行的值,故在此题中 只调用了一次函数.另外由于20以上阶乘数极大,声明类型时用了 longlong类型。实验题目7:编程实现两个整形变量内容互换。用带参数的宏实现变量内容的交换。设计思想:直接用带参数的宏充当函数来对两个整型变量交换。实验代码及注释:#include #define change(xy) mid二x;x 二 y;y二mid 宏定义两个整形变量内容互换int main()int x,y,mid;printf(iW

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论