PTA 7-1 逆置一维数组 (10 分)
·
编写程序,以指针的方式,就地逆置一维数组。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据先输入数据个数n,然后输入n个整数。
输出格式:
对于每组测试,在一行上输出逆置之后的结果。数据之间以一个空格分隔。
样例">输入样例:
2
4 1 2 5 3
5 4 3 5 1 2
输出样例:
3 5 2 1
2 1 5 3 4
不懂是指针的话可以理解一下这个,这是题目的常规做法:
#include <stdio.h>
int main()
{
int a,b=0,c=0,p[100],d,e,m;
scanf("%d",&a);
for(;b<a;b++){
scanf("%d",&m);
for(c=0;c<m;c++){
scanf("%d",&p[c]);
}
for(c=0,d=m-1;c<m/2;c++,d--){
e=p[d];//一定要除以2,不然没变化
p[d]=p[c];
p[c]=e;
}
for(c=0;c<m;c++){
if(c==0){
printf("%d",p[c]);
}
else{
printf(" %d",p[c]);}
}
printf("\n");
}
return 0;
}
这是题目的指针做法(数组指针):
#include <stdio.h>
int main()
{
int a,b=0,c=0,d,e,m;
scanf("%d",&a);
for(;b<a;b++){
scanf("%d",&m);
int p[m];
int (*k)[m];//数组指针
k=&p;//p交地址给k指针
for(c=0;c<m;c++){
scanf("%d",&p[c]);
}
//用指针代替数组运算
for(c=0,d=m-1;c<m/2;c++,d--){//c<m/2中的m一定要除以2,不然没变化
e=(*k)[d];
(*k)[d]=(*k)[c];
(*k)[c]=e;
}
for(c=0;c<m;c++){
if(c==0){
printf("%d",p[c]);
}
else{
printf(" %d",p[c]);}
}
printf("\n");
}
return 0;
}
最后:
第一个代码是我以前没注意看是用指针写的,反正对了我就没理了
新学期,又来了很多人学习C语言,看到那么多人都搜到了我这一题,我感觉就不好意思了,特地赶回来写一下标准的答案,给予你们借鉴。
2022.11.28
最近抽出点时间,本来想改进的,想了想之后,我觉得这样已经很好了
首先呢,这道题指针的话,其实本意是让咱们熟悉一下指针,并不要求必须用指针,
指针在我看来,主要在数据结构方面,比较复杂的情况才用到,比如顺序表,链表,树等等之类,其中的插入删除操作是用指针操作的,不必因为这道题,而感觉指针很难理解,下次这种情况用非指针方式写出来即可,指针只是不适合这个情况,肯定也写得出,就是比非指针方式更加麻烦,加油。
2023.4.13
更多推荐
所有评论(0)