目录
前言
生活中的任何事情均可抽象为顺序结构,选择结构和循环结构的组合,c语言作为【结构化】的程序设计语言同样如此。控制语句用于控制程序的执行流程,实现程序的各种结构方式,c语言共有三类九种控制语句:
1.条件判断语句也叫分支语句:if语句、switch语句;
2.循环执行语句:do while语句、while语句、for语句;
3.转向语句:break语句、goto语句、continue语句、return语句。
一.分支语言
1.if语句
if语句的语法结构:
单分支结构
if(表达式)
语句1;
双分支结构
if(表达式)
语句1;
else
语句2;
多分支结构
if(表达式)
语句1;
else if
语句2;
else if
语句3;
...
else
语句n;
举例:
#include<stdio.h>
int main()
{
int age = 10;
if (age < 18)
printf("青少年\n");
else if(age >=18 && age <40)
printf("青年\n");
else if(age >=40 && age <60)
printf("中年\n");
else
printf("老年\n");
return 0;
}
运行结果:
技巧1:if(5 == num)
表达式 num == 5 和表达式 5 == num完全相同,但当漏掉一个=时,num=5会变成赋值表达式,系统不会报错,因此,尽量使用 5 == num。
技巧2:else的就近原则
else会与它上方最近的if配对,不会被缩进格式影响,例如:
#include<stdio.h>
int main()
{
int b = 2;
int a = 0;
if (a == 1)
if (b == 2)
printf("if");
else
printf("else");
return 0;
}
运行结果:
而当第一个if的表达式为真时:
#include<stdio.h>
int main()
{
int b = 2;
int a = 0;
if (a == 0)
if (b == 2)
printf("if");
else
printf("else");
return 0;
}
运行结果:
显然else绑定了第二个if,这就是else的就近原则。
同时页说明了,c语言不是很在乎缩进格式,和python存在区别。
为了防止就近原则影响代码运行,要多使用花括号区分代码段。
2.switch语句
swith(整形表达式)
{
case 整形常量表达式:
语句1;
break;
case 整形常量表达式:
语句2;
break;
...
}
case语句的工作原理:case决定了switch语句的工作入口,当表达式匹配case的值,将从case开始,执行case后所有语句,因此需要使用break;跳出switch语句,不执行后续的case,举例:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
}
return 0;
}
运行结果:
当不使用break;时,输入day为3,将从case 3开始,执行switch中后续所有语句。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
}
return 0;
}
运行结果:
二、循环语句
1.while循环语句
while(循环条件)
{
语句;
if(表达式)
语句;
break;//continue;
}
使用break;可跳出整个while循环,使用continue;跳出本次循环,继续执行下一次循环。
2.for循环语句
单变量循环
for(表达式1;表达式2;表达式3)
{
循环语句;
}
多变量循环
#include<stdio.h>
int main()
{
int x, y, i = 0;
for (x = 0, y = 0; x < 5 && y <= 7; x++, y = y+2)
{
i++;
printf("%d ",i);
}
return 0;
}
表达式1是初始化部分
表达式2是条件判断部分
表达式3是调整部分
注:表达式省略,代表表达式部分为真。但是要注意,初始化部分尽量不要省略,当出现循环嵌套时,内循环将无法初始化,导致代码错误运行。
举例:
#include<stdio.h>
int main()
{
for (int i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
3.do...while循环语句
do
循环语句;
while(表达式);
需要注意两点,首先,do...while语句的while(表达式)后需要加分号;,其次是所有分支循环语句都要注意的,当执行语句超过两句,最好都加上{},形成语句块,特别是do... while中,不加{}将无法执行。
注意点:调整部分(i++)的执行时机是在单次循环之后
练习1:计算1!+2!+...+10!
#include<stdio.h>
int main()
{
int i, j,sum = 0,reg = 1;
for (i = 1; i <= 10; i++)
{
reg = 1;
for (j = 1; j <= i; j++)
reg *= j;
sum += reg;
}
printf("%d",sum);
return 0;
}
练习2:从有序数列中查找数
#include<stdio.h>
int main()
{
int reg ,i = 0;
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int arr_size = sizeof(arr) / sizeof(arr[0]);
printf("请输入你要查找的数:");
scanf_s("%d", ®);
for (i = 0; i < arr_size; i++)
{
if (arr[i] == reg)
{
printf("%d\n", i);
break;
}
}
if (i == arr_size)
printf("抱歉,数组中没有你要查找的数");
return 0;
}
注意:arr_size = sizeof(arr) / sizeof(arr[0]);用于返回数组中元素的个数,由于sizeof()得到的是位数,除以每个元素的位数即是数组的元素个数。
补充知识点:逻辑运算符、增量赋值运算符、自增运算符
运算符和操作符是一个东西,在英文中写为”operator“
逻辑运算符
在c语言中的逻辑运算符共四种:|、||、&、&&
|是按位或运算符,它的位数等于两个运算数的位数,当两个数的数据类型不同时,会进行类型提升,取更高位数。
||是逻辑或,有短路特性,当第一个运算结果为真,第二个结果将不会影响逻辑运算符的运行结果,此时将不进行后续计算。
&与&&同理。
增量赋值运算符
增量赋值运算符共五种,对应加、减、乘、除、取模,以加为例:
i += 2;//和i = i + 2;完全相同
即实现将 i+2 赋值给 i 。
自增运算符
前置自增运算符++x;先对x执行x+1操作,再返回x。
后置自增运算符x++,先返回x,再执行x+1。
本文为学习b站视频比特鹏哥c语言教学的随笔39. 【C语言初阶】分支和循环语句_do-while循环练习完+函数_哔哩哔哩_bilibili