• EDUCoder编程练习题解(指针二)


    编辑与调试    顺序结构    选择结构一    选择结构二    循环一     循环二    函数
    递归与嵌套函数     一维数组和二维数组     字符数组      指针一    指针二     结构体      文件

    指针二

    第1关:输出若干个学生成绩中的最高分.要求用指针函数实现

    任务描述
    题目描述:读入n(1 <= n <= 1000)个学生的成绩,成绩都为整数,用指针函数求出若干个学生成绩的最高分。用数组名作为函数参数,指针作为函数返回值。

    编程要求
    请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。

    输入

    第一行为整数n,代表学生的数量。

    第二行为n个学生的成绩,n个整数之间用一个空格隔开。
    输出

    输出最高分,占一行。

    测试说明
    样例输入:

    5
    80 90 85 95 91
    样例输出:

    95

    解题程序一(指针函数)

    #include 
    /*********Begin*********/
    int *max(int *p, int n)
    {
        int max = *p, *q = p;
        while (--n) 
            if (*++p > max)
                max = *p, q = p;
        return q;
    }
    /*********End**********/
    int main(void)
    {
        int n,s[110];
        scanf("%d",&n);
        for(int i=0;i<n;i++)
            scanf("%d",&s[i]);
        int ans;
    	/*********Begin*********/
        ans = *max(s, n);
    	/*********End**********/
        printf("%d",ans );
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    解题程序二(不用指针)

    #include 
    /*********Begin*********/
    int max(int a[], int n)
    {
        int max = a[0];
        for (int i = 1; i < n; i++)
            if (a[i] > max) max = a[i];
        return max;
    }
    /*********End**********/
    int main(void)
    {
        int n,s[110];
        scanf("%d",&n);
        for(int i=0;i<n;i++)
            scanf("%d",&s[i]);
        int ans;
    	/*********Begin*********/
        ans = max(s, n);
    	/*********End**********/
        printf("%d",ans );
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    解题程序三

    #include 
    int main(void)
    {
        int n, a, ans;
        scanf("%d%d", &n, &a);
        ans = a;
        for (int i = 2 ; i <= n; i++) {
            scanf("%d", &a);
            if (a > ans) ans = a;
        }
        printf("%d\n", ans);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    第2关:采用指针变量表示地址的方法输入输出数组中的个元素

    任务描述
    题目描述:采用指针变量表示地址的方法输入输出数组中的个元素

    第一行为n,表示n个整数,

    第二行为n个整数。

    编程要求
    请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
    输入

    第一行为n,表示n个整数,

    第二行为n个整数。
    输出

    用指针变量表示地址的方法输出数组中的各个元素。

    输出占一行,两个整数之间有空格

    测试说明
    样例输入:

    10
    1 2 3 4 5 6 7 8 9 10
    样例输出:

    1 2 3 4 5 6 7 8 9 10

    问题分析
    使用指针,多此一举。

    解题程序

    #include 
    int main(void)
    {
    	/*********Begin*********/
        int n;
        scanf("%d", &n);
    
        int a[n], *p = a;
        for (int i = 1; i <= n; i++)
            scanf("%d", p++);
    
        p = a;
        printf("%d", *p);
        for (int i = 2; i <= n; i++)
            printf(" %d", *++p);
    	/*********End**********/
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    第3关:用指针实现数组循环移动

    任务描述
    题目描述:有n个整数,要求你编写一个函数使其向右循环移动m个位置

    编程要求
    请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
    输入
    输入n m表示有n个整数,移动m位
    输出
    输出移动后的数组

    测试说明
    样例输入:
    10 5
    1 2 3 4 5 6 7 8 9 0
    样例输出:
    6 7 8 9 0 1 2 3 4 5

    解题程序一

    #include
    int *solve(int *s,int n,int m){
        /*********Begin*********/
        for (int i = 0; i < n - m; i++)
            *(s + n + i) = *(s + i);
        return s + n - m;
        /*********End**********/
    }
    int main(void)
    {
        int n,m,s[110];
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)
            scanf("%d",&s[i]);
        int *ans;
        /*********Begin*********/
        ans = solve(s, n, m);
        /*********End**********/
        for(int i=0;i<n;i++){
            if(i==0)    printf("%d",*ans++ );
            else    printf(" %d",*ans++ );
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    解题程序二

    #include
    int main(void)
    {
        int n, m, s[110];
        scanf("%d%d", &n, &m);
        for (int i = 0; i < n; i++)
            scanf("%d", &s[i]);
        
        printf("%d", s[(n - m) % n]);
        for (int i = 1; i < n; i++) 
            printf(" %d", s[(n - m + i) % n]);
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    编辑与调试    顺序结构    选择结构一    选择结构二    循环一     循环二    函数
    递归与嵌套函数     一维数组和二维数组     字符数组      指针一    指针二     结构体      文件

  • 相关阅读:
    二、数据链路层
    process information unavailable解决方案
    Java Web Start 指南
    代码随想录笔记_动态规划_392判断子序列
    实用的Visual Studio插件
    spring-cloud-starter-gateway踩坑
    NFNet:NF-ResNet的延伸,不用BN的4096超大batch size训练 | 21年论文
    maven jetty post 上传长度设置
    猿创征文| Linux——基础I/O3| 缓冲区|自己设计缓冲区实现文件操作|minishell重定向
    一文2000字从0到1用Jmeter全流程性能测试实战
  • 原文地址:https://blog.csdn.net/tigerisland45/article/details/128090836