资源描述:
《C语言程序设计(第3版)何钦铭 颜 晖 第8章 指针.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第8章指针【练习8-1】如果有定义”intm,n=5,*p=&m;”与m=n等价的语句是B。A.m=*p;B.*p=*&n;C.m=&n;D.m=**p;解答:A:p是指向m的指针变量,所以*p等价于m。即m=m。B:&n是n的地址,*&n是n的值,即把n的值赋给p指向的值m。即m=n。C:&n是n的地址。即把n的地址赋给m。D:**p是指p指向的指针所指向的值,在此无意义。故选B。【练习8-2】调用函数求两个数的和与差:计算输入的两个数的和与差,要求自定义一个函数sum_diff(floatop
2、1,floatop2,float*psum,float*pdiff),其中op1和op2是输入的两个数,*psum和*pdiff是计算得出的和与差。解答:#includevoidsum_diff(floatop1,floatop2,float*psum,float*pdiff);intmain(void){floatop1,op2,sum,diff;printf("Inputop1andop2:");scanf("%f%f",&op1,&op2);sum_diff(op1,op2
3、,&sum,&diff);printf("%f+%f=%f;%f-%f=%f",op1,op2,sum,op1,op2,diff);return0;}voidsum_diff(floatop1,floatop2,float*psum,float*pdiff){*psum=op1+op2;*pdiff=op1-op2;}【练习8-3】两个相同类型的指针变量能不能相加?为什么?解答:不能。因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地址相加并不能保证结果为一个有效的地址
4、值,因而在C语言中指针变量相加是非法的。【练习8-4】根据表8.2所示,这组数据的冒泡排序其实循环到第6遍(即n-2)时就已经排好序了,说明有时候并不一定需要n-1次循环。请思考如何改进冒泡排序算法并编程实现(提示:当发现一遍循环后没有数据发生交换,说明已经排好序了)。解答:设置一个标志变量flag,进入一轮循环前设置为0,在循环中有发生数据交换就改写flag值为1。当该轮循环结束后检查flag值,如果变为1说明发生了数据交换,还没有排好序,如果为0说明没有发生交换,已经排好序。#include<
5、stdio.h>voidbubble(inta[],intn);intmain(void){intn,i,a[8];printf("Entern(n<=8):");scanf("%d",&n);printf("Entera[%d]:",n);for(i=0;i6、e(inta[],intn){inti,j,temp,flag;for(i=1;ia[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;flag=1;}if(flag==0)break;}}【练习8-5】重做例8-9,要求使用选择排序算法。解答:#includevoidbubble(inta[],intn);intmain(void){inti,n,a[8];print
7、f("Entern(n<=8):");scanf("%d",&n);printf("Entera[%d]:",n);for(i=0;i8、(j=i+1;j