6.下列语句的运算结果为_7,-13____。 #define F(x) x - 2 #define D(x) x * F(x)
printf(\三、程序设计题
1.编写一个函数,利用参数传入一个3 位数n,找出101~n 间所有满足下列两个条件的数: 它是完全平方数,又有两位数字相同,如144、676 等,函数返回找出这样的数据的个数。 请同时编写主函数。 解答:
#include
printf(\scanf(\
printf(\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)|| i/100==i||(i/10)==i) d++; }
return d; }
2.用递归的方法对下列计算式子编写一个函数。 f(x , n) = x - x2 + x3 - x4 + … + (-1) n-1x n (n>0) 并写出相应主函数。 解答:
#include
double f(double x, int n) {
if(n==1) return x;
return pow(-1,n-1)*pow(x,n)+f(x, n-1); }
int main(void) { int n;
double x;
printf(\scanf(\printf(\return 0; }
3.计算Ackermenn 函数ack(m,n),其定义如下: n + 1 m=0
ack(m, n)= ack(m - 1, 1) n=0 && m>0 ack(m - 1, ack(m, n - 1) ) m>0 && n>0 解答:
#include
int m,n; int result;
scanf(\result = Ack(m,n);
printf(\}
int Ack(int m, int n) {
if (m==0) return n+1;
else if (n==0) return Ack(m-1, 1); else return Ack(m-1, Ack(m, n-1)); }
4.用递归方法编写求斐波那契数列的函数,函数类型为整型,并写出相应主函数。斐波那 契数列的定义如下。
f(n) = f(n - 2) + f(n - 1) (n>1) 其中 f(0) = 0,f(1) = 1。 解答:
#include
scanf(\
printf(\}
long fib(int n) {
long res; if(n==0)
res=0;
else if(n==1) res=1; else
res=fib(n-2)+fib(n-1); return res; }
5.编写实现对一个整数进行按位顺序输出的递归函数。 解答:
#include
scanf(\
printf(\}
int inorder (int num) {
if(num<10) return num; else
return(inorder (num/10)*10+ num); }
6.编写实现对一个整数进行逆序处理的递归函数,函数需要有返回值,其值为逆序后的数 据。 解答:
#include \#include \int rev(int n); int x=1;
int main(void) {
int n, t=1;
scanf(\
printf(\return 0; }
int rev(int n) {
static int p; int y; if (n<10) p = 1, y = n;
else {
y = rev(n / 10); p *= 10;
y = y + (n % 10) * p; }
return y; }
7.三角形面积为: area =
s?(s ??a)?(s ?b)?(s ??c)
其中,s = (a + b + c) / 2。a、b、c 分别是三角形的3 条边。请分别定义计算s 和area 的宏。 再使用函数实现,比较两者在形式上和使用上的区别。 解答:
(1) 使用宏实现 #include
#define S(a ,b, c) ((a)+(b)+(c))/2
#define AREA(s,a,b,c) sqrt((s)*((s)-(a))*((s)-(b))*((s)-(c))) int main(void) {
double a, b, c, s;
printf(\
scanf(\s = S(a,b,c);
printf(\return 0; }
(2) 使用函数实现 #include
double f1(double a, double b, double c) {
return (a+b+c)/2; }
double f2(double s, double a, double b, double c) {
return sqrt(s*(s-a)*(s-b)*(s-c)); }
int main(void) {
double a, b, c, s;
printf(\
scanf(\s = f1(a,b,c);
相关推荐: