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

《C语言程序设计(第3版)何钦铭颜晖第8章指针》由会员分享,可在线阅读,更多相关《C语言程序设计(第3版)何钦铭颜晖第8章指针(16页珍藏版)》请在人人文库网上搜索。

1、第8章指针【练习8-1 】如果有定义” int m, n = 5, *p = &m;”与m = n 等价的语句是B。Am = *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(floa。

2、t op1,float op2, float *psum, float *pdiff),其中 op1 和 op2 是输入的两个数, *psum 和*pdiff是计算得出的和与差。解答:#includevoid 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=%。

3、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;【练习 8-3 】两个相同类型的指针变量能不能相加?为什么?解答:不能。因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地址相加并不能保证结果为一个有效的地址值,因而在 C 语言中指针变量相加是非法的。【练习 8-4 】根据表 8.2 所示,这组数据的冒泡排序其实循环到第 6 遍(即 n-2 )时就已经排好序了,说明有时。

4、候并不一定需要 n-1 次循环。请思考如何改进冒泡排序算法并编程实现 (提示:当发现一遍循环后没有数据发生交换, 说明已经排好序了)。-解答:设置一个标志变量 flag ,进入一轮循环前设置为 0 ,在循环中有发生数据交换就改写 flag 值为 1 。当该轮循环结束后检查 flag 值,如果变为 1 说明发生了数据交换,还没有排好序,如果为 0 说明没有发生交换,已经排好序。#includevoid bubble (int a,int n);int main(void)int n,i,a8;printf(Enter n (naj+1)temp=aj;aj=aj+1;aj+1=temp;flag。

5、=1;if(flag=0)break;【练习 8-5 】重做例 8-9 ,要求使用选择排序算法。解答:#includevoid bubble(int a, int n);-int main(void)int i,n,a8;printf(Enter n (n#include#define MAXLINE 100int main(void)char lineMAXLINE,str4;int i;printf(Input the string:);gets(line);if(strlen(line)#includevoid bubble(int a,int n);int main(void)int 。

6、n,j,*a,i,temp;printf(Enter n(n*(a+j+1)temp=*(a+j);*(a+j)=*(a+j+1);*(a+j+1)=temp;习题 8一、选择题1. 下列语句定义x为指向 int类型变量a的指针,其中哪一个是正确的B。Aint a, *x = a;B. int a, *x = &a;Cint *x = &a,a;D int a, x = a;2. 以下选项中,对基本类型相同的指针变量不能进行运算的运算符是A。A+B-C=D=3若有以下说明,且0=0 )的元素前。如果 i= 元素的个数,则 x 插入到末尾。原有的元素个数存放在指针 n 所指向的变量中,插入后元素。

7、个数加 1 。请填空。void insert(double a , int *n, double x, int i)int j;if _ (i=i_; j-) _aj+1_ = aj;elsei = *n;ai=_x_;(*n)+;2下列程序先消除输入字符串的前后空格,再判断是否是“回文”(即字符串正读和倒读都是一样),若是则输出 YES,否则输出 NO。请填空。#include #include int main(void)char s80, ch, *p, *q;int i, j, n;-gets(s);p = _s_;while ( *p = ) _p+_;n = strlen(s);q。

8、 = _s+n-1_;while ( *q = ) _q -_;while ( _p a *max) _*max=i_;if (ai -int main(void)int a10, b10, *pa, *pb, i;pa = a;pb = b;for( i=0; ivoid splitfloat(float x,int *intpart,float *fracpart);int main(void)float x,fracpart;int intpart;printf(Input a number:);scanf(%f,&x);splitfloat(x,&intpart,&fracpart);。

9、printf(The intpart is: %d,intpart);printf(The fracpart is: %f,fracpart);return 0;void splitfloat(float x,int *intpart,float *fracpart)-*intpart=(int)x;*fracpart=x-*intpart;2. 在数组中查找指定元素: 输入 1 个正整数 n(1int search(int list,int n,int x);int main(void)int i,n,res,x;int a10;printf(Input n:);scanf(%d,&n);f。

10、or(i=0;i=0)printf(index=%dn,res);elseprintf(Not foundn);return 0;int search(int list,int n,int x)int i;for(i=0;ivoid move(int *x,int n,int m);-int main(void)int i,m,n;int a80;printf(Enter n:);scanf(%d,&n);printf(Enter m:);scanf(%d,&m);for(i=0;iint main(void)int count,i,j,m,n;int num80=0;printf(Input。

11、 n:);scanf(%d,&n);printf(Input m:);-scanf(%d,&m);i=j=count=0;while(count#includevoid strmcpy(char *s,char *t,int m);int main(void)char s80,t80;int m;printf(Input the string:);gets(t);printf(Enter m:);scanf(%d,&m);if(strlen(t)void delchar(char *s,char c);int main(void)char c;char s80;printf(Input the。

12、 string:);gets(s);printf(Input a ch:);scanf(%c,&c);delchar(s,c);printf(result: );puts(s);return 0;void delchar(char *s,char c)int i,j;i=j=0;while(si!=0)if(si!=c)sj=si;j+;-i+;sj=0;7. 字符串排序:输入 5 个字符串,按由小到大的顺序输出。试编写相应程序。解答:#include#include int main(void)int n,i,j,index;char sx8080,stemp80;printf(Enter 。

13、n:);scanf(%d,&n);printf(Input %d strings:,n);for(i=0;i int mirror(char *p); int main(void)char s80;printf(Input the string:);-gets(s);if(mirror(s)=1)printf(Yes!n);elseprintf(No!n);return 0;int mirror(char *p)char *q;q=p;while(*q!=0)q+;q-;while(pint mirror(char *p);int main(void)char s80;printf(Input。

14、 the string:);gets(s);if(mirror(s)=1)printf(Yes!n);elseprintf(No!n);return 0;int mirror(char *p)char *q;-q=p;while(*q!=0)q+;while(pint main(void)char s80,*p;int blank,digit,lower,other,upper;printf(Input the string:);gets(s);upper=lower=blank=digit=other=0;for(p=s;*p!=0;p+)if(*p=A&*p=a&*p=0&*p#inclu。

15、deint main(void)int n,i;float *p,sum,max,min,avg;printf(Input students number n: );scanf(%d,&n);if(p=(float *)calloc(n,sizeof(float)=NULL)printf(Not able to allocate memory. n);exit(1);sum=0.0;max=-1;min=1000;printf(Input %d students scores: , n);for(i=0;i*(p+i)min=*(p+i);if(max*(p+i)max=*(p+i);avg=sum/n;printf(The avg is %f,max is %f,min is %fn,avg,max,min); free(p);return 0;。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,作为一个AI服务助手,我不能提供或引用任何未经授权的权材料。但是,我可以告诉你一些关于C语言函数的基本知识和一些学习资源,帮助你更好地理解和解决相关的习题。 C语言中的函数是一段可重用的代码,用于执行特定的任务。函数可以接受参数并返回值。在C语言中,函数的定义包括函数名、返回类型、参数列表和函数体。函数的调用是通过函数名和参数列表来完成的。 以下是一些关于C语言函数的基本知识点: 1. 函数的定义格式如下: ``` 返回类型 函数名(参数列表) { 函数体 } ``` 2. 函数的返回类型可以是任何C语言数据类型,包括整型、浮点型、字符型、指针等。 3. 函数的参数列表可以包含零个或多个参数,每个参数由参数类型和参数名组成。 4. 函数的调用格式如下: ``` 函数名(参数列表); ``` 5. 函数可以有多个返回语句,但只有一个返回值。 如果你想深入学习C语言函数,可以参考以下资源: 1. 《C语言程序设计(第3)》和《C语言程序设计实验与习题指导(第3)》这两本教材都有关于C语言函数的详细讲解和习题。 2. 程序咖(https://meta.chengxuka.com)是一个在线学习平台,提供了大量的C语言学习资源和习题,包括函数的相关内容。 3. C语言中文网(https://c.biancheng.net/c/)是一个专门为C语言学习者提供的网站,其中包含了大量的C语言函数的教程和实例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值