C基础-分支和循环语句

c语言:结构化的程序设计语言。 包括:顺序结构,选择结构,循环结构

选择结构: 分支语句-if和switch

循环结构:循环语句while ,for, do while

c语言语句分为五类:1.表达式语句   2.函数调用语句   3.控制语句   4.复合语句  5.空语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式(c语言支持三种结构:顺序结构、选择结构、循环结构),他们由特定的语句定义符组成,c语言有九种控制语句。

可分成以下三类:

    1.条件判断语句也叫分支语句:if语句、switch语句;

    2.循环执行语句:do while语句、while语句、for语句;

    3.转向语句:break语句,goto语句continue语句、return语句

if和else if语句:

#include <stdio.h>
// int main()
// {
//     3 + 5;
//     printf("hehe");
//     ;//空语句
//     return 0;
// }

// int main()
// {
//     int age = 0;
//     //输入
//     scanf("%d",&age);
//     if (age < 18)
//     {
//         printf("小学生\n");
//     } else
//     {
//         printf("长大了\n");
//     }

//     return 0;

// }

int main()
{
    int age = 0;
    //输入
    scanf("%d",&age);
    //<18青少年
    //18~30青年
    //31~50中年
    //51~80中老年
    //80~100老年
    //100+ 老寿星
    // if (age < 18)
    // {
    //     printf("青少年\n");
    // } else if (age>=18 && age <=30)
    // {
    //     printf("青年\n");
    // } else if(age>30 && age <=50)  
    // {
    //     printf("中年\n");
    // } else if (age>50 && age<=80)
    // {
    //     printf("中老年\n");
    // } else if (age > 80 && age <= 100)
    // {
    //     printf("老年\n");
    // } else
    // {
    //     printf("老寿星");
    // }

    // if(age>18)
    //     printf("成年\n");
    //     printf("找对象了\n");  if语句默认管理一条语句
    
    if(age>18)
    {
        printf("成年\n");
        printf("找对象了\n");  
    }
    return 0;
       
}

多层if判断陷阱:

int main()
{
    int a = 0;
    int b = 2;
    if(a==1)
    {
        if (b==2)
        {
            printf("hehe\n");
        } else
        {
            printf("haha\n");
        }
        
    }
    //打印空,都没有满足条件

    return 0;
}

switch条件判断语句:

//switch语句进行判断
int main()
{
    int day = 0;
    scanf("%d",&day);
    // switch(整型表达式)
    // {
    //     语句项
    //     //是一些case语句:
    //     case 整型常量表达式:
    //         语句
    // }
    switch(day)
    {
    case 1:
        printf("星期一\n");
        break;   //跳出分支
    case 2:
        printf("星期二\n");
        break;
    case 3:
        printf("星期三\n");
        break;
    case 4:
        printf("星期四\n");
        break;
    case 5:
        printf("星期五\n");
        break;
    }
}
//在相同条件结果下不需要每个case都执行break
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;
    default:
        printf("输入错误\n");
        break;
    }
}

练习题:求出m和n的值

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

循环语句:for,while,do while

(1)while循环

// int main()
// {
//     //while语法结构
//     // while(表达式)
//     //     循环语句;
//     // int i =2;
//     // while(i)
//     //     printf("hehe\n");
//     int a = 0;
//     printf("%d",a);
//     return 0;
// }

//在屏幕上打印1到10
//break  终止循环,跳出循环
//continue
// int main()
// {
//     int i=1;
//     while(i <= 10)
//     {
//         if (i ==5)
//         {
//             //break; //1,2,3,4
//             continue; //1,2,3,4
//         }       
//         printf("%d\n",i);
//         i++;
//     }
//     return 0;
// }

// int main()
// {
//     int n = 1;
//     while(n <= 10)
//     {
//         if (n == 5)
//         {
//             continue;//跳过本次循环continue后边的代码,while循环的判断部分
//         }
//         printf("%d",n);      
//     }
//     return 0;
// }

int main()
{
    int ch = getchar(); //A
    printf("%c\n",ch); //A
    putchar(ch); //打印字符

    return 0;
}

int main()
{
    int ch = 0;
    //EOF - end of file  文件结束标志
    //#define EOF  (-1)
    //在函数读取失败的时候返回了EOF
    //sacanf函数读取成功,返回的是读取到的数据的个数
    //读取失败返回EOF
    //getchar读取成功返回字符的ASCII值
    //读取失败返回EOF
    // ctrl+Z  -回让sacnf 或者getchar 返回EOF
    while ((ch = getchar() != EOF))
    {
        putchar(ch);
    }
    return 0;
    
}

int main()
{
    //123456
    char password[20] = {0};
    printf("请输入密码:>");
    scanf("%s",password);
    printf("请确认密码(Y/N):");
    char input = 0;
    //scanf("%c",&input);
    //把\n处理掉
    //getchar(); //n

    //清理掉缓冲区中剩余的数据
    // while(getchar() != '\n')
    // {
    //     ;
    // }

    // 清空缓冲区
    fflush(stdin);   //stdin 清空输入缓冲区,尽量少用,达不到效果,在新版的vs上这个函数功能被取消了
    input = getchar();
    if('Y' == input)
    {
        printf("确认成功\n");
    } else 
    {
        printf("确认失败\n");
    }

    return 0;
}

//只打印数字
int main()
{
    char ch = '\0';
    while ((ch = getchar()) != EOF)
    {
        if(ch < '0' || ch > '9')
        {
            continue;
        } else
        {
            putchar(ch);
        }

        return 0;
    }
}

(2)for循环

//for循环
// int main()
// {
//     int i = 1; // 1初始化变量值

//     while(i<=10)  // 2判断
//     {
//         printf("%d",i);
//         i++; // 3调整
//     }

//     return 0;

// }

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

int main()
{
    int i = 0;
    for(i=1;i<=10;i++)
    {
        if(i ==5)
        {
            //break;
            continue;
        }
        printf("%d",i);
        printf("hehe\n");
    }
    return 0;

}
// int main()
// {
//     int arr[10] = {1,2,3,4,5,6,7,8,9,10};

//     int i =0; //[0,10)
//     //初始化和调整的省略就是啥都不做
//     //判断部分省略了,意味着判断上恒为真的
//     for(i = 0;i < 10;i++)
//     {
//         printf("%d\n",arr[i]);
//     }
//     return 0;
// }

// int main()
// {
//     int i = 0;
//     int j = 0;
//     for (i = 0; i<4;i++)
//     {
//         for(j=0;j<4;j++)
//         {
//             printf("hehe\n");
//         }
//     }
//     return 0;
// }
// int main()
// {
//     int x,y;
//     for(x = 0,y = 0;x<2 &&y<5; ++x,y++)
//     {
//         printf("hehe\n");
//     }
//     return 0;
// }

// int main()
// {
//     int i = 0;
//     int k = 0;
//     for(i = 0,k=0;k=0;i++,k++)  //判断为flase 不进行下一步
//     {
//         k++;
//     }
//     return 0;
// }

// do while()循环
//do while 循环的语法
// do
// {
//     循环语句;
// } while (表达式);

//使用do while语句打印1~10

// int main()
// {
//     int i = 1;
//     do
//     {
//         if(i ==5 ){
//             //break;
//             continue;
//         }
//         printf("%d\n",i);
//         i++;
//     } while (i<=10);
    

//     return 0;
// }

// 计算 n的阶乘
// 5! = 1*2*3*4*5
// n! = 1~n 累积相乘
//不考虑溢出的情况
// int main()
// {
//     int n = 0;
//     scanf("%d",&n);
//     int i = 0;
//     int ret = 1;
//     for(i=1;i<=n;i++)
//     {
//         ret = ret*i;
//     }
//     printf("%d\n",ret);
//     return 0;
// }

//计算 1!+2!+3!... + 10!
int main()
{

    int n = 0;
    int i = 0;
    scanf("%d",&n);
    //int n = 10;
    int sum = 0;
    int ret  = 1;
    for (int i=1;i<=n;i++)
    {
        ret = ret*i;
        sum +=  ret;
    }
    printf("%d\n",sum);
    return 0;
    
}

//在一个有序数组中查找具体的某个数字n
int main()
{
    // int arr[] = {1,2,3,4,5,6,7,8,9,10}; //升序
    // int k = 7;
    // int i = 0;
    // for (i = 0; i<10;i++)
    // {
    //     if(arr[i] == k)
    //     {
    //         printf("找到了,下标是:%d\n",i);
    //         break;
    //     }
    // }
    // if(i == 10)
    // {
    //     printf("找不到了\n");
    // }

    //折半查找算法
    //二分查找算法
    //1确定被范围的左右下标left、right
    //根据left和right,确定中间元素的下标mid
    //根据mid锁定的元素,和查找的元素比较,确定新的查找范围。left和right
    int arr[] = {1,2,3,4,5,6,7,8,9,10}; //升序
    // printf("%d\n",sizeof(arr)); //计算数组的总大小,单位是字节
    // printf("%d\n",sizeof(arr[0])); //4  求一个元素的大小
    // printf("%d\n",sizeof(arr) / sizeof(arr[0]));

    int k = 7;
    int sz = sizeof(arr) / sizeof(arr[0]);
    //1
    int left = 0;
    int right = sz-1;
    int flag = 0;
    //2
    
    while(left <= right){
        int mid = (left + right)/2;
        if(arr[mid] == k)
        {
            printf("找到了,下标是%d\n",mid);
            flag = 1;
            break;
        } else if(arr[mid] < k)
        {
            left = mid +1;
        } else
        {
            right = mid -1;
        }
        if (flag == 0)
        {
            printf("没找到\n");
        }
    }
    

    return 0;
    
}
#include <string.h>
#include <stdlib.h>
//#include <windows.h>
//Sleep需要一个windows.h的头文件
//编写代码,演示多个字符从两端移动,向中间汇聚
int main()
{
    char arr1[] = "welcome to school!";
    char arr2[] = "##################";
    int left = 0;
    int right = strlen(arr1)-1;

    while (left<=right)
    {
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        printf("%s\n",arr2);
        //Sleep(1000);//单位是毫秒
        system("clear");  //system函数可以执行系统命令,cls是清理屏幕
        left++;
        right--;
    }

    return 0;
    
    
}

//编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序)
int main()
{
    int i = 0;
    char password[20] = {0};
    for(i=0;i<3;i++)
    {
        printf("请输入密码:>");
        scanf("%s",password);
        //判断密码是否真确
        //两个字符串比较相等是不拿使用==,应该使用strcmp库函数
        //if(password == "123456") 错误
        //strcmp返回0表示两个字符串相等
        //strcmp返回>0表示第一个字符串大于第二个字符串
        //strcmp返回<0表示第一个字符串小于第二个字符串
        if(strcmp(password,"123456") == 0) //strcmp函数需要string.h库
        {
            printf("登录成功\n");
            break;
        } else
        {
            printf("密码错误\n");
        }
    }

    //1 2
    if(i == 3)
    {
        printf("退出程序,登录失败\n");
    }

    return 0;
}

//goto语句

// void test()
// {
// flag;
//     printf("test\n");

// }
// int main()
// {
// again:
//     printf("hehe\n");
//     printf("hehe\n");
//     printf("hehe\n");
//     printf("hehe\n");
//     goto again;
//     //goto flag; //goto语句只能在一个函数内部跳转,不能跨函数跳转

//     return 0;
// }

//关机程序
// 1.程序运行起来后,一分钟内电脑关机
//2. 如果输入:我是猪,就取消关机
int main()
{
    char input[20] = {0};
    //程序倒计时关机
    system("shutdown -s -t 60");
again:
    printf("请注意,你的电脑在一分钟内关机,如果输入:我是猪,就取消关机\n");
    scanf("%s",input);//输入
    if(strcmp(input,"我是猪")== 0)
    {
        system("shutdown -a");
    } else
    {
        goto again;
    }


    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值