本文共 8697 字,大约阅读时间需要 28 分钟。
请编写高效递归函数,求组合数。
函数原型 double Cmb(int x, int y); 说明:x 和 y 为非负整数,且 x ≥ y ≥ 0,函数值为组合数 Cxy。要求:不要使用循环语句,不要调用阶乘函数和排列数函数。找出最快的递推公式,该函数直接调用自己求得结果。
裁判程序:#includedouble Cmb(int x, int y);int main(){ int m, n; scanf("%d%d", &m, &n); printf("%.10g\n", Cmb(m, n)); return 0;}/* 你提交的代码将被嵌在这里 */
输入样例
4 2 输出样例 6double Cmb(int x, int y){ double m; if(x<0||y<0||xx/2){ y=x-y; m=Cmb(x,y); } else{ m=x*Cmb(x-1,y-1)/y; } return m;}
doubleCmb(int x, int y){ int x,y,sum,c,x1,y1,sum1; sum=y-x; x1 = fact(x); y1 = fact(y); sum1 = fact(sum); c=y1/(x1*sum1); printf("%d",c);int fact(int n){ if(n==1) return 1; else return n*fact(n-1);} }
请编写递归函数,显示矩形。
函数原型
void Rect(int width, int height, char symbol); 说明:参数 width 和 height 为矩形的宽和高,symbol 为显示字符。函数将在屏幕下显示宽度为 width、高度为 height 由字符 symbol 组成的矩形。若 width 或 height 小于等于 0,则不输出。要求:不要使用循环语句。需要利用前面作业中的 Show 函数,可增加自用的内部函数。
裁判程序
#includevoid Show(int number, char symbol);void Rect(int width, int height, char symbol);int main(){ int w, h; char s; scanf("%d %d %c", &w, &h, &s); Rect(w, h, s); return 0;}....../* 你提交的代码将被嵌在这里 */
输入样例1
-3 -4 # 输出样例1 注:无输出。输入样例2
20 5 * 输出样例2****************************************************************************************************
关联习题:重复显示字符(递归版)
void Rect(int width, int height, char symbol){ if(height>0&&width>0){ Show(width,symbol); printf("\n"); height=height-1; Rect(width,height,symbol); }}
请编写递归函数,输入若干整数,求这些整数的和。
函数原型 int Sum(int number); 说明:参数 number 为整数的数量。此函数从键盘输入 number 个整数,函数值是这些整数的和。 裁判程序#includeint Sum(int number);int main(){ int n, x, s; scanf("%d", &n); s = Sum(n); printf("%d\n", s); return 0;}/* 你提交的代码将被嵌在这里 */
输入样例1
0 输出样例1 0 输入样例2 5 8 -1 3 6 -9 输出样例2 7 要求:不要使用循环语句。int Sum(int number){ int a; if(number<=0){ return 0; } else{ scanf("%d",&a); return a+Sum(number-1); }}
所谓自守数(也称守形数),是指其平方数的低位部分恰为该数本身的自然数。例如:25
2 =625, 因此 25 是自守数。其中:0 和 1 也算自守数。请编写函数,输出指定范围内的所有自守数。
函数原型 void FindAtmp(long long lower, long long upper); 说明:参数 lower 和 upper 分别为整数区间的下限和上限。若在该范围内存在自守数,则输出这些自守数,否则输出“None”。要求:不要使用循环语句。
提示:需要增加自用的内部函数。
裁判程序#include#define Sqr(x) ...(略)...int IsAtmp(long long x);void FindAtmp(long long lower, long long upper);int main(){ long long a, b; scanf("%lld%lld", &a, &b); FindAtmp(a, b); return 0;}....../* 你提交的代码将被嵌在这里 */
输入样例1
10 80 输出样例1 25 76 输入样例2 400 600 输出样例2 None本题要求实现一个求非负整数的逆序数的简单函数,建议用递归实现。
函数接口定义:
unsigned int reverse( unsigned int number ); 其中 number是用户传入的参数, number 的值不超过unsigned int的范围;函数须返回用户传入的非负整数number的逆序数,建议用递归实现。 裁判测试程序样例:#include# include unsigned int reverse( unsigned int number );int main(){ unsigned int n; scanf("%u", &n); printf("%u\n", reverse(n)); return 0;}/* 请在这里填写答案 */
输入样例:
12340 输出样例: 4321unsigned int reverse( unsigned int number ){ int n=0; while(number){ n=10*n+number%10; number=number/10; } return n;}
请编写函数,考虑误差因素的情况下实现实数的比较。
由于计算机中的实数存在误差问题,因此判断两个实数“相等”时要考虑误差因素。暂且规定:当两个实数之差的绝对值小于指定的精度时,就认为它们“相等”,否则就认为它们“不等”。
函数原型 int RealGt(double x, double y); int RealGe(double x, double y); int RealLt(double x, double y); int RealLe(double x, double y); int RealEq(double x, double y); int RealNe(double x, double y); 说明:参数 x 和 y 为两个实数。若 x 大于 y,则 RealGt 函数值为 1(真),否则为 0(假);
若 x 大于等于 y,则 RealGe 函数值为 1(真),否则为 0(假); 若 x 小于 y,则 RealLt 函数值为 1(真),否则为 0(假); 若 x 小于等于 y,则 RealLe 函数值为 1(真),否则为 0(假); 若 x 等于 y,则 RealEq 函数值为 1(真),否则为 0(假); 若 x 不等于 y,则 RealNe 函数值为 1(真),否则为 0(假)。 在头文件“Real.h”中添加函数声明,在程序文件“Real.c”中编写函数。Real.h
#ifndef _Real_h_#define _Real_h_...(略)...int RealGt(double x, double y);int RealGe(double x, double y);int RealLt(double x, double y);int RealLe(double x, double y);int RealEq(double x, double y);int RealNe(double x, double y);#endif
Real.c
#include#include #include "Real.h"...(略).../* 你提交的代码将被嵌在这里*/
打开程序文件“main.c”,修改主函数,对以上函数进行测试。
main.c
#include#include "Real.h"int main(){ double a, b, c, d; RealInput(&a); RealInput(&b); c = Revise(a + b); RealInput(&d); if (RealGt(c, d)) { puts("c > d"); } if (RealGe(c, d)) { puts("c >= d"); } if (RealLt(c, d)) { puts("c < d"); } if (RealLe(c, d)) { puts("c <= d"); } if (RealEq(c, d)) { puts("c == d"); } if (RealNe(c, d)) { puts("c != d"); } return 0;}
输入样例1
0.3 0.6 0.9 输出样例1 c >= d c <= d c == d 输入样例2 0.4 0.5 0.8 输出样例2 c > d c >= d c != d 输入样例3 0.2 0.3 0.6 输出样例3 c < d c <= d c != dint RealGt(double x, double y){ if(x>y){ return 1; } else{ return 0; }} int RealGe(double x, double y){ if(x>=y){ return 1; } else{ return 0; }}int RealLt(double x, double y){ if(x
请编写函数,求两个整数的最大公约数。
函数原型
int Gcd(int x, int y); 说明:参数 x 和 y 是两个任意整数(包括正整数、零和负整数),函数值为最大公约数。注:最大公约数要求为正整数。当 x=y=0 时,最大公约数规定为 1。
在“Integer.h”中添加函数声明,在“Integer.c”中添加函数定义。打开“main.c”,修改主函数,对以上函数进行测试。
int main(){ int a, b, c; scanf("%d%d", &a, &b); c = Gcd(a, b); printf("%d\n", c); return 0;}
输入样例1
-60 72 输出样例1 12 输入样例2 0 0 输出样例2 1int Gcd(int x, int y){ int t; if(x==0&&y==0){ return 1; } if(x<0){ x=-x; } if(y<0){ y=-y; } if(x<0&&y<0){ x=-x; y=-y; } if(y>x){ t=x; x=y; y=t; } while(y!=0){ x=x%y; if(y>x){ t=x; x=y; y=t; } } return x;}
请编写函数,求两个整数的最大值。
函数原型
int IntMax(int x, int y); 说明:参数 x 和 y 是两个任意整数,函数值为其中较大者。在项目中创建头文件“Integer.h”和源程序文件“Integer.c”。在头文件“Integer.h”中声明函数,在源程序文件“Integer.c”中编写函数。
Integer.h
#ifndef _Integer_h_#define _Integer_h_#includeint IntMax(int x, int y);#endif
Integer.c
#include#include "Integer.h"/* 你提交的代码将被嵌在这里 */
打开程序文件“main.c”,修改主函数,对以上函数进行测试。
main.c
#include#include "Integer.h"int main(){ int a, b, c; scanf("%d%d", &a, &b); c = IntMax(a, b); printf("%d\n", c); return 0;}
对整个项目进行编译、连接,运行程序,检查运行结果是否正确。
输入样例 60 72 输出样例 72int IntMax(int x, int y){ int max; max=x; if(max
用函数实现求求 a + aa + aaa + aa…a(n 个 a)之和。
函数接口定义:
int fun(int a,int n); 裁判测试程序样例:在这里给出函数被调用进行测试的例子。例如:#includeint fun(int a,int n);int main(){ int a,n; scanf("%d %d",&a,&n); printf("%d", fun(a,n)); return 0;}/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:2 3
输出样例: 在这里给出相应的输出。例如:246
int fun(int a,int n){ int sum=0,t; t=a; for(int i=1;i<=n;i++){ sum+=t; t=t*10+a; } return sum;}
输入一个三位数,判断其是否是水仙花数。
函数接口定义:
int fun ( int x); 裁判测试程序样例:#includeint fun ( int n);int main(){ int n; scanf("%d ", &n); if(fun(n)) printf("%d是水仙花数\n",n); else printf("%d不是水仙花数\n",n); return 0;}/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:153
输出样例: 在这里给出相应的输出。例如:153是水仙花数
int fun ( int x){ int a,b,c; a=x/100; b=x%100/10; c=x%10; if(a*a*a+b*b*b+c*c*c==x){ return 1; } else{ return 0; }}
请编写一个函数double CalCircle(double r),输入一个圆半径r,当r>=0时,计算并输出圆的面积和周长,否则,输出提示信息。
函数接口定义:
void CalCircle(double r); r用来存放输入的半径裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:#include#define PI 3.1415926void CalCircle(double r);int main(int argc, char *argv[]) { double r; printf("please input circle r:"); scanf("%lf",&r); CalCircle(r); return 0;}/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:1
输出样例: 在这里给出相应的输出。例如:circle area is:3.142, and the length is:6.283
输入样例: 在这里给出一组输入。例如:-1
输出样例: 在这里给出相应的输出。例如:circle r is invalid!
void CalCircle(double r){ double c,s; if(r>=0){ printf("circle area is:%d,and the length is:%d",2*PI*r,PI*r*r); } else{ printf("circle r is invalid!"); } }
请编写一个函数char CalFun(int x),从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。
函数接口定义:
char CalFun(int x); x为输入的分数,返回等级信息裁判测试程序样例:
#includechar CalFun(int x);int main(int argc, char *argv[]) { int x; printf("please input score:"); scanf("%d",&x); printf("grade is:%c",CalFun(x)); return 0;}/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:95
输出样例: 在这里给出相应的输出。例如:grade is:A
输入样例: 在这里给出一组输入。例如:86
输出样例: 在这里给出相应的输出。例如:grade is:B
输入样例: 在这里给出一组输入。例如:55
输出样例: 在这里给出相应的输出。例如:grade is:E
char CalFun(int x){ switch(x/10){ case 10: case 9:printf("grade is:A\n");break; case 8:printf("grade is:B\n");break; case 7:printf("grade is:C\n");break; case 6:printf("grade is:D\n");break; case 5: case 4: case 3: case 2: case 1: case 0:printf("grade is:E\n");break; }}
转载地址:http://xjnlf.baihongyu.com/