C语言学习(2)

第三周:循环

3.1循环

C语言学习(2)_第1张图片

C语言学习(2)_第2张图片

while循环:

有个名字叫循环体

循环体内要有改变条件的机会,否则为死循环(语法上正确,而逻辑上错误)

当我们验证时:测试程序常使用边界数据(个位数,10,0,负数......)

例如上图:

C语言学习(2)_第3张图片

【我们可能觉得把外面的那个放在while里面也可以执行,尝试了几个数,发现确实可以,但是试到的时候 ,发现无法判断是个一位数,因此,第一个代码更好些】

我们调试代码时,可以在if、while中插入一个printf,这样不需调试便可知道代码是否进入判断语句,因为有时复杂的代码调试也不便于观察



Do-While循环:

在进入循环时不做检查,而是在执行完一轮循环体的代码后,再来检查循环条件是否满足

C语言学习(2)_第4张图片

注:while的()后面要有;

Do-While和While:

两种循环体很像,区别是前者先做一遍再判断条件,而后者是先判断条件再做,即Do-While是不管条件满不满足都会先做一遍

于是,上述判断数字位数的代码可改进成:

C语言学习(2)_第5张图片

3.2循环应用

(1).例如:计算x是2的多少次方

C语言学习(2)_第6张图片

但是在此代码中,最后输出的x总为1,这不是想要的,需要改进,问题就是这个x,这个x是计算完已经用过的x

小套路:计算之前先保存原始的值,后面可能会用到 

C语言学习(2)_第7张图片

 (2).计数循环

C语言学习(2)_第8张图片

C语言学习(2)_第9张图片

小套路:如果要模拟运行一个很大次数的循环,可以模拟较少的循环次数,然后做出推断

注:此处count--和printf的位置交换输出会不同

(3).算平均数

C语言学习(2)_第10张图片

C语言学习(2)_第11张图片 C语言学习(2)_第12张图片

这个代码每次循环要判断两次number的值,太浪费,加以改进 

C语言学习(2)_第13张图片

(4).猜数游戏

C语言学习(2)_第14张图片

C语言学习(2)_第15张图片

循环的条件:a和number不相等 

随机数介绍:

每次召唤rand()就得到一个随机整数

C语言学习(2)_第16张图片

注:黄色部分是使用rand()的必要 

但是输出的随机整数太大了,所以可以使用对100取余(每次可以得到一个100以内的数)

C语言学习(2)_第17张图片

 C语言学习(2)_第18张图片

 C语言学习(2)_第19张图片

(5).整数倒序

这个思想很简单,就是一个数%10得到个位数,/10去除个位数,把每一位分离开来

C语言学习(2)_第20张图片

第四周:循环控制

4.1第三种循环

FOR循环:

以阶乘为例:

C语言学习(2)_第21张图片

这里肯定要用到循环啦,先用之前学的while试试:

C语言学习(2)_第22张图片

 然后,再用到我们的FOR循环试试,这个就会简短一些,因为定义变量、控制条件还有i++什么的,都可以放在一行

C语言学习(2)_第23张图片

FOR循环:像一个计数循环,设定一个计数器初始化它,在计数器达到某值前,重复循环体,每执行一轮循环后,计数器的值进行调整,比如+1-1

for(初始动作;条件;每轮的动作){

        }

for后面()中的每一个表达式都可以省略的哦!!!

C语言学习(2)_第24张图片

小套路:

求和程序时,初始值应该为0;求积程序时,初始值应该为1

然后在这个程序中,为什么i的定义可以写在for后面的()里面嘞,因为这个i只在for循环起作用,而在for循环的外面是没用的

实际上for跟while是等价的

Tips For Loops:

1.如果有固定次数,用for;

2.如果必须执行一次,用do-while;

3.其他情况用while;

4.2循环控制

判断素数:

C语言学习(2)_第25张图片

break VS continue:

break:跳出循环

continue:跳过循环这一轮剩下的语句进入下一轮 (即,在遇到continue之后这个循环后面的语句不做了,直接再重新进入循环)

离开多重循环:

凑硬币:如何用1角、2角、5角的硬币凑出10元以下的金额【需要有三个循环】

【break和continue:只能对它所在的那一层循环做,不能跳出所有循环】

C语言学习(2)_第26张图片

看这个代码,这会输出所有的可能,如果我们想让它只输出一种情况,需要终止一下

C语言学习(2)_第27张图片

但如果只加这一个break的话,只能跳出最里面的循环而不是所有的

C语言学习(2)_第28张图片

于是我们就想到,可以在每层for后面都加上一个break ,但是这样的话会莫名的跳出循环,所以我们需要一个控制条件

C语言学习(2)_第29张图片

这个方法叫接力break:

初始化一个变量,然后在最里面那层变量里改变变量的值,再在外面的循环中if判断值break 

另一种方法:goto

C语言学习(2)_第30张图片

这个out是自己设定的,可以是别的词,主要是那个goto,跳转到goto后面那个词的地方【不过最好只在从最内层循环跳到最外层时使用goto,其他情况不要使用】 

4.3循环应用

(1)求和:

C语言学习(2)_第31张图片

从中可以看出,肯定是需要用到循环来解题的,只是如何选择用哪种循环

开始数字1,和结尾数字n都是明确的,所以用for循环最合适

C语言学习(2)_第32张图片 此处因为涉及到小数运算,所以sum是浮点数定义,而后面的1.0/i,是因为,只要一边是浮点数,整个除法运算算出来就是浮点数。

延伸:

C语言学习(2)_第33张图片

(2).求最大公约数

可使用辗转相除法

C语言学习(2)_第34张图片

【a,b为计算的数,t为a除以b的余数,除完将b与t往前移继续除直到b等于零,然后a的值就是最大公约数】 

C语言学习(2)_第35张图片

【这个地方a与b的大小自己可以判断,若a

5.1数据类型

C语言是有类型的语言:必须使用前定义并且确定类型

C语言学习(2)_第36张图片

C语言学习(2)_第37张图片

 C语言学习(2)_第38张图片

C语言学习(2)_第39张图片

C语言学习(2)_第40张图片

一.整数类型 

C语言学习(2)_第41张图片

整数的内部表达:

计算机内部一切都是二进制表达,那负数该如何表示?

C语言学习(2)_第42张图片

C语言学习(2)_第43张图片

【简单了解即可】 

二.整数的范围

C语言学习(2)_第44张图片

 【在纯二进制中11111111表示为256,而在补码中看成-1】

三.整数的格式化

C语言学习(2)_第45张图片

8进制和16进制:

一个以0开始的数字字面量为8进制

一个以0x开始的数字字面量为16进制

C语言学习(2)_第46张图片

四.选择整数类型

没什么特殊需要就选int即可

五.浮点类型

C语言学习(2)_第47张图片

%e、%f、%E的区别:

C语言学习(2)_第48张图片

注:如果在%与f前面加上.数字,即可得到相应的位数(%.16f) [是小数点之后的位数哦!]

输出精度:

C语言学习(2)_第49张图片

六.浮点数的范围与精度

C语言学习(2)_第50张图片

 C语言学习(2)_第51张图片

但是整数就不行,因为无穷大无法用整数来表达,可以用浮点数表达

C语言学习(2)_第52张图片

浮点运算的精度:

C语言学习(2)_第53张图片

注:(fabs为求绝对值,1e-12是把精度约的更小)

C语言学习(2)_第54张图片

七.字符类型

C语言学习(2)_第55张图片

如图:1整数读取就是1,而‘1’整数读取则是49【‘1’的ASCLL码为49】

C语言学习(2)_第56张图片

混合输入:

C语言学习(2)_第57张图片

一个有空格,一个没有空格,注意,当有空格数中间的空格不论有几个都能被读到,若既有数字也有有字母时可以读到,但是没有空格时,是无法读到空格的 

字符计算:

C语言学习(2)_第58张图片

大小写转换:

C语言学习(2)_第59张图片

八.逃逸字符

C语言学习(2)_第60张图片

 【其中

是一个字符哦,是为了区别前面那个",因为""之间不能再有双引号】

C语言学习(2)_第61张图片

1.\b

C语言学习(2)_第62张图片

2.\t

C语言学习(2)_第63张图片

例:C语言学习(2)_第64张图片

九.类型转换

1.自动类型转换:
C语言学习(2)_第65张图片

 C语言学习(2)_第66张图片

 2.强制类型转换【比如:把32768赋给short】

C语言学习(2)_第67张图片

 C语言学习(2)_第68张图片

(因为short的范围是32767,多了一个的话,就变成负的了) 

注:强制类型的优先级是高于四则运算的优先级的

C语言学习(2)_第69张图片

5.2逻辑类型 

(1)bool类型

C语言学习(2)_第70张图片

 

(2)逻辑运算

C语言学习(2)_第71张图片

C语言学习(2)_第72张图片

注:

 

这个式子不是表示age>=20喔!!!【因为单目运算符!会先做,所以如果age等于零,!age为1;而age如果不等于零,则!age等于0】 

C语言学习(2)_第73张图片

C语言学习(2)_第74张图片

C语言学习(2)_第75张图片

C语言学习(2)_第76张图片

(3).条件和逗号运算

条件运算符

C语言学习(2)_第77张图片

相当于:C语言学习(2)_第78张图片 

优先级问题:

C语言学习(2)_第79张图片 

 

逗号运算:
C语言学习(2)_第80张图片

C语言学习(2)_第81张图片 

C语言学习(2)_第82张图片 

逗号表达式主要在for中使用:

你可能感兴趣的:(学习,c语言)