第6章 函数与预处理习题解答
1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。
用辗转相除法,m、n是两个正整数,r 是余数,用直到循环操作的流程图:
#include
int gcf(int,int); //求最大公约数函数 int lcm(int,int); //求最小公倍数函数 void main() {
int m,n; do {
printf(\ scanf(\ }while(m<=0||n<=0);
printf(\ printf(\ }
int gcf(int n,int m) {
int r; do {
r=m%n; m=n; n=r;
}while(r!=0); return m; }
int lcm(int m,int n) {
int l;
l=m*n/gcf(m,n); return l;
}
*2.编写一个函数,由参数传一个字符串,统计此字符串中字母、数字和其他字符的个数,在主函数中输入字符串并显示统计的结果。
注:要把字符串传递给函数,只能通过指针或数组名。本题应放在第7、8章介绍数组之后 #include
char a[100];
printf(\ gets(a); f(a); }
void f(char a[]) {
int i=0,c=0,n=0,m=0; do {
if(a[i]>='A'&& a[i]<='Z' || a[i]>='a'&& a[i]<='z') c++;
else if(a[i]>='0'&& a[i]<='9') n++; else m++; i++;
}while(a[i]!='\\0');
printf(\ printf(\ printf(\}
3.按照第5章第8题的要求编写判断水仙花数的函数,从主函数输入正整数n,在主函数中调用判断水仙花数的函数,找出n以内所有的水仙花数。 #include
long int n;
printf(\ scanf(\ f(n); }
void f(long int n) {
int i,k,s=0,a,r; for(i=10;i a=i; for(k=0;a!=0;k++) { r=a; s=s+r*r*r; a=a/10; } if(s==i) printf(\ s=0; } } 4.定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显示结果。 #include #define SWAP(a,b) a=a+b;b=a-b;a=a-b void main() { int x,y; printf(\ scanf(\ SWAP(x,y); printf(\} 5.已知二阶Fibonacii数列: ?1?Fib(n)??0?Fib(n?1)?Fib(n?2)?若n?0若n?1 其他情况定义递归函数求Fib(n)。 #include int x,i; printf(\ scanf(\ for(i=0;i<=x;i++) printf(\ putchar('\\n'); } int fib(int n) { int f; if(n==0) f=0; else if(n==1) f=1; else f=fib(n-1)+fib(n-2); return f; } 6.定义函数求F=(n+m)!+n!,m,n均为任意正整数。要求使用递归调用。 #include int x,y; printf(\ scanf(\ printf(\ } int fact(int n) { int f; if(n==0) f=1; else f=n*fact(n-1); return f; } 7.定义一个函数完成第5章第11题的功能:输出九九表。 #include f(); } void f(void) { int i,j; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) { printf(\ putchar(' '); } putchar('\\n'); } } 8.如果有两个数,每一个数的所有约数(除了它本身以外)的和正好等于对方,则称这两个数为互满数,求出30000以内所有的互满数,并显示输出,求一个数它的所有约数(除了本身以外)的和,用函数实现。 先编写一个求一个整数约数和各的试验程序: #include int divs(int n); //求整数n的约数之和 void main() { int n; printf(\ scanf(\ divs(n); } int divs(int n) { int i,s=0; printf(\ for(i=1;i if(n%i==0) { s+=i; printf(\ } } putchar('\\n'); printf(\ return s; } 本题程序(为了程序运行快些,求300以内的互满数): #include int divs(int n); //求整数n的约数之和 void main() {