C语言是结构化的程序设计语言,这里的结构指的是顺序结构,选择结构,循环结构
使用if、switch实现选择结构,使用for、while、do while实现循环结构
1.if语句
1.1 if
if的语法形式如下:
if(表达式)
语句;
表达式成立(为真),则执行语句,表达式不成立(为假),则不执行语句
在C语言中,0为假,非0为真,如果表达式结果是0,语句不执行,表达式结果不是0,语句执行
例如:输入一个整数,判断是否为奇数
1.2 else
if···else···语法如下
if(表达式)
语句一
else
语句二
例子:输入一个整数,判断是否为奇数,如果是奇数,打印奇数,否则打印偶数
输入一个年龄,>=18就输出:成年,否则输出:未成年
1.3 分支中包含多条语句
默认if和else语句中都只控制一条语句,如果想要控制两条语句,就要使用{}将代码括起来,else后面也可以用{}括起来
1.4 嵌套if
在if else语句中,else可以与另一个if语句连用,构成多重判断
例如:要求输入一个数字,判断输入的是整数0,还是整数或者负数,代码如下:
#include<stdio.h>
int main()
{
int a=0;
scanf("%d",&a);
if(a=0)
printf("输入的数字是0");
else if(a>0)
printf("输入的数字是正数");
else(a<0)
printf("输入的数字是负数");
return 0;
}
再比如:输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数,则输出:非正数
#include<stdio.h>
int main()
{
int a=0;
scanf("%d",&a);
if(a>0)
{
if(a%2==1)
printf("a是奇数");
else
printf("a是偶数");
}
else
printf("非正数");
return 0;
}
练习:输入一个人的年龄,如果年龄<18,打印“少年”,如果年龄在18至44岁之间,打印“青年”,如果年龄在45至59岁打印“中老年”,如果年龄在60至89岁之间打印“老年”,如果90岁及以上打印“老寿星”
以上代码留给大家自己练习
1.5悬空else问题
如果有多条if和else,else总是和最接近的if匹配
2.关系操作符
C语言中用于比较的表达式,称为关系表达式,里面使用的运算符称为关系运算符,主要有以下六个:
>大于运算符
<小于运算符
>=大于等于运算符
<=小于等于运算符
==相等运算符
!=不相等运算符
关系表达式常返回0或1,表示真假,常用于if或while结构
C语言中,0表示假,所有非0值表示真
注意:
相等运算符与等于运算符不同,为了防止这种情况,可以写为3=x,这样编译器就会报错
多个关系操作符不宜连用:例如i<j<k,判定时会(i<j)<k,最终结果为0或1与k比较,如果想判断j是否在i~k之间,应当使用以下写法:i<j&&j<k
3.条件操作符
条件操作符也叫三目操作符,需要接受三个操作数,形式如下:
exp1?exp2:exp3
条件操作符的计算逻辑是:如果exp1为真,exp2计算,计算的结果是整个表达式的结果,如果exp1为假,exp3计算,计算的结果是表达式的结果
练习:使用表达式实现找两个数中的较大值
4.逻辑操作符:&&、||、!
4.1逻辑与运算符
两边表达式同时为真,才为真
4.2逻辑或运算符
一边为真,则为真
4.3逻辑取反运算符
!a就是a为假
4.4练习:闰年的判断
闰年判断的规则:能被4整除并且不能被100整除的年份是闰年
能被400整除的年份是闰年
4.5短路
逻辑运算符的运算有一个特点,总是先对左侧的表达式求值,再对右侧的表达式求值
如果左边的表达式已经满足运算符的条件,就不对右边的表达式进行求值,这种情况称为短路
练习:阅读代码,计算代码输出的结果
#include <stdio.h>
int main()
{
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++;
//i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;
}
5.switch语句
C语言也提供了switch语句来实现分支结构
代码格式:
switch(expression)
{
case value1:statement
case value2:statement
default:statement
}
switch后的expression必须是整型表达式
case后的值,必须是整型常量表达式
5.1 if语句与switch语句的对比
练习:输入任意一个整数,计算除3之后的余数
1.case后面的数字必须有空格
2.每个case语句中的代码执行完成后,需要加上break,才能跳出这个switch语句
5.2 switch语句中的break
如果不使用break跳出,有可能会去执行其它case中的语句
在switch中break可以实现真正的分支,但也不是每个case都要有break
练习:
1.输入一个1~7的数字,打印对应的星期几
2.输入1~5,输出的是工作日,输入6~7,输出休息日
5.3 switch中的default
如果switch后面的expresstion的结果不是value1也不是value2,就会执行default语句
5.4 switch语句中的case和default顺序问题
case和default没有顺序要求,只不过通常把default放在最后处理
6. while循环
C语言提供了3中循环语句,while就是其中一种,while语法结构与if非常相似
6.1 if和while的对比
if用于判断,while实现循环效果
6.2 while语句的执行流程
首先上来执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再判断是否要执行下一次判断
6.3 while循环的实践
练习:在屏幕上打印1~10的值
6.4 练习
输入一个正的整数,逆序打印这个整数的每一位
题目解析:
1.想到得到n的最低位,可以使用n%10,得到的余数就是最低位
2.想要去掉n的最低位,可以使用n/10操作去掉最低位
3.循环一和循环二两个步骤,在n变成0之前,就能得到所有的位
7. for循环
7.1语法形式
for循环是三种循环中使用最多的,for循环的语法形式如下:
for(表达式1;表达式2;表达式3)
语句;
表达式1用于循环变量的初始化,表达式2用于循环结束条件的判断,表达式3用于循环变量的调整
7.2 for循环的执行流程
首先执行表达式1,初始化循环变量,接下来执行表达式2的判断部分,如果等于0,则循环结束;如果不等于0,则继续执行循环语句,循环语句执行后,再去执行表达式3,然后返回表达式2进行判断,决定循环是否继续
在整个循环过程中,初始化只被执行一次,剩下的就是表达式2,循环语句,表达式3在循环
7.3 for循环的实践
练习:在屏幕上打印1~10的值
7.4 while循环和for循环的对比
for和while在实现循环的过程中,都有初始化,判断,调整这三部分,但是for循环的这三部分相对较于集中,从形式上来看for循环梗优一点
7.5 练习
计算1~100间3的倍数的数字之和
8. do while循环
8.1 语法形式
在循环中,do while语句使用的最少,它的语法如下:
do
语句
while(判断表达式);
8.2 do while循环的执行流程
在do while循环中,先执行语句,执行完语句后,再去执行判断表达式,判断结果如果不等于0,则继续执行循环语句,判断结果如果是0,则循环结束
do while在循环体中至少是被执行一次的,这是do while比较特殊的地方
8.3 do while循环的实例
在屏幕上打印1~10的值
8.4 练习
输入一个正整数,计算这个整数是几位数
这里使用do while语句比较合适,因为n即使是0,也是一位数,要统计位数的
9.break和continue语句
在循环执行过程中,如果发生某些情况,需要提前终止循环,C语言中提供了break和continue来进行操作
break的作用是永久的终止循环,只要break被执行,就会直接跳出循环,继续往后执行
continue的作用是跳过本次循环中continue后面的代码,在for和while循环中是有所差异的
9.1 while循环中的break和continue
9.1.1 break举例
#include<stdio.h>
int main()
{
int i=1;
while(i<=10)
if(i==5)
break;//当i=5时,程序终止
printf("%d",i);
i+=1;
return 0;
}
9.1.2 continue举例
#include<stdio.h>
int main()
{
int i=1;
while(i<=10)
if(i==5)
continue;//此处i=5陷入死循环
printf("%d",i);
i+=1;
return 0;
}
9.2 for循环中的break和continue
9.2.1 break举例
#include<stdio.h>
int main()
{
int i=1;
for(i=1;i<=10;i++)
{
if(i==5)
break;//到此处结束
printf("%d",i);
}
return 0;
}
9.2.2 continue举例
#include<stdio.h>
int main()
{
int i=1;
for(i=1;i<=10;i++)
{
if(i==5)
continue;//继续执行i++语句
printf("%d",i);
}
return 0;
}
9.3 do while循环中的break和continue
和while几乎一样
10.循环嵌套
do while、while、for嵌套在一起才能更好的解决问题,这就是我们所说的循环嵌套
10.1 练习
找出100~200之间的素数,并打印到屏幕上
注:素数又称质数,只能被1和本身整除
10.2 题目解析
第一步:产生100~200之间的数字
第二步:假设判断i是否为素数,产生2~i-1的数字去试除i
第三步:如果有可以整除的,则不是素数,不能整除的,则为素数
11. goto 语句
实现在同一个函数内跳转到设置好的编号
如果使用不当,会导致在函数内随意乱跳转,但是在多层循环的代码中,使用goto跳出非常方便