@目录
本题要求实现一个计算非负整数阶乘的简单函数,并利用该函数求 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||n==0) return 1;
else return n*fact(n-1);
}
double factsum( int n )
{
int i;
double sum=0;
if(n==0) return 0;
else
{
for(i=1;i<=n;i++)
sum+=fact(i);
return sum;
}
}
本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。
函数接口定义:
void strmcpy( char *t, int m, char *s );
函数strmcpy将输入字符串char *t中从第m个字符开始的全部字符复制到字符串char *s中。若m超过输入字符串的长度,则结果字符串应为空串。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 20
void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char t[MAXN], s[MAXN];
int m;
scanf("%d\n", &m);
ReadString(t);
strmcpy( t, m, s );
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
7 happy new year
输出样例:
new year
代码:
void strmcpy( char *t, int m, char *s )
{
int len=strlen(t);
int i=0;
if(m>len) *s=NULL;
else
{
m=m-1;
while(t[m]!='\0')
{
s[i++]=t[m];
m++;
}
s[i]='\0';
}
}
本题要求实现一个删除字符串中的指定字符的简单函数。
函数接口定义:
void delchar( char *str, char c );
其中char *str是传入的字符串,c是待删除的字符。函数delchar的功能是将字符串str中出现的所有c字符删除。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 20
void delchar( char *str, char c );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
char str[MAXN], c;
scanf("%c\n", &c);
ReadString(str);
delchar(str, c);
printf("%s\n", str);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
a happy new year
输出样例:
hppy new yer
代码:
void delchar( char *str, char c )
{
int len=strlen(str);
char *strTemp=(char*)malloc(sizeof(char)*len);
int i=0;
int t=0;
while(str[i]!='\0')
{
if(str[i]!=c) strTemp[t++]=str[i];
i++;
}
strTemp[t]='\0';
for(i=0;i<=t;i++)
str[i]=strTemp[i];
}
本题要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。
函数接口定义:
bool palindrome( char *s );
函数palindrome判断输入字符串char *s是否为回文。若是则返回 true ,否则返回 false 。
裁判测试程序样例:
#include <stdio.h>
#include <string.h>
#define MAXN 20
typedef enum {false, true} bool;
bool palindrome( char *s );
int main()
{
char s[MAXN];
scanf("%s", s);
if ( palindrome(s)==true )
printf("Yes\n");
else
printf("No\n");
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
thisistrueurtsisiht
输出样例1:
Yes thisistrueurtsisiht
输入样例2:
thisisnottrue
输出样例2:
No thisisnottrue
代码:
bool palindrome( char *s )
{
int len=strlen(s);
int i;
int l=1;
for(i=0;i<len/2;i++)
{
if(s[i]!=s[len-1-i])
{
l=0;
break;
}
}
if(l==1) return true;
else return false;
}
本题要求实现一个计算
(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 x;
else return x*calc_pow(x,n-1);
}
本题要求实现一个函数,计算下列简单交错幂级数的部分和:
f(x,n)=x−
−
−
函数接口定义:
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 return pow(-1,n-1)*pow(x,n)+fn(x,n-1);
}
本题要求实现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);
if(n>0&&m>0) return Ack(m-1,Ack(m,n-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||n==1) return n;
//else if(n==1) return 1;
else
{
return f(n-2)+f(n-1);
}
}
本题要求实现一个函数,将正整数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<2) printf("%d",n%2);
else
{
dectobin(n/2);
printf("%d",n%2);
}
}
本题要求实现一个函数,对一个整数进行按位顺序输出。
函数接口定义:
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%10);
else
{ printdigits(n/10);
printf("%d\n",n%10);
}
}