第6章 函数与预处理习题解答.docx
- 文档编号:27969236
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:19
- 大小:44.28KB
第6章 函数与预处理习题解答.docx
《第6章 函数与预处理习题解答.docx》由会员分享,可在线阅读,更多相关《第6章 函数与预处理习题解答.docx(19页珍藏版)》请在冰豆网上搜索。
第6章函数与预处理习题解答
第6章函数与预处理习题解答
1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。
两个整数由键盘输入。
用辗转相除法,m、n是两个正整数,r 是余数,用直到循环操作的流程图:
#include
intgcf(int,int);//求最大公约数函数
intlcm(int,int);//求最小公倍数函数
voidmain()
{
intm,n;
do
{
printf("Pleaseinputtowpositiveintegert:
");
scanf("%d%d",&m,&n);
}while(m<=0||n<=0);
printf("Thegreatestcommandfactor(%d,%d)=%d\n",m,n,gcf(m,n));
printf("Theleasecommonmultiple(%d,%d)=%d\n",m,n,lcm(m,n));
}
intgcf(intn,intm)
{
intr;
do
{
r=m%n;
m=n;
n=r;
}while(r!
=0);
returnm;
}
intlcm(intm,intn)
{
intl;
l=m*n/gcf(m,n);
returnl;
}
*2.编写一个函数,由参数传一个字符串,统计此字符串中字母、数字和其他字符的个数,在主函数中输入字符串并显示统计的结果。
注:
要把字符串传递给函数,只能通过指针或数组名。
本题应放在第7、8章介绍数组之后
#include
voidf(chara[]);
voidmain()
{
chara[100];
printf("Inputastring:
");
gets(a);
f(a);
}
voidf(chara[])
{
inti=0,c=0,n=0,m=0;
do
{
if(a[i]>='A'&&a[i]<='Z'||a[i]>='a'&&a[i]<='z')
c++;
elseif(a[i]>='0'&&a[i]<='9')
n++;
else
m++;
i++;
}while(a[i]!
='\0');
printf("number=%d\n",n);
printf("char=%d\n",c);
printf("other=%d\n",m);
}
3.按照第5章第8题的要求编写判断水仙花数的函数,从主函数输入正整数n,在主函数中调用判断水仙花数的函数,找出n以内所有的水仙花数。
#include
voidf(long);
voidmain()
{
longintn;
printf("Inputainteger:
");
scanf("%ld",&n);
f(n);
}
voidf(longintn)
{
inti,k,s=0,a,r;
for(i=10;i { a=i; for(k=0;a! =0;k++) { r=a%10; s=s+r*r*r; a=a/10; } if(s==i) printf("%d\n",i); s=0; } } 4.定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显示结果。 #include #defineSWAP(a,b)a=a+b;b=a-b;a=a-b voidmain() { intx,y; printf("Inputtwointegeres: "); scanf("%d%d",&x,&y); SWAP(x,y); printf("%d%d\n",x,y); } 5.已知二阶Fibonacii数列: 定义递归函数求Fib(n)。 #include intfib(int); voidmain() { intx,i; printf("Inputaintegeres: "); scanf("%d",&x); for(i=0;i<=x;i++) printf("%d",fib(i)); putchar('\n'); } intfib(intn) { intf; if(n==0) f=0; elseif(n==1) f=1; else f=fib(n-1)+fib(n-2); returnf; } 6.定义函数求F=(n+m)! +n! m,n均为任意正整数。 要求使用递归调用。 #include intfact(int); voidmain() { intx,y; printf("Inputtwointegeres: "); scanf("%d%d",&x,&y); printf("(%d+%d)! +%d! =%d\n",x,y,x,fact(x+y)+fact(x)); } intfact(intn) { intf; if(n==0) f=1; else f=n*fact(n-1); returnf; } 7.定义一个函数完成第5章第11题的功能: 输出九九表。 #include voidf(void); voidmain() { f(); } voidf(void) { inti,j; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) { printf("%d*%d=%d",i,j,i*j); putchar(''); } putchar('\n'); } } 8.如果有两个数,每一个数的所有约数(除了它本身以外)的和正好等于对方,则称这两个数为互满数,求出30000以内所有的互满数,并显示输出,求一个数它的所有约数(除了本身以外)的和,用函数实现。 先编写一个求一个整数约数和各的试验程序: #include intdivs(intn);//求整数n的约数之和 voidmain() { intn; printf("Inputainteger: "); scanf("%d",&n); divs(n); } intdivs(intn) { inti,s=0; printf("Integer: %d: ",n); for(i=1;i { if(n%i==0) { s+=i; printf("%d",i); } } putchar('\n'); printf("Divisor_sumof%d=%d\n",n,s); returns; } 本题程序(为了程序运行快些,求300以内的互满数): #include intdivs(intn);//求整数n的约数之和 voidmain() { inti,j,si,sj; for(i=1;i<300;i++) { si=divs(i); for(j=1;j<300;j++) { sj=divs(j); if(si==j&&i==sj&&i! =j) printf("%d%d\n",i,j); } } } intdivs(intn) { inti,s=0; for(i=1;i if(n%i==0) s+=i; returns; } *9.编写以下函数: ①输入职工的姓名和职工号;②按职工号由小到大排序,姓名顺序也随之调整;③输入一个职工号,找出该职工的姓名。 在主函数中调用这些函数。 (本题应放在第9章,定义结构体数据类型,用一个结构体变量存储职工的姓名和职工号) #include structworker { charna[5]; intno; }; intmain() { structworkers[5]; structworkert; inti,j,k; printf("Inputworker_noandworker_no\n"); for(i=0;i<5;i++) scanf("%d%s",&s[i].no,&s[i].na); for(i=0;i<5;i++) printf("%d%s\n",s[i].no,s[i].na); for(i=0;i<5;i++)//选择法排序 { k=i; for(j=i;j<5;j++) { if(s[j].no } for(j=0;j<5;j++)t.na[j]=s[i].na[j];//元素s[i]与s[k]交换,成员na是字符串 t.no=s[i].no; for(j=0;j<5;j++)s[i].na[j]=s[k].na[j]; s[i].no=s[k].no; for(j=0;j<5;j++)s[k].na[j]=t.na[j]; s[k].no=t.no; } for(i=0;i<5;i++) printf("%d%s\n",s[i].no,s[i].na); } 10.设计程序完成下列计算。 已知: 其中: 当x=5.6,n=7时,求y。 要求通过嵌套调用完成计算。 #include longfatc(intn)//求阶乘 { inti; longp=1; for(i=1;i<=n;i++) p=p*i; returnp; } doublef(doublex,intn)//实现f(x,n)函数 { doublesum=1,p=1; inti,s=1; for(i=2;i<=2*n;i+=2) { s=-s; p=p*x*x; sum=sum+s*p/fatc(i); } returnsum; } intmain() { doubley,x=5.6; intn=7; y=f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3)); printf("y=%lf\n",y); return0; } 实验六函数与编译预处理 2.程序填空 ⑴下面的函数多次求两数x,y之积。 #include intmul(inta,intb);//原程序没有该引用声明 intmain() { intx,y,z; printf("Inputtownumbers: "); scanf("%d%d",&x,&y); while(x! =0) { z=mul(x,y); printf("%d*%d=%d\n",x,y,z); printf("Inputtownumbers: "); scanf("%d%d",&x,&y); } return0; } intmul(inta,intb) { intc; c=a*b; returnc; } ⑵求 (函数mm用来求阶乘) #include intmain() { longs=0,i,mm(intk);//mm(intk)为函数的引用声明 for(i=1;i<11;i++) s=s+mm(i); printf("%ld\n",s); return0; } longmm(intk) { longt=1,j; for(j=1;j<=k;j++) t*=j; returnt; } 3.编程。 ⑴定义函数intf(intx)判断x是否为奇数,若是则函数返回1,否则返回0。 #include intf(intx) { inty; if(x%2! =0) y=1; else y=0; returny; } intmain() { intx; printf("Inputainteger: "); scanf("%d",&x); if(f(x)) printf("%disaoddnumber\n",x); else printf("%disaevennumber\n",x); return0; } ⑵定义函数intf(intm,intn)求mn.要求用函数递归调用的方法。 #include intf(intm,intn) { inty; if(n==0) y=1; else y=m*f(m,n-1); returny; } intmain() { intm,n; printf("Inputtwointegers: "); scanf("%d%d",&m,&n); printf("%dpower%d=%d\n",m,n,f(m,n)); return0; } ⑶定义函数intf(intn)求 。 要求用函数递归调用的方法。 #include intf(intn) { ints; if(n==1) s=1; else s=n+f(n-1); returns; } intmain() { intn; printf("Inputaintegers: "); scanf("%d",&n); printf("1+2……+%d=%d\n",n,f(n)); return0; } ⑷定义函数intf(inta,intb)求a,b的最大公约数。 #include intf(inta,intb) { intr,g; r=a%b; if(r==0) g=b; else g=f(b,r); returng; } intmain() { inta,b; printf("Inputtwointegers: "); scanf("%d%d",&a,&b); printf("%dand%dgreatestcommondivisor=%d\n",a,b,f(a,b)); return0; } ⑸已知: 其中: (n≥0) 当x=5.6,n=7时,求y. #include doublefun(doublex,intn)//计算x的n次方 { inti; doubley=1.0; for(i=1;i<=n;i++) y=y*x; returny; } intfact(intn)//计算n! { longp; inti; for(i=1,p=1;i<=n;i++) p=p*i; returnp; } doublef(doublex,intn)//函数f(x,n) { doubley=1; inti; for(i=1;i<=2*n;i+=1) y=y+fun(-1,i)*fun(x,2*i)/fact(2*i); returny; } intmain() { doubley; y=f(5.6,7)/(f(5.6+2.3,7)+f(5.6-3.2,7)); printf("y=%lf\n",y); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第6章 函数与预处理习题解答 函数 预处理 习题 解答