【PTA-C语言】实验八-函数与指针II

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 );

函数fp指向的字符串进行逆序操作。要求函数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 );

其中mn是用户传入的非负整数。函数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应返回第nFibonacci数。题目保证输入输出在长整型范围内。

裁判测试程序样例:

#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;
}
  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谛凌

本人水平有限,感谢您支持与指正

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值