c语言之分支和循环

分支语句

if

switch

单分支if

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int age = 10;
    if(age<18)
    printf("未成年\n");
    return 0;
}

双分支if if else语句

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int age = 10;
    if(age<18)
    printf("未成年\n");
else
printf("成年");
    return 0;
}

多分支if if else if语句

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int age=0 ;
    printf("请输入年龄>:");
    scanf("%d", &age);//这要是在%d后面加一个\n代码就不会执行.
    if (age < 18)
        printf("未成年\n");
    else if(age>=18 && age<28)
        printf("青年\n");
    else if (age >= 28 && age < 50)
        printf("壮年\n");
    else if (age >= 50 && age < 80)
        printf("老年\n");
    else
        printf("高龄老人\n");
    return 0;
}

如果条件成立,要执行多条语句,应该使用代码块。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int age = 50;
    if (age < 18)
    {
        printf("未成年\n");
        printf("不能谈恋爱\n");
    }
    else
    {
        printf("成年\n");
        printf("不能违法\n");
    }
        
    return 0;
}

悬空else问题

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if (a == 1)//执行完这一步之后直接出去.else和最近的if是一对
        if (b == 2)
            printf("hehe\n");
        else
            printf("haha\n");
    return 0;
}

以上这个代码不会输出haha,啥也不输出:因为else只和最近的if匹配.

改正后的代码

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
   {
        if(b == 2)
       {
            printf("hehe\n");
       }
   }
    else
   {
         printf("haha\n");
   }       
    return 0;
}

这样会输出haha

判断一个数是奇数还是偶数

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int a = 0;
    printf("请输入一个数:");
        scanf("%d", &a);
    if (a % 2 == 1)
        printf("这个数是奇数");
    else
        printf("这个数是偶数");
    return 0;
}

请写出100以内的奇数

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

switch语句:常用于多分支

switch(整型表达式)//必须得是整型表达式

{

case 1://case后面必须得是整型常量表达式

;

break;

}

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
        printf("星期一");
        break;
    case 2:
        printf("星期二");
        break;
    case 3:
        printf("星期三");
        break;
    case 4:
        printf("星期四");
        break;
    case 5:
        printf("星期五");
        break;
    case 6:
        printf("星期六");
        break;
    case 7:
        printf("星期天");
    }
    return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日");
        break;
    case 6:
    case 7:
        printf("休息日");
    }
    return 0;
}
#include <stdio.h>
int main()
{
    int n = 1;
    int m = 2;
    switch (n)
    {
    case 1:
        m++;//没有遇到break继续往下执行
    case 2:
        n++;
    case 3:
        switch (n)
        {
        case 1:
            n++;
        case 2:
            m++;
            n++;
            break;//这个break是用来跳出嵌套的switch
        }
    case 4:
        m++;
        break;
    default:
        break;
    }
    printf("m = %d, n = %d\n", m, n);
    return 0;
}
//m=5,n=3

循环语句

while

for

do while

while语法结构

while(表达式)

循环语句;

while打印1到10

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

加break,可以跳出循环

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

continue用法:continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,

#include <stdio.h>
int main()
{
    int i = 1;
    while (i <= 10)
    {
        if (i == 5)
            continue;//continue执行之后,下面的代码不会执行,会重新往上判断.
        printf("%d\n", i);
        i++;
    }
    return 0;
}

如果不想要某一个数,可以使用continue

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

getchar用法:用来接受键盘的输入字符

该函数的返回类型是int类型,返回值是用户输入字符的ASCII码值。

putchar用法:用来输出字符

#include <stdio.h>
int main()
{
    int ch = getchar();
    putchar  (ch);//这个和下面的输出一样
    printf("%c\n", ch);
    return 0;
}

用来清除缓存区的代码

#include <stdio.h>
int main()
{
    int ch = 0;
    while((ch=getchar())!=EOF)//文件结束标志
    putchar  (ch);
    return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int ch = 0;
    int ret = 0;
    char password[20] = {0};
    printf("请输入密码:>");//输入密码,并存放在password数组中。
    //比如输入123456,你会有一个“\n”,下面的getchar会读取到“\n”。“\n”的ASCII码是10.
    scanf("%s", password);
    printf("请确认(Y/N):>");
    ret = getchar();//getchar作用是在缓冲区读取一个字符。这里读取的就是“\n”,“\n”=10.
    if (ret == 'Y')
    {
        printf("确认成功\n");
    }
    else
    {
        printf("确认失败\n");
    }
    return 0;
}

改正后:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    char password{20}=0;
    int ch =0;
    int ret = 0;
    printf("请输入密码:>");//输入密码,并存放在password数组中。
//比如输入123456,enter键后你会有一个“\n”,下面的getchar会读取到“\n”。“\n”的ASCII码是10.
    scanf("%s", password);
    getchar();//这个就把“\n”读取,下面的就能正常执行。
    printf("请确认(Y/N):>");
    ret = getchar();//getchar作用是在缓冲区读取一个字符。这里读取的就是“\n”,“\n”=10.
    if (ret == 'Y')
    {
        printf("确认成功\n");
    }
    else
    {
        printf("确认失败\n");
    }
    return 0;
}

上面这个代码只能解决一部分,如果完全解决就得让getchar读取到“\n”。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    char password[20] = { 0 };
    int ch = 0;
    int ret = 0;
    printf("请输入密码:>");//输入密码,并存放在password数组中。
    //比如输入123456,你会有一个“\n”,下面的getchar会读取到“\n”。“\n”的ASCII码是10.
    scanf("%s", password);
    while ((ch = getchar()) != '\n')//如果读取不到'\n',可以一直循环。
    {
        ;
    }
    printf("请确认(Y/N):>");
    ret = getchar();//getchar作用是在缓冲区读取一个字符。这里读取的就是“\n”,“\n”=10.
    if (ret == 'Y')
    {
        printf("确认成功\n");
    }
    else
    {
        printf("确认失败\n");
    }
    return 0;
}

for循环

for(表达式1;表达式2;表达式3)

循环语句;

表达式1

表达式1为初始化部分,用于初始化循环变量的。

表达式2

表达式2为条件判断部分,用于判断循环时候终止。

表达式3

表达式3为调整部分,用于循环条件的调整。

for循环打印1-10

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int i = 0;
    for (i = 1; i <= 10; i++)//这个地方不需要加;
    {
        printf("%d\n", i);
    }
    return 0;
}

for循环里面的表达式可以省略,如果判断省略,则恒为真。

打印100个呵呵

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int j = 0;
    int i = 0;
    for (i = 1; i <= 10; i++)
    {
        for (j = 1; j <= 10; j++)
        printf("hehe\n");
    }
    return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int k = 0;
    int i = 0;
    for (i = 0, k = 0; k = 0; i++, k++)
        k++;
    return 0;
}

啥也不执行,因为k=0是假,不进入循环。

do.....while()循环

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

计算n的阶乘

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

计算1-n的阶乘之和。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int i = 1;
    int ret = 1;
    int sum = 0;
    int n = 0;
    scanf("%d", &n);
    for (n = 1; n <= 3; n++)
    {
        ret = 1;
        for (i = 1; i <= n; i++)
        {
            ret = ret * i;
        }
        sum = sum + ret;
    }
    printf("%d\n", sum);
    return 0;
}

上面代码的优化

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int ret = 1;
    int sum = 0;
    int n = 0;
    scanf("%d", &n);
    for (n = 1; n <= 3; n++)
    {
            ret = ret * n;
        sum = sum + ret;
    }
    printf("%d\n", sum);
    return 0;
}

在有序数组中找到7

第一种方法:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int k = 10;
    int i = 0;
    int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
    int b = sizeof(arr) / sizeof(arr[0]);//计算数组的元素个数
    for (i = 0; i <= b; i++)
    {
        if (arr[i] == k)
        {
            printf("找到了,下标是:%d\n", i);
            break;
        }
        if (i == b)
        {
            printf("没找到");
        }
    }
    return 0;
}

第二种方法:二分查找算法

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int k = 10;
    int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
    int b = sizeof(arr) / sizeof(arr[0]);//计算数组的元素个数
    int left = 0;
    int right = b - 1;
    while (left <= right)
    {
    int mid = (left + right) / 2;
    
        if ( arr[mid]>k)
        {
            right = mid - 1;
        }
        else if (arr[mid]<k)
        {
            left = mid + 1;
        }
        else
        {
            printf("找到了,下标是:%d\n", mid);
            break;
        }
    }
      if (left > right)
            {
                printf("找不到");
            }
            return 0;
        }

编写代码,演示多个字符从两边向中间移动。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
    char  arr1[] = "welcome to shandong";
    char  arr2[] = "$$$$$$$$$$$$$$$$$$$";
    //int right = sizeof(arr1) / sizeof(arr1[0]) - 2;//2是因为字符串后面有一个/0,这个也有一个下标。数组不会带\0,''会带。
    int right =strlen(arr1);
    int left = 0;
    while (left <= right)
    {
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        printf("%s\n", arr2);
        left++;
        right--;
    }
    return 0;
}

延时1s

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows.h>
int main()
{
    char  arr1[] = "welcome to shandong";
    char  arr2[] = "$$$$$$$$$$$$$$$$$$$";
    //int right = sizeof(arr1) / sizeof(arr1[0]) - 2;//2是因为字符串后面有一个/0,这个也有一个下标。数组不会带\0,''会带。
    int right =strlen(arr1);
    int left = 0;
    while (left <= right)
    {
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        printf("%s\n", arr2);
        Sleep(1000);//休息1s
        left++;
        right--;
    }
    return 0;
}

清空屏幕显示

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
    char  arr1[] = "welcome to shandong";
    char  arr2[] = "$$$$$$$$$$$$$$$$$$$";
    //int right = sizeof(arr1) / sizeof(arr1[0]) - 2;//2是因为字符串后面有一个/0,这个也有一个下标。数组不会带\0,''会带。
    int right =strlen(arr1);
    int left = 0;
    while (left <= right)
    {
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        printf("%s\n", arr2);
        Sleep(1000);
        system("cls");//清空屏幕-cls函数
        left++;
        right--;
    }
    return 0;
}

编写代码实现用户登录场景,只能登陆三次,如果密码正确,则进入,否则退出;

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
    int i = 0;
    char  arr1[20] = { 0 };
    for(i=0;i<3;i++)
    {
        printf("请输入密码:");
        scanf("%s", &arr1);
        //if (arr1 == "123456")//判断条件不对
        if(strcmp(arr1,"123456")==0)//strcmp用来判断字符串是否相等;
        {
            printf("密码正确");
               break;
        } 
    }
    if (i == 3)
    {
        printf("密码错误");
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值