分支语句和循环语句

1.什么是语句?

C语句可分为以下五类:

1.表达式语句
2.函数调用语句
3.控制语句
4.复合语句
5.空语句

这章讲的是控制语句,包括三种结构(1.顺序结构2.选择结构3.循环结构),C语言有9种控制语句

可以分为三类

  1. 条件判断语句也叫分支语句:if语句和switch语句;
  2. 循环执行语句:do while语句、while语句、for语句;
  3. 转向语句:break语句、goto语句、continue语句、return语句。

2.分支语句(选择结构)

2.1 if语句

语法结构:

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

2.1.3练习

练习一下
1.判断一个数是否为奇数
2.输出1~100之间的奇数(两种方法)

#include <stdio.h>
int main()
{
    int x = 0;
    while (scanf("%d",&x)!=EOF)
    {
        if(x%2==0)
        {
            printf("Even");
        }
        else
        {
            printf("Odd");
        }
    }
    return 0;
}
//第二题
#include<stdio.h>
int main()
{
    int i = 0;
    for(i=3;i<=100;i+=3)
    {
        printf("%d\n",i);
    }
    return 0;
}

2.2switch语句

switch适用于多分支
例如
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入5,输出星期五
输入4,输出星期四
输入6,输出星期六
输入7,输出星期日

switch的结构
switch(整句表达式)
{
语句项;
}
语句项是啥?
是一些case语句:
例如:

case 整形常量表达式:
     语句;

2.2.1在switch中的break

break会跳出循环,

#include<stdio.h>

int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
    case 1:
        printf("星期一\n");
        break;//break跳出循环
    case 2:
        printf("星期二\n");
            break;
    case 3:
        printf("星期三\n");
        break;
    case 4:
        printf("星期四\n");
        break;
    case 5:
        printf("星期五\n");
        break;
    case 6:
        printf("星期六\n");
        break;
    case 7:
        printf("星期天\n");
        break;
    }
    return 0;
}

如果让输入1—5,输出weekday
如果让输入6—7,输出weekend

应该这样

#include<stdio.h>
int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
    case 1:
       
    case 2:
        
    case 3:
        
    case 4:
       
    case 5:
        printf("weekday\n");
        break;
    case 6:
       
    case 7:
        printf("weekend\n");
        break;
    }
    return 0;
}

break语句的实际效果是把语句列表划分为不同的分支语句。

2.2.2default语句

当表达的值与所有的case标签的值不匹配,可以在语句列表中增加一条default子句,defult可以下载语句列表的任何位置,而且语句会像执行case标签一样执行default子句。

在每个switch语句中都放一条default子句是个好习惯。

#include<stdio.h>

int main()
{
    int n = 1;
    int m = 2;
    switch(n)
    {
        case 1:
            m++;
        case 2:
            n++;
        case 3:
            switch(n)
            {//switch允许嵌套使用
                case 1:
                    n++;
                case 2:
                    m++;
                    n++;
                    break;
            }
        case 4:
            m++;
            break;
        default:
            break;
    }
    printf("m = %d,n = %d\n",m,n);
    return 0;
}

3.循环语句

  • while
  • for
  • do while

3.1while循环

//while 语法结构
while(表达式)
      循环语句;
      

例如在屏幕上打印1~10的数字

#include<stdio.h>

int main()
{
    int i = 0;
    while(i<=10)
    {
        printf("%d ",i);
        i++;
    }
    return 0;
}

3.1.1while语句中的break和continue

在循环中遇到break永久终止循环

#include<stdio.h>

int main()
{
    int i = 1;
    while(i <= 10)
    {
        if(i == 5)
        {
            break;
        }
        printf("%d ",i);
        i++;
    }
    return 0;
}//输出的值为1 2 3 4

continue介绍

continue用于终止循环,本次循环中continue后面的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次while循环入口判断。

#include <stdio.h>
int main()
{
    int i = 1;
    while(i <= 10)
    {
        if(i == 5)
            continue;
        printf("%d ",i);
        i++;
    }
    return 0;
}//输出的结果是1 2 3 4

发现一学到getchar 和putchar就睡觉

不知道看到这里你困不困
但是我实在不想学了。就跳过吧。

3.2 for循环

for(表达式1;表达式2;表达式3)
    循环语句;

表达式1时初始化,表达式2是条件判断,表达式3时调整。

3.3 do…while()循环

3.3.1 do语句的语法

do
循环语句;
while(表达式);

do语句至少执行一次;

3.4 练习

1.计算n的阶乘;

#include<stdio.h>
int main()//计算n的阶乘
{
    int n = 0;
    scanf("%d",&n);
    int i = 0;
    int jet = 1;
    for(i = 1;i < n+1;i++)
    {
        jet = jet * i;
    }
    printf("%d\n",jet);
    return 0;
}

2.计算1!+ 2!+ 3!+…+ 10!

#include<stdio.h>
int main()
{
    int i = 0;
    int jet = 1;
    int x = 0;
    for(i = 1;i <= 10;i++)
    {
        jet *= i;
        x = x + jet;
    }
    printf("%d",x);
    return 0;
}

3.在一个有序数组中查找具体的某个数字n。(讲解二分查找)
//计算数组元素个数:sizeof(arr)/sizeof(arr[0]);

#include<stdio.h>
#include<string.h>
int main()
{
    int k = 10;
    int arr[] = {1,2,3,4,5,6,7,8,9,10};
    printf("猜猜k是几?\n");
    int left = 0;
    int right = 0;
    int sz = 0;
    sz = sizeof(arr)/sizeof(arr[0]);
    right = sz - 1;
    int mid = (left + right)/2;
    while(left <= right)
    {
        if(k > arr[mid])
        {
            left = mid + 1;
            mid = (left + right)/2;
        }
        else if(k < arr[mid])
        {
            right = mid - 1;
            mid = (left + right)/2;
        }
        else
        {
            break;
        }
    }
    printf("在数组中下标是%d\n",mid);
    return 0;
}

这道题有点难啊。自己看看吧。

4.编写代码,演示多个字符从两端移动,向中间汇聚。

#include<stdio.h>//这个真不会
#include<stdio.h>
#include <unistd.h>//我这是ios系统,window系统用#include<windows.h>
#include<string.h>
int main()
{
    char arr1[] = "welcome to bit...";
    char arr2[] = "*****************";
    int left = 0;
    int right = strlen(arr1)-1;
    while(left <= right)
    {
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        sleep(1);
        printf("%s\n",arr2);
        left++;
        right--;
    }
    return 0;
}

5.编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。

#include<stdio.h>
#include<string.h>
int main()
{
    int i = 1;
    int flag = 0;
    char password[20] = {};
    for(i = 0;i < 3;i++)
    {
        printf("请输入密码");
        scanf("%s",&password);
        if(strcmp(password ,"123456") == 0)//此处为字符串相等的用法,用到了strcmp
        {
            flag =1;
            break;
        }
    }
    if (flag == 0printf("密码错误");
    }
    return 0;
}

6.猜数字游戏实现

#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
void menu()
{
    printf("******************************\n");
    printf("************1.play************\n");
    printf("************0.exit************\n");
    printf("******************************\n");
}
void game()
{
    int random_num = rand()%100+1;
    int i = 1;
    while(1)
    {
        printf("请输入你猜的数_");1
        scanf("%d",&i);
        if(i > random_num)
        {
            printf("猜大了\n");
        }
        else if(i < random_num)
        {
            printf("猜小了\n");
        }
        else
        {
            printf("猜对了\n");
        }
    }
}

int main()
{
    int i = 0;
    srand((unsigned)time(NULL));
    for(;;)
    {
        menu();
        printf("是否进入游戏(1/0)?\n");
        scanf("%d",&i);
        if(i == 1)
        {
            printf("进入游戏~\n");
            game();
        }
        else if(i == 0)
        {
            printf("退出游戏\n");
        }
        
    }
    return 0;
}

4.goto语句

goto在某些特定的地方会发挥作用。从理论上讲没啥必要,但是我学了,我就得写一遍加深印象。

终止程序在某些深度嵌套的结构的处理过程。
例如:一次跳出两层或多层循环。

for(...)
    for(...)
    {
        for(...)
        {
            if(disaster)
               goto error;
        }
    }
 ...
 error:
    if(disaster)
    //处理错误情况
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值