第8章指的针(第二版)201501210.ppt

  1. 1、本文档共84页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章指的针(第二版)201501210

* * * * * * * * 例8.15: 已知一个字符串表示一个实数(不超过100位) ,请输出其整数部分,且输出不含前导0,但如果该整数为0,则输出0。 解决问题:实数取整 分析: (1)去掉整数部分的前导0时要注意整数部分全为0的情况下要保留一个0。 (2)查找小数点,并将其位置置为’\0’ \0 例8.15的实现 char *p=str, *q; while(*p == ‘0’)p++; q = strchr(str, ‘.’); //找到小数点 if(q != NULL)//若存在小数点 *q = ‘\0’; //将小数点置为’\0’ if(*p == ‘\0’) //整数部分为0 printf(“0\n”); else puts(p); q=strchr(str, ‘.’); strchr函数在字符串str中搜索字符’.’,返回该字符第一出现的内存地址,其类型为”char *” 例8.16 账单处理 问题描述 每到月末,superbin就会对这个月的支出账单进行整理和统计。如今电脑已经普及大学校园,所以superbin想让电脑帮忙做这件事情。聪明的你就为superbin编一个程序来完成这件事情吧 输入 第一行是整数n (n100)。然后是n行的账单信息,每一行由事物的名字name和对应的花费c组成,长度不超过200。中间会有一个或多个空格,而每一行的开头和结尾没有空格。 0.0 c 1000.0。 输出 输出总的花费,小数点后保留一位数字。 输入样例: 3 Apple 2.3 Buy clothes for girl friend 260.5 Go to cinema 30 输出样例: 292.8 思路分析 难点 (1)如何将每一行最后的费用分离来? (2)把字符串转化为实数? 难点1的分析: 注意到花费c在每一行的最后,且因为每一行的开头和结尾没有空格,可以从后向前找第一个空格,其后的内容就是花费c。strrchr()可完成该任务。 难点2的分析: 将字符串转化为实数可以使用stdlib中的函数atof()实现 实现过程 (1)定义字符数组str,字符指针p,累加器sum等 (2)读入n (3)sum初始化为0; (4)控制循环进行n次: { (4.1)读入一行字符存入str (4.2)让p指向倒数第一个空格的下一个位置 (4.3)把字符串p转换成实数存入f; (4.4)将f累加到sum中 } (5)输出sum的值。 int main() { int i, n; double f, sum; char str[LEN+1], *p; scanf(%d, n); getchar(); //吃掉整数后面的回车 sum = 0; for(i=0; in; i++) { gets(str); p = strrchr(str, ); //从后向前查找空格 p++; //指向空格后的数字 f = atof(p); //将字符串p转换为实数 sum = sum + f; } printf(%.1f\n, sum); return 0; } 课下练习:自定义并实现atof函数,将字符串转换为实数 #includestdio.h #includestring.h #includestdlib.h #define LEN 200 8.7.3.字符数组与字符指针的区别 char sa[ ] = This is a string; char *sp = This is a string; sa T h i s i s a s t r i n g \0 sp T h i s i s a s t r i n g \0 如果要改变数组sa所代表的字符串,只能改变数组元素的内容,如sa[0]=‘t’; 如果要改变指针sp所代表的字符串,只能改变指针的值,让它指向新的字符串,不能改变其元素,如sp[0]=‘t’;非法内存访问。字符串常量”This is a string”不允许修改。 字符数组与字符指针的区别 char sa[ ] = This is a string; char *sp = This is a string; 问题1:把sa和sp中的’ T’变成’ t’ sa[0] = ‘t’; 合法 sp[0] = ‘t’; 非法内存访问。字符串常量不允许被修改 应该用:char *sp = “this is a string; 问题2:把字符串sa和sp的内容改为:”Hello” sp = Hello; sa = “Hello”; 非法,数组名是常量,不能对它赋值 应该用 strcpy (sa

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档