while循环:
有个名字叫循环体
循环体内要有改变条件的机会,否则为死循环(语法上正确,而逻辑上错误)
当我们验证时:测试程序常使用边界数据(个位数,10,0,负数......)
例如上图:
【我们可能觉得把外面的那个放在while里面也可以执行,尝试了几个数,发现确实可以,但是试到零的时候 ,发现无法判断是个一位数,因此,第一个代码更好些】
我们调试代码时,可以在if、while中插入一个printf,这样不需调试便可知道代码是否进入判断语句,因为有时复杂的代码调试也不便于观察
Do-While循环:
在进入循环时不做检查,而是在执行完一轮循环体的代码后,再来检查循环条件是否满足
注:while的()后面要有;
Do-While和While:
两种循环体很像,区别是前者先做一遍再判断条件,而后者是先判断条件再做,即Do-While是不管条件满不满足都会先做一遍
于是,上述判断数字位数的代码可改进成:
(1).例如:计算x是2的多少次方
但是在此代码中,最后输出的x总为1,这不是想要的,需要改进,问题就是这个x,这个x是计算完已经用过的x
(2).计数循环
注:此处count--和printf的位置交换输出会不同
(3).算平均数
这个代码每次循环要判断两次number的值,太浪费,加以改进
(4).猜数游戏
循环的条件:a和number不相等
随机数介绍:
每次召唤rand()就得到一个随机整数
注:黄色部分是使用rand()的必要
但是输出的随机整数太大了,所以可以使用对100取余(每次可以得到一个100以内的数)
(5).整数倒序
这个思想很简单,就是一个数%10得到个位数,/10去除个位数,把每一位分离开来
FOR循环:
以阶乘为例:
这里肯定要用到循环啦,先用之前学的while试试:
然后,再用到我们的FOR循环试试,这个就会简短一些,因为定义变量、控制条件还有i++什么的,都可以放在一行
FOR循环:像一个计数循环,设定一个计数器初始化它,在计数器达到某值前,重复循环体,每执行一轮循环后,计数器的值进行调整,比如+1-1
for(初始动作;条件;每轮的动作){
}
for后面()中的每一个表达式都可以省略的哦!!!
然后在这个程序中,为什么i的定义可以写在for后面的()里面嘞,因为这个i只在for循环起作用,而在for循环的外面是没用的
实际上for跟while是等价的
Tips For Loops:
1.如果有固定次数,用for;
2.如果必须执行一次,用do-while;
3.其他情况用while;
判断素数:
break VS continue:
break:跳出循环
continue:跳过循环这一轮剩下的语句进入下一轮 (即,在遇到continue之后这个循环后面的语句不做了,直接再重新进入循环)
凑硬币:如何用1角、2角、5角的硬币凑出10元以下的金额【需要有三个循环】
【break和continue:只能对它所在的那一层循环做,不能跳出所有循环】
看这个代码,这会输出所有的可能,如果我们想让它只输出一种情况,需要终止一下
但如果只加这一个break的话,只能跳出最里面的循环而不是所有的
于是我们就想到,可以在每层for后面都加上一个break ,但是这样的话会莫名的跳出循环,所以我们需要一个控制条件
这个方法叫接力break:
初始化一个变量,然后在最里面那层变量里改变变量的值,再在外面的循环中if判断值break
另一种方法:goto
这个out是自己设定的,可以是别的词,主要是那个goto,跳转到goto后面那个词的地方【不过最好只在从最内层循环跳到最外层时使用goto,其他情况不要使用】
(1)求和:
从中可以看出,肯定是需要用到循环来解题的,只是如何选择用哪种循环
开始数字1,和结尾数字n都是明确的,所以用for循环最合适
此处因为涉及到小数运算,所以sum是浮点数定义,而后面的1.0/i,是因为,只要一边是浮点数,整个除法运算算出来就是浮点数。
延伸:
(2).求最大公约数
可使用辗转相除法
【a,b为计算的数,t为a除以b的余数,除完将b与t往前移继续除直到b等于零,然后a的值就是最大公约数】
【这个地方a与b的大小自己可以判断,若a
C语言是有类型的语言:必须使用前定义并且确定类型
整数的内部表达:
计算机内部一切都是二进制表达,那负数该如何表示?
【简单了解即可】
二.整数的范围
【在纯二进制中11111111表示为256,而在补码中看成-1】
三.整数的格式化
8进制和16进制:
一个以0开始的数字字面量为8进制
一个以0x开始的数字字面量为16进制
四.选择整数类型
没什么特殊需要就选int即可
五.浮点类型
%e、%f、%E的区别:
注:如果在%与f前面加上.数字,即可得到相应的位数(%.16f) [是小数点之后的位数哦!]
输出精度:
六.浮点数的范围与精度
但是整数就不行,因为无穷大无法用整数来表达,可以用浮点数表达
浮点运算的精度:
注:(fabs为求绝对值,1e-12是把精度约的更小)
如图:1整数读取就是1,而‘1’整数读取则是49【‘1’的ASCLL码为49】
混合输入:
一个有空格,一个没有空格,注意,当有空格数中间的空格不论有几个都能被读到,若既有数字也有有字母时可以读到,但是没有空格时,是无法读到空格的
大小写转换:
【其中
是一个字符哦,是为了区别前面那个",因为""之间不能再有双引号】
1.\b
2.\t
2.强制类型转换【比如:把32768赋给short】
(因为short的范围是32767,多了一个的话,就变成负的了)
注:强制类型的优先级是高于四则运算的优先级的
(1)bool类型
(2)逻辑运算
注:
这个式子不是表示age>=20喔!!!【因为单目运算符!会先做,所以如果age等于零,!age为1;而age如果不等于零,则!age等于0】
(3).条件和逗号运算
条件运算符
优先级问题:
逗号表达式主要在for中使用: