《使用循环做一些练习》---C语言
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
❤博主CSDN:啊苏要学习
▶专栏分类C语言◀
C语言的学习是为我们今后学习其它语言打好基础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变成2j的循环此时求的是2的阶乘累加到sum上就这样循环下去总共有n-1次循环也就是从1到n-1的阶乘都累加到sum上去啦。
注意在每次i符合条件进去后要把ret重新赋值成1因为如果不重新赋值为0ret表示的是上一个数的阶乘不重新改成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!✔
读者对本文不理解的地方或是发现文章在内容上有误等请在下方评论区留言告诉博主哟~也可以对博主提出一些文章改进的建议感激不尽最后的最后
❤求点赞求关注你的点赞是我更新的动力一起努力进步吧。