C语言学习第五课记录(分支和循环(2))

1.getchar的使用

(1)

#include<stdio.h>
int main()
{
    int ret = 0;
    int ch = 0;
    char password[20] = {0};
    printf("请输入密码:>");
    scanf("%s",password);
    while((ch=getchar()) != '\n')//将缓冲区内容全部读取
    {
        ;
    }
    printf("请确认(Y/N):>");
    ret = getchar();
    if(ret == 'Y')
    {
        printf("确认成功\n");
    }
    else
    {
        printf("放弃确认\n");
    }
    return 0;
}

(2)

#include<stdio.h>
int main()
{
    while((ch = getchar()) != EOF)
    {
        if(ch < '0' || ch > '9')
            continue;
        putchar(ch);//只打印'0'~'9'的字符
    }
    return 0;
}

2.循环结构

(1)while循环

#include<stdio.h>
int main()
{
    int i = 0;//初始化





    
    while(i<10)//判断
    {
       




    i++;//调整
    }
    return 0;
}

(2)for循环

//for(表达式1;表达式2;表达式3)
//    循环语句
//表达式1为初始量//表达式2为判断//表达式3为调整
#include<stdio.h>
int main()
{
    int i = 0;
    for(i = 1; i<=10; i++)
    {
//break和continue依然可以用,但continue只会跳过后面的代码,i++依然执行
        printf("%d",i);
    }
    return 0;
}

//不可在for循环体内修改循环变量,防止for循环失去控制
//建议for语句的循环控制变量的取值采用“前闭后开区间”写法
#include<stdio.h>
int main()
{
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    int i = 0;
    //10次循环
    //10个元素
    //10次打印
    for(i=0; i<10;i++)
    {
        printf("%d",arr[i]};
    }
    return 0;
}

(3)for循环的变种

//1.
//#include<stdio.h>
//int main()
//{
//    for(;;)
//    {
//        printf("hehe\n");
//    }
//    return 0;
//}
for循环的初始化,调整,判断都可以省略
但for循环的判断如果被省略,判断条件恒为真
如果不是非常熟练,建议不要随意省略
//2.
//#include<stdio.h>
//int main()
//{
//    int x,y;
//    for(x = 0,y = 0; x<2 && y<5; ++x,y++)
//    {
//        printf("hehe\n");
//    }
//    return 0;
//}
//

4.do while语句

//do
//    循环语句;
//while(表达式);
#include<stdio.h>
int main()
{
    int i = 1;
    do
    {
        printf("%d ",i);
        i++;
    }
    while(i<=10);
    return 0;
}
//循环至少执行一次

5.计算n的阶乘

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

6.计算1!+2!+3!+4!+5!+6!+7!+8!+9!+10!

#include<stdio.h>
int main()
{
    int i = 0;
    int n = 0;
    int ret = 1;
    for(n=1;n<=10;n++)
    {
        ret = 1;//让ret初始值为1
        for(i=1;i<=n;i++)
        {
            ret = ret * i;
        }
        sum = sum + ret;
    }
    printf("sum = %d\n",sum);
    return 0;
}

优化:

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

6.折半法查找算法

#include<stdio.h>
int main()
{
    int arr[] = {1,2,3,4,5,6,7,8,9,10}
    int sz = sizeof(arr)/sizeof(arr[0]);//计算元素个数
    int left = 0;//左下标
    int right = sz-1;//右下标
    int mid = (left+right)/2;
    int k = 7;
    while(left <=right)
    {
        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;
}

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

#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
int main()
{
    char arr1[] = "welcome to bit!!!!!!";
    char arr2[] = "####################";
    int left = 0;
    int right = strlen(arr1)-1;//需要引头文件string.h
    while(left<=right)
    {
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        printf("%s\n",arr2);
        Sleep(1000);//需要引头文件windows.h
        system("cls");
        //system执行系统命令的一个函数,需要引头文件stdlib.h
        //cls清空屏幕
        left++;
        right--;
    }
    printf("welcome to bit!!!!!!");
    return 0;
}

8.模拟用户登录,只能登陆三次,密码正确,提示登录成功,三次均错误,退出程序

#include<stdio.h>
#include<string.h>
int main()
{
    int i = 0;
    char password[20] = {0};
    for(i=0; i<3; i++)
    {
        printf("请输入密码:>");
        scanf("%s",password);
        if(strcmp(password,"123456") == 0)
// == 不能用来比较两个字符串是否相等,应该使用一个库函数-strcmp
        {
            printf("登录成功\n");
            break;
        }
    }
    if(i == 3)
        printf("三次密码均错误,退出程序\n");
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值