主要内容:指针在数组中的使用
1.用指针方法对10个整数按由大到小顺序排序。(选择排序法)
#include<stdio.h>
int main()
{
//用指针方法对10个整数按由小到大排序
void sort(int x[],int n);//函数声明
int a[10],*p,i;
p=a;//p指向a[0]
printf("please input 10 integer numbers:\n");
for(i=0;i<10;i++)
scanf("%d",p++);//输入10个数
p=a;//p重新指向a[0]
sort(p,10);//函数调用 数组名作函数参数的体现
printf("由小到大排序结果为:\n");
for(i=0;i<10;i++)
{
p=a+i;
printf("%d",*p);//输出排序后结果
}
printf("\n");
return 0;
}
void sort(int x[],int n)//函数定义 p=a[0] x[]=p
{
int i,j,t;
for(i=0;i<n-1;i++)//控制比较轮数
{
for(j=0;j<n-1-i-1;j++)//控制每轮比较次数
//前一个比后面小,交换位置
if(x[j]<x[j+1])
{
t=x[j];
x[j]=x[j+1];
x[j+1]=t;
}
}
}
2.输出二维数组的有关数据(地址和元素的值),?体会指针如何使用二维数组的值
#include <stdio.h>
int main()
{
int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
int *p;
p=&a;//p指向a的地址 等价 *p=a;
printf("%d\t%d\t%d\n",*(a[1]+2),*(*(a+1)+2),a[1][2]);
//等价于取a[1][2]的值 13
printf("%d\n",*(p+6));
// 当成一维数组看待 取得第6个数的值 13
printf("%d\t%d\t%d\n",(a[1]+2),*(a+1)+2,&a[1][2]);
//取得a[1][2]的地址的三种方式
printf("%d\t%d\t%d\n",a,p,*a);
//a:0行起始位置 p:a[0][0]的值 *a:数组起始位置
printf("%d\t%d\n",a[0],*(a+0));
//0行0列起始位置
return 0;
}
3.有一个3×4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值。
#include <stdio.h>
int main()
{
int a[3][4]={{1,2,3,4},{5,6,7,8},{3,4,5,6}};//初始化
int *p;
for(p=a[0];p<a[0]+12;p++)//p依次指向下一个元素
{
if((p-a[0])%4==0)printf("\n");//每行打印4个
printf("%4d",*p);
}
return 0;
}
4.输出二维数组任一行任一列元素的值。
#include <stdio.h>
int main()
{
//输出二维数组任一行任一列元素的值。
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12,13};
int (*p)[4],i,j;//p指向包含4个整型元素的一维数组
p=a;//指向a数组的第0行
printf("please enter row and colum:\n");
scanf("%d%d",&i,&j);//输入要输出元素的行号和列号
printf("a[%d][%d]=%d\n",i,j,*(p[i])+j);
//等价
printf("a[%d][%d]=%d\n",i,j,*(*(p+i)+j));
5.有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。
#include <stdio.h>
int main()
{
//有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。
void average(float *p,int n);
void search(float (*p)[4],int n);//函数声明
float score[3][4]={{65,67,70,60},{80,87,90,81},{90,97,98,95}};
//定义二维数组并初始化
average(*score,12);//函数调用
search(score,2);//求序号为2的成绩
return 0;
}
void average(float *p,int n)//函数定义
{
float sum=0,*e=p+n-1;
for(;p<e;p++)//p指针 从score数组起始位置变化到p+n-1
{
sum=sum+(*p);//累加
}
float aver=sum/n;
printf("average=%5.2f\n",aver);
}
void search(float (*p)[4],int n)//函数定义
{
printf("The score of No.%d are:\n",n);
for(int i=0;i<4;i++)
printf("%3.2f\t",*(*(p+n)+i));//打印第n个学生所有成绩
printf("\n");
}
6.有一个班,3个学生,各学4门课,
查找有一门以上课程不及格的学生,输出他们的全部课程的成绩。
#include <stdio.h>
int main()
{
//有一个班,3个学生,各学4门课,查找有一门以上课程不及格的学生,输出他们的全部课程的成绩
void search(float (*p)[4],int n);//函数声明n为学生,*p指向一个学生所有成绩
float score[3][4]={{79,57,70,60},{80,48,90,81},{80,67,68,95}};
//定义二维数组并初始化
search(score,3);//函数调用
return 0;
}
void search(float (*p)[4],int n)//函数定义
{
//形参p是指向包含4个float型元素的一维数组的指针变量
int i,j,flag;
for(j=0;j<n;j++)//控制二维数组的行
{
flag=0;
for(i=0;i<4;i++)//控制二维数组的列
if(*(*(p+j)+i)<60) flag=1;
//如果有<60,通过flag记下此学生
if(flag==1)
{
printf("No.%d fails,his scores are:\n",j+1);
for(i=0;i<4;i++)
printf("%3.f",*(*(p+j)+i));
printf("\n");
}
}
}
|