前言:学过了分支与循环,这篇文章主要是我对分支与循环的理解,与练习
分支
if-else语句
if 语句的语法形式如下:
if ( 表达式 ) -->0表示假,非0为真
语句
其中表达式如果为真,执行语句,如果为假则不执行
实例代码如下:
#include<stdio.h>
//判断奇数
int main()
{
int a = 0;
scanf("%d", &a);
if (a % 2 == 1)//如果a是奇数执行下面的语句
{
printf("%d是奇数\n", a);
}
}
那如过不是奇数呢,就为偶数,此时用else
#include<stdio.h>
//判断奇数
int main()
{
int a = 0;
scanf("%d", &a);
if (a % 2 == 1)
{
printf("%d是奇数\n", a);
}
else
{
printf("%d是偶数\n",a);
}
}
if-else流程图如下:
逻辑操作符
返回值 --- 真与假
逻辑操作福包括以下三个:
- 逻辑与 &
- 逻辑或 ||
- 逻辑取反 !
1.逻辑与
&&::与运算符,就是并且的意思
用法: (表达式)&&(表达式)
只有当两边表达式的值都为真的时候,整个表达式才为真
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = 0;
c = a && b;
printf("%d\n", c);
}
//c的值为1
2.逻辑或
||:或运算符,就是或者的意思
用法: (表达式) || (表达式)
只要有一边为真,整个表达式的结果就为真。
#include<stdio.h>
int main()
{
int a = 3;
int b = 0;
int c = 0;
c = a || b;
printf("%d\n", c);
}
//c的值仍然为1
3.逻辑取反
!: 逻辑取反运算符
用法: !(表达式)
改变单个表达式的真假
#include<stdio.h>
int main()
{
int flag = 0;
if (!flag)
{
printf("哈哈\n");
}
}
//屏幕打印了哈哈
C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是 保证的。 如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
&&:只有操作符左边的表达是为假,则不会执行右边
||:只要左边的操作符值为真,就不会执行右边
如上图,此时c++是先使用c,c为0是假,所以后面的a++不会继续使用,a的值为2
d++,d的值为5是真,所以后面的b++不会执行,b的值一直为一。
当换成按位或时,a++被执行,所以a的值为3
条件操作符(三目运算符)
语法: exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果 exp1 为假, exp3 计算,计算的结果是整个表达式的结果。
这里有三目操作符输出俩个数的最大值
循环
switch语句
语法:
switch(整型表达式)
{
case (整形常量表达式):语句
case (整形常量表达式):语句
case (整形常量表达式):语句
default:语句
}
其中default表示case 的条件都不满足是执行default。
练习:
输入1~7,分别打印星期一~星期天。
注意:switch语句中,必须加上break;不然就会这样(如右图)
此时我们加上break
从这里我们还可以把1~5之间的语句去掉,6~7之间去掉一个语句,这样在输入1~5时我们打印工作日,输入6~7时我们打印休息日。 如下图:
红色圈住部分就是我们要删掉的部分。
这里我想让他输出两次,加了个while循环。
while循环
用法:
while(表达式)
语句
while循环要先判断表达式,如果表达式为真,就执行循环语句,如果为假则退出循环
例子:输出1~10的数字
注意: 这个i++必须加,不然循环停止不了!,每循环一次i+1,循环十次,循环停止
for循环
用法:
for (表达式1;表达式2;表达式3)
{
语句
}
表达式之间用 ; 号隔开
break
用于跳出循环
当i ==5时,直接跳出循环,不在执行循环体内的内容
continue
当执行到i==5时,直接跳过下面的内容,回到开头,执行下一次
goto语句
语法:
for()
{
for()
{
for()
{
goto end;
}
}
}
end: ;
goto通常用于跳出多层循环,goto end,end时标识,在你想要跳转的地方,前面加上end: (内容) ; 内容随意,但必须要有(: ;)
这里本该打印世界,但因为goto语句,所以跳转到end标志那里,所以这样无线跳转,死循环了.
小练习
1.求10个数的最大值
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
int i = 0;
for (i = 0; i < 10; i++) {//输入十个数
scanf("%d", &arr[i]);
}
int max = arr[0];//令max等于arr[0]
for (i = 0; i < 10; i++) {//遍历每一位数组元素
if (arr[i] > max)//如果比max大,就赋值给max。
{
max = arr[i];
}
}
printf("%d\n", max);//最终max是这十个数中最大的
}
2.最大公约数
这里利用辗转相除法:
就是说这两个数做除法,如果余数为0,那么余数就是最大公因数,如果不为0就,用除数 除以 余数,直到余数为0,那时,那个除数就是最大公因数.
例如:
30 和 18
30 % 18 == 1 余 12
18 % 12 == 1 余 6
12 % 6 ==0 // 此时这个除数也就是6 就是最大公因数了
同时扩展一下 最小公倍数 == 俩个数的乘积 除以 最大公因数
代码如下:
#include<stdio.h>
//最大公约数
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d", &a, &b);
c = a % b;
while (c != 0)//当c不等于0时
{
a = b;//把b赋给a
b = c;//把余数赋给b
c = a % b;//继续算余数
}
printf("%d", b);
}