c语言程序设计何钦铭颜晖第10章函数与程序结构
- 格式:doc
- 大小:46.00 KB
- 文档页数:11
第9章结构【练习9-1】定义一个能够表示复数的结构类型,一个复数包括实数与虚数两个局部。
解答:struct complex{float real;float imaginary;};【练习9-2】人的出生日期由年、月、日组成,请在例 9-1 中的通讯录结构中增加一个成员:出生日期,用嵌套定义的方式重新定义该结构类型。
解答:struct date{int year;int month;int day;};struct student{int num;char name[10];struct date birthday;int computer,english,math;double average;};【练习9-3】例 9-1 中,如果要计算的是三门课程的课程平均成绩,应该如何改写程序?解答:#include<stdio.h>struct student{int num;char name[10];int computer,english,math;double average;};int main(void){int i, n;double math_sum,english_sum,computer_sum;struct student s1;printf("Input n:");scanf("%d", &n);printf("Input the student's number, name and course scores:\n"); math_sum=english_sum=computer_sum=0;for(i=1;i<=n;i++){printf("No.%d:",i);scanf("%d%s%d%d%d",&s1.num,,&s1.math,&s1.english,&s1 puter);math_sum+=s1.math;english_sum+=s1.english;computer_sum+=s1 puter;}printf("math_ave:%.2lf\nenglish_ave:%.2lf\ncomputer_ave:%.2lf\n", math_sum/n,english_sum/n,computer_sum/n);return 0;}【练习9-4】定义一个包含 5 名学生信息的结构数组,并对该结构数组的所有元素进行初始化。
《C语⾔程序设计》-何钦铭第⼀章引⾔1.2 程序与程序设计语⾔冯 · 诺依曼模型的存储程序概念:将程序与数据共同存储结构化的程序设计⽅法:将复杂程序划分为若⼲个相互独⽴的模块(⼀个模块可以是⼀条语句、⼀段程序或⼀个函数等)使完成每个模块的⼯作变得单纯⽽明确,在设计⼀个模块时不受其他模块的牵连。
同时,通过现有模块积⽊式的扩展就可以形成复杂的、更⼤的程序模块或程序1.3 C语⾔的发展历史与特点C语⾔的特点:(拥有底层操作能⼒)1.结构化语⾔2.易于移植3.简洁紧凑,使⽤⽅便灵活4.强⼤的处理能⼒5.⽣成的⽬标代码质量⾼,运⾏效率⾼第⼆章⽤C语⾔编写程序2.3 计算分段函数#include <stdio.h> //编译预处理指令程序运⾏时,⾸先从main函数开始运⾏%f指定输出时保留6位⼩数,%.2f则指定输出时保留2位⼩数循环体语句只能是⼀条语句(如果循环体语句由多条语句组成,必须⽤⼤括号把他们括起来,变成⼀条复合语句)整型数据的输出格式控制说明%md,指定了数据的输出宽度为m(包括符号位)。
若数据的实际位数(含符号位)⼩于m,左端补空格;若⼤于m,按实际位数输出实型数据的输出格式控制说明 %m.nf,指定了输出浮点型数据时保留n位⼩数,且输出宽度是m(包括符号位和⼩数点)。
若数据的实际位数(含符号位)⼩于m,左端补空格;若⼤于m,按实际位数输出f是针对浮点型数据⽽⾔,若输出数据为整型,则%m.nf应改为%md赋值运算符左边只能是⼀个变量第三章分⽀结构ch = getchar() //从键盘输⼊⼀个字符,并赋值给变量chputchar(输出参数); //输出参数是字符型变量或字符型常量第四章循环结构else和 if 的匹配准则:else与最靠近它的、没有与别的 else 匹配过的匹配do-while语句:循环条件需要在循环体中明确,且⾄少会执⾏⼀次循环体do {循环体语句} while (表达式);//判断⼀个数是否为素数#include <stdio.h>int main() {int i,m;printf("Enter a number:");scanf("%d", &m);for(i=2;i<=m/2;i++)if(m%i==0)break; //若m能被某个i整除,则m不是素数,提前结束循环if(i>m/2 && m!=1) //若循环正常结束,说明m不能被任何⼀个i整除printf("%d is a prime number! \n", m);elseprintf("No! \n");return 0;}break语句强制循环结束,不再执⾏循环体中位于其后的其他语句,break语句应该和if语句配合使⽤,即条件满⾜时,才执⾏break跳出循环;否则若break⽆条件执⾏,意味着永远不会执⾏循环体中break后⾯的其他语句continue语句:跳过循环体中continue后⾯的语句,继续下⼀次循环,continue语句⼀般也需要与if语句配合使⽤break语句和continue语句的区别在于,break结束循环,⽽continue跳过后⾯语句继续循环。
C语言程序设计何钦铭颜晖第10章函数与程序结构函数是C语言程序设计的重要组成部分,可以帮助我们组织和管理代码,实现代码的复用和模块化开发。
本章将介绍函数的定义、调用和参数传递等基本概念,以及程序的模块化结构和头文件的使用。
1.函数定义与调用函数是一些已经封装好的代码块,可以在需要的地方被调用执行。
函数的定义包括函数名、参数列表和函数体。
函数的调用通过函数名和实参列表来实现。
在C语言中,函数的定义一般是在main函数之前。
函数可以返回一个值,也可以不返回任何值。
例如:int main(,其中int表示返回值类型,main表示函数名。
没有返回值的函数使用关键字void来表示。
函数可以有多个参数,参数之间用逗号分隔。
参数可以是任意数据类型。
函数体中的代码用花括号{}括起来。
例如:int add(int a, int b) {return a + b;}表示定义了一个add函数,接受两个int类型的参数a和b,返回它们的和。
函数的调用通过函数名和实参列表来实现。
例如:int sum = add(3, 5);表示调用了add函数,并将返回结果赋值给sum变量。
函数调用前面需要指定返回类型,以便正确使用函数返回的值。
2.递归函数递归函数是一种特殊的函数,它在函数体内部调用自己。
递归函数可以解决一些问题,如阶乘、斐波那契数列等。
但是要注意递归函数的退出条件,否则可能会导致无限递归,造成程序崩溃。
3.函数的参数传递在函数的定义中,可以指定参数的传递方式。
C语言中有两种参数传递方式:值传递和指针传递。
值传递是将实参的值复制给形参,函数内部对形参的修改不会影响实参。
指针传递是将实参的地址传递给形参,可以在函数内部修改实参的值。
4.程序结构与模块化开发模块化开发是将程序分解成多个模块,每个模块负责一个特定的功能。
C语言中使用头文件来实现模块化开发。
头文件包含了函数的声明,以及一些常量、宏定义等。
头文件需要使用#include指令引入到主文件中。
《C语⾔程序设计》第4版何钦铭、颜晖主编课后习题答案第2章 ⽤C语⾔编写程序Page 0201#include<stdio.h>//练习2-32int main(void)3{4 int i,j,k;5 for(int i=1;i<=4;i++)//第i⾏6 {7 for(int j=1;j<=i-1;j++)//j个空格8 {9 printf(" ");10 }11 for(k=1;k<=5-i;k++)//k个*12 {13 printf("* ");14 }15 printf("\n");16 }1718 return 0;19}Page 0231#include<stdio.h>2int main(void)3{4 int f,c;//练习2-55 f=150;6 c=5*(f-32)/9;//或者是c=5/9.0*(f-32)||c=5.0/9*(f-32),但不可以是5/9,会得到0.因为:两个整型数据做除法运算,结果⼀定是整数。
7 printf("华⽒温度%d对应的摄⽒温度为%d.\n",f,c);89 printf("\n");1011 /*计算物体⾃由下落的距离(练习2-6)*/12 int h,g,t;13 t=3;//下落时间14 g=10;//重⼒加速度 10m/s^215 h=g*t*t/2;16 printf("⼀个物体从100⽶的⾼空⾃由下落,前3秒内下落的距离为:%d⽶.\n",h);1718 return 0;19}20Page 0292#include<math.h>3int main(void)4{5 /*计算摄⽒温度(练习2-8)*/6 double c,f;7 printf("输⼊华⽒温度:");8 scanf("%lf",&f);9 c=5*(f-32)/9.0;10 printf("华⽒温度%.2lf对应的摄⽒温度为%.3lf\n",f,c);1112 printf("\n");1314 /*整数四则运算(练习2-9)*/15 int x,y,z_1,z_2,z_3;16 double z_4;17 printf("输⼊两个正整数x,y:");18 scanf("%d %d",&x,&y);19 z_1=x+y;20 z_2=x-y;21 z_3=x*y;22 z_4=x/y;23 printf("%d和%d的和为%d,差为%d,积为%d,商为%lf\n",x,y,z_1,z_2,z_3,z_4); 2425 printf("\n");2627 /*计算分段函数(判断x是否不为0)(练习2-10)*/28 double x_1,y_1;29 printf("输⼊x_1:");30 scanf("%lf",&x_1);31 if(x_1!=0)32 y_1=1/x_1;33 else y_1=0;34 printf("输⼊%.2lf时,对应的y值为%.1lf\n",x_1,y_1);3536 printf("\n");3738 /*计算分段函数(判断x是否⼩于0)(练习2-11)*/39 double x_2,y_2;40 printf("输⼊x_2:");41 scanf("%lf",&x_2);42 if(x_2<0)43 y_2=pow(1+x_2,2)+2*x_2+1/x_2;44 else y_2=sqrt(x_2);45 printf("输⼊%.2lf时,对应的y值为%.2lf\n",x_2,y_2);464748 printf("\n");4950 return 0;51}Page 0372int main(void)3{4 int i,n,flag;//例2-85 double t,sum;6 printf("输⼊⼀个正整数n:");7 scanf("%d",&n);8 sum=0;9 flag=1;10 for(i=1;i<=n;i++)11 {12 t=flag*(1.0/(2*i-1));13 sum+=t;14 flag=(-1)*flag;1516 }17 printf("sum=%lf\n",sum);1819 printf("\n");2021 /*求1+1/2+···的前n项和(练习2-13)*/22 int n_1,j;23 double sum_1=0;24 printf("Enter n_1(n_1>=0):");25 scanf("%d",&n_1);26 for(j=1;j<=n;j++)27 {28 sum_1+=1.0/j;29 }30 printf("sum_1=%.2lf\n",sum_1);3132 printf("\n");3334 /*求1+1/3+1/5+···的前n项和(练习2-14)*/35 int n_2,k;36 double sum_2;37 printf("Enter n_2:");38 scanf("%d",&n_2);39 for(k=1;k<=n_2;k++)40 {41 sum_2+=1.0/(2*k-1);42 }43 printf("sum_2=%.2lf\n",sum_2);4445 printf("\n");4647 /*求1-1/4+1/7-1/10+···的前n项和(练习2-15)*/48 int n_3,m,flag_1=1;49 double sum_3=0;50 printf("Enter n_3:");51 scanf("%d",&n_3);52 for(m=1;m<=n;m++)53 {54 sum_3+=flag_1*1.0/(3*m-2);55 flag_1=flag_1*(-1);56 }57 printf("sum_3=%.2lf\n",sum_3);5859 return 0;60}Page 0402#include<math.h>3int main(void)4{5 int n,i;6 double power;7 printf("Enter n:");8 scanf("%d",&n);9 printf("2的乘⽅表:\n");10 for(i=0;i<=n;i++)11 {12 power=pow(2,i);13 printf("2的%d次⽅为%.0lf\n",i,power);14 }1516 printf("\n");1718 /*3的乘⽅表(练习2-17)*/19 int m,j;20 double power_1;21 printf("Enter m:");22 scanf("%d",&m);23 for(j=0;j<=m;j++)24 {25 power_1=pow(3,j);26 printf("pow(3,%d)=%.lf\n",j,power_1);27 }2829 return 0;30}1#include<stdio.h>//练习2-182double fact(int n)3{4 int i;5 double product;6 product=1;7 for(i=1;i<=n;i++)8 {9 product*=i;10 }1112 return product;13}14int main(void)15{16 int n,m,i;17 double result_1,result_2,result_3,c;18 printf("输⼊两个正整数m和n(m<=n):");19 scanf("%d %d",&m,&n);20 for(i=0;i<=n;i++)21 {22 result_1=fact(i);23 }24 for(i=0;i<=m;i++)25 {26 result_2=fact(i);27 }28 for(i=0;i<=n-m;i++)29 {30 result_3=fact(i);31 }32 c=result_1/(result_2*result_3);33 printf("c=%.lf",c);3435 return 0;36}。
前7章绝大部分都有。
水平有限(只学了3三个月),仅供参考。
/*计算2^i的前n项和*/#incl ude<s tdio.h>#i nclud e<mat h.h>int m ain(v oid){in t i,n;do ublesum;prin tf("E ntern:");sca nf("%d",&n);s um=0;for(i=1;i<=n;i++){su m=sum+pow(2,i);}print f("su m=%.0f\n",sum);ret urn 0;}/*输入若干个学生的成绩,计算平均分,并统计个等级成绩的个数。
成绩分为5个等级:分别为A(90~100)、B(80~89)、C(70~79)、D(60~69)、E(0~59)*/#in clude<stdi o.h>int m ain(v oid){in t gra de,A,B,C,D,E,n;dou ble t otal;pri ntf("Enter grad e:\n");s canf("%d",&grad e);A=B=C=D=E=0;t otal=0;n=0;while(grad e>=0){i f(gra de<=59)E++;el se if(grad e<=69)D++;els e if(grade<=79)C++;else if(g rade<=89)B++;elseA++;n++;tot al=to tal+g rade;sc anf("%d",&grade);}if(n==0){p rintf("gra de av erage=0\n");print f("A=0\nB=0\nC=0\nD=0\nE=0\n");}else{p rintf("gra de av erage=%.2f\n",t otal/n);prin tf("A=%d\n B=%d\nC=%d\nD=%d\nE=%d\n",A,B,C,D,E);}ret urn 0;}/*输入职工的月薪sala ry,输出应交的个人所得税ta x*/#inclu de<st dio.h>int main(void){int s alary;do ubletax;prin tf("E ntersalar y:");sca nf("%d",&s alary);i f(sal ary<=850)tax=0;elseif(sa lary<=1350)t ax=5.0*(sa lary-850)/100;else if(s alary<=2850)tax=10.0*(salar y-850)/100;el se if(sala ry<=5850)tax=15.0*(sal ary-850)/100;elsetax=20.0*(sal ary-850)/100;print f("ta x=%.2f\n",tax);ret urn 0;}/*计算1-2/3+3/5-4/7+5/9-6/11+…*/#i nclud e<std io.h>intmain(void){i nt i,n,fz,fm,fl ag; /*fz分子,fm分母,flag符号*/doubl e ite m,sum; /*item是第n项的值,sum存放计算结果*/print f("En ter n:");scan f("%d",&n);fz=fm=f lag=1;su m=0;for(i=1;i<=n;i++){ite m=1.0*flag*fz/f m;sum=s um+it em;fz++;f m=fm+2;flag=-flag;}prin tf("s um=%.2f\n",sum);re turn0;}/*输出21世纪所有的闰年。
c语言程序设计何钦铭颜晖第10章函数与程序结构第10章函数与程序结构【练习10-1】使用递归函数计算1到n之和:若要用递归函数计算sum=1+2+3+…+n(n为正整数),请写出该递归函数的递归式子及递归出口。
试编写相应程序。
解答:递归式子: sum(i) = sum(i-1) + i;递归出口: sum(i) = 0;【练习10-2】请完成下列宏定义:① MIN(a,b) 求 a,b 的最小值② ISLOWER(c) 判断 c 是否为小写字母③ ISLEAP(y) 判断 y 是否为闰年④ CIRFER(r) 计算半径为 r 的圆周长解答:① MIN(a, b):求a,b的最小值。
#define MIN(a,b) (a<="" p="">② ISLOWER(c):判断c是否为小写字母。
#define ISLOWER(c) (c>='a'&&c<='z')③ ISLEAP(y):判断y是否为闰年。
#define ISLEAP(y) (y%4==0&&y%100!=0)||y%400==0)④ CIRFER(r):计算半径为r的圆周长。
#define PI#define CIRFER(r) 2*PI*(r)【练习10-3】分别用函数和带参宏实现从 3 个数中找出最大数,请比较两者在形式上和使用上的区别。
解答:(1)函数实现int max(int x,int y,int z){int t;if(x>=y)if(x>=z) t=x;else t=z;elseif(y>=z) t=y;else t=z;return t;}(2)宏实现#define MAX( x, y, z ) x>=y (x>=z x:z) : (y>=z y:z)两者在定义形式上完全不同。
第一章习题1、对 C 语言来说,下列标示符中哪些是合法的,哪些是不合法的?Total, _debug, Large&Tall, Counter1, begin_答:合法的:_debug、Counter1、begin_。
不合法的:Total、Large&Tall。
2、改写 1.4 节中的流程图 1.2,求1—100 中能被 6 整除的所有整数的和。
Sum=0,i=1I<=100真假I 能被 6整除?sum=sum+ii=i+1打印sum3、改写 1.4 节中的程序,求1—100 中能被 6 整除的所有整数的和,并在编程环境中验证该程序的运行结果。
答:程序为:#include<stdio.h>int main(void){int i,sum=0;for(i=1;i<=100;i++)if(i%6==0)sum=sum+i;printf("sum=%d\n",sum);return 0;}4、对于给定的整数n(n>1),请设计一个流程图判别n 是否为一个素数(只能被 1 和自己整除的整数),并分析该流程图中哪些是顺序结构、哪些是分支结构和循环结构。
开始输入ni=2r=n/i 的余数真r=0?假i=i+1输出n“不是素数”假i>=(n-1)真输出n“是素数”结束...开始输入ni=2r=n/i 的余数真r=0?假i=i+1输出n“不是素数”假i>=(n-1)真输出n“是素数”结束第二章作业1.编写程序,输入两个整数num和num2,计算并输出她们的和、差、积、商。
答:程序:#include<stdio.h>void main(){int num1,num2,y1,y2,y3,y5;double y4;printf(" 请输入两个数:num1,num2\n");scanf("%d%d",&num1,&num2);y1=num1+num2;y2=num1-num2;y3=num1*num2;y4=num1*1.0/num2;y5=num1%num2;printf("num1,num2 和y1=%d\nnum1,num2 差y2=%d\nnum1,num2 积y3=%d\nnum1,num2商y4=%lf\nnum1,num2 余y5=%d\n",y1,y2,y3,y4,y5);}2.为了倡导居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时以内的,电价为0.53元/千瓦时;超出50千瓦时的用电量,电价上调0.05元/千瓦时。
第9章结构【练习9-1】概念一个能够表示复数的结构类型,一个复数包括实数与虚数两个部份。
解答:struct complex{float real;float imaginary;};【练习9-2】人的诞生日期由年、月、日组成,请在例9-1 中的通信录结构中增加一个成员:诞生日期,用嵌套概念的方式从头概念该结构类型。
解答:struct date{int year;int month;int day;};struct student{int num;char name[10];struct date birthday;int computer,english,math;double average;};【练习9-3】例9-1 中,假设是要计算的是三门课程的课程平均成绩,应该如何改写程序?解答:#include<>struct student{int num;char name[10];int computer,english,math;double average;};int main(void){int i, n;double math_sum,english_sum,computer_sum;struct student s1;printf("Input n:");scanf("%d", &n);printf("Input the student's number, name and course scores:\n");math_sum=english_sum=computer_sum=0;for(i=1;i<=n;i++){printf("No.%d:",i); scanf("%d%s%d%d%d",&,,&,&,&;math_sum+=;english_sum+=;computer_sum+=;}printf("math_ave:%.2lf\nenglish_ave:%.2lf\ncomputer_ave:%.2lf\n",math_sum/n ,english_sum/n,computer_sum/n);return 0;}【练习9-4】概念一个包括5 名学生信息的结构数组,并对该结构数组的所有元素进行初始化。
第10章函数与程序结构【练习10-1】使用递归函数计算1到n之和:若要用递归函数计算sum=1+2+3+…+n(n为正整数),请写出该递归函数的递归式子及递归出口。
试编写相应程序。
解答:递归式子: sum(i) = sum(i-1) + i;递归出口: sum(i) = 0;【练习10-2】请完成下列宏定义:① MIN(a,b) 求 a,b 的最小值② ISLOWER(c) 判断 c 是否为小写字母③ ISLEAP(y) 判断 y 是否为闰年④ CIRFER(r) 计算半径为 r 的圆周长解答:① MIN(a, b):求a,b的最小值。
#define MIN(a,b) (a<b) a: b② ISLOWER(c):判断c是否为小写字母。
#define ISLOWER(c) (c>='a'&&c<='z')③ ISLEAP(y):判断y是否为闰年。
#define ISLEAP(y) (y%4==0&&y%100!=0)||y%400==0)④ CIRFER(r):计算半径为r的圆周长。
#define PI#define CIRFER(r) 2*PI*(r)【练习10-3】分别用函数和带参宏实现从 3 个数中找出最大数,请比较两者在形式上和使用上的区别。
解答:(1)函数实现int max(int x,int y,int z){int t;if(x>=y)if(x>=z) t=x;else t=z;elseif(y>=z) t=y;else t=z;return t;}(2)宏实现#define MAX( x, y, z ) x>=y (x>=z x:z) : (y>=z y:z)两者在定义形式上完全不同。
使用上函数是在执行时,从主调函数转到函数 max(),然后再返回到主调函数,函数体始终存在;而宏是在编译预处理时,用条件表达式去替换MAX(int x, int y, int z ),等程序执行时,执行的是条件表达式,而不再存在 MAX(int x, int y,int z )的式子。
习题10一、选择题1.要调用数学函数时,在#include 命令行中应包含 C 。
A.”” B.”” C.”” D.””2.对于以下递归函数 f,调用 f(4),其返回值为 A 。
int f(int n){ if (n) return f(n - 1) + n;else return n;}A.10 B.4 C.0 D.以上均不是3.执行下列程序:#define MA(x, y) ( x*y )i = 5;i = MA(i, i + 1) – 7;后变量 i 的值应为 B 。
A.30 B.19 C.23 D.14.宏定义“#define DIV(a, b) a/b”,经 DIV(x + 5, y - 5) 引用,替换展开后是 A 。
A.x + 5 / y - 5 B.(x + 5 / y – 5)C.(x + 5) / (y - 5) D.(x + 5) / (y - 5);5.定义带参数的宏“#define JH(a,b,t) t = a; a = b; b = t”,对两个参数a、b 的值进行交换,下列表述中哪个是正确的 C 。
A.不定义参数a和b将导致编译错误 B.不定义参数a、b、t将导致编译错误C.不定义参数 t 将导致运行错误 D.不需要定义参数 a、b、t 类型6.执行下面程序,正确的输出是 A 。
int x = 5, y = 7;void swap ( ){ int z ;z = x ; x = y ; y = z ;}int main(void){int x = 3, y = 8;swap ( ) ;printf ( " %d , %d \n", x , y ) ;return 0 ;}A.3, 8 B.8, 3 C.5, 7 D.7, 57.下面说法中正确的是 A 。
A.若全局变量仅在单个 C 文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑变量生命周期问题D.静态全局变量使用过多,可那会导致动态存储区(堆栈)溢出二、填空题语言的编译预处理功能主要包括_条件编译_、_宏定义_和_文件包含_。
2.执行完下列语句段后, i 的值为 5 。
int i;int f(int x){return ((x>0) f(x-1)+f(x-2):1);}i=f(3);3.下列程序段 A 与 B 功能等价,请填写程序段 B 中相应语句。
程序段A:int f( int n ){ if(n<=1)return n;elsereturn f(n-1)+f(n-2);}程序B:int f( int n ){ _int t, t0, t1;_t0=0; t1=1; t=n;while ( _n>1_ ){t = _t0+t1_;t0 = t1;t1 = t;n - -;}return _t;_}5.下面程序用于计算 f(k , n)=1k+2k+…+n k,其中 power(m , n )求 m n。
请填写程序中相应语句。
# include <>int power(int m , int n){ int i ;int p=1;for( i=1 ; i<=n ; i++)p = p * m ;return p ;}int f(int k , int n){int i ;int s=0 ;for( i=1 ; i<=n ; i++)s = s + power(i, k) ;return s ;}int main(void){ int k , n ;scanf(“%d%d”, &k, &n ) ;printf(“f(%d, %d)=%ld” , k, n, f(k, n)) ;return 0;}5.下列递归程序的输出结果为 g=4,g=3,k=6 。
#include <>int fib(int g){ switch(g){case 0: return 0;case 1:case 2: return 2;}printf("g=%d,", g);return fib(g-1) + fib(g-2);}int main(void){int k;k = fib(4);printf("k=%ld\n", k);return 0;}6.下列语句的运算结果为_7,-13____。
#define F(x) x - 2#define D(x) x * F(x)printf("%d,%d", D(3), D(D(3))) ;三、程序设计题1.判断满足条件的三位数:编写一个函数,利用参数传入一个 3 位数 n,找出101~n 间所有满足下列两个条件的数:它是完全平方数,又有两位数字相同,如 144、676 等,函数返回找出这样的数据的个数。
试编写相应程序。
解答:#include<>#include<>int fun(int n);int main(void){int n;printf("Input n: ");scanf("%d",&n);printf("total=%d\n",fun(n));return 0;}int fun(int n){int i,d=0;for(i=101;i<=n;i++)if(((int)sqrt(i)*(int)sqrt(i))==i){if(i/100==(i/10)%10||i/100==i%10||(i/10)%10==i%10)d++;}return d;}2.递归求阶乘和:输入一个整数n(n>0且n<=10),求1!+2!+3!+……n!。
定义并调用函数fact(n)计算n!,函数类型是double。
试编写相应程序。
解答:#include<>double fact(int n);int main(void){int n;printf("Input n:");scanf("%d",&n);printf("1~%d的阶乘和:%.0lf",n,fact(n));return 0;}double fact(int n){int i;double result=1;if(n==1)result=1;else{for(i=1;i<=n;i++)result=result*i;result=result+fact(n-1);}return result;}3.递归实现计算xⁿ:输入实数x和正整数n,用递归函数计算xⁿ的值。
试编写相应程序。
解答:#include<>double power(double x,int n);int main(void){double x;int n;printf("Input x:");scanf("%lf",&x);printf("Input n:");scanf("%d",&n);printf("%lf的%d次方=%lf",x,n,power(x,n));return 0;}double power(double x,int n){double result;if(n==1)result=x;elseresult=x*power(x,(n-1));return result;}4.递归求式子和:输入实数x和正整数n,用递归的方法对下列计算式子编写一个函数。
f(x , n) = x-x²+x³-x4+… + (-1)n-1xⁿ(n>0)试编写相应程序。
解答:#include<>#include<>double f(double x,int n);int main(void){int n;double x;printf("Input x:");scanf("%lf",&x);printf("Input n:");scanf("%d",&n);printf("f(%lf,%d)=%lf\n",x,n,f(x,n));return 0;}double f(double x, int n){if(n==1)return x;elsereturn pow(-1,n-1)*pow(x,n)+f(x,n-1);}5.递归计算函数ack(m,n):输入m和n。