第6章 函数与预处理习题解答

第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 void f(char a[]); void main() {

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 void f(long); void main() {

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 fib(int); void main() {

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 fact(int); void main() {

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 void f(void); void main() {

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() {

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4