C语言笔记5

253 阅读2分钟

控制流程

  1. 顺序流程
  2. 分支流程
  3. 循环流程

分支流程

  • if(测试条件)
    条件为真所执行的流程;
  • else
    条件为假所执行的流程;

if和else仅对后面的一条语句产生效果且if和else之间仅允许有一条语句(可使用复合语句)
if和else后不加;

image.png

复合语句

image.png

嵌套语句
例子 image.png
if(小于2)
{
输出left } else {//花括号 if(2到10之间) { 输出in } else { 输出right } }//花括号 可省略花括号 从而写成

if(小于2)  
{  
输出left 
}
else if210之间)
   {
   输出in
   }
   else
   {
   输出right
   }
       
 #include<stdio.h>
 int main()
 {
  int x;  
  scanf("%d", &x);  
  if (x < 2 )  
  {   
    printf("left\n");  
  }  
  else if (2 <= x && x <= 10)   
  { 
    printf("in\n");  
  }  
  else   
  {
    printf("rignt\n");  
  }  
  return 0;
  }

更复杂的例子

image.png

#include<stdio.h> 
int main() 
{
  int x;
  scanf("%d", &x);
  if(x < 60)
  {
     printf("不及格\n");
  }
  else if(x>=60 && x<70)
  {
    printf("及格\n");
  }
  else if(x>=70 && x<80)
  {
    printf("一般\n");
  }
  else if(x>=80 && x<90)
  {
    printf("良好\n");
  }
  else
  {
    printf("优秀\n");
  }
  return 0
}

条件运算符
优先级很低 image.png

循环流程

while循环

  • while(循环条件)
    循环行为

while仅对后面的一条语句产生效果且while后允许有一条语句(可使用复合语句)
while后不加;

  1. 开始时 为计数器设置初始值(否则循环次数错误)
  2. 计数器与一个有限值比较作为循环条件(否则无法开始或结束循环)
  3. 更新计数器(否则无法结束循环)

例如高斯求和
image.png

#include<stdio.h>
int main()
{
        int i = 1, sum = 0;
        while (i <= 100)
        {
                sum = i + sum;
                i++;
        }
        printf("%d %d\n", i, sum);
        return 0;
}  

for循环

  • for(计数器设置初始值;循环条件;计数器更新)
    循环行为
  • for循环括号内的三个部分可以写在别的地方 例如计数器初始化可以放在上面 计数器更新可以放在复合语句中 循环条件为空导致死循环
  • 死循环for(;;) for(;100;) while(100)

for仅对后面的一条语句产生效果且for后允许有一条语句(可使用复合语句)
for后不加;
for循环要注意逗号表达式
image.png

eg 高斯求和

#include<stdio.h>
int main()
{
        int i, sum = 0;
        for (i = 1; i <= 100; i++)
        {
                sum = i + sum;
        }
        printf("%d %d\n", i, sum);
        return 0;
}  

也可以把i放在计数器初始化时声明 则i仅在循环内有效 结束循环后失效

#include<stdio.h>
int main()
{
        int sum = 0;
        for(int i = 1; i <= 100; i++)
        {
                sum = i + sum;
        }
        printf("%d\n", sum);
        return 0;
}  

eg 打印三角形
image.png

do while 循环

image.png

  • do
    循环行为(花括号后不加分号)
    while(循环条件);

eg 输入正数或者0为止

#include<stdio.h>
int main()
{
        int x;
        do
        {
                scanf("%d", &x);
        }
        while (x < 0);
        printf("%d\n", x);
        return 0;
}  

eg 猜数字

image.png

循环嵌套

eg 输出从A1到E9

#include<stdio.h>
int main()
{
        for (char c = 'A'; c <= 'E'; c++)
        {
                for (int i = 1; i <= 9; i++)
                {
                        printf("%c%d", c, i);
                }
                printf("\n");
        }
        return 0;
}  

循环辅助

break

  • 结束整个循环 执行循环结构下面的语句

eg 用户输入密码 若密码不为12345 则密码错误 若为12345 则跳出循环

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
        int password;
        while(1)
        {
                scanf("%d", &password);
                if (password == 12345)
                        break;
                else
                        printf("password error");
        }
        printf("welcome back");
        return 0;
}

continue

  • 跳过本次循环 直接开始新一轮循环

eg 输入1-5 15-19

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
        int i = 0;
        while(i < 20)
        {
                if (i == 6)
                {
                        i = 15;
                        continue;
                }
                printf("%d\n", i);
                i++;
        }
        return 0;
}

goto

image.png

for中使用break和continue

  • break 直接跳出循环 不再更新计数器
  • continue 立即更新计数器再进入新循环

循环嵌套中使用break和continue

  • 作用于直属上级循环

多重选择switch

  • switch(整形表达式)
    {
    case 整型常量1:
    语句
    case 整型常量2:
    语句
    default:
    语句 ......
    }
  • 若不想执行后续语句要使用break跳出switch(仅跳出switch 不作用于上级)
  • continue不能作用于switch 可作用于while
  1. 括号中只能填一个整形表达式
  2. case后的常量不能有重复的
  3. 可以没有default
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
         char c;
         while (1)
         {
                 scanf("%c", &c);
                 switch (c)
                 {
                 case 'a':
                         printf("alpha\n");
                         break;
                 case 'b':
                         printf("bravo\n");
                         break;
                 default:
                         printf("i don't know\n\n");
                 }
         getchar();//清除未被吸收的输入
         }
         return 0;
}