习题6
1.#include
int max(int a,int b) //定义求最大公约数函数max {
int r; //定义中间变量
r
}
while((r=a%b)!=0) { a=b; b=r; }
return b;
int min(int a,int b) //定义求最小公倍数函数min {
int d;
d=max(a,b);
return a*b/d; //返回最小公倍数的值
}
void main() { int a,b,x,y; printf(\ scanf(\ }
解析:由于两个正整数a、b的最大公约数和最小公倍数之间x=max(a,b); //调用函数max y=min(a,b); //调用函数min printf(\输出最大公约数 printf(\输出最小公倍数
是有关系的,所以呢···设最大公约数为x,最小公倍数为 y,则有y=a*b/x(程序中定义的min函数中设的最小公倍数的值 为d,故a*b/d),将a、b的值带入函数,返回最小公倍数的值,最小公倍数离不开最大公约数,故,在其函数中调用求解最大公约数的函数。 2.#include
void f(char ch) //定义函数f {
int i=0,j=0,k=0;
while(ch!='*') //进入循环,终止字符为'*' { }
printf(\输出数字个数
i,字母个数j,其他字符个数k
}
void main() { char ch; ch=getchar();
f(ch); //调用函数f
if(ch>='0'&&ch<='9')
i++; else if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) j++; else k++; ch=getchar(); //继续输入字符
}
解析:此题我们不妨先设定一个终止字符‘*’,定义函数,进入循环体,当你输入的字符不是‘*’时,按照你输入的字符类型进行判定以及累加,循环未结束时要再次进行字符输入,所以“ch=getchar()”一句不要忘记···主函数中调用其函数实现其函数功能。 3.#include
int f(int n) //定义判定水仙花数的函数f {
int a,b,c,i;
for(i=100;i<=n;i++) //判定100-n的水仙花数循环 { a=i;
b=(i/10); c=i/100; if(i==a*a*a+b*b*b+c*c*c)
printf(\输出100-n的所有水仙
花数
}
return i;
}
void main() { int n; }
scanf(\输入n f(n); //调用函数f
解析:关于水仙花数呢···我们在前面习题中有所了解,是仅限于三位数的,所以我们要从100-999中进行此项寻找水仙花数的任务,当然了,你想找的范围比这个小也可以。首先定义判定水仙花数的函数,将三位数的各位数字表示出来,若符合水仙花数则将其返回主函数,在主函数中输入n,寻找100-n中的水仙花数···您输入的n要是超过999或者小于100,这个···就不好办了…
4.#define f(a,b)(a=a+b,b=a-b,a=a-b) //定义宏f,实现两个数互换 #include
解析:那啥···关于这个宏定义吧···其实我还是比较迷惑的,“#define(实参表达式1,实参表达式2?)(宏说明)”,貌似就是这样,本题实现两数交换,故设出两数a、b,先将两数之和的值赋给a,而a-b的值就是原来的a,我们现在让其值等于b,同理,a也是这样,此时,两数的值就交换了,再printf(\输出调用前两数的值 f(i,j); //调用宏
printf(\输出调用宏以后两数的值
在主函数中调用宏即可。 5.#include
int Fib(int n) //定义函数Fib {
if(n==0) return 0; else if(n==1) return 1; else
return Fib(n-1)+Fib(n-2); //递归调用Fib
}
void main() { int n; }
解析:此题只要运用函数的递归调用方可完成···额···应该是吧··· 6.#include
int f(int x) //定义函数f,求(m+n)! {
int a; if(x==0) a=1; else
a=x*f(x-1); //递归调用,求(m+n-1)! scanf(\输入n的值
printf(\调用函数Fib,并输出
return a;
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库C语言程序设计1-6章课后习题(7)在线全文阅读。
相关推荐: