【PTA-C语言】实验七-函数与指针I

  • 如果代码存在问题,麻烦大家指正 ~ ~

  • 有帮助麻烦点个赞 ~ ~

    目录------实验七-函数与指针I

    • [6-1 弹球距离(分数 10)](#6-1 弹球距离(分数 10))
    • [6-2 使用函数输出一个整数的逆序数(分数 10)](#6-2 使用函数输出一个整数的逆序数(分数 10))
    • [6-3 使用函数求最大公约数(分数 10)](#6-3 使用函数求最大公约数(分数 10))
    • [6-4 使用函数求特殊a串数列和(分数 10)](#6-4 使用函数求特殊a串数列和(分数 10))
    • [6-5 使用函数求素数和(分数 10)](#6-5 使用函数求素数和(分数 10))
    • [6-6 统计各位数字之和是5的数(分数 10)](#6-6 统计各位数字之和是5的数(分数 10))
    • [6-7 多项式求值(分数 10)](#6-7 多项式求值(分数 10))
    • [6-8 分类统计各类字符个数(分数 10)](#6-8 分类统计各类字符个数(分数 10))

6-1 弹球距离(分数 10)

作者 DS课程组

单位 浙江大学

设有一个球从高度为 h h h米的地方落下,碰到地面后又弹到高度为原来 p p p倍的位置,然后又落下,再弹起,再落下...。请编写函数求初始高度为h的球下落后到基本停下来(高度小于给定阈值TOL)时在空中所经过的路程总和。

函数接口定义:

c 复制代码
double dist( double h, double p );

其中h是球的初始高度,p是球弹起高度与弹起前落下高度的比值;函数dist要返回球下落后到基本停下来时在空中所经过的路程总和。注意:当弹起的高度小于裁判程序定义的常数TOL时,弹起的距离不计算在内。

裁判测试程序样例:

c 复制代码
#include <stdio.h>
#define TOL 1E-3

double dist( double h, double p );

int main()
{
    double h, p, d;
    scanf("%lf %lf", &h, &p);
    d = dist(h, p);
    printf("%.6f\n", d);
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

c 复制代码
1.0 0.4

输出样例:

c 复制代码
2.331149

代码长度限制

16 KB
时间限制

400 ms
内存限制

64 MB

参考代码

c 复制代码
double dist( double h, double p )
{
    if(p*h<TOL)
        return h;
    else
        return h+p*h+dist(p*h, p);
}

6-2 使用函数输出一个整数的逆序数(分数 10)

作者 C课程组

单位 浙江大学

本题要求实现一个求整数的逆序数的简单函数。

函数接口定义:

c 复制代码
int reverse( int number );

其中函数reverse须返回用户传入的整型number的逆序数。

裁判测试程序样例:

c 复制代码
#include <stdio.h>

int reverse( int number );
    
int main()
{
    int n;

    scanf("%d", &n);
    printf("%d\n", reverse(n));

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

c 复制代码
-12340

输出样例:

c 复制代码
-4321

代码长度限制

16 KB
时间限制

400 ms
内存限制

64 MB

参考代码

c 复制代码
int reverse( int number ){
  int sum=0, result;
    if(number<0) {
        printf("-");
        number = -number;
    }
    while(number != 0) {
        result = number % 10;
        sum = sum * 10 + result;
        number /= 10;
    }
    return sum;
}

6-3 使用函数求最大公约数(分数 10)

作者 张高燕

单位 浙大城市学院

本题要求实现一个计算两个数的最大公约数的简单函数。

函数接口定义:

c 复制代码
int gcd( int x, int y );

其中xy是两个正整数,函数gcd应返回这两个数的最大公约数。

裁判测试程序样例:

c 复制代码
#include <stdio.h>

int gcd( int x, int y );

int main()
{
    int x, y;
    
    scanf("%d %d", &x, &y);
    printf("%d\n", gcd(x, y));
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

c 复制代码
32 72

输出样例:

c 复制代码
8

感谢集美大学蓝华斌同学修正测试数据!

代码长度限制

16 KB
时间限制

400 ms
内存限制

64 MB

参考代码

c 复制代码
int gcd(int x, int y)
{
    int temp;
    while(y){
        temp=x%y;
        x=y;
        y=temp;
    }
    return x;
}

6-4 使用函数求特殊a串数列和(分数 10)

作者 张高燕

单位 浙江大学

给定两个均不超过9的正整数 a a a和 n n n,要求编写函数求 a + a a + a a a + + ⋯ + a a ⋯ a a+aa+aaa++⋯+aa⋯a a+aa+aaa++⋯+aa⋯a( n n n个 a a a)之和。

函数接口定义:

c 复制代码
int fn( int a, int n );
int SumA( int a, int n );

其中函数fn须返回的是na组成的数字;SumA返回要求的和。

裁判测试程序样例:

c 复制代码
#include <stdio.h>

int fn( int a, int n );
int SumA( int a, int n );
    
int main()
{
    int a, n;

    scanf("%d %d", &a, &n);
    printf("fn(%d, %d) = %d\n", a, n, fn(a,n));        
    printf("s = %d\n", SumA(a,n));    
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

c 复制代码
2 3

输出样例:

c 复制代码
fn(2, 3) = 222
s = 246

代码长度限制

16 KB
时间限制

400 ms
内存限制

64 MB

参考代码

c 复制代码
int fn(int a, int n)
{
    int sum=0, i;
    for(i=0; i<n; i++)
        sum=sum*10+a;
    return sum;
}
int SumA(int a, int n)
{
    int sum=0, i;
    for(i=1; i<=n; i++)
        sum += fn(a, i);
    return sum;
} 

6-5 使用函数求素数和(分数 10)

作者 张高燕

单位 浙大城市学院

本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。

素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。

函数接口定义:

c 复制代码
int prime( int p );
int PrimeSum( int m, int n );

其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数PrimeSum返回区间[m, n]内所有素数的和。题目保证用户传入的参数mn

裁判测试程序样例:

c 复制代码
#include <stdio.h>
#include <math.h>

int prime( int p );
int PrimeSum( int m, int n );
    
int main()
{
    int m, n, p;

    scanf("%d %d", &m, &n);
    printf("Sum of ( ");
    for( p=m; p<=n; p++ ) {
        if( prime(p) != 0 )
            printf("%d ", p);
    }
    printf(") = %d\n", PrimeSum(m, n));

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

c 复制代码
-1 10

输出样例:

c 复制代码
Sum of ( 2 3 5 7 ) = 17

代码长度限制

16 KB
时间限制

400 ms
内存限制

64 MB

参考代码

c 复制代码
int prime(int p){
    int i;
    if(p<2)
        return 0;
    else if(p==2)
        return 1;
    else
         for(i=2; i<=sqrt(p); i++)
             if(p%i==0)
                 return 0;
     return 1;
}
int PrimeSum( int m, int n )
{
    int i, sum=0;
    for(i=m; i<=n; i++)
        if(prime(i)==1)
            sum += i;
    return sum;
}

6-6 统计各位数字之和是5的数(分数 10)

作者 颜晖

单位 浙江大学

本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于5;另一个函数统计给定区间内有多少个满足上述要求的整数,并计算这些整数的和。

函数接口定义:

c 复制代码
int is( int number );
void count_sum( int a, int b );

函数is判断number的各位数字之和是否等于5,是则返回1,否则返回0

函数count_sum利用函数is统计给定区间[a, b]内有多少个满足上述要求(即令is返回1)的整数,并计算这些整数的和。最后按照格式

c 复制代码
count = 满足条件的整数个数, sum = 这些整数的和

进行输出。题目保证0<ab≤10000。

裁判测试程序样例:

c 复制代码
#include <stdio.h>

int is( int number );
void count_sum( int a, int b );

int main()
{
    int a, b;

    scanf("%d %d", &a, &b);
    if (is(a)) printf("%d is counted.\n", a);
    if (is(b)) printf("%d is counted.\n", b);
    count_sum(a, b);

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

c 复制代码
104 999

输出样例:

c 复制代码
104 is counted.
count = 15, sum = 3720

代码长度限制

16 KB
时间限制

400 ms
内存限制

64 MB

参考代码

c 复制代码
int is( int number)
{
    int s=0, t;
    while(number!=0) {
        t = number%10;
        number /= 10;
        s += t;
    }
    if(s==5)
        return 1;
    else 
        return 0;
}
void count_sum( int a, int b )
{
    int sum=0, count=0, i;
    for(i=a; i<=b; i++)
        if(is(i)){
          count++;
          sum += i;
        }
    printf("count = %d, sum = %d\n", count, sum);
}

6-7 多项式求值(分数 10)

作者 陈越

单位 浙江大学

本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式

x点的值。

函数接口定义:

c 复制代码
double f( int n, double a[], double x );

其中n是多项式的阶数,a[]中存储系数,x是给定点。函数须返回多项式f(x)的值。

裁判测试程序样例:

c 复制代码
#include <stdio.h>

#define MAXN 10

double f( int n, double a[], double x );

int main()
{
    int n, i;
    double a[MAXN], x;
    
    scanf("%d %lf", &n, &x);
    for ( i=0; i<=n; i++ )
        scanf("%lf", &a[i]);
    printf("%.1f\n", f(n, a, x));
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

c 复制代码
2 1.1
1 2.5 -38.7

输出样例:

c 复制代码
-43.1

代码长度限制

16 KB
时间限制

400 ms
内存限制

64 MB

参考代码

c 复制代码
double f( int n, double a[], double x )
{
    double sum=0, t=1.0;
    for(int i=0; i<=n; i++) {
        sum += a[i]*t; 
        t *= x;
    }
    return sum;
}

6-8 分类统计各类字符个数(分数 10)

作者 C课程组

单位 浙江大学

本题要求实现一个函数,统计给定字符串中的大写字母、小写字母、空格、数字以及其它字符各有多少。

函数接口定义:

c 复制代码
void StringCount( char *s );

其中 char *s 是用户传入的字符串。函数StringCount须在一行内按照

c 复制代码
大写字母个数 小写字母个数 空格个数 数字个数 其它字符个数

的格式输出。

裁判测试程序样例:

c 复制代码
#include <stdio.h>
#define MAXS 15

void StringCount( char *s );
void ReadString( char *s ); /* 由裁判实现,略去不表 */

int main()
{
    char s[MAXS];

    ReadString(s);
    StringCount(s);

    return 0;
}

/* Your function will be put here */

输入样例:

c 复制代码
aZ&*?
093 Az

输出样例:

c 复制代码
2 2 1 3 4

代码长度限制

16 KB
时间限制

400 ms
内存限制

64 MB

参考代码

c 复制代码
void StringCount( char *s ){
    int i, n=strlen(s), up=0, low=0, blo=0, num=0, els=0;
    for(i=0; i<n; i++)
        if('A'<=s[i] && s[i]<='Z')
            up++;
        else if('a'<=s[i] &&s [i]<='z')
            low++;
        else if(s[i]==' ')
            blo++;
        else if('0'<=s[i] && s[i]<='9')
            num++;
        else
            els++;
    printf("%d %d %d %d %d", up, low, blo, num, els);
}
相关推荐
武昌库里写JAVA4 分钟前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
ZSYP-S40 分钟前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos43 分钟前
c++------------------函数
开发语言·c++
yuanbenshidiaos1 小时前
C++----------函数的调用机制
java·c++·算法
唐叔在学习1 小时前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
数据结构·算法·排序算法
程序员_三木1 小时前
Three.js入门-Raycaster鼠标拾取详解与应用
开发语言·javascript·计算机外设·webgl·three.js
是小崔啊1 小时前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
ALISHENGYA1 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
数据结构·算法
tianmu_sama1 小时前
[Effective C++]条款38-39 复合和private继承
开发语言·c++
chengooooooo1 小时前
代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
算法·leetcode·职场和发展