目录
if…else、if…else if…else if 和 if...if...if 语句的区别
C语言是结构化的程序化设计语言!
顺序结构 —— 从头做到尾,按顺序一步一步往下走
选择结构 —— 做的时候有选择 —— 分支语句
- if
- switch
循环结构 —— 循环重复 —— 循环语句
- while
- for
- do while
goto语句
什么是语句?
C语言中由一个分号;隔开的就是一条语句。
if 语句
C语言是如何表示真和假的呢?
非0就是真 比如 -1
0 就是假
语法结构:
//单分支
if(表达式) //如果表达式为真,语句被执行
语句;
//双分支
if(表达式) //如果表达式为真,执行语句1,否则执行语句2
语句1;
else
语句2;
//多分支
if(表达式1) //如果表达式1为真,执行语句1,如果表达式1不成立,判断表示2
语句1;
else if(表达式2) //如果表达式2成立,执行语句2,否则执行语句3
语句2;
else
语句3
举例:
//单分支
#include<stdio.h>
int main(void)
{
int age = 10;
if (age >= 18)
printf("成年\n"); //不输出
return 0;
}
//双分支
#include<stdio.h>
int main(void)
{
int age = 10;
if (age >= 18)
printf("成年\n");
else
printf("未成年\n"); //输出: 未成年
return 0;
}
if 和 else 后面如果没有{},则只控制它们后面的第一条语句
if 和 else 后面有{}括起来的多条语句,则会控制被{}的多条语句
//双分支
#include<stdio.h>
int main(void)
{
int age = 10;
//if 和 else 后面如果没有{},则只控制它们后面的第一条语句
//if 和 else 后面有{}括起来的多条语句,则会控制被{}的多条语句
if (age >= 18)
{
printf("成年\n");
printf("恭喜你,可以谈恋爱啦\n");
}
else
{
printf("未成年\n");
printf("不能谈恋爱\n");
}
return 0;
}
输出:
悬空else —— else跟距离它最近的 if 匹配
看下面代码会输出什么?
建议养成自己良好的代码风格:
#include<stdio.h>
int main(void)
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
{
printf("呵呵\n");
}
else
{
printf("哈哈\n");
}
}
return 0;
}
if 书写形式的对比
比较代码1和代码2意思是不是相同的?
//代码1
if (condition) {
return x;
}
return y;
//代码1和代码2是不是一样?
//代码1和代码2表达的意思是相同的,但是代码1风格不好
//代码2
if (condition)
{
return x;
}
else
{
return y;
}
代码3:如果 if (num == 5)漏掉一个 = 变成 if (num = 5),则相当于把 5 赋值给 num,代码3就会输出:哈哈
//代码3
int num = 2;
if (num == 5)
{
printf("哈哈\n");
}
// 因为不满足条件,代码3不输出
代码4:将两个整型并列进行比较的时候,把常量放在左边,这样就不会出现代码3那样的错误
//代码4
int num = 2;
if (5 == num) //将常量放在左边
{
printf("哈哈\n");
}
总结:代码2和代码4更好,逻辑更加清晰,不容易出错。
if…else、if…else if…else if 和 if...if...if 语句的区别
if…else、if…else if…else if:只要有一个条件被满足,则只会执行与之对应的语句,然后跳出整个判断。
if...if...if:无论条件是否满足,接下来的条件都会被逐个判断。
练习:
1,输入一个数,判断它的奇偶
#include<stdio.h>
int main(void)
{
int num;
scanf("%d", &num);
if (num % 2 == 1)
{
printf("是奇数\n");
}
else
{
printf("是偶数\n");
}
return 0;
}
2,输出1-100之间的奇数
#include<stdio.h>
int main(void)
{
int num = 0;
while (num++ < 100)
{
if (num % 2 == 1)
{
printf("%d\n", num);
}
}
return 0;
}
或者
#include<stdio.h>
int main(void)
{
int num = 0;
for (num = 0; num <= 100; num++)
{
if (num % 2 == 1)
{
printf("%d\n", num);
}
}
return 0;
}
或者
#include<stdio.h>
int main(void)
{
int num = 1;
for (num = 1; num <= 100; num += 2)
{
printf("%d\n", num);
}
return 0;
}
switch语句
switch语句也是一种分支语句。常常用于多分支的情况。
在switch语句中,我们没法直接实现分支,搭配 break 使用才能实现真正的分支。
编程好习惯:在每个switch语句中都放一条 default子句 是个好习惯,甚至可以在后面再加上一个break。
格式:
必须是整型,float不行,字符可以,因为字符用的是其对应的ASCII码值,也是整型
//switch语句格式
switch (整型表达式)
{
语句项;
}
//必须是整型,float不行,字符可以,因为字符用的是其对应的ASCII码值
//语句项是什么呢?
//是一些case语句,如下:
case 整型常量表达式: //必须是整型、常量值
语句;
举例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
int day = 0;
scanf("%d", &day);
switch (day) // (day)的值是几,就从case几进去,
{ //想在哪里出来,就在哪里加 break 使其跳出、停止
case 1:
printf("星期一\n");
break;
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break; 即使是最后一个case, break可加可不加,也建议加上
}
return 0;
}
case 后面要不要加 break,是看用户需求来决定的,不是语法规定的,比如:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
int day = 0;
scanf("%d", &day);
switch (day) // (day)的值是几,就从case几进去,
{ //想在哪里出来,就在哪里加 break;
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default: //可以给一个错误提示,default放前中后哪里都行,建议放最后
printf("输入错误\n");
break;
}
return 0;
}
练习:下面程序输出什么?
#include<stdio.h>
int main(void)
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n) //switch允许嵌套使用
{
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n); //输出:m = 5, n = 3
return 0;
}
解析: