下载此文档

C语言程序设计(第3版)何钦铭 颜 晖 第8章 指针.doc


文档分类:IT计算机 | 页数:约18页 举报非法文档有奖
1/18
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/18 下载此文档
文档列表 文档介绍
编辑版word
页脚下载后可删除,如有侵权请告知删除!
编辑版word
第8章 指针
【练****8-1】如果有定义〞int m, n = 5, *p = &m;〞与m = n等价的语句是 B 。
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(float op1,float op2, float *psum, float *pdiff),其中op1和op2是输入的两个数,*psum 和*pdiff 是计算得出的和与差。
解答:
#include<>
void sum_diff(float op1,float op2,float *psum,float *pdiff);
int main(void)
{
float op1,op2,sum,diff;
printf("Input op1 and op2: ");
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);

return 0;
}
void sum_diff(float op1,float op2,float *psum,float *pdiff)
{
*psum=op1+op2;
*pdiff=op1-op2;
}
编辑版word
页脚下载后可删除,如有侵权请告知删除!
编辑版word
【练****8-3】两个一样类型的指针变量能不能相加?为什么?
解答:
不能。因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地址相加并不能保证结果为一个有效的地址值,因而在 C 语言中指针变量相加是非法的。
【练****8-4】根据表 所示,这组数据的冒泡排序其实循环到第 6 遍〔即n-2〕时就已经排好序了,说明有时候并不一定需要 n-1 次循环。请思考如何改良冒泡排序算法并编程实现〔提示:当发现一遍循环后没有数据发生交换,说明已经排好序了〕。
解答:
设置一个标志变量 flag,进入一轮循环前设置为 0,在循环中有发生数据交换就改写flag 值为 1。当该轮循环完毕后检查 flag 值,如果变为 1 说明发生了数据交换,还没有排好序,如果为 0 说明没有发生交换,已经排好序。
#include<>
void bubble (int a[],int n);
int main(void)
{
int n,i,a[8];
printf("Enter n (n<=8):");
scanf("%d",&n);
printf("Enter a[%d] : ",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
bubble(a,n);
printf("After sorted, a[%d]=", n);
for(i=0;i<n;i++)
printf("%3d",a[i]);

return 0;
}
void bubble(int a[], int n)
{
int i,j,temp,flag;
编辑版word
页脚下载后可删除,如有侵权请告知删除!
编辑版word

for(i=1;i<n;i++ ){
flag=0;
for(j=0;j<n-i;j++)
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=1;

C语言程序设计(第3版)何钦铭 颜 晖 第8章 指针 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数18
  • 收藏数0 收藏
  • 顶次数0
  • 上传人相惜
  • 文件大小59 KB
  • 时间2021-10-22