您好,欢迎访问三七文档
2010—2011学年第二学期《C语言程序设计Ⅱ》实验1班名:学号:姓名:1-1完成情况成绩等级评阅人评阅日期1234567实验1、函数一、实验目的1、进一步掌握函数的定义、调用、返回值以及值传递、地址传递的不同;2、理解并掌握函数的嵌套调用和函数的递归调用;3、了解全局变量和局部变量、动态变量、静态变量的概念和使用方法;4、熟悉进入和跳出函数的调试方法二、实验内容1、程序填空题(请填写适当的符号或语句,使程序实现其功能)下列程序的功能为:通过调用一个判断素数的函数isprime(),验证歌德巴赫猜想:即任何大于2的偶数均可表示为两个素数之和。例如:4=2+2(特例,仅此一个),6=3+3,8=3+5,…。程序要求输入任一偶数,输出6到该数范围内的各个满足条件的组合。#includestdio.hintisprime(intm){inti;for(i=2;m%i!=0;i++);return(【1】);}main(){intn,x,a,b;scanf(%d,&x);for(n=6;n=x;n+=2)for(a=3;a=n/2;a+=2)if(【2】){b=n-a;if(【3】){printf(“%d=%d+%d”,n,a,b);【4】;//退出a循环,判别下一个n的组合}}}2、程序调试题(纠正程序中存在错误,使程序实现其功能)函数fac()是用户自定义的一个用递归方法求任意整数阶乘的函数,在main函数中通过调用该函数求出一个三位整数n,其每位数字的阶乘之和正好等于该数本身,即x!+y!+z!=n。例如145=1!+4!+5!。程序中存在错误,请调试程序。#includestdio.h答案:【1】i=m【2】isprime(a)【3】isprime(b)【4】continue2010—2011学年第二学期《C语言程序设计Ⅱ》实验1班名:学号:姓名:1-2intfac(intm)//1{intf;//2if(m==0||m==1)//3f=1;//4else//5f=f*fac(m-1);//6returnf;//7}main(){inti,a,b,c;//8for(i=100;i=999;i++)//9{a=i/100;//10b=i%100/10;//11c=i%10;//12if(i=fac(a)+fac(b)+fac(c))//13printf(%d,i);//14}}3、编程题:编写程序:根据下面的要求,按所给的公式计算并输出结果。!)!(!mmnnCmn要求:⑴分别编写一个求阶乘n!的函数fac(n)、一个求组合数函数cnm(n,m);⑵编写主函数,由键盘输入n和m,通过嵌套调用①中的函数完成计算。⑶输入n和m要给出提示,并检查n和m的合理性,不合理的输入应输出错误信息,并不再进行计算。出错行号及正确答案://6f=m*fac(m-1);//13i==fac(a)+fac(b)+fac(c)主函数:#includestdio.hmain(){intcnm(intn,intm);intn,m;printf(Inputnumber:nm\n);scanf(%d,%d,&n,&m);if(nm||n0||m0)printf(输入错误\n);elseprintf(reslut%d\n,cnm(n,m));}阶乘函数fac(n):intfac(intn){intf;if(n==0||n==1)f=1;elsef=n*fac(n-1);returnf;}组合数函数cnm(n,m)::intcnm(intn,intm){intfac(intn);return(fac(n)/(fac(n-m)*fac(m)));}2010—2011学年第二学期《C语言程序设计Ⅱ》实验1班名:学号:姓名:1-34、编程题:用递归方法编写求Fibonacci数列第n项系数的函数fib(n),并且在main函数中调用该函数输出Fibonacci数列从第1项到第n项的系数,每行输出5项,n的值由用户从键盘输入。5、编程题:编程实现以下功能:在主函数中,由键盘输入10个整数存放在一维数组a中,并调用选择算法函数selectedsort对数组元素进行降序排列。其中的排序算法函数selectedsort调用findmax函数查找数组局部的最大值的下标位置。自定义函数的首部及功能如下:⑴intfindmax(intarr[],intstart,intend):该函数用于查找数组中从start到end之间的数组元素中最大值所在的下标位置;⑵voidselectedsort(intarr[],intn):该函数应用选择算法对n个数组元素进行降序排列。fib(n)函数:intfib(intn){intf;if(n==1||n==2)f=1;elsef=fib(n-1)+fib(n-2);returnf;}主函数:#includestdio.hmain(){intfib(intn);intn,i;printf(要输出几项:(n大于0));scanf(%d,&n);for(i=1;i=n;i++){printf(%12d,fib(i));if(i%5==0)printf(\n);}printf(\n);}#includestdio.hintfindMax(intarr[],intstart,intend){intk,i;k=start;for(i=start+1;i=end;i++)if(arr[i]arr[k])k=i;returnk;}voidselectedsort(intarr[],intn){inti,j,t;for(i=0;in-1;i++){j=findMax(arr,i,n-1);if(i!=j)t=arr[i],arr[i]=arr[j],arr[j]=t;}}main(){inta[10],i;for(i=0;i10;i++){printf(NO%d:,i+1);scanf(%d,&a[i]);}selectedsort(a,10);for(i=0;i10;i++)printf(%d,a[i]);printf(\n);}2010—2011学年第二学期《C语言程序设计Ⅱ》实验1班名:学号:姓名:1-46、分析以下程序的运行结果,然后运行程序验证自己的分析是否正确。#includestdio.hvoidf(intc){inta=0;staticintb=0;a++;b++;printf(%d:a=%d,b=%d\n,c,a,b);}main(){inti;for(i=1;i=3;i++)f(i);}7、分析以下程序的运行结果,然后运行程序验证自己的分析是否正确。#includestdio.hinta=10,b=20;main(){inta=1,c=0;c=a+b;printf(%d,,c);a++;b++;mysum(a,b);{inta=6,b=6;c=a+b;printf(%d,,c);}printf(%d\n,a+b);}intmysum(intx,inty){a++;b++;printf(%d\n,a+b);returnx+y;}本次实验小结(简介本次内容完成的情况,存在哪些问题,什么原因)分析的结果:1:a=1,b=12:a=1,b=23:a=1,b=3运行的结果:分析的结果:21,3312,24运行的结果:
三七文档所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文标题:C实验1-参考答案
链接地址:https://www.777doc.com/doc-4065403 .html