当前位置: 首页 > web >正文

C语言程序设计(第四版)—习题10程序设计题

1.判断满足条件的三位数

编写一个函数,利用参数传入3位数n,找出101~n间所有满足下列两个条件的数:它是完全平方数,又有两位数字相同,如144、676等,函数返回找出这样的数据的个数。试编写相应程序。

本题要求实现一个函数,统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数。

函数接口定义:
int search( int n );

其中传入的参数int n是一个三位数的正整数(最高位数字非0)。函数search返回[101, n]区间内所有满足条件的数的个数。

裁判测试程序样例:
#include <stdio.h>
#include <math.h>int search( int n );int main()
{int number;scanf("%d",&number);printf("count=%d\n",search(number));return 0;
}/* 你的代码将被嵌在这里 */
输入样例:
500
输出样例:
count=6
int search( int n ){int i,x,g,s,b,count=0;for(i=11;i<=sqrt(n);i++){x=pow(i,2);g=x%10;//个位s=x%100/10;//十位b=x/100;//百位if(g==s||g==b||s==b){count++;}}	return count;
}

2.递归求阶乘和

输入一个整数n(n>0且n≤10),求1!+2!+3!+……+n!。定义并调用函数fact(n)计算n!,函数类型是double。试编写相应程序。

本题要求实现一个计算非负整数阶乘的简单函数,并利用该函数求 1!+2!+3!+...+n! 的值。

函数接口定义:
double fact( int n ); 
double factsum( int n );

函数fact应返回n的阶乘,建议用递归实现。函数factsum应返回 1!+2!+...+n! 的值。题目保证输入输出在双精度范围内。

裁判测试程序样例:
#include <stdio.h>double fact( int n );
double factsum( int n );int main()
{int n;scanf("%d",&n);printf("fact(%d) = %.0f\n", n, fact(n));printf("sum = %.0f\n", factsum(n));return 0;
}/* 你的代码将被嵌在这里 */
输入样例1:
10
输出样例1:
fact(10) = 3628800
sum = 4037913
输入样例2:
0
输出样例2:
fact(0) = 1
sum = 0
double fact( int n ){if(n<=1)return 1;elsereturn fact(n-1)*n;
}
double factsum( int n ){if(n<1)return 0;elsereturn factsum(n-1)+fact(n);
}

3.递归实现计算x^{n}

输入实数x和正整数n,用递归函数计算x^{n}的值。试编写相应程序。

本题要求实现一个计算xn(n≥1)的函数。

函数接口定义:
double calc_pow( double x, int n );

函数calc_pow应返回xn次幂的值。建议用递归实现。题目保证结果在双精度范围内。

裁判测试程序样例:
#include <stdio.h>double calc_pow( double x, int n );int main()
{double x;int n;scanf("%lf %d", &x, &n);printf("%.0f\n", calc_pow(x, n));return 0;
}/* 你的代码将被嵌在这里 */
输入样例:
2 3
输出样例:
8
double calc_pow( double x, int n ){if(n<1)return 1;elsereturn x*calc_pow(x,n-1);
}

4.递归求式子和

输入实数x和正整数n,用递归的方法对下列计算式子编写一个函数。

f(x,n) = x-x^{2}+x^{3}-x^{4}+...+(-1)^{n-1}x^{n} (n>0)

试编写相应程序。

本题要求实现一个函数,计算下列简单交错幂级数的部分和:

f(x,n)=x−x2+x3−x4+⋯+(−1)n−1xn

函数接口定义:
double fn( double x, int n );

其中题目保证传入的n是正整数,并且输入输出都在双精度范围内。函数fn应返回上述级数的部分和。建议尝试用递归实现。

裁判测试程序样例:
#include <stdio.h>double fn( double x, int n );int main()
{double x;int n;scanf("%lf %d", &x, &n);printf("%.2f\n", fn(x,n));return 0;
}/* 你的代码将被嵌在这里 */
输入样例:
0.5 12
输出样例:
0.33
double fn( double x, int n ){if(n<=1)return x;else{if(n%2==0)return fn(x,n-1)-pow(x,n);elsereturn fn(x,n-1)+pow(x,n);}
}

5.递归计算函数ack(m,n)

输入m和n,编写递归函数计算Ackermenn函数的值:

 试编写相应程序。

本题要求实现Ackermenn函数的计算,其函数定义如下:

函数接口定义:
int Ack( int m, int n );

其中mn是用户传入的非负整数。函数Ack返回Ackermenn函数的相应值。题目保证输入输出都在长整型

范围内。

裁判测试程序样例:
#include <stdio.h>int Ack( int m, int n );int main()
{int m, n;scanf("%d %d", &m, &n);printf("%d\n", Ack(m, n));return 0;
}/* 你的代码将被嵌在这里 */
输入样例:
2 3
输出样例:
9
int Ack( int m, int n ){if(m==0)return n+1;else if(n==0 && m>0)return Ack(m-1,1);else if(m>0 && n>0)return Ack(m-1,Ack(m,n-1));
}

6.递归实现求Fabonacci数列

用递归方法编写求斐波那契数列的函数,函数类型为整型,斐波那契数列的定义如下。试编写相应程序。

f(n) = f(n-2) + f(n-1)(n>1)其中f(0)=0,f(1)=1。

本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:

f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。

函数接口定义:
int f( int n );

函数f应返回第n个Fabonacci数。题目保证输入输出在长整型范围内。建议用递归实现。

裁判测试程序样例:
#include <stdio.h>int f( int n );int main()
{int n;scanf("%d", &n);printf("%d\n", f(n));return 0;
}/* 你的代码将被嵌在这里 */
输入样例:
6
输出样例:
8
int f( int n ){if(n==0)return 0;else if(n==1)return 1;elsereturn f(n-2)+f(n-1);
}

7.递归实现十进制转换二进制

输入一个正整n,将其转换为二进制后输出。要求定义并调用函数dectobin(n),它的功能是输出n的二进制。试编写相应程序。

本题要求实现一个函数,将非负整数n转换为二进制后输出。

函数接口定义:
void dectobin( int n );

函数dectobin应在一行中打印出二进制的n。建议用递归实现。

裁判测试程序样例:
#include <stdio.h>void dectobin( int n );int main()
{int n;scanf("%d", &n);dectobin(n);return 0;
}/* 你的代码将被嵌在这里 */
输入样例:
10
输出样例:
1010
void dectobin( int n ){if(n == 0)printf("0");else if(n == 1)printf("1");else{dectobin(n/2);printf("%d",n%2);}
}

8.递归实现顺序输出整数

输入一个正整数n,编写递归函数实现对其进行按位顺序输出。试编写相应程序。

本题要求实现一个函数,对一个整数进行按位顺序输出。

函数接口定义:
void printdigits( int n );

函数printdigits应将n的每一位数字从高位到低位顺序打印出来,每位数字占一行。

裁判测试程序样例:
#include <stdio.h>void printdigits( int n );int main()
{int n;scanf("%d", &n);printdigits(n);return 0;
}/* 你的代码将被嵌在这里 */
输入样例:
12345
输出样例:
1
2
3
4
5
void printdigits( int n ){if(n<10)printf("%d\n",n);else{printdigits(n/10);printf("%d\n",n%10);}
}

9.

输入n(n<10)个整数,统计其中素数的个数。要求程序由两个文件组成,一个文件中编写main函数,另一个文件中编写素数判断的函数。使用文件包含的方式实现。试编写相应程序。

  • main.h 主函数
#include<stdio.h>
#include<math.h>
#include "Prime.c"
int IsPrime(int x);
int main(){int n;scanf("%d",&n);int x;int num = 0;while(n--){scanf("%d",&x);if(IsPrime(x) == 1)num++;}printf("素数的个数:%d",num);return 0;
}
  • Prime.c
int IsPrime(int x){if(x <= 1)return 0;//0不是素数,1是素数else if(x == 2)return 1;else{int item = sqrt(x)+1;int i;for(i=2;i<item;i++){if(x%i==0)break;}if(i>=item)return 1;return 0;} 
}

10.三角形面积为:

area=\sqrt{s\times(s-a)\times(s-b)\times(s-c) }

s = (a+b+c)/2

其中a、b、c分别是三角形的3条边。请分别定义计算s和area的宏,再使用函数实现。比较两者在形式上和使用上的区别。

  • 定义宏实现
#include<stdio.h>
#include<math.h>#define s(a,b,c) (a+b+c)/2
#define area(a,b,c) sqrt(s(a,b,c)*(s(a,b,c)-a)*(s(a,b,c)-b)*(s(a,b,c)-c))
int main(){double a,b,c;scanf("%lf %lf %lf",&a,&b,&c);printf("area = %.3f",area(a,b,c));return 0;
}
  • 函数实现
#include<stdio.h>
#include<math.h>double s(double a,double b,double c){return (a+b+c)/2;
}
double area(double a,double b,double c){return sqrt(s(a,b,c)*(s(a,b,c)-a)*(s(a,b,c)-b)*(s(a,b,c)-c));
}
int main(){double a,b,c;scanf("%lf %lf %lf",&a,&b,&c);printf("area = %.3f",area(a,b,c));return 0;
}
http://www.xdnf.cn/news/11521.html

相关文章:

  • Android OpenGL使用GLSurfaceView预览视频
  • 心脏出血(Heartbleed)漏洞浅析、复现
  • 【详解智能座舱通信技术--转载】
  • Android 2.3定制ROM CyanogenMod 7装机量超22万
  • 提示“QQ在线状态服务尚未启用,您需要添加对方为好友才能与其进行会话”解决方法
  • 奇妙动漫世界
  • 工业大数据浅析(上篇)——工业大数据的概念、发展及价值
  • 声屏障:声屏障
  • 软件开发的必备步骤
  • 超全的数据可视化图表组件,建议收藏!
  • 如何正确对待止损止盈?6大止损法、10种止盈技巧,让你的利润奔跑!
  • 在线代理(Web ProxyServer)完全详解
  • 全站静态化
  • 清除系统LJ(绿色单文件版)
  • 《大数据之路:阿里巴巴大数据实践》:看阿里人从IT时代走向DT时代的经验之谈!_大数据之路 阿里巴巴大数据实践 感悟(1)
  • 医院门诊排队叫号系统
  • offsetParent 深度解析
  • 继电器的工作原理及驱动电路
  • NSIS 下载
  • bluetooth外围设备找不到驱动程序怎么解决
  • 从数据库中取时间值,遇到:java.sql.Timestamp cannot be cast to java.lang.Long
  • android 9.0广播动态注册和接收流程
  • 5个好用的网络故障排除工具分享_ip tools network utilities
  • Windows11出现找不到d3dx9_25.dll文件如何处理??
  • 循环冗余校验(CRC)
  • MKV格式详解
  • 五种css溢出隐藏的方法----亲测可用
  • 基于Java SSM框架实现企业台账管理平台系统项目【项目源码+论文说明】计算机毕业设计
  • 4.4 matlab三维曲线(plot3函数、fplot3函数)
  • FusionCharts简单教程(一)---建立第一个FusionCharts图形