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

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EDUCoder编程练习题解(指针二)相关的知识,希望对你有一定的参考价值。

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

指针二

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

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

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

输入

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

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

输出最高分,占一行。

测试说明
样例输入:

5
80 90 85 95 91
样例输出:

95

解题程序一(指针函数)

#include <stdio.h>
/*********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;

解题程序二(不用指针)

#include <stdio.h>
/*********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;

解题程序三

#include <stdio.h>
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;

第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 <stdio.h>
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;

第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<stdio.h>
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;

解题程序二

#include<stdio.h>
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;

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

以上是关于EDUCoder编程练习题解(指针二)的主要内容,如果未能解决你的问题,请参考以下文章

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

EDUCoder编程练习题解(选择结构二)

EDUCoder编程练习题解(选择结构二)

EDUCoder编程练习题解(选择结构二)

EDUCoder编程练习题解(文件)

EDUCoder编程练习题解(指针一)