5.流程控制
流程控制
正确为true,错误为false。
1、顺序结构语句
程序中的所有语句都是从上到下逐条执行,这样的程序结构叫做顺序结构。顺序结构是程序开发中最常见的一种结构,它可以包含多种语句,如变量的定义语句、输入输出语句、赋值语句等。下面来看一个顺序结构的简单例子,通过程序实现按顺序输出"我爱C语言"
#include <stdio.h>
int main(){
printf("我\n");
printf("爱\n");
printf("C\n");
printf("语\n");
printf("言\n");
return 0;
}
2、选择结构语句
也就是前面也有用到过得if,else还有switch
2.1、判断语句if...else if...else
if也就是如果,else if其他的如果,else其他的。
语法格式是这样
if(判断条件){//if可以单独出现
执行语句1
}else if(判断条件){//else if可以很多个!
执行语句2
}else{//需要和if一起出现。当判断条件只有两种时前面没有else if也可以
执行语句3
}
上述语法格式中,判断条件是一个布尔值。当判断条件1为true(真的)时,if后面{}中的执行语句1会执行。当判断条件1为false(错误)时,会继续执行判断条件2,如果为true则执行语句2,以此类推,如果所有的判断条件都为false,则意味着所有条件均未满足,else后面{}中的执行语句3会被执行。
#include <stdio.h>//做一个分数及格与否的判断
int main(){
printf("请输入您的分数:\n");
int sum;//定义一个sum,来存输入的分数
scanf_s("%d",&sum);
if(sum>=60){//达到60分以上会显示及格
printf("及格\n");
}else{//达不到的会显示不及格
printf("不及格\n");
}
retrun;
}
上述语法中,判断条件是一个布尔值。当判断条件为true时,if后面{}中的执行语句1会被执行。当判断条件为false时,else后面{}中的执行语句2会被执行。
平常的生活当中,我们还可以看到更多的情况,比如将分数分优秀,良好,及格以及不及格。
#include <stdio.h>//
int main(){
printf("请输入您的分数:\n");
int sum;//定义一个sum,来存输入的分数
scanf_s("%d", &sum);
if (sum >= 90) {//达到90分以上会显示优秀
printf("优秀\n");
}
else if (sum >= 75 && sum < 90) {//达到75分以上并且90分以下的会显示良好
printf("良好\n");
}
else if (sum >= 60 && sum < 75) {//达到60分以上并且75分以下的会显示及格
printf("及格\n");
}
else {//其他的情况就是60分以下显示不及格
printf("不及格\n");
}
retrun 0;
}
2.2、switch 条件语句
switch 也是很常用的选择语句,比起if,它用的相对更简单一些并且只能用一些固定的值。比如你想请人吃饭,但是囊中羞涩,就只能根据自己身上的钱来选,由此,我们来构造一个伪代码
身上带的钱的数量
如果有10000,去五星大酒店,如果没有这么多钱就算了
如果有1000,去一些大餐馆,没有就算了
如果有100,去小餐馆,没有就算了
如果有10,去吃糖果,没有就算了
没钱,那就不吃了,就算了。
转成代码就是
#include <stdio.h>
int main(){
int money;//定义身上带的钱
printf("身上带了多少钱\n");
scanf_s("%d",&money);//只能输入选择中固定的值
switch(money){
case 10000:printf("去五星大酒店\n");break;
case 1000:printf("去大餐馆\n");break;
case 100:printf("去小餐馆\n");break;
case 10:printf("去吃糖果\n");break;
default:printf("不吃了\n");break;//这个是其他的情况
}
return 0;
}
switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,就会执行相应case后的语句,否则执行default后的语句。这里break的作用是跳出switch语句。(往后有更详细的了解)
switch还可以这样
switch(money){
case 10000:
case 1000:
case 100:
//当money满足10000、1000、100中的任意一个的话,处理方式一样
printf("吃饭\n");
break;
case 10:
case 1:
printf("吃糖\n");
break;
}
3、循环结构语句
在实际生活中经常会将同一件事情重复做很多次,比如在走路时,会重复使用左右脚,打乒乓球时,会重复挥拍的动作等。同样在C语言中,也经常需要重复执行同一代码块,这时就需要使用循环语句。循环语句分为while循环语句、do…while循环语句和for循环语句三种。
3.1 while
while(循环条件判定){
执行语句
......
}
就是当循环条件判定为true时,就会执行{}中的语句块,如果是判定为false的时候这个while就停止循环。
用while来实现一个1~4的输出(printf):
#include <stdio.h>
int main(){
int x = 1; //定义变量,起始值为1
while(x <= 4){ //循环的条件为小于等于4
printf("x = %d\n", x); //条件成立就会输出x的值
x++; //每循环一次x+1
}
}
扩张:将数字从大到小输出,
#include <stdio.h>
int main(){
int x = 5; //定义变量,起始值为5
while(--x){ //x-1后,开始循环,当()当中为0时停止循环。
printf("x = %d\n", x); //条件成立就会输出x的值
}
}
那么while(x--)会有什么不同
你会发现用上面的,会多输出一个x=0,为什么呢?
你可以将它拆成这样看
while(x){ //不等于0时就会循环。
x=x-1;
printf("x=%d",x);
}
而while(--x)则是
x=x-1 //会先执行一次这个
while(x){ //不等于0时就会循环。
printf("x=%d",x);
x=x-1; //每次执行完之后才减一,所以会只输出到x = 1 ,不会再输出x = 0
}
3.2、do...while
do
{
执行语句
………
} while(循环条件);
与while不同的是,do...while会先执行do之后{}中间的语句块,然后再进行while()的循环条件判断。
用do while来实现一个1~4的输出(printf):
#include <stdio.h>
int main(){ //开始
int x=1; //定义
do{
printf("x = %d\n",x); //输出
x++; //x+1
}while(x <= 4); //条件判定
return 0; //结束
}
那么从4-1呢?
#include <stdio.h>
int main(){ //开始
int x = 4; //定义
do{
printf("x = %d\n",x); //输出
}while(--x); //条件判定,并x-1,与while一样,x--会多一个x = 0的输出
return 0; //结束
}
3.3、for
通常用于循环次数已知的情况。语法格式为
for(初始化表达式; 循环条件; 操作表达式)
{
执行语句
………
}
输出1-4。
#include <stdio.h>
int main(){
for(int i = 1; i <= 4; i++)
{
printf("%d\n",i);
}//执行步骤:首先会执行定义一个i=1,之后判定 i 是否会小于等于4,是的话,就执行输出打印。
//然后执行i++,之后再进行判定 i 是否会小于等于4,否的话就退出这个循环。
retrun 0;
}
对自然数1~4进行求和
#include<stdio.h>
int main()
{
int sum = 0; //定义变量sum,用于记住累加的和
for (int i = 1; i <= 4; i++) //i的值会在1~4之间变化
{
sum += i; //实现sum与i的累加
}
printf("sum = %d \n", sum); //打印累加的和
return 0;
}
3.4、循环嵌套
有时为了解决一个较为复杂的问题,需要在一个循环中再定义一个循环,这样的方式被称作循环嵌套。
while、do…while、for循环语句都可以进行相互嵌套,
比如for循环中嵌套for循环,具体语法格式如下:
for(初始化表达式; 循环条件; 操作表达式)
{
………
for(初始化表达式; 循环条件; 操作表达式)
{
执行语句;
………
}
………
}
接下来通过for语句的循环嵌套来实现使用“*”打印直角三角形
#include<stdio.h>
int main()
{
int i, j; //定义两个循环变量
for (i = 1; i <= 9; i++) //外层循环
{
for (j = 1; j <= i; j++) //内层循环
{
printf("*"); //打印*
}
printf("\n"); //换行
}
return 0;
}
4、跳转语句(break、goto、continue)
跳转语句用于实现循环执行过程中程序流程的跳转
4.1、break
在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。当它出现在循环语句中,作用是跳出当前循环语句,执行后面的代码。接下来通过一个具体的案例来演示break语句如何跳出当前循环:
#include<stdio.h>
int main()
{
int x = 1; //定义变量x,初始值为1
while (x <= 4) //循环条件
{
printf("x = %d\n", x); //条件成立,打印x的值
if (x == 3) //当x==3是,就执行停止
{
break;
}
x++; //x进行自增
}
return 0;
}//所以这个的打印执行只会到 x = 3。
4.2、goto
当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想要跳出外层循环则需要对外层循环添加标记,然后使用goto语句。接下来通过一个案例来演示如何使用goto语句:(不常用)
#include<stdio.h>
int main(){
int i, j; //定义两个循环变量
for (i = 1; i <= 9; i++){ //外层循环
for (j = 1; j <= i; j++){ //内层循环
if (i > 4){ //判断i的值是否大于4,也就是第5行开始不打印,只打印前4行
goto end; //跳至标识为end的语句(就是结束)
}
printf("*"); //输出*
}
printf("\n"); //换行
}
end: return 0;
}
4.3、continue
在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。接下来通过一个1~100之内的奇数求和的案例来演示continue语句的使用
#include<stdio.h>
int main()
{
int sum = 0; //定义变量sum,用于记住和
for (int i = 1; i <= 100; i++){
if (i % 2 == 0){ //如果i是一个偶数,执行if语句中的代码
continue; //结束本次循环
}
sum += i; //实现sum和i的累加
}
printf("sum = %d\n", sum);
return 0;
}
使用for循环让变量i的值在1100之间循环,在循环过程中,当i的值为偶数时,将执行continue语句结束本次循环,进入下一次循环。当i的值为奇数时,sum和i进行累加,最终得到1100之间所有奇数的和,打印“sum = 2500”
作业:
作业2:
计算 1+2+3...+100的和
#include<stdio.h>
int main() {
int sum = 0; //定义这个和的变量名为sum
for (int i = 1; i <= 100; i++) {//从1开始一直到100,当i小于100时
sum = sum + i; //sum就加上循环是i的值。
}
printf("1+2+3...+100=%d\n", sum);
while (1); //卡屏
return 0;
}
9*9乘法表:
#include <stdio.h>
int main(){
for (int x = 1; x <= 9; x++) {
for (int y = 1; y <= 9; y++) {
if (x >= y) {
printf("%d * %d = %d ", x, y, x*y);
}
}
printf("\n");
}
while (1);
return 0;
}
0101000001100110

浙公网安备 33010602011771号