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;
else
return fact(n-1)*n;
}
double factsum( int n ){
if(n<1)
return 0;
else
return factsum(n-1)+fact(n);
}
3.递归实现计算
输入实数x和正整数n,用递归函数计算的值。试编写相应程序。
本题要求实现一个计算xn(n≥1)的函数。
函数接口定义:
double calc_pow( double x, int n );函数
calc_pow应返回x的n次幂的值。建议用递归实现。题目保证结果在双精度范围内。裁判测试程序样例:
#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;
else
return x*calc_pow(x,n-1);
}
4.递归求式子和
输入实数x和正整数n,用递归的方法对下列计算式子编写一个函数。
试编写相应程序。
本题要求实现一个函数,计算下列简单交错幂级数的部分和:
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);
else
return fn(x,n-1)+pow(x,n);
}
}
5.递归计算函数ack(m,n)
输入m和n,编写递归函数计算Ackermenn函数的值:

试编写相应程序。
本题要求实现Ackermenn函数的计算,其函数定义如下:
函数接口定义:
int Ack( int m, int n );其中
m和n是用户传入的非负整数。函数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;
else
return 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.三角形面积为:
其中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;
}

366

被折叠的 条评论
为什么被折叠?



