- 如果代码存在问题,麻烦大家指正 ~ ~
- 有帮助麻烦点个赞 ~ ~
 目录——实验八-函数与指针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;
}



















