颜晖c语言设计答案,c语言程序设计 (何钦铭 颜晖 著)课后习题答案

1、习题参考答案 习题一 习题参考答案 习题一 1. /*在在 C 语言中,下列标识符中哪些是合法的,哪些不合法?”语言中,下列标识符中哪些是合法的,哪些不合法?”*/ 合法:total, _debug, Counter1, begin_ 不合法:Large for(i=1; i 3. /*填空题填空题*/ (1) for (i=0; si!=0; i+) (2) void f( char *s 或或 char s ) int i=0; while(si) i+; /令令 i 指向字符串的最后一个有效字符指向字符串的最后一个有效字符, 即即 while( si!=0) i+; for( ; i=0。

2、; i- -) printf(“%c“, si); /逆序输出逆序输出 4. 定义函数定义函数 search(int list, int n, int x), 在长度为在长度为 n 的数组的数组 list 中查找元素中查找元素 x, 并返回并返回 x 在在 list 中的下标。 如果中的下标。 如果 x 在在 list 中不存在,则返回中不存在,则返回-1. 解法解法 1:使用:使用 break 语句语句 int search( int list, int n, int x) int i, index=-1; /index: x 在在 list 中的下标,目前尚未找到,因此初始化为中的下标,目。

3、前尚未找到,因此初始化为-1 for ( i=0; i a j ) index=j; t=ai; ai=aindex; aindex=t; #include void main() int a10, i; printf(“Input 10 integers:”); for( i=0; i #include void main() int i, len, max_len; char s80, max_s80; printf(“Input 5 strings:”); gets( max_s); /输入第输入第 1 个字符串,暂作最长字符串个字符串,暂作最长字符串 max_len= strlen(m。

4、ax_s); for( i=1; i max_len ) strcpy( max_s, s); /注意:不能写成注意:不能写成 max_s =s; max_len= len; printf(“The max_s is:”); puts( max_s ); 7. /*编写函数编写函数 delchar(s,c). 删除字符串删除字符串 s 中出现的所有中出现的所有 c 字符。请同时编写主函数字符。请同时编写主函数*/ 实例:实例:s=”welcome!” c=e s 初始值初始值 w e l c o m e ! 0 w e l c o m e ! 0 当当 si=c, 它后面的字符从它后面的字符从。

5、l开始到开始到0为止,各前进一位为止,各前进一位 删删 1 次后次后 w l c o m e ! 0 i 继续前进,直到遇见下一个继续前进,直到遇见下一个 c, 将后面的字符各前进将后面的字符各前进 1 位位 删删 2 次后次后 w l c o m ! 0 i 继续前进,直到遇见结束字符继续前进,直到遇见结束字符0 ,结束整个循环结束整个循环 i i i 分析:分析: 1.循环条件是循环条件是 si!=0 2.如何将如何将 i 后面若干字符各前进一位?后面若干字符各前进一位?-利用字符串复制函数和利用字符串复制函数和 字符子串字符子串 s 代表完整的字符串,而代表完整的字符串,而 s+i 代表。

6、从代表从 si开始、到开始、到0结束的子串。结束的子串。 将子串将子串 s+i+1 复制给子串复制给子串 s+i, 即即 实现实现 i 后各字符前进一位后各字符前进一位 strcpy( s+i, s+i+1) #include void delchar( char *s, char c); void main() char s80, c; printf(“ Input string s :n“); gets( s); printf(“ Input char c :n“); c=getchar(); delchar(s,c); printf(“ After delete:n“ ); puts( 。

7、s); #include void delchar( char s, char c) int i; for( i=0; si!=0; i+) if( si=c) strcpy( s+i, s+i+1); 8. /*分别用字符数组和字符指针实现自定义函数分别用字符数组和字符指针实现自定义函数 strcpy(s,t,m). 将字符串将字符串 t 中从第中从第 m(m=0)个字符开始的子串复制 给字符串 )个字符开始的子串复制 给字符串 s。*/ 实例:实例:s=”welcome” t=”friend”, m=3, 调用自定义函数调用自定义函数 strcpy(s,t,m)后,后,s=”end”, t。

8、 保持不变,仍为保持不变,仍为”friend” 注意:不能使用注意:不能使用 10.2 节中介绍的节中介绍的 C 语言提供的字符串处理函数,而是从底层做起,自己编写这个函数。语言提供的字符串处理函数,而是从底层做起,自己编写这个函数。 该函数不要求返回任何值,因此函数类型是该函数不要求返回任何值,因此函数类型是 void; 形参有三个,分别是两个字符串形参有三个,分别是两个字符串 s 和和 t, 一个整型参数一个整型参数 m. 解法解法 1(字符数组)(字符数组) void strcpy( char s, char t, int m ) int i,j; /i:s 的下标;的下标;j:t 的下。

9、标的下标 for( i=0,j=m; t j!=0; i+, j+) si = tj; 解法解法 2(字符指针)(字符指针) void strcpy( char *s, char *t, int m ) char *p= t+m; /p 指向指向 t 的第的第 m 个字符个字符 for( ; *p!=0; s+, p+) while ( *p!=0 ) *s+= *p+; while ( *p ) *s+= *p+; *s = *p; 9. /*分别用字符数组和字符指针实现自定义函数分别用字符数组和字符指针实现自定义函数 strcat(s,t). 将字符串将字符串 t 连接到连接到 s 之后,。

10、要求返回字符串之后,要求返回字符串 s 的首地址的首地址*/ 实例:实例: s=”welcome” t=”friend”, m=3, 调用自定义函数调用自定义函数 strcpy(s,t,m)后,后, s=”welcomefriend”, t 保持不变, 仍为保持不变, 仍为”friend” 该函数要求返回该函数要求返回 s 的首地址,即首字符的地址,因此函数返回值的类型是字符指针(详见的首地址,即首字符的地址,因此函数返回值的类型是字符指针(详见 10.4 节) ,因此函数类型是节) ,因此函数类型是 char *; 形参有形参有 2 个,分别是两个字符串个,分别是两个字符串 s 和和 t. 。

11、解法解法 1(字符数组)(字符数组) char * strcpy( char s, char t) int i,j; /i:s 的下标;的下标;j:t 的下标的下标 /先把先把 i 移到移到 s 的末尾,即结束字符的末尾,即结束字符0处处 for( i=0; si !=0; i+) ; /再把再把 t 中的字符逐个复制到中的字符逐个复制到 s 的后端的后端 for( j=0; t j!=0; i+, j+) si = tj; /返回返回 s 的首地址的首地址 return s; 解法解法 2(字符指针)(字符指针) char * strcpy( char *s, char *t) char *。

12、p; /p 指向指向 s 的末尾,即结束字符的末尾,即结束字符0处处 for( p=s; *p !=0; p+) ; /再把再把 t 中的字符逐个复制到中的字符逐个复制到 s 的后端的后端 for( ; *t !=0; p+,t+) while ( *t!=0 ) *p+= *t+; while ( *t!=0 ) *p+= *t+; while ( *t ) *p+= *t+; *p= *t; /返回返回 s 的首地址的首地址 return s; 10. /*编写程序:将编写程序:将 5 个字符串个字符串从大到小从大到小排序后输出排序后输出*/ #include #include void 。

13、main() char *t,*s5=“Apple”, “Pear”, “Orange”, “Mango”, “Melon”; /s:字符指针数组,共字符指针数组,共 5 个字符串个字符串 int i, j; /冒泡排序,降序冒泡排序,降序 for( i=0; i i; j-) if( strcmp(sj-1, sj) str, 形式 2:(*p).str, 但不 可以写成(*p)-str。 +作用在分量 str 上,而 str 本身是一个字符指针,str+意味着下一个字符的地址 ) (2) A*( 联合, 不做要求) (3) ) B (a: 0000 0000 0000 0111, b: 0。

14、000 0000 0000 1100, a time.hour=24 (10*) return NULL; 或或 return h; p1-next!=NULL p2-next= p1-next; (11) struct student *p; /建立节点指针建立节点指针 p =p-next; /p 指向下一个节点指向下一个节点, 在链表中不可用在链表中不可用 p+来移动指针来移动指针 p!=NULL 或或 p (12) int i=0 /定义变量定义变量 i 并初始化并初始化 num=0 /成绩总和成绩总和 num 初始化初始化 p =p-next /p 指向下一个节点指向下一个节点 (13。

15、) int x=0 /定义变量定义变量 x待补考人数,并初始化待补考人数,并初始化 p= head /p 指向链表的头一个节点指向链表的头一个节点 p score c+2 - 该表达式有 3 个运算符:2 个单目运算*和-, 优先级高于双目运算+,而根据结合性,先算-后算*, 故表达式相当于 (*(px-c) )+2。 px-c 是指结构变量 x 的分量 c,而 c 本身是一个字符指针,指向字符串”wang”的首字 符w, 对指针 px-c 做间接访问*,得到该指针指向的字符本身,即w, 最后对该字符加 2,得到另一个字符y. ; /定义函数定义函数 f: int f( struct date x) int table213= 0,31,28,31,30,31,30,31,31,30,31,30,31, 0,31,29,31,30,31,30,31,31,30,31,30,31 ; int i,leap, d=0; leap= x.year%4=0 for( i=1; inext!=NULL; p= p-next) ; /。

《c语言程序设计 (何钦铭 颜晖 著)课后习题答案》由会员suns****4568分享,可在线阅读,更多相关《c语言程序设计 (何钦铭 颜晖 著)课后习题答案》请在金锄头文库上搜索。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值