指针

一、PTA实验作业

1、7-2在数组中查找指定元素

本题PTA提交列表

设计思路

本题让我们输出一个数组中存在的一个数,要输入repeat次,需要一次循环,输入N个数,再一个循环,然后让子函数判断是否有这个数,如果有返回这个数,然后输出这个数,不然输出NOT FOUND。

代码

#include<stdio.h>
int search(int *p,int n,int x);
int main()
{
 int x,n,i,flag=0,repeat,d;
 scanf("%d",&repeat);
 for(d=1;d<=repeat;d++)
 {
 scanf("%d",&n);
 int a[n];
 for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    scanf("%d",&x);
  flag=search(a,n,x);
  if(flag>=0)
   printf("index = %d\n",flag);
   else
   printf("Not found"); 
}
}
int search(int *p,int n,int x)
{
 int i;
 for(i=0;i<n;i++)
    if(x==*(p+i))
   return i;
   return -1;
}

错误样例

这里我犯了一个错误,因为数组是从0开始的,而我在第15行写的是>0,这使当flag=0时输出不了,导致了错误。

7-3使用函数的选择法排序

本题PTA提交列表

设计思路

这题让我们排序用选择排序法,首先要repeat次需要1个循环,用选择排序法,再输出就行了。

代码

#include<stdio.h>
void sort(int *p,int n);
int main()
{
int repeat,n,i,b;
scanf("%d",&repeat);
for(b=0;b<repeat;b++)
{
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("After sorted: ");
sort(a,n);
printf("\n");
}
}
void sort(int *p,int n)
{
int j,k,c,min;
for(j=0;j<n;j++)
{
min=j;
for(k=j;k<n;k++)
{
if(*(p+min)>*(p+k)){
c=*(p+min);
*(p+min)=*(p+k);
*(p+k)=c;
}
}
printf("%d",*(p+min));
if(j!=n-1)
printf(" ");
}
}

错误样例

这题我的输出格式不对,每行输出完要换行,而我没有换行。

6-2移动字母

PTA提交列表

设计思路

这题我让3个数记录最后3个字符,再让剩下的字母前移,再把后面的3个数接到已经移动的字母上。

代码

void Shift( char s[] )
{
char *p,i,a,b,c,x;
x=strlen(s);
p=&s[0];
a=*p;
b=*(p+1);
c=*(p+2);
for(i=3;i<x;i++)
*(p+i-3)=*(p+i);
*(p+x-3)=a;
*(p+x-2)=b;
*(p+x-1)=c;
}

错误样例

这里我没有定义n,这里的n应该换成X。

代码互评

互评同学:谢晔晖

代码图

优缺点

晔晖的代码是直接移动,运用2个循环把字母直接移动,而我的代码是先记录字符,再移动字符,在把已经移动的字母补到字符串上。

我更喜欢晔晖的代码,因为他的代码更加简单,他直接移动,显得更加简单,思路更加清晰,给人一种更厉害的感觉。

本周总结

指针:就是内存中的一个存储单元的地址,即内存单元的编号。

指针变量:是一个能存放地址值的变量。通过它存放的地址值能间接访问它所指向的变量。

 指针可以在子函数里对一个数组进行改变,很方便。

 

 

posted @ 2018-01-11 23:49  曾_钰尧  阅读(167)  评论(0编辑  收藏  举报