C语言程序设计实验电子稿

内容发布更新时间 : 2025/4/15 7:04:48星期一 下面是文章的全部内容请认真阅读。

8.4 实验八 指针

一、 实验目的与要求

1. 理解和掌握指针的概念,定义和使用指针变量。 2. 掌握函数之间指针的传递关系。

3. 掌握通过指针操作数组中元素的方法。 4. 实验2学时

二、实验内容

1.程序调试

(1)调试本程序,了解运算符*与&的用法,并注意容易出错的地方。 #include void main() { float x;

float *xptr; //① xptr=&x; //②,此处是否可以用*xptr=&x;? x=7.9;

printf(“The address of x is %x\\n”,&x); printf(“The value of xptr is %x\\n”,xptr); printf(“The value of x is %f\\n”,x);

printf(“The value of *xptr is %f\\n”,*xptr); //③ }

程序运行结果如下:

在上面的程序中,注意区别*ptr的不同意义。语句①中的*表示此处的xptr是作为一个指针变量来定义的,而语句③中的*则表示取变量xptr所指向的值,在本题中就是变量x的值,这时的*可以作为运算符来看待。这也可以理解为什么语句②中用了xptr=&x而不是*xptr=&x,因为在运算过程中*xptr所表示的就是x,如果将x的地址赋给x,肯定会产生错误。明白了*与&的用法后,可以接着看下面一个例子,分析其出错的原因。

(2) 调试程序。下面程序中有错误,请调试修改

输入3个整数,按从小到大的顺序输出。 #include “stdio.h” void main( ) { int a,b,c ;

int *p1,*p2,*p3 ; //定义3个指针变量 void swap(int *p1,int *p2) ; scanf(“%d,%d,%d”,&a,&b,&c) ;

p1=&a ; p2=&b ; p3=&c ; //3个指针分别指向3个整型变量

//用swap函数交换2个数,使较小数放到变量a中,较大数放到变量b中 if(a>b) swap(p1,p2) ; // ① if(a>c) swap(p1,p3); if(b>c) swap(p2,p3);

printf(“%d,%d,%d”,a,b,c); //按从小到大的顺序输出3个数

}

void swap(int *p1,int *p2) //swap函数试图实现2个数的交换 { int *x;

x=p1; // ② p1=p2; //③ p2=x; //④ }

本题编译连接都没有问题,但是不能运行出正确结果。原因在哪里呢?对语句①的调用进行分析,请大家仔细观察swap函数的实现部分。语句①表明a>b成立,因此需要将变量a和b中的数值进行调换,使其满足从小到大的排列顺序。swap函数中定义了一个指针变量x,语句②~④是以指针变量x作为中间变量,将形参指针p1和p2所指的方向进行了调换,即,使形参指针p2指向了较小值,而p1指向了较大值,但是这种交换对变量a和b并没有产生任何影响,当swap函数调用完毕后,变量a和b依然维持原有情况,无法使它们中的数值按从小到大的顺序重新排列,因此无法得到正确的运行效果。

对swap函数如何改造才能得到正确结果呢?请大家结合本题进行改错。

2. 程序完整题

>>展开全文<<
12@gma联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4 ceshi