C语言学习02

作用;筛选出输入字符中的所有数字并输出。

用ret判断读取的数据是否已经到缓冲区尾部,如果没到就进入循序,用ret小于字符0或大于字符0来判断跳出当前循环,若在0-9之间,则打印当前字符。

 这里if判断语句也可以把字符变成其ASCII码值来判断

for循环

 for循环的意义在于,其将初始状态,结束状态,加法操作集成到了一行语句上

for(int i=0;i<10;i++)

如用while表示这句话就需要

int i=10;

while(i<10)

{

i++;

}

若需要用到多出while,则需要统一在前面定义循环变量i j k,后面统一方while语句块,while一旦较多就会割裂程序间的联系。

同时,for循环内的条件建议使用左闭右开式,

比如for(i=0;i<10;i++)和for(i=0;i<=9;i++)是一个意思,

但10 表示的是十次循环,有着特殊意义

for(初始化;判断;调整)三个部分都可以省略,但省略往往会带来不一样的后果

比如:

 可能我们想双层嵌套for 做到10*10 打印1-100,但是执行结果却只打印到了10,这是因为,for语句缺少初始化,在第一次大循环打印到10,进入第二次大循环时,j继承了第一次大循环的10值,无法进入第二次大循环内的十次小循环,同理,后面的八次大循环进入之后也无法进入响应的小循环。

for循环的一些变种

for语句可以变成两个变量,由输出可得,只进行了两次循环

这是因为在出第二次循环时,i=2<2为假 0,0&&任何都为0,所以跳出循环

 

 结束条件是j=0;是赋值,j的值为0,就是假,假则一次循环都不进入。

do while

 题目:输入4,则计算1!+2!+3!+4!

 设计思路:拆分细化任务:输入n计算->直接计算4的阶乘和->算4的阶乘

//4的阶乘计算
int i;
int m=1;
int j=4;
for(i=0;i<4;i++)
{
  
   m=m*j;
   j--;
}

初试乘积要为1,做到1X4X3X2X1

再来计算4的阶乘和

 需要注意几点:

1.外层循环最后要把m初始化1,供下一次内循环做阶乘

内部循环里的i用来控制内部循环的次数,也即4的阶乘就要计算四次,3的阶乘就要计算3次,但内部循环块里,不能m=m*i;i--,因为这样会改变i控制内循环次数的作用,i的值即使内循环次数,也是阶乘的最大项,所以需要用另一个变量来控制阶乘的最大项,也就是n

最后,把i的初始值由初始赋值变成从键盘获取即可啦!

方法改进:

问题:如果我们计算4的阶乘和,以上面代码为例,需要计算1x1,1x1x2,1x1x2x3,和1x1x2x3x4,可以发现,我们多次计算了同一部分,在每次循环中都要再计算一次1x1,1x1x2也被计算了三次,大大增加了计算量,所以,能否下一个循环使用上一个循环的结果呢?当然是可以的

 相比于双层循环中需要把上一次计算的ret清零,这里保留了上一循环的ret以达到重复使用,且降低了代码的冗余度。

在一组有序数组中找到某个数字

 

 问题:遍历过程好费时间比较大

解决:引入二分法

 由于代码解释起来不容易,就不附说明啦。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值