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

简介: 分支语句和循环语句(习题集)
🌹作者:云小逸
📝个人主页: 云小扬的主页
📝码云: 云小扬 (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、==不必卑微==,不必事事在意他人的目光。

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

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

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

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

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

目录
相关文章
|
5月前
|
Go C语言
分支语句与循环语句,详细讲解
分支语句与循环语句,详细讲解
|
6月前
|
算法 Unix 数据安全/隐私保护
分支和循环语句2
分支和循环语句2
56 0
|
6月前
|
缓存 编译器 Go
分支语句和循环语句
分支语句和循环语句
67 0
|
12月前
|
编译器 C语言 C++
分支语句和循环语句上
分支语句和循环语句
56 0
分支语句和循环语句上
|
11月前
|
数据安全/隐私保护 C语言
分支语句与循环语句(2)
分支语句与循环语句(2)
57 0
|
11月前
|
C语言
分支语句和循环语句(1)
分支语句和循环语句(1)
48 0
|
12月前
|
编译器
分支语句与循环语句题
分支语句与循环语句题
68 0
|
12月前
|
缓存 Go 数据安全/隐私保护
分支语句和循环语句下
分支语句和循环语句
74 0
|
12月前
|
算法 数据安全/隐私保护
分支语句与循环语句——练习
分支语句与循环语句——练习
48 0
|
数据安全/隐私保护
【分支语句与循环语句】
【分支语句与循环语句】
50 0