C语言程序设计第3版何钦铭 颜 晖 第8章指针.docx
- 文档编号:24777525
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:26
- 大小:21.23KB
C语言程序设计第3版何钦铭 颜 晖 第8章指针.docx
《C语言程序设计第3版何钦铭 颜 晖 第8章指针.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第3版何钦铭 颜 晖 第8章指针.docx(26页珍藏版)》请在冰豆网上搜索。
C语言程序设计第3版何钦铭颜晖第8章指针
第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(floatop1,floatop2,float*psum,float*pdiff),其中op1和op2是输入的两个数,*psum和*pdiff是计算得出的和与差。
解答:
#include
voidsum_diff(floatop1,floatop2,float*psum,float*pdiff);
intmain(void)
{
floatop1,op2,sum,diff;
printf("Inputop1andop2:
");
scanf("%f%f",&op1,&op2);
sum_diff(op1,op2,&sum,&diff);
printf("%f+%f=%f;%f-%f=%f\n",op1,op2,sum,op1,op2,diff);
return0;
}
voidsum_diff(floatop1,floatop2,float*psum,float*pdiff)
{
*psum=op1+op2;
*pdiff=op1-op2;
}
【练习8-3】两个相同类型的指针变量能不能相加?
为什么?
解答:
不能。
因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地址相加并不能保证结果为一个有效的地址值,因而在C语言中指针变量相加是非法的。
【练习8-4】根据表8.2所示,这组数据的冒泡排序其实循环到第6遍(即n-2)时就已经排好序了,说明有时候并不一定需要n-1次循环。
请思考如何改进冒泡排序算法并编程实现(提示:
当发现一遍循环后没有数据发生交换,说明已经排好序了)。
解答:
设置一个标志变量flag,进入一轮循环前设置为0,在循环中有发生数据交换就改写flag值为1。
当该轮循环结束后检查flag值,如果变为1说明发生了数据交换,还没有排好序,如果为0说明没有发生交换,已经排好序。
#include
voidbubble(inta[],intn);
intmain(void)
{
intn,i,a[8];
printf("Entern(n<=8):
");
scanf("%d",&n);
printf("Entera[%d]:
",n);
for(i=0;i scanf("%d",&a[i]); bubble(a,n); printf("Aftersorted,a[%d]=",n); for(i=0;i printf("%3d",a[i]); return0; } voidbubble(inta[],intn) { inti,j,temp,flag; for(i=1;i flag=0; for(j=0;j if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; flag=1; } if(flag==0) break; } } 【练习8-5】重做例8-9,要求使用选择排序算法。 解答: #include voidbubble(inta[],intn); intmain(void) { inti,n,a[8]; printf("Entern(n<=8): "); scanf("%d",&n); printf("Entera[%d]: ",n);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计第3版何钦铭 第8章 指针 语言程序设计