1.网购问题
(1)这道题目需要分多种情况进行考虑:双11还是双12,有无优惠券,是否会出现优惠券的面值大于购买商品的单价(这个时候直接按0元进行处理);
(2)在对于优惠券的分支语句里面,我们既要判断有无优惠券,有则减少50元,减完之后如果钱数小于0,则按照0进行处理;
2.寄快递问题
(1)因为这道题目里面不足一千克要按照一千克进行计算,所以我们要新认识一个函数,ceil函数,这个函数的使用需要包含对应的头文件<math.h>,对于这个函数的用法,参数是double类型,返回值同样是double类型;这个函数的主要作用就是返回不小于参数的最小整数值,正好可以满足题目里面的“不够1千克按照1千克进行计算”的要求;
(2)我原本的思路是列举所有的情况,例如:如果小于1千克而且不需要加急,就输出20元,如果小于1千克,而且需要加急,就输出25元,后来写到超出部分的时候,这样的情况并不是很好计算,因此果断地放弃了这个思路,后来发现其他的小伙伴们定义了一个变量,通过这个变量来进行一系列的操作,这样思路一下子就打开了;
(3)我们在使用库函数的时候,因为我们的定义重量是float类型,因此要进行强制类型转换;超出的部分每千克1元,因此我们要计算是多少千克,但是ceil的返回值是double类型,因此我们也要进行强制类型转换成为int类型;
3.atoi函数的模拟实现
函数的功能就是把字符串转换为整数,该整数作为函数的返回值;
我们自己可以进行实践,了解他的一些基本规则,通过实践,我们可以得出一些基本的结论;
(1)刚开始如果有空格,这个函数就会过滤掉空格,打印空格后面的内容:
(2)如果出现了非数字的内容(比如字符),这个函数就会自动结束转换;
(3)在字符串的前面添加字符串就会影响打印的结果;
(4)如果我们输入的内容转换后超过整数类型最大范围,打印最大值,小于整数类型数据的最小值,打印最小值;
下面的是打印最小整数值的例子:
(5)接下来我们根据上面出现的情况,进行函数的模拟实现
我们进行模拟实现之前,先认识一下一个函数isspace,这个函数在模拟实现的时候需要用到;
这个函数的主要作用就是判断是否是空格,空格就返回非0的数字,否则返回0;
这个函数的使用需要包含对应的头文件#include<ctype.h>;
还有一个函数叫做isdigit函数,用来判断是否是十进制的数字,因为atoi只有在遇到数字的时候才会转化,我们借助这个函数判断是否是数字;
这个函数的使用包含的头文件也是#include<ctype.h>;
(6)模拟实现代码
最后我们使用枚举对于我们的程序进行优化,同样是输出-123,我们可能是输入-123,也可能是-123a234,因为遇到了字符a所以会停止转换,结果也是-123,我们称前者为正常转换,后者为不正常转换,两者的区别就是是否走到了字符串末尾的斜杠0;
4.结构体位段
这个就是位端的运用:最后是以16进制的形式进行打印;
5.序列中删除指定的数字
例如我们输入一组数据 1 2 3 4 5 6,我们想要删除的数字是4,我们定义两个下标i,j;他们遇到的不是相同的数字,例如1,2,3就都会向右移动,遇到我们想要删除的数字,就会j++,i就不会继续移动了,我们把arr[j]赋值给arr[i]相当于是把删除的数据给覆盖掉了,最后以i下标为指引打印数组,虽然5覆盖4,6覆盖5,最后还是剩余了6,我们只需要打印前面的5个数字就可以了;