循环的练习

80ecf9ac4d374295a491f706c855df31.jpg

1.计算n的阶乘(1*2*3...*n)

56aaab0e6f4c479a819b282fe30c4d54.png

 //n的阶乘
#include <stdio.h>
//!n -- 1->n
int main()
{
    int a = 0;
    int b = 0;
    int c = 1;
    scanf("%d", &b);
    for (a = 1; a <= b; a++)
    {
        c *= a;
    }
    printf("%d", c);
    return 0;
}
  • c*=a是c=c*a
  • 阶乘用n!表示
  • int c由1开始

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

0ad7266210d3411981469944d5384fb2.jpg

//计算1!+2+3+....+10!
#include <stdio.h>
//!n -- 1->n
int main()
{
    int i = 0;
    int n = 0;
    int ret = 1;
    int sum = 0;
    //!1+!2+!3 = 1+2+6 = 9
    for (n = 1; n <= 3; n++)
    {
        ret = 1;//计算n的乘阶之前,把ret初始为1
        for (i = 1; i <= n; i++)
        {
            ret *= i;
        }
        sum = sum + ret;
    }
    printf("%d\n", sum);
    return 0;
}

误区:如果遗漏ret = 1;

f766161d84094a67aec540b8c40a2c7a.png

还有另一种方法,更高效,只需要一种循环。

5a542d7c8baf4210883fe886efcaf71f.png

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

// 1!+2!+3!=1+2+6 =9

// 3!=3*2*1=3*2!

// 2!=2*1

3.在一个有序数组中查找具体的某个数字n。

比如我买了一双鞋,你好奇问我多少钱,我说不超过300元。你还是好奇,你想知道到底多少,我就让 你猜,你会怎么猜? 答案:你每次猜中间数。 

折半查找(二分查找)

c7903c48735648a5b5b87b342e71bc50.png

 //在一个有序的数组中查找n
#include <stdio.h>
int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    int k = 7;
    int sz = sizeof(arr) / sizeof(arr[0]);

    int left = 0;
    int right = sz - 1;
    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (arr[mid] < k)
        {
            left = mid + 1;
        }
        else if (arr[mid] > k)
        {
            right = mid - 1;
        }
        else
        {
            printf("找到了,下标为:%d\n",mid);
            break;
        }
    }
    if (left > right)
    {
        printf("找不到\n");
    }
    return 0;
}

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

参考代码:

//代码1
//编写代码,演示多个字符从两端移动,向中间汇聚
#include <stdio.h>
int main()
{
 char arr1[] = "welcome to bit...";
 char arr2[] = "#################";
 int left = 0;
 int right = strlen(arr1)-1;
 printf("%s\n", arr2);
 //while循环实现
 while(left<=right)
 {
 Sleep(1000);
 arr2[left] = arr1[left];
 arr2[right] = arr1[right];
 left++;
 right--;
 printf("%s\n", arr2);
 }
 //for循环实现
 for (left=0, right=strlen(src)-1; 
     left <= right; 
     left++, right--)
   {
    Sleep(1000);
     arr2[left] = arr1[left];
 arr2[right] = arr1[right];
        printf( "%s\n", target);
   }
 retutn 0;
}

 

8da3710a19a3459f8ba436305cab8e90.png

 增加显示时间和屏幕清空可以让程序闪烁

80c0a0f8a44d47b580b13a04b04b9b6b.png

#include <string.h>
#include <windows.h>
#include <stdio.h>
int main()
{
    char arr1[] = "zxx is sb!!!";
    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("cls");      //清空屏幕
        left++;
        right--;

    }
    printf("%s\n", arr2);

    return 0;
}
  • 需要调用windows.h和string.h函数
  • Sleep表示停留1000毫秒
  • system("cls");清空屏幕,在循环内所以重复清空
  • 从两边向中间运行

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

6f1e1fbbb74e49f2bd33c61f0d85e9fb.png

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

#include <stdio.h>
#include <string.h>
int main()
{
    int i = 0;
    //假设正确密码字符串是“123456”
    char password[20] = { 0 };
    for (i = 0; i < 3; i++)
    {
        printf("请输入密码:");
        scanf("%s", &password);
        //if (password == "123456")-err      
        //两个字符串比较,不能使用 ==  应该使用strcmp
        if (strcmp(password, "123456") == 0)
        {
            printf("登陆成功\n");
            break;
        }
        else
        {
            printf("密码错误,请重新输入。\n");
        }
    }
    if (i == 3)
    {
        printf("三次密码均错误,退出程序。\n");
    }
    return 0;
}
  • strcmp需要用#include <stdio.h>调用函数
  • strcmp比较两个字符串相等时,strcmp返回0
  • 如果返回值不为0,说明字符串不相等。
  • 比较的是对应位置字符的ASCII码值

        a:abcdef

        b:abccqqq

  • d大于c  所以a>b
  • scanf为什么不加地址呢,因为char  password是数组,数组名本来就是地址
weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值