一.if函数
1.形式:
if(式子一)
{式子二;
式子三;
············
}
其中,如果式子一为真(非零),则会执行括号内的程序,如果式子二为假(零),则不会执行括号内的程序。我们可以写出一个例子(输入一个整数,判断是否为奇数)使用if函数:
int main(){
int num = 0;
scanf("%d", &num);
if (num % 2 == 1) {
printf("%d 是奇数", num);
}
//另一种写法
if (num % 2) {
printf("%d 是奇数", num); //0为假,非0为真
}
return 0;
}
当我们输入5时,会输出5是奇数
2.if else
当然,有些时候并不只有两种情况,我们可以使用if(式子一) 式子二 else(式子三) 式子四的形式,也是判断括号内的式子是否成立,一般来说,if内的式子是不能与else内的式子同时成立的。我们可以使用if else写出一个代码,输入一个数字,来判断是否成年。
int main() {
int age;
scanf("%d", &age);
if (age >= 18)
printf("成年");
else
printf("未成年");
return 0;
}
但是我们应该注意,如果我们在成年时,同时输出可以恋爱,未成年输出请好好学习,我们可能会这样写代码:
int main() {
int age;
scanf("%d", &age);
if (age >= 18)
printf("成年");
printf("可以谈恋爱");
else
printf("未成年");
printf("请好好学习");
return 0;
}
我们在这个代码中,如果输入20,我们想让他输出成年,可以谈恋爱,但是我们会发现,结果是这样:
20
成年可以谈恋爱请好好学习
为什么会出现这样的情况呢?
事实上,if后如果跟多条语句时候,需要带大括号,应该这样写:
int main() {
int age;
scanf("%d", &age);
if (age >= 18)
{ printf("成年");
printf("可以谈恋爱");
}
else{
printf("未成年");
printf("请好好学习");
}
return 0;
}
这样就可以啦
3.if的嵌套
我们知道,if后面可以加个大括号,来表示if成立的情况下执行的操作,例如,让我们判断输入的一个数字的正负,代码如下:
int main() {
int n = 0;
scanf("%d", &n);
if (n == 0)
printf("输入的是0\n");
else {
if (n > 0)
printf("输入的是正数\n");
else
printf("输入的是负数\n");
}
return 0;
}
可见,我们在else中,还可以使用if else来判断,这便是if的嵌套
但是多个if else的时候,else总与最近的if相连,例如,我们可以写出一个代码
int main() {
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe");
else
printf("haha");
return 0;
}
我们不知道else所表示的是与a==1联系还是b==2联系,但是当我们输出时候,无法输出任何东西,因为else与最近的if项链,a==1不满足,因此不会执行下面的if else语句
二.三目操作符(条件操作符)
1.形式:
表达式1 ? 表达式2 : 表达式3
判断表达式1正误 正确执行表达式2 错误执行表达式3
真 计算 不算
假 不算 计算
2.实例:
int main() {
int a = 0;
int b = 0;
scanf("%d", &a);
b = (a > 5 ? 3 : -3);
printf("%d", b);
return 0;
}
如果我们输入6,6>5,执行b=3,输出3
如果我们输入2,2<5,执行b=-3,输出-3
3.逻辑操作符
&&逻辑与 ||逻辑或 !逻辑取反 非0 -> 0 0 -> 1
式子一&&式子二 如果式子一和式子二同时成立,该式子成立,如果任何不满足式子,此时这个式子不成立
式子一||式子二 如果式子一和式子二同时不成立,该式子不成立,当式子一或者式子二的任何一个式子成立时,这个式子就会成立
!式子一 如果式子一为真,!式子一为假, 如果式子一为假,!式子一为真
4.短路
短路,先对左求值,再对右求值,如果左边的满足,就不对右边的求值,叫短路
如果已知左操作数可知整个式子结果,短路求值
式子一&&式子二 对于该式子,式子一为假的情况下,这个式子必定不成立,此时不需要再判断式子二的情况了,短路
式子一||式子二 对于该式子,式子一为真的情况下,这个式子必定成立,此时不需要再判断式子二的情况了,短路
int main() {
int i = 0, a = 1, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
printf("%d\n%d\n%d\n%d\n%d\n", a, b, c, d, i);
return 0;
}
对于 i = a++ && ++b && d++;执行顺序是:
a = 1为真 -> a++ -> b++ -> b=3为真 -> d=4为真 -> d++ 故i = 1
这样我们就知道对于这种式子的解决方式了
三.switch分支
1.形式:
switch(表达式一){
case 1:表达式二;
case 2 : 表达式三;
············
}
应该注意,表达式一,表达式二,表达式三都必须是整型表达式,case后必须是整型常量表达式
2.实例
写出一个代码,输入一个数字判断是否除以3后的余数
int main() {
int i;
scanf("%d", &i);
switch (i % 3) {
case 0:
printf("余数是0");
case 1:
printf("余数1");
case 2:
printf("余数是2");
break;
}
return 0;
}
我们会发现,如果我们输入0,应该是进入case0,但是输出结果是:
余数是0余数是1余数是2
实际上,case只决定入口,我们需要决定出口的代码break
int main() {
int i;
scanf("%d", &i);
switch (i % 3) {
case 0:
printf("余数是0");
break;
case 1:
printf("余数1");
break;
case 2:
printf("余数是2");
break;
}
return 0;
}
这样,当执行玩输出后,就会直接跳出switch。
如果我们想输入1-7,输出星期一-星期日,使用swtich代码:
int main(){
int i = 0;
scanf("%d",&i);
swtich(i){
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
break;
case 3:
printf("星期三");
break;
case 4:
printf("星期四");
break;
case 5:
printf("星期五");
break;
case 6:
printf("星期六");
break;
case 7:
printf("星期日");
break;
}
return 0;
}
但是我们可能输入其他数字,例如我输入8,会发现没有满足条件的,那我们需要加入default代码,来判断其他情况:
int main(){
int i = 0;
scanf("%d",&i);
swtich(i){
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
break;
case 3:
printf("星期三");
break;
case 4:
printf("星期四");
break;
case 5:
printf("星期五");
break;
case 6:
printf("星期六");
break;
case 7:
printf("星期日");
break;
default:
break;
}
return 0;
}
default可以处理case无法取到的内容
如果,我们想输入1-5,显示工作日,6-7输入休息日,我们可以运用简单的方法,我们可以写下如下的代码:
int main(){
int i = 0;
scanf("%d",&i);
swtich(i){
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("休息日");
break;
defalut:
break;
}
return 0;
}
四.while循环
1.形式
while() + 语句 当括号内成立时,就会反复执行循环语句
每个while循环都需要使用的内容 初始化 判断 调整
例如,我们使用代码输出1-10这十个数字
int main() {
int i = 1; //初始化
while (i <= 10) { //判断
printf("%d\n", i);
i++; //调整
}
return 0;
}
2.实例
输入一个数字,进行逆序打印,例如输入571,输出175,我们可以利用取余的方法,使用while循环,来进行:
int main() {
int i = 0;
scanf("%d", &i);
while (i != 0) {
printf("%d\n", i % 10); //获取最低位
i /= 10; //去掉最低位
}
}
但我们发现,这样的形式使得初始化,判断,调整比较分散,所以我们应该使用下一个函数
四.for循环
1.形式:
for(表1;表2;表3){语句}
初始化 判断 调整
for循环的三个部分是可以省略的,但如果表达式2省略,则判断恒成立,就会一直执行
2.实例:
输出1-10:
int main() {
int i = 0;
for (i = 1; i <= 10; i++) {
printf("%d", i);
}
return 0;
}
输出1-100中3的倍数之和
int main() {
int i = 0, sum = 0;
for (i = 0; i <= 100; i++) {
if (i % 3 == 0)
sum += i;
}
/*for (i = 3; i <= 100; i += 3) {
sum += i;
}*/
printf("%d", sum);
return 0;
}
五.do while循环
do 语句 while(表达式); 至少执行一次
会先执行语句,再进行判断表达式是否成立,若成立,则会不断执行语句,因此至少会执行一次
我们如果想输出1-10:
int main() {
int i = 1;
do
{
printf("%d", i);
i++;
} while (i <= 10);
return 0;
}
六.循环的嵌套
我们可以在循环中加入循环,例如我们判断100-200内的素数,并输出
int main() {
int i = 0;
int j = 0;
for (i = 100; i <= 200 && i >= 100; i++) {
for (j = 2; j < i; j++) {
if (i % j == 0)
break;
}
if (i == j)
printf("%d\n", i);
}
return 0;
}
七.goto语句
在同一个函数内跳转好设计好的标号处
int main() {
printf("hehe");
goto next;
printf("haha");
next:
printf("heihei");
return 0;
}
这样,只会打印heheheihei,将haha跳过啦
使用方式:在多层循环中,可以使用goto快速跳出循环
感谢您的观看