《使用循环做一些练习》---C语言

简介: 《使用循环做一些练习》---C语言

前言:


 学完知识后,需要我们动手敲上一敲代码,才能确保我们真正掌握了,而不是脑子会了,手还停留在原地不动。


1.练习专题


1.1打印1-100之间的奇数

第一种方法:

#include <stdio.h>
int main()
{
    int i = 0;
    for(i = 1; i <= 100; i+=2)
    {
        printf("%d ", i);
    }
    return 0;
}

 在打印的时候主动避开偶数,打印的都是奇数了。


第二种方法:

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

 通过判断能否被2整除,不能被2整除就是奇数,进入if语句并打印出来。


1.2计算n的阶乘

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

 使用n来表示我们要计算的阶乘,i是一个从数字1增长到数字n的循环变量。将所有的i全部乘给ret变量,*=有一个累积的效果,ret初始化是1,不影响累乘的过程。


1.3计算到达n阶乘的前m个阶乘相加

 什么意思呢?比如:到达5!的前4个阶乘相加,也就是求1!+2!+3!+4!的和。


第一种:

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


 用n来确定是到达的阶乘,i < n的意思是,在到达n之前有多少个数。i循环内部的j循环是根据i的值来求阶乘的。比如:i等于1的时候,j这个循环求的是1的阶乘,然后累加到sum上;然后i变成2,j的循环此时求的是2的阶乘,累加到sum上;就这样循环下去,总共有n-1次循环,也就是从1到n-1的阶乘都累加到sum上去啦。


 注意:在每次i符合条件进去后,要把ret重新赋值成1,因为如果不重新赋值为0,ret表示的是上一个数的阶乘,不重新改成1会对累乘造成影响。


 比如有次i是以3进入循环里面的,那么上一次就是在执行求2的阶乘加到sum里面去,ret *= j;随着j从1、然后2,累乘到ret上,ret最后变成了2,是2的阶乘。如果下次求的是3的阶乘,ret里的2会影响的。就是这样子:  2 * 1 * 2 * 3 。所以要赋值成1,变成 1 * 1 * 2 * 3才对。


第二种:

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


 我们可以很明显的感受到,上一种方法在求阶乘的时候有重复的部分。比如求2的阶乘,ret是这样求的 1 * 1 * 2;求3的阶乘 ret是这样求的的 1 * 1 * 2 * 3;我们动动机智的头脑,叮~


 我们还可以这样来求3的阶乘,那就是用前一个数的阶乘 乘上 这个要求阶乘的数; 就是3!= 2!* 3; 是不是茅舍顿开了。


 当然最后还要提醒一点的是,求的阶乘不能太大,因为当超出整型的存储范围后,会发生截断,求出来的值就不对了。


1.4演示字符串动态变化的效果

#include <stdio.h>
#include <string.h>
#include <Windons.h>
int main()
{
    char arr1[] = "hello, welcom to C"
    char arr2[] = "******************"
    int left = 0;
    int right = strlen(arr1) - 1;
    while(left <= right)
    {
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        printf("%s", arr2);
        Sleep(1000);
        system("cls");
        left++;
        right--;
    }
    printf("%s\n", arr2);
    return 0;
}


 我们慢慢解析这道题,首先是创建两个长度一样数组,left是数字左下标的意思,right是右下标的意思。strlen求的是字符串长度,右下标是字符串长度减一,因为数组是从0下标开始的。然后循环,将arr2左边的字符赋值成arr1左边字符,将arr2右边的字符赋值成arr1右边的字符,left++,让下标往右走,来到了字符e的位置,最开始是h。right减减同理滴,博主不赘述了~


 这里出现了Sleep函数,和system函数,它们的头文件都是<Windons.h>。Sleep是让程序停下来休息的意思,后面的数字是停下来的毫秒数。system是执行系统指令的,cls是清空屏幕的指令,记得要用""双引号括起来。


2.goto语句


 哈哈,没想到吧,这里来插个小知识点,goto语句的使用。C语言提供了一种可以随意滥用的语句,这是因为使用goto语句是没有限制的,它可以让程序的执行流程在同一个函数内随意跳。当然我们只期望在需要使用的时候才使用,随意用的话逻辑会乱套的。



 goto 标签;


 标签:    


 就是goto语句的使用方法。我们可以看到它可以改变程序的执行流程。goto语句一般情况下都是可以用循环替代的。就比如说这个吧,我们完全可以用while(1)来替代goto实现死循环(doge)。 当然不是要让读者去写死循环bug哈~


 那么我们来讲讲goto真正的应用场景吧,看下面代码:



 在深层循环嵌套里面,想跳出多层循环,需要使用多次break,不仅容易出错,还看的眼花缭乱。这时使用goto语句就很好的避免了这种情况,这是goto的优点所在。


 好啦,这篇文章就讲完啦。主要讲了几个练习,补充了一下goto语句的知识。下篇我们就使用所学的知识,完成一个猜数字游戏的小代码吧。


结语:希望读者读完有所收获!在学C的路上,祝福我们能越来越C!✔


 读者对本文不理解的地方,或是发现文章在内容上有误等,请在下方评论区留言告诉博主哟~,也可以对博主提出一些文章改进的建议,感激不尽!最后的最后!


 ❤求点赞,求关注,你的点赞是我更新的动力,一起努力进步吧。

相关文章
|
2月前
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
78 5
|
3月前
|
安全 C语言
C语言循环的使用注意点
在C语言中,合理使用循环对于编写高效、安全的代码至关重要。以下是几点建议:确保循环条件正确以避免无限循环;每次迭代时正确更新循环变量;恰当使用`break`和`continue`控制执行流程;注意嵌套循环中的变量作用域;简化循环体内逻辑;根据需求选择合适的循环类型;注意数据类型以避免溢出;保持良好的缩进和注释习惯;减少重复计算以提升性能;确保循环终止条件明确。遵循这些建议,可以提高代码质量和可维护性。
240 88
|
2月前
|
C语言
【c语言】循环语句
循环结构是C语言中用于简化重复操作的重要工具,主要包括while循环、do-while循环和for循环。while循环是最基本的形式,通过不断检查条件来决定是否继续执行循环体。do-while循环则先执行循环体,再检查条件,至少执行一次。for循环逻辑更复杂,但使用频率最高,适合初始化、条件判断和更新变量的集中管理。此外,循环中还可以使用break和continue语句来控制循环的提前终止或跳过当前迭代。最后,循环可以嵌套使用,解决更复杂的问题,如查找特定范围内的素数。
53 6
|
2月前
|
Serverless C语言
C语言控制语句:分支、循环和转向
C语言控制语句:分支、循环和转向
|
2月前
|
算法 编译器 C语言
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
|
2月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
20 0
|
2月前
|
小程序 C语言
初识C语言:走近循环
初识C语言:走近循环
|
3月前
|
C语言
【C语言基础考研向】08判断语句与循环语句
本文介绍了C语言中的关键编程概念:首先解析了关系表达式与逻辑表达式的优先级及计算过程;接着详细说明了`if-else`语句的使用方法及其多分支和嵌套应用;然后讲解了`while`循环与`for`循环的语法和注意事项;最后介绍了`continue`和`break`语句在控制循环中的作用和示例代码。
|
2月前
|
编译器 C语言 C++
【C语言】循环语句(语句使用建议)
【C语言】循环语句(语句使用建议)
|
3月前
|
存储 算法 C语言
C语言手撕实战代码_循环单链表和循环双链表
本文档详细介绍了用C语言实现循环单链表和循环双链表的相关算法。包括循环单链表的建立、逆转、左移、拆分及合并等操作;以及双链表的建立、遍历、排序和循环双链表的重组。通过具体示例和代码片段,展示了每种算法的实现思路与步骤,帮助读者深入理解并掌握这些数据结构的基本操作方法。