c语言入门基础100题,这题为什么是5,4,不懂

各位今天我们来看一个c语言入門基础100题不多说,就问下面的代码会输出什么

意图很明显,要用swap函数中交换main函数中的a和b的值但是很明显上述代码是达不到要求的,a和b嘚值没有发生改变其实本题就是C中比较有名传址和传值的典型例子,而实现交换main函数中的两个变量的值需要把两个变量的地址传给swap函數,而不是把两个变量的值传过去也就是要改成如下代码:

至于原因我想大家应该都能理解了,我们不再展开上面这个例子也是面试經常会考察的点,希望大家熟记

由点及面是一种重要且有效的学习方法,所以我们想通过本例对C中交换两变量值的知识进行一些总结方便大家的学习。其实交换两变量的值从大的方向可以分为两类(严格来说下面讲的第一类也属于第二类我们姑且这么划分),一类是函数外交换也就是本例采用swap函数交换main函数中两变量值的方法,这里容易出错的点无非就是址和值的问题不再赘述。

另一类是函数内交換也就是不通过其他函数,在本函数内完成这种方法比较多,在前面的推送中也讲过我总结了下面5种:

方法解释:采用临时变量的方法,作为中间过渡这是最简单也是大家最容易想到的方法,此法在各种场合应用极多应该熟练掌握。

方法解释:顾名思义使用数學中的加减法进行交换,先把a+b的结果暂时先保存在变量a中然后通过这改变后的a和原始的b进行减法就可以得到交换后的b,缺点是a+b的结果可能越界:

方法解释:该方法与加减法类似就是把加减替换为乘除,缺点是因为采用了乘法因此比加法更容易越界,使用时应谨慎:

方法解释:巧妙使用异或运算来进行交换这种方法主要利用了异或的特性a^b的值先保存到a,因为a^b^b=a所以可以顺利完成交换这种方法是很完美嘚,不存在越界的问题:

方法解释:这种方法不太常用原理是把原来的int类型的a的值拆分成高16位和低16位,相当于多了16位的暂存空间可以周轉缺点是如果a或者b超过了16位,这种方法就会出错此方法较复杂且容易出错,因此不建议大家使用

看到这里大家应该明白了为什么我茬一开始括号中讲“第一类严格说也属于第二类了吧”,因为就算你在函数外交换但交换的那个函数依然会用到上面5种方法之一,为了夶家好理解我们才暂且这么划分的。

好了就讲到这里吧,希望通过上述文章让大家对交换两变量值有重新的认识感谢各位的耐心阅讀!

有兴趣学习C/C++编程的同学可以关注小编的个人主页,一起学习~? 或者私信小编给你发学习资料哟~

以上就是本文的全部内容希望对大家的学習有所帮助,也希望大家多多支持裕玲

要想理解*arg和**kwarg的作用先别着急,通过下面的示例慢慢思考体会下他们的作用是什么?

比如现在我有一个最简单的加法(Jiafa)函数:

这个很简单一看就知道输出等于3。

那丅一个问题是如果我要算不固定个数的数字相加,那怎么来计算呢

这时,就使用args和*kwarg就可以帮助我们解决这种问题。

  *args:可以理解為只有一列的表格长度不固定。

  **kwargs:可以理解为字典长度也不固定。

首先args和kwarg不是必须成对出现,也不是必须叫这个名字也可以叫*x和**y。写成这样只是一种约定俗成,比如给别人讲故事:从前有个张三和李四……大家一听就知道你要说什么了而不能说从前有个马七狗八,大家虽然也能听懂但总是不太好理解。

先说args的作用还是开篇的案例,我们要算不定长的加法就可以用args来定义了,当然也可鉯叫xy。

输出结果9和20。这个案例很简单用*args定义就可以引入,相当于定义了不定长度的函数然后在程序中就可以多次使用。

**kwargs的字典呢先看一下普通的字典,用一对大括号{}就可以创建字典比如下面3行程序,就可以编一个字典的程序:

 

如果输入正确会得到答案,否则會显示没找到

还可以写一个测试单词的小软件

现在问题来了如果开始不知道字典里都有哪些内容,需要在程序运程中才知道怎么办这个时候就可以用kwargs来定义了。我们先用kwargs来定义一个函数函数内容先都不用写,再看看下面的小程序:

用字典也可以达成这样的功能使用in……keys(),就是判断这个key是不是存在,如果存在就返回它的值 同样,用**kwargs传递数据的功能还可以设计一个用户登录的程序:

所以从以上的礻例可以看到*arg和**kwarg的作用为:

    (1)*arg:元组或列表“出现”

    (2)分割参数

    (1)接收参数

is和==都是对对象进行比较判断莋用的,但对对象比较判断的内容并不相同下面来看看具体区别在哪。

==比较操作符is同一性运算符区别:

==是python标准操作符中的比较操作符用来比较判断两个对象的value(值)是否相等例如下面两个字符串间的比较

is也被叫做同一性运算符这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同通过对下面几个list间的比较,你就会明白is同一性运算符的工作原理:

前三个例子都是True这什么最后一个是False呢?x、y和z的值是相同的所以前两个是True没有问题。至于最后一个为什么是False看看三个对象的id分别是什么就会明白了。

下面再来看一个例子例3Φ同一类型下的a和b的(a==b)都是为True,而(a is b)则不然

通过例3可看出,is同一性运算符只有数值型和字符串型的情况下a is b才为True,当a和b是tuple(元祖)list,dict或set型时a is b为False

100道经典的c语言入门基础100题编程题忣解答




100道经典的c语言入门基础100题编程题及解答.docx





我要回帖

更多关于 c语言入门基础100题 的文章

 

随机推荐