C语言是结构化的程序设计语言,这里的结构指的是顺序结构,选择结构,循环结构。我们可以使用if,switch实现分支结构,使用for,while,do while实现循环结构,对生活中的常见事情进行拆分。
if语句
if和else语句
语法形式:
if ( 表达式 )
语句1
else
语句2
在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则执行语句2,表达式的结果如果不是0,则执行语句1;
分支中包含多条语句
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("成年了\n");
printf("可以谈恋爱了\n");
}
return 0;
}
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("成年了\n");
printf("可以谈恋爱了\n");
}
else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("未成年\n");
printf("不可以早恋哦\n");
}
return 0;
}
嵌套if
⽐如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num == 0)
printf("输⼊的数字是0\n");
else if(num > 0) //这⾥的if 相当于嵌套在else语句中,形成了嵌套结构
printf("输⼊的数字是正数\n");
else
printf("输⼊的数字是负数\n");
return 0;
}
再比如:输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:正数。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num>0)
{
if(num%2 == 0)
printf("偶数\n");
else
printf("奇数\n");
}
else
{
printf("⾮正数\n");
}
return 0;
}
注:如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
关系操作符
C 语⾔⽤于⽐较的表达式,称为 “关系表达式”,主要有:
- > 大于运算符
- < 小于运算符
- >= 大于等于运算符
- <= 小于等于运算符
- == 相等运算符 判断两个值是否相等,例如:(3==x),注意不要写成=;
- != 不相等运算符
以上操作符常常用作判断,关系表达式通常返回0或1,表示真假。
条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果
exp1
为真,
exp2
计算,计算的结果是整个表达式的结果;如果
exp1
为假,
exp3
计算,计算的结果是整个表达式的结果。
练习:
改造前:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
if (a > 5)
b = 3;
else
b = -3;
printf("%d\n", b);
return 0;
}
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
b = a>5 ? 3:-3;
printf("%d\n", b);
return 0;
}
逻辑操作符
逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。
- ! :逻辑取反运算符(改变单个表达式的真假)。//a=0,则!a=1
- && :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
- || :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
注:C语⾔中,⾮0表⽰真,0表⽰假
练习:
输⼊⼀个年份year,判断year是否是闰年
闰年判断规则:
- 能被4整除并且不能被100整除是闰年
- 能被400整除是闰年
#include <stdio.h>
//代码1
int main()
{
int year = 0;
scanf("%d", &year);
if(year%4==0 && year%100!=0)
printf("是闰年\n");
else if(year%400==0)
printf("是闰年\n");
return 0;
}
//代码2
int main()
{
int year = 0;
scanf("%d", &year);
if((year%4==0 && year%100!=0) || (year%400==0))
printf("是闰年\n");
return 0;
}
短路(逻辑操作符)
C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
例如:a||b 如果a=1是,那a||b就已经为真了,就不再对b进行判断;同理:a&&b,如果a=0是,那a&&b就为假,就在对b进行判断或运算;
switch语句
switch语法形式:
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
上⾯代码中,根据表达式
expression
不同的值,执⾏相应的
case
分⽀。如果找不到对应的值,
就执⾏
default
分⽀。
注:
switch后面的expression必须是整型表达式,case后面的值,必须是整型常量表达式
switch中的break
练习:输⼊任意⼀个整数值,计算除3之后的余数
正确写法:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
如果去掉break后:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
case 1:
printf("余数是1\n");
case 2:
printf("余数是2\n");
}
return 0;
}
注:case和后边的数字之间必须有空格;每一个case语句中的代码执行完成后,需要加上break,才能跳出这个switch语句;
swtich中的default的顺序问题
在
switch
语句中
case
语句和
default
语句是没有顺序要求的,只要你的顺序是满⾜实
际需求的就可以。
不过我们通常是把
default
⼦句放在最后处理的。