目录
前言
目录
C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语言是能够实现这三种结构的,文章的内容会介绍用if、switch实现分支结构,用for、while、do while 实现循环结构。当然也含一些其他可能会涉及到的知识。
一、if语句
1.1 分支中包含一条语句
if 语句的语法形式如下:
if (表达式)
语句
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行
在C语言中,0为假,非0表示真 ,换句话说表达式的结果如果是0,则语句不执行,表达式的结果不是0,则语句执行
if语句执行流程
例子:输入一个整数,判断是否为奇数
#include<stdio.h>
int main()
{
int num =0;
printf("请输入一个整数:");
scanf("%d",&num);
if(num % 2 == 1)
printf("%d 是奇数\n",num);
return 0;
}
如果一个数不是奇数,那就是偶数,如果任意一个整数,要清楚的判断是奇数还是偶数,就需要if..else.. 语句
if...else...语法形式
if (表达式)
语句1
elae
语句2
例子:输入一个整数,判断是否为奇数,如果是奇数打印奇数,否则打印偶数
#include<stdio.h>
int main()
{
int num =0;
printf("请输入一个整数:");
scanf("%d",&num);
if(num % 2 == 1)
printf("%d 是奇数",num);
else
printf("%d 是偶数",num);
return 0;
}
1.2分支中包含多条语句
默认在if和else语句中默认都只控制一条语句,如果要包含多条语句就要用{}将代码括起来,else后面也可以跟上大括号
示例:
#include<stdio.h>
inr main()
{
int age = 0;
scanf("%d",&num);
if(age>=18)
{
printf("成年了\n");
printf("可以谈恋爱了!\n");
}
else
{
printf("未成年!\n");
printf("不可以早恋哦!\n");
}
return 0;
}
1.3 嵌套if
在if...else ...语句中,else可以与另一个if语句连用,构成多重判断
如:要求输入一个整数,判断输入的整数是0,还是正数或负数
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num == 0)
{
printf("输入的数字是0\n");
}
else if (num > 0)
{
printf("输入的数字是正数\n");
}
else
{
printf("输入的数字是负数\n");
}
return 0;
}
当语句只有一条是大括号可以省略但建议初学者在最开始学习时加上,以免造成混淆。
上述代码就是嵌套在前面的else子句中,构成了嵌套的if语句。
在如:
#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语句的语法,有了嵌套语句,就可以完成更多复杂逻辑的判断。
在写代码时如果有多个if和else,可以记住这样一条规则,else总是跟最接近的if匹配
二、操作符
在了解完if语句后我们来了解一些操作符,通常会和分支和循环配合使用完成实际需求。
1.关系操作符
C语言用于比较的表达式,称为“关系表达式”(relational expression),里面使用的运算符就称为 “关系运算符”(relational operator),主要有下面6个。
- > 大于运算符
- <小于运算符
- >= 大于等于运算符
- <=小于等于运算符
- ==相等运算符
- !=不相等运算符
一些例子:
- a == b;
- a != b;
- a < b;
- a > b;
- a >= b;
- a <= b;
tips:
1.关系表达式通常返回0或1,表示真假。
2.C语言中,0表示假,所有非零值表示真。如,20 > 12 返回1,12 > 20 返回0。关系表达式常用于if或while结构。
3. 相等运算符 == 与 赋值运算符 = 是两个不一样的运算符,不要混淆。如果把下面的示例写成if(x=3) 则表示对变量赋值3,返回值为3,所以if的判断总为真。
if (x == 3)
{
printf("x is 3.\n");
}
为防止出现这种错误,有的程序员喜欢将变量写在的等号的右边 if(3==x),这样的话,如果把==误写成 = ,编译器就会报错。
4.多个关系运算符不宜连用
例子:
2.条件运算符
条件操作符也叫三目操作符,需要接受三个操作数,形式如下:
exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果exp1为真,exp2计算,计算的结果是整个表达式的结果;如果exp1 为假,exp3计算,计算的结果为整个表达式的结果。
一些小练习:
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
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 %d", &a, &b);
b = a > 5 ? 3 : -3;
printf("%d\n", b);
return 0;
}
//使用条件表达式实现两个数中的较大值
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int m = a > b ? a : b;
printf("%d\n", m);
return 0;
}
3. 逻辑操作符
逻辑操作符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面3个运算符。
- &&:与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)
- || :或运算符,就是或的意思(两侧至少有一个表达式为真,则为真,否则为假)
2.3.1 逻辑取反运算符!
a | !a |
非0 | 0 |
0 | 1 |
C语言中,非0表示真,0表示假
2.3.2 与运算符
a | b | a&&b |
非0 | 非0 | 1 |
非0 | 0 | 0 |
0 | 非0 | 0 |
0 | 0 | 0 |
&&就是与运算符,也是并且的意思,&&是一个双目运算符,使用方式是a&&b,&&两边的表达式都是真的时候,整个表达式才为真,只要一个是假,则整个表达式为假。
2.3.3 或运算符
a | b | a || b |
非0 | 非0 | 1 |
非0 | 0 | 1 |
0 | 非0 | 1 |
0 | 0 | 0 |
|| 就是或运算符,也就是或者的意思,|| 是一个双目运算符,使用方式是 a || b,|| 两边的表达式只要一个是真,整个表达式就是真,两边的表达式都为假,才为假。
练习:
#include<stdio.h>
int main()
{
int year = 0;
scanf("%d", &year);
if (year % 4 == 0 && year % 100 != 0)
printf("%d是闰年\n",year);
else if (year % 400 == 0)
printf("%d是闰年\n",year);
else
printf("%d不是闰年", year);
return 0;
}
//方法2
#include<stdio.h>
int main()
{
int year = 0;
scanf("%d", &year);
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
printf("%d是闰年\n", year);
else
printf("%d不是闰年", year);
return 0;
}
2.3.4 短路
C语言逻辑运算符有一个特点,它总是先对左侧的表达式求值,在对右侧的表达式求值,这个顺序是保证的。
如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值,这种情况称为短路。
该处使用的url网络请求的数据。
三、switch语句
switch语句也可以实现分支结构
switch语句是一种特殊的 if...else... 结构,用于判断条件有多少个结果的情况。它把多重的 if...else... 改成更易用、可读性更好的形式。形式如下:
switch (expression){
case value1: statement
case value2: statement
default:statement
}
上述代码中,根据表达式expression不同的值,执行相应的case分支。如果找不到对应的值,就执行default分支。
1. switch语句中的break
每一个case语句中的代码执行完成后,需要加上break,才能跳出这个switch语句
示例:
上述代码中的case语句后都没有break语句,代码会继续执行下去,有可能会逐行执行其他case语句中的代码,直到遇到break或者switch语句结束。所以在switch语句中break非常重要,能实现真正的分支效果,只有在switch语句中使用了break才能跳出switch语句。
2.switch语句中default
switch 后面的expression 的结果如果不是value1,也不是value2的时候,就会执行default子句。
tips:
在switch语句中case语句和default语句是没有顺序要求的,只要你的顺序满足实际需求就可以。不过通常是把default子句放在最后处理。
总结
以上就是我对分支结构的理解与总结,可能有很多不足,忘各位小伙伴多多指教,循环的相关知识将在下一篇文章中,如果有想继续观看的小伙伴,请到这里哦!