《作业与实验参考答案.ppt》由会员分享,可在线阅读,更多相关《作业与实验参考答案.ppt(100页珍藏版)》请在三一办公上搜索。
1、作业与实验参考答案,夏英杰,程序是如何炼成的?,程序设计四步曲:变量定义输入处理/计算输出,需要注意的问题:需要存放哪些值?并判断需要定义几个变量?每个变量需要定义为何种类型?需要输入几个值(判断哪些值是根据输入数据计算出来的,这些值不需要输入)经过哪些处理?如何处理?输出对象是谁?在何处输出?输入输出语句的格式!,-定义在本函数中用到的变量,-输入待处理的数据,-对输入的数据进行各种运算,-输出计算结果,作业二,1、输入一个华氏温度,要求输出摄氏温度。公式为:,#include void main(),变量定义输入处理输出,float C,F;scanf(%f,5/9.0*(F-32)5.0
2、/9.0*(F-32)5*(F-32)/9,#include void main()float C,F;printf(Input F:);scanf(%f,注意:变量的类型。除法运算符的使用;数学公式的表示。输入输出有文字说明。,2、编写程序,从键盘输入一个大写字母,将它转换为对应的小写字母后输出。(提示:同一个字母的大写比小写小32),#include void main(),变量定义输入处理输出,char ch;scanf(%c,#include void main()char ch;printf(Input ch:);scanf(%c,注意:变量的类型。同一个字母的大写比小写小32。输入
3、输出有文字说明。,3、编写程序,输入梯形的上底、下底和高,计算并输出梯形的面积。,#include void main(),变量定义输入处理输出,#include void main()float a,b,h,area;printf(Input a,b,h:);scanf(%f%f%f,实验三,1、编写程序,输入圆半径r,求圆周长、圆面积、圆球表面积、圆球体积。,#include void main(),变量定义输入处理输出,#define PI 3.1415926,float r,L,s1,s2,V;/不能写成以下形式s1 s2 s表 s,scanf(%f,/注意scanf函数的格式,L=2
4、*PI*r;s1=PI*r*r;s2=4*PI*r*r;V=4.0/3*PI*r*r*r;,printf(%f,%f,%f,%fn,L,s1,s2,V);,还可以写成:4/3.0*PI*r*r*r4.0/3.0*PI*r*r*r4*PI*r*r*r/3,#include#define PI 3.1415926void main()float r,L,s1,s2,V;printf(Input r:);scanf(%f,printf(L=%.2fn,2*PI*r);printf(s1=%.2fn,PI*r*r);printf(s2=%.2fn,4*PI*r*r);printf(V=%.2fn,4.
5、0/3*PI*r*r*r);,注意:#define命令的使用。变量的类型;变量名不能带下标或汉字,如s1、s表、s。scanf、printf函数的格式。除法运算符的使用;数学公式的表示。输入输出有文字说明,尽量不要使用汉字。,2、有三个电阻r1、r2、r3并联,编写程序计算并输出并联后的电阻r。已知电阻并联公式为:,#include void main(),float r,r1,r2,r3;/不能写成下标的形式r1,r2,r3,scanf(%f%f%f,/scanf函数的格式,r=1/(1/r1+1/r2+1/r3);,printf(r=%.2fn,r);,1/r=1/r1+1/r2+1/r3
6、;r=1/(1/r1+1/r2+1/r3);t=1/r1+1/r2+1/r3;r=1/t;r=r1*r2*r3/(r2*r3+r1*r3+r1*r2);,#include void main()float r,r1,r2,r3;printf(Input r1,r2,r3:);scanf(%f%f%f,注意:变量的类型;变量名不能带下标或汉字。scanf、printf函数的格式。数学公式的表示(不能赋值给表达式)。输入输出有文字说明;且尽量不要使用汉字。,3、由键盘输入一个10-99之间的整数,将该数分解,分别输出其个位数字和十位数字。例如,输入85,输出:5,8。提示:用算术运算中的整除和取余
7、运算实现。,#include void main(),int x,a,b;,scanf(%d,a=x%10;,printf(“a=%d,b=%dn,a,b);,b=x/10;,作业四,1、编写程序,输入三角形的三条边,计算并输出三角形的面积。(注意输入的三条边必须要能构成一个三角形)求三角形的面积公式为:其中s=(a+b+c)/2。,#include#include void main(),float a,b,c,s,area;,scanf(%f%f%f,s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);,printf(area=%.2fn,area);,#i
8、nclude void main(),变量定义输入处理输出,注意:变量的类型,本题应该是float或double。scanf、printf函数的格式:scanf(%f%f%f,/printf函数中常加其它说明字符,3.数学函数的使用方法;同时需加上#include double pow(double x,double y);,程序最前面写上:#include#include,求得的函数值的类型,a=pow(3.2,5);,double sqrt(double x);,area=sqrt(s*(s-a)*(s-b)*(s-c);,4.计算的顺序:先计算s,再计算area。-后面用到的值必须先计算
9、,s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(area=%.2fn,area);,5.输入提示语句printf必须在scanf函数之前:,printf(Input a,b,c:);scanf(%f%f%f,6.是否三角形的判断:任意两边之和大于第三条边,a+bc,b+ca,a+cb,&,&,&a0&b0&c0,if(),s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(area=%.2fn,area);,复合语句,#include#include void main()float a,b,c,
10、s,area;printf(Input a,b,c:);scanf(%f%f%f,输入提示语句应放在scanf函数之前,if(a+bc,else printf(It is not a triangle!n);,2、周期为T秒的人造卫星离地面的平均高度H的计算公式为:,其中:M=61024kg是地球质量,R=6.371106m是地球半径。编写程序,输入人造卫星的周期T,计算并输出人造卫星离地面的高度H。算法提示:求xy结果的数学函数是pow(x,y),1.变量的类型及个数:double T,H;,2.输入语句:scanf(“%lf”,/注意需要输入几个值,3.数学表达式的写法:x=6.67E-1
11、1*M*T*T/4*PI*PI;x=6.67E-11*M*T*T/(4*PI*PI);x=6.67E-11*M*T*T/4/PI/PI;H=pow(x,1.0/3)-R;x=pow(6.67E-11*M*T*T/(4*PI*PI),1.0/3);,4.输出语句:printf(%.2En,H);/较大的值用%E输出,#include#include#define PI 3.1415926void main()double M=6E24,R=6.371E6,T,H,x;printf(Input T:);scanf(%lf,#include#include#define PI 3.1415926#d
12、efine M 6E24#define R 6.371E6void main()double T,H,x;printf(nInput T:);scanf(%lf,Input T:86400H=3.59E+007,注意:变量的数据类型double型数据的输入实型常量的表示方法数学函数的使用,3、求任意三个整数的平均值。要求:输入数据与输出结果都应有相应的提示信息。且输出数据取小数点后两位数字显示。,#include void main(),printf(“Input 3 numbers:”);,scanf(%f%f%f,ave=(a+b+c)/3;,printf(“average=%.2fn,a
13、ve);,#include void main(),变量定义输入处理输出,float a,b,c,ave;,实验五,1、输入一个字符,并输出。其中有一个条件是如果该字符是小写的英文字母,则需把它转换成大写字母再输出。,问题:如何判断小写的英文字母?,小写字母:ch=a&ch=97&ch=122,#include void main()char ch;printf(Input ch:);scanf(%c,注意:如何判断小写的英文字母小写的英文字母比大写的英文字母ASCII值大32,2、输入年号,判断并输出该年是否为闰年。所谓闰年,是指能被4整除,但不能被100整除;或能被400整除的年份。,#i
14、nclude void main(),int year;,printf(Input year:);scanf(%d,if()printf(%d is a leap year.n,year);,year%4=0,year%100!=0,&,year%400=0,|,else printf(%d is not a leap year.n,year);,注意:如何判断一个数是否能被整除逻辑表达式的使用ifelse语句的使用,2.Input year:2004 2004 is a leap year.,Input year:2100 2100 is not a leap year.,#include
15、void main(),int year,a,b,c;printf(Input year:);scanf(%d,3、编写程序,输入一个字符存入变量ch中,根据该字符的ASCII码值判断并输出字符的类型,即字母(alpha)、数字(numeric)或其他字符(other)。,问题:如何判断一个字符的类型?,大写字母:ch=A&ch=65&ch=a&ch=97&ch=0&ch=48&ch=57,是否字母的判断:ch=A&ch=a&ch=65&ch=97&ch=65&ch=122 65=ch=90/不能连写,必须写成逻辑表达式,关系表达式书写原则:变量名在前,常量在后。如ch=A,#include
16、void main()char ch;printf(Input ch:);scanf(%c,/*ch=getchar();*/,/*ch=48&ch=57*/,注意:如何判断一个字符的类型逻辑表达式的使用ifelse多分支语句的用法if的表达式后面不能加分号“;”,实验结果的写法:3.Input ch:A alpha,Input ch:=other,/printf(%sn,other);,4、有一个函数,编写程序,输入x的值,计算并输出y值。,#include void main(),变量定义输入处理输出,if(x-1)y=x*x*x-1;,else if(x=1)y=-3*x+1;,/-1=
17、-1&x=1,else if(x=10)y=3*exp(2*x-1)+5;,else y=5*x+3*log10(2*x*x-1)-13;,/else(x10)/else if(x10),#include#include void main(),double x,y;,printf(Input x:);scanf(%lf,if(x-1)y=x*x*x-1;,else if(x=1)y=-3*x+1;,else if(x=10)y=3*exp(2*x-1)+5;,else y=5*x+3*log10(2*x*x-1)-13;,printf(y=%.2fn,y);,/*x=-1&x=1*/,/*x
18、1&x=10*/,注意:各种数学函数的使用ifelse多分支语句中表达式的写法if的表达式后面不能加分号“;”double型数据的输入应用%lf,4.Input x:-1 y=-2.00,Input x:1 y=-2.00,作业六,1、从键盘输入三个数,代表三条线段的长度。请编写程序,判断这三条线段组成的三角形是什么类型(等边、等腰、不等边或不能构成三角形)。,#include void main(),float a,b,c;,printf(Input a,b,c:);scanf(%f%f%f,if(a+bc&b+ca&c+ab),if(a=b,else if(a=b|b=c|c=a)prin
19、tf(It is a isosceles triangle!n);,else printf(It is a common triangle!n);,else printf(It is not a triangle!n);,注意:判断的顺序,即按什么顺序判断才能使程序简洁?判断原则:先判断特殊的逻辑表达式的使用if语句的嵌套,问题:请大家在学完dowhile语句后,限制输入的三条边长必须能构成三角形,否则要求重新输入。,1、,#include void main(),float a,b,c;,printf(Input a,b,c:);scanf(%f%f%f,if(a+b=c|b+c=a|c+a
20、=b)printf(It is not a triangle!n);,else if(a=b,else if(a=b|b=c|c=a)printf(It is a isosceles triangle!n);,else printf(It is a common triangle!n);,注意:使用多分支语句时的判断顺序两个实数是否相等的判断:fabs(a-b)1E-10,/if(!(a+bc&b+ca&c+ab),2、简单选择界面的编程,要求用switch实现多分支。从键盘输入整数,输出不同的字符串:输入1,输出Good morning;输入2,输出Good afternoon;输入3,输出
21、Good evening;输入4,输出Good night;输入其它数字,输出Bye-bye。,#include void main()int x;printf(Input x:);scanf(%d,2、用switch实现多分支,#include void main()int x;printf(Input x:);scanf(%d,3、从键盘输入若干整数,以0结束,判断并输出其中的最大数。,分析:假定第一个数就是最大数max,后面输入的每个数再与max比较,比max大则修改max的值,while(x!=0)if(xmax)max=x;scanf(%d,scanf(%d,int x,max;,p
22、rintf(max=%dn,max);,#include void main(),注意:在循环体最后读入新的x在while语句之前读入第一个数并赋值给max如何从多个数中找到最大数?while的表达式后面不能加分号“;”,1.5 3 4 12 10 1 0 max=12,4、输入一行字符,以回车键作为结束标志,分别统计出大写字母、小写字母、空格、数字和其它字符的个数。,#include void main(),变量定义输入处理输出,while(ch!=n),if(ch=A,else if(ch=a,else if(ch=)c=c+1;,else if(ch=0,else e=e+1;,/*ch
23、=32*/,问题:变量ch如何不断得到新值?,方法一:使用scanf函数scanf(%c,/读入其它字符/循环之前读入第一个字符,以便第一次判断表达式是否成立;循环体最后读入下一个字符,以便判断循环是否继续执行,方法二:使用getchar函数while(ch=getchar()!=n)if()/每次判断表达式时,先读入一个字符,赋值给变量ch,再判断ch是否等于n,因此不需要在循环之前或循环体最后读入字符,4、,#include void main()char ch;int a=0,b=0,c=0,d=0,e=0;printf(Input a string:);while(ch=getchar
24、()!=n)if(ch=A,注意:循环结束的条件?循环体要完成哪些操作?每次判断表达式之前必须读入下一个值是否等于空格的判断while的表达式后面不能加分号,实验七,1、分别用while、do-while和for语句计算(即求1!+2!+3!+20!),并试着简化程序。,分析:定义三个变量i:循环控制变量,从1逐渐增加到20sum:存放累加和;fact:存放i!,while(i=20)fact=fact*i;sum+=fact;i+;,i=1;sum=0;fact=1;,int i;double fact,sum;,printf(%.0lfn,sum);,#include void main(
25、),注意:在循环中逐步计算阶乘并求和循环控制变量的值需要修改在循环之前对某些变量赋值fact、sum的数据类型,1、do-while语句:,int i;double fact,sum;i=1;sum=0;fact=1;do fact=fact*i;sum+=fact;i+;while(i=20);printf(%.0lfn,sum);,#include void main(),注意:do-while语句中先执行循环体,后判断表达式while的表达式后面需要加分号“;”在循环之前对某些变量赋值,1、for语句:,#include void main(),int i;double fact,sum
26、;sum=0;fact=1;for(i=1;i=20;i+)fact*=i;sum+=fact;printf(%.0lfn,sum);,/for(i=1,fact=1,sum=0;i=20;i+),注意:for语句的格式在循环之前对某些变量赋值,2、计算:,#include void main()int n=1;double sum=0;while(n=10)sum+=n*n+n-2.3;n+;printf(%lfn,sum);,for(i=1;i=10;i+)sum+=i*i+i-2.3;,注意:修改循环控制变量的值在while语句之前对某些变量赋值:赋值语句、赋初值,3、输出所有的水仙花数
27、。水仙花数是指一个3位数,各位数字的立方和等于该数本身,例如153=13+53+33。,分析:对每一个3位数来说,分解出它们的个位、十位和百位,然后判断它们的立方和是否等于该数本身。,注意:使用哪种循环语句?如何分解出它们的个位、十位和百位?循环语句的格式,for(i=100;i=999;i+),a=i/100;b=i%100/10;c=i%10;if(i=a*a*a+b*b*b+c*c*c)printf(%d,i);,#include void main()int i,a,b,c;printf(The narcissus numbers are:);,3.The narcissus numb
28、ers are:153 370 371 407,if(i!=)continue;printf(%d);,作业八,分析:逐步计算出每一项的分子、分母,再计算并相加。,注意:使用哪种循环语句?如何计算下一项的分子、分母?第一项的值如何得到?变量的类型?,1、有一分数序列:求出这个数列的前20项之和。,#include void main()int i;double a,b,sum=0;a=2;b=1;for(i=1;i=20;i+)printf(sum=%lfn,sum);,sum+=a/b;a=a+b;b=a-b;,/*temp=a;a=a+b;b=temp;*/,1.sum=32.660261
29、,2、用循环语句编写程序,输出如下图案:,*,分析:使用循环嵌套,注意:循环嵌套的应用*的对齐格式如何在每行前面输出不同个数的空格,#include void main()int i,j;for(i=1;i=6;i+)/输出一行 printf(n);,for(j=1;j=i-1;j+)/输出空格 printf();,for(j=1;j=7-i;j+)/输出*printf(*);/*后有个空格,分析:使用循环语句,注意:选用何种循环语句较好?如何得到各个加数?变量应定义为何种数据类型?a和n的大小有什么要求?,3、求 的值,其中a是一个数字,如2+22+222+2222+22222(此时a=2,
30、n=5),a和n均由键盘输入。,#include void main()int a,n,i;double x=0,sum=0;printf(Input a,n:);scanf(%d%d,(a必须是非零个位数,n不能超过double型数据的有效数字位数),4、输出3100之间的全部素数。,分析:使用循环嵌套,注意:循环嵌套的应用判断素数的方法,#include#include void main()int m,k,i;for(m=3;m=100;m+=2)k=sqrt(m);for(i=2;i=k;i+)if(m%i=0)break;if(i=k+1)printf(%-5d,m);,实验九,1、
31、从键盘输入10个整数存放在一个一维数组中,找出最大的数并输出该数及其下标。,注意:如何把输入的10个数存放在一维数组中?如何找到最大数?,#include void main(),int a10,i,max,k;,for(i=0;i10;i+)scanf(%d,max=a0;k=0;,for(i=1;i10;i+)if(maxai)max=ai;k=i;,printf(a%d=%dn,k,max);,1、另解,#include void main()int a10,i,k;for(i=0;i10;i+)scanf(%d,#include void main()int a10,i,k=0;for
32、(i=0;i10;i+)scanf(%d,2、设有一个已按从大至小顺序排好的数列存放在一维数组中,依次为81,76,66,61,54,47,36,30,22,16。现输入一个数,仍按原来的排序规律将其插入到数组中,试编程。,注意:如何查找插入位置?如何移动元素?,#include void main(),int a11=81,76,66,61,54,47,36,30,22,16;int x,i;,scanf(%d,for(i=9;i=0;i-)if(aix)ai+1=ai;else break;,ai+1=x;,for(i=0;i=10;i+)printf(%5d,ai);,、另解,#incl
33、ude void main()int a11=81,76,66,61,54,47,36,30,22,16;int x,i,j;printf(Input a number:);scanf(%d,3、从键盘输入N个数(在数组中从下标为0的位置开始存放),N由下面的符号常量定义。用冒泡法将下标为m到下标为n的数按降序排序。m和n通过键盘输入。假设0mN-1,mnN-1#define N 15,#include#define N 15void main()int aN,i,j,t,m,n;for(i=0;iN;i+)scanf(%d,4、二分法又称为折半查找法,它用于在一个有序的序列上查找指定的数。其
34、基本思路是:先确定待查元素的范围,将其分成两半,然后测试中间位置元素的值,如果相等,则找到待查元素。如果待查元素的值大于中间元素,就缩小待查范围,只测试中间元素之后的元素;反之,测试中间元素之前的元素,测试方法同前。试编写程序,应用折半查找法从存有10个整数的a数组中对输入的关键字m进行查找,若找到,输出其下标值;反之,输出提示。,#include#define N 10void main()int aN=6,9,15,25,26,36,48,53,60,65;int low=0,high=N-1,mid,m,found=0;printf(请输入查找数据:);scanf(%d,作业十,1、输入
35、一个M行M列的二维数组,计算两条对角线上的元素之和(放在一个变量中)。M由下面的符号常量定义:#define M,注意:二维数组元素的访问方法?下标的变化范围?如何计算对角线上的元素之和?,1、,#include#define M 5void main(),int aMM,i,j,sum=0;,printf(Input array a:n);for(i=0;iM;i+)for(j=0;jM;j+)scanf(%d,for(i=0;iM;i+)for(j=0;jM;j+)if(i=j|i+j=M-1)sum+=aij;,printf(sum=%dn,sum);,for(i=0;iM;i+)for
36、(j=0;jM;j+)scanf(%d,1、输入一个M行M列的二维数组,分别计算两条对角线上的元素之和。M由下面的符号常量定义:#define M,#include#define M 5void main(),int aMM,i,j,sum1=0,sum2=0;/输入a,for(i=0;iM;i+)sum1+=aii;sum2+=aiM-i-1;,printf(sum1=%d,sum2=%dn,sum1,sum2);,2、输入一个M行M列的二维数组,计算四周元素之和。M由下面的符号常量定义:#define M,注意:如何找到四周元素?四周元素的下标有何特点?,#include#define M
37、 5void main(),int aMM,i,j,sum=0;,printf(Input array a:n);for(i=0;iM;i+)for(j=0;jM;j+)scanf(%d,printf(sum=%dn,sum);,3、有一个班,有4个学生,5门课。求各门课的平均分;找出有两门以上课程不及格的学生,输出它们的学号和全部课程成绩及平均成绩。找出平均成绩在90分以上或全部课程成绩在85分以上的学生,输出它们的学号和全部课程成绩。,注意:如何存放4个同学的学号及5门课程的成绩?定义一个4*6的二维数组,每一行存放一个学生的信息,每行的第0列存放该学生的学号,其他每列存放一门课程的成绩(
38、假设都是整数)。,分析:定义一个4*6的二维数组,每一行存放一个学生的信息,每行的第0列存放该学生的学号,其他每列存放一门课程的成绩。,#include#define M 4#define N 6,void main(),int i,j,count;float sum,average;int aMN=1001,87,78,98,99,99,1002,80,87,68,85,90,1003,88,87,92,85,86,1004,68,65,60,56,36;float averN;/存放每门课程的平均分,/*printf(Input score:n);for(i=0;iM;i+)for(j=0
39、;jN;j+)scanf(%d,*/,/调试时注释掉,以免每次运行都要输入大量数据,for(j=1;jN;j+)/从第1门课到第N-1门课 sum=0;for(i=0;iM;i+)/从第0个学生到第M-1个学生 sum+=aij;averj=sum/M;/计算第j门课程的平均分 for(i=1;iN;i+)printf(The%dth averScore:%.2fn,i,averi);,for(i=0;iM;i+)count=0;for(j=1;jN;j+)/计算60分以下课程门数 if(aij60)count+=1;if(count2)/不及格课程小于2门(不包含2门)continue;pr
40、intf(No:%-8d,ai0);/输出学号 printf(Score:);for(j=1;jN;j+)/输出各门课程成绩 printf(%-5d,aij);for(j=1,sum=0;jN;j+)/计算并输出平均分 sum+=aij;printf(averScore:%.2fn,sum/(N-1);printf(n);,for(i=0;i=85)count+=1;for(j=1,sum=0;jN;j+)/计算平均成绩 sum+=aij;average=sum/(N-1);if(count!=N-1,if(!(count=N-1|average=90)continue;,实验十一,1、有一个
41、字符串str,编写程序,将str中第n个字符开始的全部字符复制到字符串std中。,注意:如何找到位置n?复制之后不能漏掉结束标志0,#includevoid main(),char str80,std80;int i,n;,for(i=n;stri!=0;i+)stdi-n=stri;stdi-n=0;,printf(Input string str:);gets(str);printf(Input n:);scanf(%d,printf(String std:);puts(std);,2、编写程序求出字符串str中指定字符ch的个数,并返回字符个数。例如,若输入字符串str=abEF1231
42、12,则输出3。,#includevoid main(),char str80,ch;int i,n=0;,for(i=0;stri!=0;i+)if(stri=ch)n+;,printf(Input string str:);gets(str);printf(Input ch:);scanf(%c,printf(The number of%c is%d.n,ch,n);,3、有一段文字,共有5行(请先存放在二维数组中),分别统计出其中英文大写字母、小写字母、数字、空格及其他字符的个数。,注意:如何定义字符型二维数组?如何存放输入的字符串?,3、,#include#define M 5void
43、 main(),char strM80;int i,j,a=0,b=0,c=0,d=0,e=0;,printf(Input 5 string:n);for(i=0;iM;i+)gets(stri);,for(i=0;iM;i+),for(j=0;strij!=0;j+)if(strij=A,printf(%d,%d,%d,%d,%dn,a,b,c,d,e);,4、输入6个字符串,输出最大的字符串。,注意:如何存放输入的字符串?如何比较字符串的大小?如何找到最大的字符串?,#include#include void main()char str680;int i,k;for(i=0;i0)k=i
44、;printf(str%d=%sn,k,strk);,作业十二,如何编写函数:,#include int max(int x,int y)int z;if(xy)z=x;else z=y;return(z);,void main()int a,b,c;scanf(%d%d,函数名:必须符合标志符命名规则,最好“见名知义”参数:用于从主调函数接收数据,无数据传输则不需要参数参数个数及类型的确定:从主调函数接收数据的个数及类型返回值:向主调函数返回计算结果;不需要返回则定义为void主调函数:我们常见为main函数,有时候是其它函数,1、编写一个函数,输出语句:“I Love China!”;编写
45、主函数调用该函数。,分析:本函数功能简单,仅输出一个语句。,注意:函数的名字、有无参数?参数的个数及每个参数的类型,是否有返回值?主函数中应完成哪些功能?,#include,void print()printf(I love China!n);,void main()print();,2、编写函数,计算下式前n项的和。注意,n在主函数中输入,计算结果在主函数中输出。例如,当n=10时,结果为0.909091。,注意:函数的命名、参数个数及每个参数的类型、返回值的类型?如何将主函数中的数据传到被调函数中?如何累加得到S?,#include double fun(int n)void main()
46、int n;printf(Input n:);scanf(%d,int i;double s=0;for(i=1;i=n;i+)s+=1.0/(i*(i+1);return(s);,3、编写函数,计算Fibonacci数列第n项的值,n在主函数中由键盘输入,结果在主函数中输出。已知:,分析:除main函数外,仅需再定义一个函数。,注意:函数的名字、是否有参数?参数的个数及每个参数的类型,返回值及类型?函数的调用方法,int Fib(int n),int i,a=1,b=1,c=1;for(i=3;i=n;i+)return(c);,c=a+b;a=b;b=c;,#include int Fib
47、(int n)void main(),int i,a=1,b=1,c=1;for(i=3;i=n;i+)c=a+b;a=b;b=c;return(c);,int n,s;printf(Input n:);scanf(%d,/用递归函数实现:-慎用int Fib(int n)if(n=1|n=2)return(1);else return(Fib(n-1)+Fib(n-2);,4、编写函数,根据公式计算值,并作为函数值返回,精确到10-8。,注意:函数的命名、参数个数及每个参数的类型、返回值的类型?如何将主函数中的数据传到被调函数中?循环条件如何控制?如何累加得到sum?如何累乘得到f?,#in
48、clude float pi()void main()printf(%f,pi();,int i;float sum=1,f=1;i=1;while(f1e-8)f=f*i/(2*i+1);sum=sum+f;i+;return 2*sum;,如果前面定义了float s;写成s=i/(2*i+1);f=f*s;对不对?,不对!,另解一:#include float pi()int i;float sum=1,f=1;for(i=1;f1e-8;i+)f=f*i/(2*i+1);sum=sum+f;return 2*sum;void main()printf(%f,pi();,另解二:#inc
49、lude float pi()int i,j;float sum=1,f=1;for(i=1,j=3;f1e-8;i+,j+=2)f=f*i/j;sum=sum+f;return 2*sum;void main()printf(%f,pi();,实验十三,1、有一个数列,包含20个整数,编写函数,将从指定下标位置m开始的n个数按逆序存放。,注意:函数的命名、参数个数及每个参数的类型、返回值的类型?数组名作为函数参数的使用方法逆序的方法,#include#define N 20void sort(int aN,int m,int n)void main()int aN,m,n,i;for(i=0
50、;iN;i+)scanf(%d,void sort(int aN,int m,int n)int temp,i;for(i=0;in/2;i+)temp=am+i;am+i=am+n-1-i;am+n-1-i=temp;,2、编写函数,将形参字符串中的全部大写字母变为小写字母。函数原型为:strlow(字符串)。,注意:函数的命名、参数个数及每个参数的类型、返回值的类型?数组名作为函数参数的使用方法,#include#define N 50void strlow(char sN)void main()char sN;gets(s);strlow(s);puts(s);,int i;for(i=