分支语句和循环语句(习题集)

简介: 分支语句和循环语句(习题集)
🌹作者:云小逸
📝个人主页: 云小扬的主页
📝码云: 云小扬 (YunXiaoYang003) - Gitee.com
🤟motto:要敢于一个人默默的面对自己, ==强大自己才是核心==。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前,其次就是现在!学会自己和解,与过去和解,努力爱自己。==希望春天来之前,我们一起面朝大海,春暖花开==!🤟
👏专栏:C语言初阶👏专栏:C语言进阶👏专栏:数据结构和算法👏
👏专栏:C++初阶---👏专栏:C++进阶--👏专栏:Linux学习👏
@ TOC

前言

前面我们已经讲了分支语句和循环语句,今天小逸来说一说一些经典例题帮助你巩固所学知识。
——————————————————————————————
首先先写上几句话:献给坚持创作的我和点开这篇文章希望进步的你

大学生最好的状态是什么?
对没有朋友这个现实我们要==坦然接受==。正如一句话:成功的人,总是被孤独包围的。很多朋友可能会认为在大学没有三五朋友很丢人,其实不然,真正踏入大学校园内你就会发现一个人上课,一个人吃饭,一个人泡在图书馆的学生比比皆是。而我想说的是在大学就要开始享受这种生活,融不进的圈子不要硬融,==做好自己的规划,走好自己的路,总会遇见与你志同道合的人==。另外,==不要强逼着自己进入某个圈子==,不仅自己心很累,而且还有可能会打乱自己的节奏。

1.计算n的阶乘

运行代码:

注意:i要从1开始,ret初始化为1,且循环条件为i<=n!!!

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

运行结果截图:

在这里插入图片描述

2.计算1!+2!+……n!n个阶乘之和

方法一:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(vodi)
{
    //2.计算1!+2!+……n!n个阶乘之和
    int i = 0, j=0,n = 0;
    int ret = 1,sum=0;
    scanf("%d", &n);
    for (i = 1; i <=n; i++)
    {
        ret = 1;//语句A
        for (j = 1; j <= i;j++)
        ret = j * ret;
        sum += ret;
    }
    printf("%d", sum);
    return 0;
}

经典错误:语句A忘记写上,导致ret仍保留上一次运算的结果,产生累加效果!!!

错误情况截图:

在这里插入图片描述

正确情况截图:

在这里插入图片描述

方法二:

方法一时间复杂度较高为O(N^2),故改进:

运行代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(vodi)
{
    //2.计算1!+2!+……n!n个阶乘之和 方法二:
    int i = 0, n = 0;
    int ret = 1, sum = 0;
    scanf("%d", &n);
    for (i = 1; i <=n; i++)
    {
        ret = ret * i;
        sum += ret;
    }
    printf("%d", sum);
    return 0;
}

运行结果截图:

在这里插入图片描述

3.二分查找(折半查找)

运行代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(vodi)
{
    //二分查找:
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    int left = 0;
    int right = sizeof(arr) / sizeof(arr[0]);
    int x = 0;
    scanf("%d", &x);
    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (arr[mid] > x)
            right = mid - 1;
        else if (arr[mid] < x)
            left = mid + 1;
        else
        {
            printf("Find!,the subscript is %d", mid);
            break;
        }
    }
    if (left > right)
        printf("NO Find!\n");
    return 0;
}

运行结果截图

在这里插入图片描述

注意:

**当(left+right)/2大于Int的取值范围时,则会导致数据溢出,故这种写法并不是完美的,
可以将int mid = (left + right) / 2;改为:int mid=left+(right-left)/2;这样就可以完美的解决bug了!!!**
在这里插入图片描述
画一个这个图,希望帮助大家理解!

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

运行代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
int main(void)
{
    //4.编写代码,演示多个字符从两端移动,向中间汇聚
    char arr1[] = "welcome to bit";
    char arr2[] = "##############";
    int left = 0;
    int right = sizeof(arr1)/sizeof(arr1[0]) - 2;
    while (left <= right)
    {
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        printf("%s\n", arr2);
        Sleep(100);//S要大写
        left++;
        right--;
    }
    return 0;
}

解释:sizeof(arr1)/sizeof(arr1[0]) 是表示数组含元素的个数!

运行结果截图:

在这里插入图片描述

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

运行代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(vodi)
{
    //5.模拟用户登录情况,并且只能登录三次
    //(只允许输入三次密码,如果密码正确,则提示登录成功,若三次均输入错误,则退出程序)
    int i = 0;
    char passward[20] = { 0 };
    while (i < 3)
    {
        scanf("%s", passward);
        if (strcmp(passward, "abcdef") == 0)
        {
            printf("Right!\n");
            break;
        }
        else
            printf("ERROR!Enter again!\n");
        i++;
    }
    if(3==i)
    printf("The input is incorrect for three times!\n");
    return 0;
}

PS:调用strcmp时记得要用#include<string.h>头文件

运行结果截图:

在这里插入图片描述

最后

十分感谢你可以耐着性子把它读完和我可以坚持写到这里,送几句话,对你,也对我:
**

大学生最好的状态是什么?

**

1、享受一个人的生活。

《生活大爆炸》里有这么一段话:

或许你在学校==格格不入==,或许你是学校里最矮小、最胖的,或最怪的孩子,或许你没有任何朋友…… 其实,这==根本无所谓==。
重点是,那些你独自一人度过的时间,比如:组装电脑,练习大提琴……其实你真正在做的是==让自己变有趣==。
等有天别人终于注意到你时,他们会发现一个比他们想象中更酷的人。 没有朋友没关系,一个人也没关系。

==低质量的社交==,远不如提升自己来得有用。

一个真正有趣的人,纵然孤身一人,心里也会有千军万马。

在大学,有一个自己的小爱好,不需要很厉害,感觉开心就好;有一份平常的工作,收入可能不会很多,能提升自己就好;==有自己的一个小金库==,不需要有多少钱,能偶尔给自己==买身衣服==,==吃顿火锅就好==。

结束了一天的课业,吃完晚饭,一个人去图书馆看会儿书,不用很久,能有所获就好;一个人在操场上漫步,不用很赶,听着歌慢慢走,然后回到宿舍洗个澡,换身衣服,靠在床边玩会儿手机,慢慢进入梦乡……==没有牵挂没有羁绊==,足矣……

2、再好的身体,也不如规律的生活。
==23点睡觉,6点起床==。早起的人总会感觉到生活的美好,乐观向上,自带魔力。

3、==不必卑微==,不必事事在意他人的目光。

三观不合的人,你做再多他也不会认同你。

大大方方去图书馆学习,大大方方地做自己想做的事,再多的冷嘲热讽都会在你成功的那一刻沦为他们自己的笑柄。

==做好自己,不卑不亢,就够了==。

最后如果觉得我写的还不错,请不要忘记==点赞==✌,==收藏==✌,加==关注==✌哦(。・ω・。)

愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚==菜鸟==逐渐成为==大佬==。加油,为自己点赞!

目录
相关文章
|
JavaScript 安全 前端开发
TypeScript类型声明:基础与进阶
通过本文的介绍,我们详细探讨了TypeScript的基础与进阶类型声明。从基本数据类型到复杂的泛型和高级类型,TypeScript提供了丰富的工具来确保代码的类型安全和可维护性。掌握这些类型声明能够帮助开发者编写更加健壮和高效的代码,提高开发效率和代码质量。希望本文能为您在使用TypeScript时提供实用的参考和指导。
334 2
|
存储 自然语言处理 关系型数据库
MySQL 自定义变量并声明字符编码
MySQL 自定义变量并声明字符编码
466 1
|
SQL 缓存 关系型数据库
美团面试:Mysql 有几级缓存? 每一级缓存,具体是什么?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴因未能系统梳理MySQL缓存机制而在美团面试中失利。为此,尼恩对MySQL的缓存机制进行了系统化梳理,包括一级缓存(InnoDB缓存)和二级缓存(查询缓存)。同时,他还将这些知识点整理进《尼恩Java面试宝典PDF》V175版本,帮助大家提升技术水平,顺利通过面试。更多技术资料请关注公号【技术自由圈】。
美团面试:Mysql 有几级缓存? 每一级缓存,具体是什么?
|
算法 编译器 C语言
STL基础介绍
STL基础介绍
645 0
|
存储 人工智能 自然语言处理
你折腾一天都装不上的插件,函数计算部署 Stable Diffusion 都内置了
函数计算部署 Stable Diffusion 内置插件,教学如何使用。
|
SQL 数据采集 数据挖掘
深入理解SQL中的DISTINCT语句及其应用
【8月更文挑战第31天】
1156 0
|
存储 Linux 数据安全/隐私保护
python的压缩模块zipfile详解
python的压缩模块zipfile详解
245 3
|
C语言
C语言中求x的n次方:从入门到实践(保姆式教学)
C语言中求x的n次方:从入门到实践(保姆式教学)
1415 0
|
存储 架构师 算法
架构设计的本质:系统与子系统、模块与组件、框架与架构
在软件研发这个领域,程序员的终极目标都是想成为一名合格的架构师。然而梦想很美好,但现实却很曲折。
架构设计的本质:系统与子系统、模块与组件、框架与架构
|
存储 缓存 Java
ElasticSearch优化指南
ElasticSearch优化指南
561 1