纯小白一个,如果有写的不对的地方,欢迎大家提出错误
下面让我们开始学习吧!
C语言是结构化的程序设计语言,这里的结构是 顺序结构、选择结构、循环结构。
C语言能实现这三种结构,其实我们生活中,所有的事情都可以拆分为这三种结构或者这三种结构的组合。
我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。
在这篇文章中,首先来介绍 if、switch 分支结构。
1、if 语句
if语句的语法形式:
if (表达式)
语句
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
return 0;
}
首先来看这个代码,定义一个整形 num = 0;而%的意思大家都应该已经明白了,就是取模的意思。
然后使用scanf 函数进行接受用户输入的数字,接下来便到了最重要的环节。
我们假如输入一个数字 5
程序运行口述:
被 2 % (取模)后是否 == (等于)1
如果等于1的话,则语句继续往下执行。
输出 的结果就是 :5 是 奇数
如果被 2 % (取模)后是否 == (不等于)1
则输出空白内容。
简单来说,if 就是来判断的,
如果xxxx就xxxxx
如果不xxxx就xxxxx
2、else
if ( 表达式 )
语句1
else
语句2
例子:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。
#include <stdio.h>
int main()
{
int num = 0; //定义一个整型变量,存放用户输入的数字
scanf("%d", &num);//接收用户输入的数字
if(num % 2 == 1)//某个数字模上2等于1,就执行if下面的语句,否则执行另一条语句
printf("%d 是奇数\n", num);
else//如果某个数字模上2不等于1,就从这里进入另一个分支,执行下面一条语句
printf("%d 是偶数\n", num);
return 0;
}
代码的每一句的意思我都标注上去了,大家可以看一看。
接下来,学会了上面的案例,我们再来一个例子:
#include <stdio.h>
int main()
{
int age = 0;//定义整形
scanf("%d", &age);//接受用户输入的数字
if(age>=18)//如果age大于等于18,就执行下一条语句
printf("成年\n");
else//如果age没有大于等于18,就执行else下面的语句
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;
}
这样的话,程序代码才是正确的,都可以完全执行起来。
4、嵌套 if
5、悬空else问题
输出的结果是 空白
a == b;a != b;a < b;a > b;a <= b;a >= b;
if (x == 3) {
printf("x is 3.\n");
}
//注意:相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆。
//有时候,可能会不⼩⼼写出下⾯的代码,它可以运⾏,但很容易出现意料之外的结果。
if (x = 3) ...
if ( 3 == x) ...这样的话,如果把 == 误写成 = ,编译器就会报错。/* 报错 */if ( 3 = x) ...//推荐写法
7、条件操作符
exp1 ? exp2 : exp3条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算计算的结果是整个表达式的结果;如果 exp1 为假, exp3 计算,计算的结果是整个表达式的结果。
练习2:使⽤条件表达式实现找两个数中较⼤值。
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int m = a>b ? a : b;//这句话的意思就是,如果a>b,就取a,如果a不大于b,就直接取b的值
printf("%d\n", m);
return 0;
}
8、逻辑操作符:逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。
&&(与运算符)
与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
||(或运算符)
!(逻辑取反运算符)
注:C语⾔中,⾮0表⽰真,0表⽰假
首先来看 !(逻辑取反运算符)
#include <stdio.h>
int main()
{
int flag = 0;//首先来看,在C语言中0为假,所以这个程序是不执行的
if(!flag)//但是!flag 之后,就是把上一句的假变为真,程序正常执行
{
printf("do something\n");
}
return 0;
}
如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真所以上⾯的代码的意思就是 flag 为假,执⾏if语句中的代码。
简单来说,! 的意思就是跟你反着来。
&&(与运算符)
int month = 0;
scanf("%d", &month);
if(month >= 3 && month <= 5)//这⾥表达的意思就是month既要⼤于等于3
//⼜要⼩于等于5,必须同时满⾜。
{
printf("春季\n");
}
||(或运算符)
int month = 0;
scanf("%d", &month);
if(month == 12 || month==1 || month == 2)
{
printf("冬季\n");
}
可以理解为 只要用户输入了其中一个代表冬季的月份就可以输出冬季了
9、短路
if (month >= 3 && month <= 5 )表达式中&& 的左操作数是 month >= 3右操作数是 month <= 5当左操作数 month >= 3 的结果是0的时候即使不判断 month <= 5整个表达式的结果也是0(不是春季)。所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。
if (month == 12 || month== 1 || month == 2)如果month == 12则不⽤再判断month是否等于1或者2整个表达式的结果也是1(是冬季)所以, || 操作符的左操作数的结果不为0时就⽆需执⾏右操作数。像这种仅仅根据左操作数的结果就能知道整个表达式的结果不再对右操作数进⾏计算的运算称为短路求值。
#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;
}
答案是:1 2 3 4
答对了吗?
思路:首先来看,a++,因为a++是后置++,后置++是先使用再++。
因为在程序执行的时候,a++ 后面的 && 已经使用过了,认为 i = 0,所以后面的就不在执行了。
就像我们前面所说的那样
对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。
#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;
}
思路:因为我们前面说道 || 操作符的左操作数的结果不为0时,就⽆需执⾏右操作数。
现在a= 0,所以继续执行,到了++b这里,b就等于3,所以d++就不用算了。
所以答案就是1 3 3 4
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
11、switch 中的break
12、switch语句中的default
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}