【C语言】初学C语言经典题目(范围广,内容多)

✨作者:@平凡的人1

✨专栏:《C语言从0到1》

✨送给各位的一句话:既要脚踏实地 又要仰望星空

✨说明:无论做什么事情,我们既要有高远的理想,也要有脚踏实地的精神态度

【C语言】初学C语言经典题目(范围广,内容多)_第1张图片


目录

前言

scanf函数的使用

判断素数

闰年判断

九九乘法表

在一个有序数组中查找数字

N阶乘的值

计算1!+2!+......+n!

两边向中间移动

模拟登录操作

猜数字

关机程序

模拟实现strlen()函数

递归实现计算一个数的每位之和

递归和非递归实现求第n个斐波那契数

交换数字

结束语


前言

大家好啊,今天带来的是关于学习C语言前期我们比较经典的一些题目,如果对你有帮助的话,记得点赞关注加收藏哦,希望我们能够一起成长与进步


下面,让我们开始今天的主题吧!

scanf函数的使用

先别着急,一开始,我先来简单介绍一下scanf函数,我们都知道scanf函数是用来输入的,比如想输入一个字符,一个数字,一串字符,一串数字等等这些。 但是,我在这里并不是想说scanf怎么去使用,使用的话我们每一个都是会的。之所以放在这里讲的原因是因为在不同编译环境下,scanf可能会出现错误!什么错误呢?来看看简单的代码:

【C语言】初学C语言经典题目(范围广,内容多)_第2张图片

这段代码很简单把,但是在VS2019的编译环境下,我们按CTRL+F5运行一下,看看结果是什么?

【C语言】初学C语言经典题目(范围广,内容多)_第3张图片

直接报错了,错误的原因是什么?

这里说scanf是不安全的,建议考虑使用scanf_s替代。所以这是第一种解决方法。不过不太推荐使用这种方法scanf_s函数是vs编译器自己提供的函数,非标准C提供的函数,也就是说只有Vs编译器认识

第二种解决方法:在源文件第一行添加:#define _CRT_SECURE_NO_WARNINGS

要想每次都不用手动在第一行添加的话,我们可以在VS安装路径下找到newc++file.cpp文件,忘记路径也没关系,直接搜素胡newc++file.cpp文件。

【C语言】初学C语言经典题目(范围广,内容多)_第4张图片

把上面的那句代码写在里面并保存即可,这样子就不用我们每次都手动自己去添加了!

好了,关于scanf函数的一些问题就在这里说清楚了!正式开始我们的主题把!


判断素数

这是最开始就很容易频繁接触到的问题,这道题的核心在于素数是怎么判断的(只能被常数1或自己整除,不能被其他整数整除的正整数),以及一些相关的优化,提高效率。整体而言,这道题并不算难一起来看看我们的代码吧

【C语言】初学C语言经典题目(范围广,内容多)_第5张图片

这里把判断过程封装成一个函数,便于调用,以100-200之间的数字为例子。来看看我们的运行结果吧

好啦,看看我们的下一个题目吧✈️


闰年判断

什么是闰年,根据闰年的定义,我们有两种判断方法:

①非世纪年能被4整除,且不能被100整除的是闰年。(如2004年是闰年,1901年不是闰年)

②世纪年能被400整除的是闰年。(如2000年少闰年,1900年不是闰年)

【C语言】初学C语言经典题目(范围广,内容多)_第6张图片

【C语言】初学C语言经典题目(范围广,内容多)_第7张图片

 这里运行只是简单测试一下,不要太过于较真哦


九九乘法表

是谁的DNA动了,哈哈。99乘法表这大小从小学就开始接触到了,现在让我们来用代码实现一下吧

【C语言】初学C语言经典题目(范围广,内容多)_第8张图片


在一个有序数组中查找数字

给定一个有序数组,让我们在数组中找到某个数字,并且返回下标。对于这这种题,我们可以用二分查找。本题比较基础,是基于有序的数组之上的,我们可以很好利用这一点。当然,遇到不是有序的数组,我们也有对应的方法去解决的,比如先排序,qsort快排,这里并不展开讨论。下面直接敲打代码⏯

【C语言】初学C语言经典题目(范围广,内容多)_第9张图片

【C语言】初学C语言经典题目(范围广,内容多)_第10张图片

上面有一个小细节,不知道大家注意到了没有,那就int mid = left +(right-left)/2.按理来说,我们可以直接让int mid = (left + right)/2的,但是为什么不这样写呢?想过没有,当left和right都很大的时候,两个很大的数相加起来可能就超出了int类型的范围,所以第一种的方法比较好,能够方法数字超出范围。


N阶乘的值

解法一:非递归解法

直接for循环走起来,不过要注意到一点的就是,int ret不能初始化为0,那样都不用算了,0乘以任何数都是0.

【C语言】初学C语言经典题目(范围广,内容多)_第11张图片

解法二:递归解法

【C语言】初学C语言经典题目(范围广,内容多)_第12张图片

递归解法分为两种情况,一种是当n=1时,不用去算,1的阶乘就是1。当n大于1的时候,我们直接采用递归来解决。


计算1!+2!+......+n!

【C语言】初学C语言经典题目(范围广,内容多)_第13张图片

另一种做法,比如问我们1!+2!+3++......+10!,直接让我们算到10的阶乘。

【C语言】初学C语言经典题目(范围广,内容多)_第14张图片

当然这是在不考虑时间复杂度的情况之下的,对于刚开始来讲,先不要考虑太多,如果对时间复杂度感兴趣的,也可以看看我之前写过的博客。


两边向中间移动

开始之前,先来认识一下Sleep()函数,就是让程序睡眠,比如Sleep(1000)就是睡眠10000毫秒,既1秒

以及//清空屏幕 system("cls");

【C语言】初学C语言经典题目(范围广,内容多)_第15张图片

感兴趣的可以了解了解,当然,你也可以去找.exe文件玩一玩。


模拟登录操作

实际上的登录操作是比较复杂的,这里只是觉得的模拟一下而已,放在这里,是为了告诉大家字符串的比较不能用,而是用strcmp。同时,注意到文件的引用。直接来看看我们的代码及其运行结果

【C语言】初学C语言经典题目(范围广,内容多)_第16张图片


猜数字

猜数字,自然要涉及到了随机数的生成,这样用srand()函数及rand()函数配合使用,同时,怎么随机去生成一个数,同时每分每秒都在改变呢?自然是时间,这里引入了时间戳的概念:

打开网站搜索时间戳:

【C语言】初学C语言经典题目(范围广,内容多)_第17张图片

我们还要注意到随机数的范围,可以用%来限制数的大小范围

下面,我们来实现猜数字的代码:

【C语言】初学C语言经典题目(范围广,内容多)_第18张图片

【C语言】初学C语言经典题目(范围广,内容多)_第19张图片


关机程序

关机程序在说分支循环中goto就已经说过了,这里再来看一遍我们的代码:

【C语言】初学C语言经典题目(范围广,内容多)_第20张图片

其实要点就在于关机命令shutdouw -s -t以及取消关机命令shutdouw -a


模拟实现strlen()函数

这里只说两种方法,其他方法就不展开说明了

解法一:递归实现

【C语言】初学C语言经典题目(范围广,内容多)_第21张图片

解法二:非递归实现

【C语言】初学C语言经典题目(范围广,内容多)_第22张图片


递归实现计算一个数的每位之和

如果是1位数的话,直接返回就OK了,两位以上,先去/10然后递归下去解决便可。

【C语言】初学C语言经典题目(范围广,内容多)_第23张图片

说到递归。这自然离不开典型的递归题目:斐波那契数列,所以,下面将要说的就是我们的斐波那契数列数列。⏬


递归和非递归实现求第n个斐波那契数

先来看看斐波那契数列是什么

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

好啦。接下去就是代码实现,直接进入我们的代码,考虑到实际情况,采用非递归有时候可能时间效率太低,根本就算不出答案,所以这里会给出两种做法,分布是递归和非递归做法

解法一:非递归

【C语言】初学C语言经典题目(范围广,内容多)_第24张图片

解法二:递归

【C语言】初学C语言经典题目(范围广,内容多)_第25张图片

交换数字

交换数字并不难,创建一个临时变量嘛,让两个数字交换就行了,这里提出来,是给大家指出一个容易出错的地方,话不多说,我们先来看一个例子。

【C语言】初学C语言经典题目(范围广,内容多)_第26张图片

 这段代码的逻辑很清晰,就是想让a、b、c从大到小输出嘛,交换封装成一个函数去调用就行了,来,我们看看运行结果是什么:

 结果并没有达到我们预期的效果,这是为什么呢?

  1. 当实参传递给形参的时候,形参是实参的一份临时拷贝
  2. 对形参的修改不会影响实参

 这就是为什么没有交换的原因,我们怎么去改呢?用指针来解决即可

【C语言】初学C语言经典题目(范围广,内容多)_第27张图片

 

 好啦,问题解决

结束语

时间过得真快,又到了该说再见的时候了,到这里,这篇博客也到达了尾声,如果对你有帮助的话,那就支持一下吧​​ ​​ ​

【C语言】初学C语言经典题目(范围广,内容多)_第28张图片

 

你可能感兴趣的:(C语言从0到1,c语言,学习)