🌹作者:云小逸
📝个人主页: 云小扬的主页
📝码云: 云小扬 (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、==不必卑微==,不必事事在意他人的目光。
三观不合的人,你做再多他也不会认同你。
大大方方去图书馆学习,大大方方地做自己想做的事,再多的冷嘲热讽都会在你成功的那一刻沦为他们自己的笑柄。
==做好自己,不卑不亢,就够了==。
最后如果觉得我写的还不错,请不要忘记==点赞==✌,==收藏==✌,加==关注==✌哦(。・ω・。)
愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚==菜鸟==逐渐成为==大佬==。加油,为自己点赞!