- 如果代码存在问题,麻烦大家指正 ~ ~
- 有帮助麻烦点个赞 ~ ~
目录——实验八-函数与指针II
- 6-1 移动字母(分数 10)
- 6-2 删除字符(分数 10)
- 6-3 函数实现字符串逆序(分数 10)
- 6-4 递归计算Ackermenn函数(分数 10)
- 6-5 递归计算P函数(分数 10)
- 6-6 使用函数求Fibonacci数(分数 10)
- 6-7 字符定位(最后一次找到的字符)(分数 10)
6-1 移动字母(分数 10)
作者 张泳
单位 浙大城市学院
本题要求编写函数,将输入字符串的前3
个字符移到最后。
函数接口定义:
void Shift( char s[] );
其中char s[]
是用户传入的字符串,题目保证其长度不小于3
;函数Shift
须将按照要求变换后的字符串仍然存在s[]
里。
裁判测试程序样例:
#include <stdio.h>
#include <string.h>
#define MAXS 10
void Shift( char s[] );
void GetString( char s[] ); /* 实现细节在此不表 */
int main()
{
char s[MAXS];
GetString(s);
Shift(s);
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
abcdef
输出样例:
defabc
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
参考代码
void Shift( char s[] )
{
int len=strlen(s);
if(len>2) {
int i, t=0;
char temp[100];
for(i=0; i<3; i++)
temp[i] = s[i];
for(i=3; i<len; i++)
s[t++] = s[i];
for(i=0; i<3; i++)
s[t++] = temp[i];
}
}
6-2 删除字符(分数 10)
作者 C课程组
单位 浙江大学
本题要求实现一个删除字符串中的指定字符的简单函数。
函数接口定义:
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
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
参考代码
void delchar( char *str, char c )
{
char *a=str;
int i, j=0;
for(i=0; *(str+i)!='\0'; i++)
if(*(str+i) != c) {
*(str+j) = *(str+i);
j++;
}
*(str+j) = '\0';
}
6-3 函数实现字符串逆序(分数 10)
作者 张泳
单位 浙大城市学院
本题要求实现一个字符串逆序的简单函数。
函数接口定义:
void f( char *p );
函数f
对p
指向的字符串进行逆序操作。要求函数f
中不能定义任何数组,不能调用任何字符串处理函数。
裁判测试程序样例:
#include <stdio.h>
#define MAXS 20
void f( char *p );
void ReadString( char *s ); /* 由裁判实现,略去不表 */
int main()
{
char s[MAXS];
ReadString(s);
f(s);
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
Hello World!
输出样例:
!dlroW olleH
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
参考代码
void f( char *p )
{
int count=0,i;
char *temp=p, t;
while(*temp != '\0'){
count++;
temp++;
}
for(i=0; i<=(count/2-1); i++) {
t = p[i];
p[i] = p[count-1-i];
p[count-1-i] = t;
}
}
6-4 递归计算Ackermenn函数(分数 10)
作者 C课程组
单位 浙江大学
本题要求实现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
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
参考代码
int Ack( int m, int n )
{
if(m==0)
return n+1;
if(m>0 && n>0)
Ack(m-1, Ack(m, n-1));
if(n==0 && m>0)
Ack(m-1, 1);
}
6-5 递归计算P函数(分数 10)
作者 C课程组
单位 浙江大学
本题要求实现下列函数 P ( n , x ) P(n,x) P(n,x)的计算,其函数定义如下:
函数接口定义:
double P( int n, double x );
其中n
是用户传入的非负整数,x
是双精度浮点数。函数P返回
P
(
n
,
x
)
P(n,x)
P(n,x)函数的相应值。题目保证输入输出都在双精度范围内。
裁判测试程序样例:
#include <stdio.h>
double P( int n, double x );
int main()
{
int n;
double x;
scanf("%d %lf", &n, &x);
printf("%.2f\n", P(n,x));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
10 1.7
输出样例:
3.05
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
参考代码
double P( int n, double x )
{
double result;
if(n==0)
return 1.0;
else if(n == 1)
result = x;
else
result = (2*n-1) * P(n-1, x) - (n-1) * P(n-2, x);
return result/n;
}
6-6 使用函数求Fibonacci数(分数 10)
作者 颜晖
单位 浙大城市学院
本题要求实现求Fabonacci
数列项的函数。所谓Fibonacci
数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。
函数接口定义:
int fib( int n );
函数fib
应返回第n
项Fibonacci
数。题目保证输入输出在长整型范围内。
裁判测试程序样例:
#include <stdio.h>
int fib( int n );
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", fib(n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
7
输出样例:
13
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
参考代码
int fib(int n)
{
int a=1, b=1, i, res;
if(n<3)
return 1;
else
for(i=1; i<n-1; i++) {
res = a+b;
a = b;
b = res;
}
return res;
}
6-7 字符定位(最后一次找到的字符)(分数 10)
作者 张泳
单位 浙大城市学院
本题要求定义一个函数,在字符串中查找字符,并定位在最后一次找到的位置。
函数接口定义:
char * match(char *s, char ch);
其中s
是字符串首地址,ch
是要查找的字符。要求函数在字符串s
中查找字符ch
,如果找到,返回最后一次找到的该字符在字符串中的位置(地址);否则,返回空指针NULL
。
裁判测试程序样例:
#include <stdio.h>
char *match(char *s, char ch);
int main(void )
{
char ch, str[80], *p = NULL;
scanf("%s", str);
getchar(); /* 跳过输入字符串和输入字符之间的分隔符 */
ch = getchar(); /* 输入一个字符 */
p = match(str, ch); /* 调用函数match() */
if( p != NULL ){ /* 找到字符ch */
printf("%s\n", p);
}else{
printf("Not Found.\n");
}
return 0;
}
/* 请在这里填写答案 */
输入样例1:
program
r
输出样例1:
ram
输入样例2:
program
x
输出样例2:
Not Found.
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
参考代码
char * match(char *s, char ch)
{
int i;
char *pos = NULL;
for(i=0; s[i]!='\0'; i++)
if(s[i]==ch)
pos = s+i;
return pos;
}