c语言控制语句(if、switch、for、while)

控制语句

控制语句即用来实现对程序流程的选择、循环、转向和返回等进行控制。

1.分支语句

1.1 if语句

1.1.1 基本结构

if(表达式)
{
语句块1;
}
else
{
语句块2;
}

执行顺序:如果条件成立,则执行语句块1,如果调节不成立,则执行语句块2。
例子1

if(下雨)
{
带伞;
}
else
{
不带伞;
}

代码表示

#include <stdio.h>
#define RAIN 1        //RAIN下雨标识 0不下雨,1下雨
int main(int argc, char const *argv[])
{
	if(RAIN)
		printf("with unbrella\n");
	else 
		printf("no unbrella\n");
	return 0;
}

例子2:输入a和b两个整数,用if语句实现两数相减

#include <stdio.h>
int main()
{   
    int a=0,b=0;
    scanf("%d%d",&a,&b);
    if(a>b)
        printf("%d\n",a-b);
    else 
        printf("%d\n",b-a);
    
}

1.1.2 分层结构

if(表达式1)
{
语句块1;
}
else if(表达式2)
{
语句块2;
}
else
{
语句块3;
}

执行顺序:如果满足if中的表达式则执行if后面的语句块1,如果不满足则进行else if后面表达式2的判断,如果满足表达式则会执行语句块2。如果前面条件都不满足则会执行else后面的语句块3。

例子1

#include <stdio.h>
int main()
{   
    int a=0,b=0;
    scanf("%d%d",&a,&b);
    if(a>b)
        printf("a>b");
    else if(a<b)
        printf("a<b");
    else 
        printf("a=b"); 
}

例子2:从终端输入一个学生的成绩,判断学生成绩,打印成绩级别。
【90 - 100】 A
【80 - 89】 B
【70 - 79】 C
【60 - 69】 D
< 60 sorry you lost

#include <stdio.h>
int main()
{   
    int score =0;
    scanf("%d",&score);
    if(score>=90)
        printf("A\n");
    else if(score>=80)
        printf("B\n");
    else if(score>=70)
        printf("C\n");
    else if(score>=60)
        printf("D\n");
    else 
        printf("sorry,you lost!\n");
    return 0;
}

1.1.3嵌套结构

if(表达式1)
{
if(表达式2)
{
语句块1;
}
else
{
语句块2;
}
}
else
{
语句块3;
}

举例子:如果今天下雨,我就带伞,并且如果下小雨我就骑车,否则我就坐车,不下雨我就不带伞。

#include <stdio.h>
#define RAIN 0    //RAIN下雨标识,0不下雨,1下雨
#define LIANG 0  // LIANG雨量
int main()
{   
   if(RAIN)
   {
        printf("with umbrella!\n");
        if(LIANG>50)
            printf("by car\n");
        else 
            printf("walk\n");
   }
   else
       printf("no umbrella!\n");
    return 0;
}

例子1:输入一个数,如果大于0打印大于0并且再进行判断是否大于10,如果大于等于10打印大于等于10,小于10打印小于。否则如果小于0打印不想要这个数。

#include <stdio.h>
int main()
{
    int a;
    scanf("%d", &a);
    if (a > 0)
    {
        printf(">0\n");
        if (a >= 10)
            printf(">=10\n");
        else
            printf("<10\n");
    }
    else
    {
        printf("i don't want this number\n");
    }

    return 0;
}

总结:
(1)首先判断表达式是否成立,如果成立就执行语句块1,否则执行语句块2。
(2)if后面可以没有else,但是else前面必须有if。
(3)if和else后面如果只有一行语句可以省略花括号{}。

1.2 switch case 语句

基本结构:

swtich(变量或表达式)
{
case 常量1: 语句块1;break;
case 常量2: 语句块2;break;
case 常量3: 语句块3;break;

case 常量n: 语句块n;break;
default:语句块n+1;
}

执行顺序:
当变量或表达式的量与其中一个case语句中的常量相符时,就执行此case后面的语句,并依次向下执行后面所有case中的语句,除非遇到break语句就会跳出swtich语句为止。如果变量或者表达式都不相符,就会执行default后面的语句。

注意:
1.表达式不能是浮点型或者字符串。
2.case后面的break可以省略,但是省略时会顺序执行,指导遇到break就会结束。
3. 如果case的语句块和下面case中的语句块相同,则可以省略。形式如下:
case 常量1:
case 常量2:语句块1;break;

例子:从终端输入一个学生的成绩,判断学生成绩,打印成绩级别用switch写
【90 - 100】 A
【80 - 89】 B
【70 - 79】 C
【60 - 69】 D
< 60 sorry you lost

#include <stdio.h>
int main()
{
    int score;
    scanf("%d", &score);
    switch (score / 10)
    {
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("you lost\n");
        break;
    case 6:
        printf("D\n");
        break;
    case 7:
        printf("C\n");
        break;
    case 8:
        printf("B\n");
        break;
    case 9:
    case 10:
        printf("A\n");
        break;
    default:
        printf("error!\n");
        break;
    }
    return 0;
}

2、循环语句

2.1 for循环

2.1.1 基本结构

格式:

for(表达式1;表达式2;表达式3)
{
语句块;
}
表达式1:赋初值
表达式2:判断条件
表达式3:增值或减值语句

执行顺序:首先执行表达式1进行赋值,然后判断表达式2是否成立,如果成立就进入循环执行语句块,最后再执行表达式3增值或减值语句,然后再判断表达式2是否成立如果成立再进入循环,指导表达式2不成立的时候退出循环。

例子1:循环打印1 2 3 4 5

#include<stdio.h>
int main(int argc, char const *argv[])
{
	for(int i=1;i<=5;i++)
    printf("%d\n",i);
    return 0;
}

例子2:求5!

#include<stdio.h>
int main(int argc, char const *argv[])
{
    int sum =1;
    for(int i=1;i<=5;i++)
        sum *=i;    //sum=sum*i;
    printf("%d\n",sum);
    return 0;
}

2.1.2 嵌套结构

格式:

for(表达式1;表达式2;表达式3)
{
for(表达式4;表达式5;表达式6)
{
语句块;
}
}

例子1:用for循环打印99乘法表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
代码:

#include<stdio.h>
int main(int argc, char const *argv[])
{
    for(int i=1;i<=9;i++)
    {    for(int j=1;j<=i;j++)
            printf("%d*%d=%d ",j,i,j*i);
        printf("\n");
    }    
    return 0;
}

2.1.3 变形

(1)变形一:

表达式1;
for(;表达式2;表达式3)
{
语句块;
}

(2)变形二:

表达式1;
for(;表达式2;)
{
语句块;
表达式3;
}

(3)变形三:

表达式1;
for\(;;)    //死循环
{
	if(表达式2)
{
	语句块;
	表达式3;
}
else
{
	break;
}
}

例子1:打印所有的水仙花数,
解析:水仙花数:一个三位数,百位立方+十位立方+个位立方 = 原数

#include<stdio.h>
int main(int argc, char const *argv[])
{
    int g=0,s=0,b=0,sum=0;
    for(int i=100;i<1000;i++)   
    {
        g=i%10;
        s=i/10%10;
        b=i/100;
        sum=g*g*g+s*s*s+b*b*b;
        if(sum==i)
            printf("%d ",sum);
    }
    printf("\n");
    return 0;
}

例子2:打印以下图案:
要求行数从终端输入。
输入:5
输出以下:

#include<stdio.h>
int main(int argc, char const *argv[])
{
    int n=0;
    scanf("%d",&n);
    for (int i = 1; i <=n; i++)
    {
        for (int j = 1; j <=i ; j++)
        {
            printf("*");
        }
        printf("\n"); 
    } 
    return 0;
}

例子3
要求行数从终端输入。
输入:5
输出以下:

分析:
在这里插入图片描述

运行代码:

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int n = 0;
    scanf("%d", &n);
    /*1. 实现上半部分打印*/
    for (int i = 1; i <= n; i++)    //行数
    {
        for (int j = 1; j <= i; j++) //打印每行星星数
        {
            printf("*");
        }
        printf("\n");                //每行打印结束后换行
    }
    
   /\*2. 实现下半部分打印\*/
    for (int i = 1; i <= n; i++)            //行数
    {
        for (int k = 1; k < i; k++)         //实现打印每行空格数
            printf(" ");
        for (int j = 1; j <= n - i + 1; j++)//实现打印每行星星数
            printf("*");
        printf("\n");                        //每行打印结束后换行
    }
    return 0;
}

2.2 while循环

格式:

定义循环变量并赋值;
while(判断条件)
{
语句块;
增值或减值语句;
}

执行顺序
首先定义循环变量并且赋值,然后判断条件是否满足,如果满足就进入循环执行语句块,以及执行增值或减值语句。然后再进行判断,如果满足再次进入循环,直到不满足之后退出循环。相当于for循环的变形。

例如: 求从1加到100

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

2.3 do while循环

格式:

do
{
语句块;
增值减值语句;
}while(判断条件);
执行顺序:先执行后判断

例如:实现1-10求和?

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int i=1,sum=0;
    do
    {
        sum+=i;
        i++;
    } while (i<=10);
    
    printf("%d\n",sum);
    return 0;
}

在这里插入图片描述

左边do-while 右边while
注意:两者区别
1.执行顺序不同:do while是先执行后判断,while先判断后执行。
2.执行次数不同:do while至少会执行一次。

2.4 死循环

for(;;){}
while(1){}
while(1);

2.5 循环控制语句

break continue goto
(1)break:直接结束循环
(2)continue:结束本次循环,继续下一次循环
(3)goto:强制跳转到标签位置,可以应用于多重循环嵌套。
例如:

for(…)
{
for(…)
{
for(…)
{
if(错误条件)
goto error;
}
}
}

error:
…//处理情况

例子1:打印100到200中能被三整除的数

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int n;
    for(n=100;n<=200;n++)
    {
        if(n%3 !=0 ) continue;
        printf("%d ",n);
    }
    return 0;
}

例子2:从终端上循环输入一个字符并在终端上输出这个字符,当输入字符为‘q’时,程序结束。

#include <stdio.h>
int main(int argc, char const *argv[])
{
    char ch;
    while(1)
    {
        scanf("%c",&ch);
        //getchar();
        if(ch=='\n')
            continue;
        if(ch == 'q')
            break;
        printf("%c\n",ch);
    }
    return 0;
}

使用场景:
使用在循环语句中,做为结束循环的应用。使用时需要有判断条件。

**例子3:**循环输入一个5位数,判断它是不是回文数。当输入0时循环结束,是回文数循环也结束。
即12321是回文数,个位与万位相同,十位与千位相同。

#include <stdio.h>
int main()
{
    int n=0,g=0,s=0,b=0,q=0,w=0;
    while (1)
    {
       scanf("%d",&n);
       g=n%10;
       s=n/10%10;
       b=n/100%10;
       q=n/1000%10;
       w=n/10000;
       if(w==g && q==s ||n==0)
        {
            printf("%d\n",n);
            break;
        }
    }
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值