Bootstrap

C语言实验指针

桂 林 理 工 大 学
实 验 报 告
实验名称 指针 日期 2019年 1月10日
一、 实验目的:
1.掌握指针的概念,学会定义指针变量和使用指针变量间接访问的方式。
2.掌握用指针访问数组的方式。
3.掌握指针变量作为函数参数的使用方式。
4. 掌握用指针访问字符串的方式。

二、实验环境:
Visual C++

三、实验内容:
(写出主要的内容)
1. 运行教材例题8.7和8.12的程序,了解遍历一维数组、二维数组的多种方法。

#include<stdio.h>
int main()
{
	int a[10];
	int *p,i;
	printf("please enter 10 integer numbers:");
	for(i=0;i<10;i++)
	scanf("%d",&a[i]);
	for(p=a;p<(a+10);p++)
	printf("%d ",*p);
	printf("\n");
	return 0;
 }

输入please enter 10 integer numbers:0 1 2 3 4 5 6 7 8 9
输出0 1 2 3 4 5 6 7 8 9

#include<stdio.h>
int main()
{
	int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
	int *p;
	for(p=a[0];p<a[0]+12;p++)
	{if((p-a[0])%4==0&&(p-a[0])!=0)printf("\n");
	printf("%4d",*p);
	}
	printf("\n");
	return 0;
 }

输出 1 3 5 7
9 11 13 15
17 19 21 23
2. 教材291页习题第3题。输入十个整数,将其中最小的数和第一个数进行交换,把最大的数和最后一个数交换;要求写三个函数 :1输入十个数 2 进行处理 3输出十个数

#define N 6
#include<stdio.h>
void input(int a[],int n)
{int i;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
 } 
void ouput(int a[],int n)
{int i;
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
void swap(int *x,int *y)
{int t;
t=*x;*x=*y;*y=t;
  }  
int main()
{int b[N],max,min,i;
input(b,N);
ouput(b,N);
max=0,min=0;
for(i=1;i<N;i++)
{if(b[i]>b[max]) max=i;
if(b[i]<b[min]) min=i;
}
swap(&b[max],&b[N-1]);
printf("\n");
ouput(b,N);
swap(&b[min],&b[0]);
printf("\n");
ouput(b,N);
}

输入 1 5 9 10 0 4
输出1 5 9 10 0 4
1 5 9 4 0 10
0 5 9 4 1 10
3. 定义一个函数inv,将数组a中的n个整数按相反顺序存放。(说明:按相反顺序存放,意思是将数组第0个数据和第n-1个数据交换,第1个数据和第n-2个数据交换…如有如下的数组定义以及初始化: int data[6]={1,2,3,4,5,6};则调用改函数inv(data,6)后,数组 data中的数据依次为:6,5,4,3,2,1。)
要求,试着修改n的值调用该函数后,并输出数组元素的值。

#include<stdio.h>
#define N 10 
int main()
{
	void inv(int x[],int n);
	int i,a[N];
	for(i=0;i<N;i++)
	scanf("%d",&a[i]);
	printf("The original arry:\n");
	for(i=0;i<N;i++)
	printf("%d ",a[i]);
	printf("\n");
	inv(a,N);
	printf("The array has inverted:\n");
	for(i=0;i<N;i++)
	printf("%d ",a[i]);
	printf("\n");
	return 0;
 }
 void inv(int x[],int n)
 {int temp,i,j,m=(n-1)/2;
 for(i=0;i<m;i++)
 {
 j=n-1-i;
 temp=x[i];x[i]=x[j];x[j]=temp;}
 return;
  }

输入 0 1 2 3 4 5 6 7 8 9
输出The original arry:
0 1 2 3 4 5 6 7 8 9
The array has inverted:
9 8 7 6 4 5 3 2 1 0
4. 编写一个函数,形参为指针类型,函数实现功能为使用冒泡排序将一维整型数组的n个数据进行降序排列,请将函数体补充完整。
void sort( int *p, int n)
{

}
主函数部分代码如下:
int main()
{
int data[10], *pd=data;
int i;
for(i=0; i<10; i++)
scanf("%d",pd+i);

}
将函数补充完整,分别使用数组、指针作为第一个实参,调用sort函数,对数组中的数据进行排序,并输出排序后的数据。

#include<stdio.h>
#define N 10
int main()
{
	void sort(int *x,int n);
	int *p,i,a[N];
	p=a;
	printf("please enter 10 integer numibers:\n");
	for(i=0;i<N;i++)
	scanf("%d",p++);
	p=a;
	sort(p,N);
	for(p=a,i=0;i<N;i++)
	{printf("%d ",*p);
	p++;
	}
	printf("\n");
	return 0;
 } 
 void sort(int *x,int n)
 {int i,j,k,t;
 for(i=0;i<n-1;i++)
 {k=i;
 for(j=i+1;j<n;j++)
 if(*(x+j)>*(x+k))k=j;
 if(k!=i)
 {t=*(x+i);*(x+i)=*(x+k);*(x+k)=t;
 }
 }
 }

输入1 2 3 4 5 6 7 8 9 0
输出9 8 7 6 5 4 3 2 1 0
四、心得体会:
1.通过该次的上机能较好掌握编程的基本方法
2.通过比较不同的程序的不同理解了程序的作用

;