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编程练习题解(指针二)的主要内容,如果未能解决你的问题,请参考以下文章