c语言的流程控制

时间:2023-03-09 00:01:48
c语言的流程控制

1、 流程控制

● 顺序结构:默认的流程结构。按照书写顺序执行每一条语句。
● 选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码。
● 循环结构:在给定条件成立的情况下,反复执行某一段代码。 
2、 选择结构-if
1. 简单使用
● if (表达式)  语句1;     注:如果条件为真,就执行后面的语句,否则不执行。
◆ if(count>50)  开班;  上课;
 #include <stdio.h>
int main()
{
// 人数
int count = ; if ( count >= )
{
printf("开班!!!\n");
printf("准备机器!!!\n");
} return ;
}
● if(表达式)  语句1;  else 语句2;      注:如果条件成立就执行语句1,否则执行语句2。
◆ if(count>50)  开班;  else 不开班;
 #include <stdio.h>
int main()
{
// 人数
int count = ; if ( count >= )
{
printf("开班!!!\n");
printf("准备机器!!!\n");
}
else
{
printf("不开班!!!\n");
printf("不准备机器!!!\n"); } return ;
}
● if(表达式)  {  }
◆ if(count>50)  {开班; 布置课室;}  else {}
◆ { }的作用域
● if -else if-else
◆ if(a==0) else if (a>0)  else 
◆ 特点:只有一个括号会被执行
 #include <stdio.h>
int main()
{
int a = ; if (a++ > ) // a == 6
{
printf("A\n");
}
else if (a++ > ) // a == 7
{
printf("B\n");
}
else if (a++ > ) // a == 8
{
printf("C\n");
}
else
{
printf("D\n");
} printf("a的值是%d\n", a); return ;
}
● 陷阱
◆ if(a!=0)  { a不是0;} else {a是0;}
◆ if (a); {  }      if后不要写分号
◆ if (a=0)     错误
◆ a == 0;
◆ if (10) int a = 9;
 注:

if (a>1)

printf("A\n");

    printf("B\n");

不管a取多少B都打印与if语句没关系

2. 习题
1> 输入一个整数day代表星期几,根据day的值输出对应的星期几,比如day==1,就输出“星期一”
 #include <stdio.h>
int main()
{
// 1.输入一个整数day
printf("输入一个整数day\n"); // 2.接收输入
int day;
scanf("%d", &day); // 3.判断等级
if (day == ) {
printf("星期一\n");
} else if (day == ){
printf("星期二\n");
} else if (day == ) {
printf("星期三\n");
} else if (day == ) {
printf("星期四\n");
} else if (day == ) {
printf("星期五\n");
} else if (day == ) {
printf("星期六\n");
} else if (day == ) {
printf("星期日\n"); }
return ;
}
2> 输入一个整数month代表月份,根据月份输出对应的季节。

春季:3、4、5

夏季:6、7、8

秋季:9、10、11

冬季:12、1、2

 #include <stdio.h>
int main()
{
// 1.输入一个整数day
printf("输入一个整数month代表月份"); // 2.接收输入
int month;
scanf("%d", &month); // 3.判断等级
if (month == ||month == ||month == ) {
printf("春季\n");
} else if (month == ||month == ||month == ){
printf("夏季\n");
} else if (month == ||month == ||month == ) {
printf("秋季\n");
} else if (month == ||month == ||month == ) {
printf("冬季\n");
}
return ;
}
3> 输入一个整数score代表分数,根据分数输出等级(A-E)(用两种方式)

A:90~100

B:80~89

C:70~79

D:60~69

E:0~60

 #include <stdio.h>
int main()
{
// 1.提示输入
printf("请输入分数值:\n"); // 2.接收输入
int score;
scanf("%d", &score); // 3.判断等级
if (score>= && score<=) { // [90, 100]
printf("A\n");
} else if (score>=) { // [80, 89]
printf("B\n");
} else if (score>=) { // [70, 79]
printf("C\n");
} else if (score>=) { // [60, 69]
printf("D\n");
} else { // (-∞, 59]
printf("E\n");
}
return ;
}
3、 选择结构-switch
1. 简单使用
● switch(表达式) { case 数值1: break; … default: break;}
● 举例

int a = 10;

switch (a) {

case 0:

printf("这是一个0");

break;

case 5:

printf("这是一个5");

break;

case 10:

printf("这是一个10");

break;

default:

printf("什么也不是");

break;

}

● 简述break的作用:

break:退出整个switch语句

如果case后面没有break,就会执行后面所有case中的语句,直到遇到break为止

● 在case中定义变量:

如果要在case后面定义新的变量,必须用大括号{}包住

 #include <stdio.h>
int main()
{
char c = '+';
int a = ;
int b = ;
switch (c) {
case '+':
{
int sum = a + b;
printf("和是%d\n", sum);
break;
} case '-':
{
int minus = a - b;
printf("差是%d\n", minus);
break;
}
}
return ;
}
2. if和switch的对比
● 很多情况可以互换,if语句能完成的功能,switch并不一定能完成
● if用得比较多,比较灵活,switch只能某个单值,switch能完成的功能,if语句都能完成
3. 习题

用switch替代if实现if中的习题

 /*
输入一个整数score代表分数,根据分数输出等级(A-E)(用两种方式)
A:90~100 score/10 == 9、10
B:80~89 score/10 == 8
C:70~79 score/10 == 7
D:60~69 score/10 == 6
E:0~60
*/ #include <stdio.h> int main()
{
int score = ; switch (score/) {
case : //
case : // 90+
printf("A\n");
break;
case : // 80+
printf("B\n");
break;
case : // 70+
printf("C\n");
break;
case : // 60+
printf("D\n");
break;
default:
printf("E\n");
break;
} return ;
}
4、 循环结构-while
1. 简单使用
● while(表达式)
 {
      循环体
  }
● continue:结束当前的循环体,进入下一次循环体的执行
● break的使用:某次的时候停止循环,直接结束整个while循环
整理的例子
 #include <stdio.h>
int main()
{
// 1.先确定需要重复执行的操作 // 2.再确定约束条件 // 定义一个变量记录做的次数
int count = ;
while (count<)
{
++count; if (count% == )
{
// 直接结束这一次循环体,进入下一次循环
continue;
}else if (count == )
{
break;
} printf("做第%d次俯卧撑\n", count);
} return ;
}
2. 特点

只有条件成立才会执行循环体,

运行原理

1.如果一开始条件就不成立,永远不会执行循环体

2.如果条件成立,就会执行一次循环体,执行完毕,再次判断条件是否成立......

3. 习题

1> 提示用户输入一个正整数n,计算1+2+3+…+n的和
 #include <stdio.h>
int main()
{
// 定义变量保存用户输入的整数
int n = ; // 一定要初始化 while (n <= )
{
// 1.提示输入
printf("请输入一个正整数:\n"); // 2.接收输入
scanf("%d", &n);
} // 3.计算
// (1 + n) * n / 2;
// 定义变量保存和
int sum = ;
int number = ; // 默认被加的数值
while (number < n)
{
number++;
sum += number; // 累加
} printf("%d\n", sum);
return ;
}
2> 提示用户输入一个正整数n,计算1-2+3-4+5-6+…+n的和
第一种
  */
#include <stdio.h>
int main()
{
// 1.定义变量存储用户输入的整数
int n = ; // 2.判断n是否为正整数
while (n <= ) {
// 2.1 提示输入
printf("输入一个正整数:\n"); // 2.2 让用户输入
scanf("%d", &n);
} // 3.计算阶乘
int sum = ; // 存储计算结果
int current = ; // 当前要累加的数值
while (current < n) {
current++; // 如果是偶数,就减
if (current % == ) {
sum -= current;
} else { // 如果是奇数,就加
sum += current;
}
} // 4.输出结果
printf("%d\n", sum); return ;
}

第二种 for循环

 #include <stdio.h>
int main()
{
int n,sum=;
printf("请输入正整数:");
scanf("%d",&n);
n++;
for(int i=;i<n;i+=)
{
sum=sum+i;
if(i+!=n)
sum=sum-i-; }
printf("sum== %d\n",sum);
return ;
}

记住一类题

 /*
题目:计算1~100中所有3的倍数的个数
*/ #include <stdio.h> int main()
{
// 记录3的倍数的个数
int count = ; // 记录当前检查的数值
int number = ; while (number < )
{
number++; // 说明number是3的倍数
if (number% == )
{
count++;
}
} printf("1~100内3的倍数的个数:%d\n", count);
}
4. 陷阱

while(条件);

最简单的死循环   while(1);

5、 循环结构-do while
● 特点:一定会执行一次循环体
● while和do while循环对比

while特点:如果一开始的条件不成立,永远不会执行循环体

do while特点:不管一开始的条件是否成立,至少会执行一次循环体

最好使用while

int i=0;
while(i<0){
i++;
}

int i=0;
do{
i++;
} while(i<0);

例子

 #include <stdio.h>

 int main()
{
int i = ; /*
while (i<0)
{
i++; // 5
}*/ do {
i++; //
} while (i<); printf("i=%d\n", i); return ;
}
6、 循环结构-for
1. 简单实用

for(语句1,条件,语句2)

{

循环体

}

语句1:一般为初始化语句

语句2:一般为增量语句(执行完循环体后再执行的语句)

● 初始化语句等可以是多句(把printf放到for的括号中)

For循环原理:

1) For循环一开始就会执行语句1(整个for循环只会执行一次)

2) 判断条件是否成立,若成立,则执行一次循环体,然后执行语句2,再次判断条件是否成立,若条件不成立则结束循环

3) 顺序为:(语句1-》判断条件-》循环体—》语句2-》判断条件-》循环体···)

【对比】for和while:

在性能上,for循环稍胜一筹,因为while循环只能使用外部的变量,而for循环可以对变量进行及时回收。

2. for循环嵌套

好友列表1

​好友1

​好友2

好友列表2

​好友1

​好友2

好友列表3

​好友1

​好友2

 #include <stdio.h>
int main()
{ for (int i = ; i<=; i++)
{
//printf("好友列表%d\n", i + 1);
printf("好友列表%d\n", i); /*
printf(" 好友1\n");
printf(" 好友2\n");
printf(" 好友3\n");
printf(" 好友4\n");
printf(" 好友5\n");*/ for (int j = ; j<=; j++)
{
printf(" 好友%d\n", j);
}
} return ;
}
3. 陷阱
1> 死循环 for(;;);
2> for循环体内部变量的作用域
3> 作用域混淆

for (int i = 0; i<5; i++)  int a = 10;

4. while循环和for循环的比较
● 可以互换
● for循环的变量可以及时回收
5. 习题
1> 提示用户输入一个正整数n,如果n=5,就输出下列图形,其他n值以此类推

*****

****

***

**

*

*

 #include <stdio.h>
int main()
{
// 1.定义一个变量存储用户输入的值
int n = ; // 一定要初始化 // 2.判断n值合不合理
while (n <= )
{
// 2.1 提示用户输入正整数
printf("请输入一个正整数:\n"); // 2.2 接收输入的数据
scanf("%d", &n);
} // 3.输出图形
for (int i = ; i<n; i++)// 有多少行
{
//printf("*****\n");
for (int j = ; j<n-i; j++)
{ // 每一行有多少个
printf("*");
} printf("\n");
} return ;
}
2> 输出九九乘法表
 #include <stdio.h>
int main()
{
// 一共有多少行
for (int row = ; row<=; row++)
{
// 一共有多少列(其实列数==行数)
for(int column = ; column<=row; column++)
{
// \t是tab键,目的是保持每列之间有相同的距离
printf("%dx%d=%d\t", row, column, row * column);
} // 换行
printf("\n");
}
}
 
7、 break和continue
1. break
● 使用场合:switch\循环结构
● 循环嵌套下的break
2. continue
● 使用场合:循环结构
● 循环嵌套下的continue
总结

一、选择结构

1.if

1> 结构

if (条件) {

} else if (条件2) {

} else if (条件3) {

} else {

}

2> 特点

* 同一时刻,只有一个大括号里面的代码会被执行

2.switch

1> 结构

switch (数值)

{

case 数值1:

break;

case 数值2:

break;

case 数值3:

break;

default:

break;

}

2> 特点

1> 默认情况下,只有一个case后面的代码会被执行

2> 如果一个case后面没有break,而且这个case成立,就会按顺序执行后面所有case中的语句,直到遇到break为止

3> 如果要在case后面定义一个新的变量,必须用大括号{}包住

二、循环结构

1.while

1> 特点:如果一开始条件不成立,永远不会执行循环体

2.do while

1> 特点:不管条件是否成立,至少会执行一次循环体

3.for

4.选择

1> 一般优先使用for循环

2> 然后再考虑while

3> 最后再考虑do while