传智播客C语言入门7_第1页
传智播客C语言入门7_第2页
传智播客C语言入门7_第3页
传智播客C语言入门7_第4页
传智播客C语言入门7_第5页
已阅读5页,还剩158页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

传智播客C语言入门教程(7),讲师:尹成QQ:77025077博客:,C语言,C+语言,传智播客,高薪就业,2.链表讲解,3.栈,队列,链表综合学习,4.C语言实战,5.C语言面试,传智播客C语言入门教程(7)大纲,1.编译及预处理,C语言课程概述,6.传智播客C/C+学院课程介绍,7.1编译与预处理,如果一个源程序由多个诸如A.c,B.h等的源文件组成,使用的编译链接器是如何根据这些文件生成可执行文件的?编译链接的机理到底是什么,这是本章要学习的内容。对C语言来说,除了掌握必要的语法机制外,学好预处理命令也是写出高质量代码的前提。,7.1.1宏定义及编译预处理定义,4,7.1.2HelloWorld案例拓展,很多示例代码,实际上,哪怕是像Hello,World这样简单的示例程序,都要经过编辑、预处理、编译、链接4个步骤,才能变成可执行程序,鼠标双击就弹出命令窗口,显示“Hello,World”。这也是一般C语言程序的编译流程,如所示。,7.1.3编辑,编辑可能就是通常所说的“写代码”,用集成开发工具也好,用记事本也好,按C语言的语法规则组织一系列的源文件,主要有两种形式,一种是.c文件,另一种是.h文件,也称头文件。,7.1.4预处理,前面接触到的“#include”和“#define”都属于编译预处理,C语言允许在程序中用预处理指令写一些命令行。预处理器在编译器之前根据指令更改程序文本。编译器看到的是预处理器修改过的代码文本,C语言的编译预处理功能主要包括宏定义、文件包含和条件编译3种。预处理器对宏进行替换,并将所包含的头文件整体插入源文件中,为后面要进行的编译做好准备。,7.1.5编译,编译器处理的对象是由单个c文件和其中递归包含的头文件组成的编译单元,一般来说,头文件是不直接参加编译的。编译器会将每个编译单元翻译成同名的二进制代码文件,在DOS和Windows环境下,二进制代码文件的后缀名为.obj,在Unix环境下,其后缀名为.o,此时,二进制代码文件是零散的,还不是可执行二进制文件。错误检查大多是在编译阶段进行的,编译器主要进行语法分析,词法分析,产生目标代码并进行代码优化等处理。为全局变量和静态变量等分配内存,并检查函数是否已定义,如没有定义,是否有函数声明。函数声明通知编译器:该函数在本文件晚些时候定义,或者是在其他文件中定义。,7.1.6链接,链接器将编译得到的零散的二进制代码文件组合成二进制可执行文件,主要完成下述两个工作,一是解析其他文件中函数引用或其他引用,二是解析库函数。举例来说,某个程序由两个c文件组成,分别为A.c、B.c,两个c文件和其中递归包含的头文件组成的两个编译单元,经过预处理和编译生成二进制代码文件A.obj和B.obj,假设A.c中调用了函数C,可函数C定义在B.c中,A.obj中实际上仅仅包括着对C函数的引用,其二进制定义代码需要从B.obj中提取,插入到A.obj的调用处,这个过程称为函数解析(resolve),由链接器完成。不仅仅是函数,变量(诸如有外部链接性的全局变量)也牵扯到解析的问题。当B.c没有定义函数C时,编译时不会产生错误,但链接时却会提示,有未解析的对象,据此可分析出问题出在编译阶段还是链接阶段。,7.1.7程序错误,兴致勃勃地写完程序,编译链接,一大堆的错误提示,不要沮丧,再优秀的程序员也会犯错,有人说,程序编写的过程大部分的时间都是用在错误调试上。有时为了排除一个小问题,可能会几天几夜地跟踪代码,正因为如此,有人把问题找到并解决的刹那称为“痛苦的幸福”。继续说明程序错误前,有个观点要说明:没有完美的程序,不存在没有缺陷的程序,如果一个程序运行很完美,那是因为它的缺陷到现在还没有被发现。同样,软件测试是为了发现程序中可能存在的问题,而不是证明程序没有错误。,7.1.8错误分类,错误可分两大类,一是程序书写形式在某些方面不合C语言要求,称为语法错误,这种错误将会由编译器指明,是种比较容易修改的错误,二是程序书写本身没错,编译链接能够完成,但输出结果与预期不符,或着执行着便崩溃掉,称为逻辑错误。细分下去,语法错误又可分为编译错误和链接错误,很明显,编译错误就是在程序编译阶段出的错误,而链接错误就是在程序链接阶段出的问题。,7.1.9编译错误,如果文件中出现编译错误,编译器将给出错误信息,并指明错误所在的行,提示用户修改代码,编译错误主要有两类:(1)语法问题,缺少符号,如缺分号,缺括号等,符号拼写不正确,一般来说,编译器都会指明错误所在行,但由于代码是彼此联系的,有时编译器给出的信息未必正确。一般来说,源程序中出错位置要么就是编译器提示位置,要么在提示位置之前,甚至是在前面很远的地方。另一个问题是有时一个实际错误会让编译器给出很多出错提示,所以,面对成百上千个错误提示时,不要害怕,没准修改一处代码,所有的问题都解决了。(2)上下文关系有误,程序设计中有很多彼此关联的东西,比如变量要先创建再使用,有时编译器会发现某个变量尚未定义,便会提示出错。这种情况有时是因为变量名拼写有误,有时是因为确实忘了定义。除了错误外,编译器还会对程序中一些不合理的用法进行警告(warning),尽管警告不耽误程序编译链接,但对警告信息不能掉以轻心,警告常常预示着隐藏很深的错误,特别是逻辑错误,应当仔细排查。,7.1.10链接错误,当一个编译单元中调用了库函数或定义在其他编译单元中的函数时,在链接阶段就需要从库文件或其他目标文件中抽取该函数的二进制代码,以便进行组合等一系列工作,找不到函数定义时,链接器无法找到该函数对应的代码,便会提示出错,指出名字未解析。一般来说,链接器给出的错误提示信息是关乎函数的链接。,7.1.11逻辑错误,即使程序顺利通过了编译链接,也不是说万事大吉,可以收工了,要检查生成的可执行程序,看其是否实现了所需的功能。实际上,运行阶段出现的逻辑错误更难排查,更让人头疼,编译错误和链接错误好歹有提示信息,但面对逻辑错误,就像浑水摸鱼。可能出现的逻辑错误有以下情况:与操作系统有关的操作,是否进行了非法操作,如非法内存访问等。是否出现了死循环,表现为长时间无反应,假死,注意,长时间无反应并不一定都是死循环,有的程序确实需要很长时间,这种情况要仔细分析。程序执行期间发生了一些异常,比如除数为0等,操作无法继续进行。程序能正确执行,但结果不对,此时应检查代码的编写是否合乎问题规范。,7.1.12排错,排除错误,有两层含义,找到出错的代码,修改该代码。排错也有两种形式,一是静态排错,编译器和链接器发现的错误基本都属于这一类,通过观察源程序便能确定问题所在并改正它。另一种是动态排错,逻辑错误的发现和纠正都比较困难,要综合考虑代码、使用的数据和输出结果的关联,仔细思考,尝试更换数据,观察结果的改变,依此分析错误可能存在的地方。如果还是不行,就要使用动态检查机制,最基本的方法是“分而治之”,检查程序执行的中间状态,最常用的方法是在可能出错的地方插入一些输出语句,让程序输出一些中间变量的值,确定可能出错的区域。此外,还可利用编译环境提供的DEBUG工具,对程序进行跟踪、监视和设断点等,定位并排错。,7.1.13预处理命令,预处理命令的引入是为了优化程序设计环境,提高编程效率,合理使用预处理命令能使编写的程序易于阅读、修改、移植和调试,也有利于程序的模块化设计。预处理命令必须独占一行,并以#开头,末尾不加分号,以示与普通C语句的区别。原则上,预处理行可以写在程序的任何位置,但推荐(或是惯常写法)写在程序文件的头部。编译器在对文件进行实质性的编译之前,先处理这些预处理行,这也是“预”字的含义。C语言的编译预处理功能主要包括宏定义、文件包含和条件编译3种。,7.1.14宏定义,对宏已经不再陌生,在字符常量一节中,已经介绍过#define的用法,宏即是用#define语句定义的。宏定义是用宏名来表示一个字符串,在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串来替换,称为“宏代换”或“宏展开”。宏展开只是种简单的代换,字符串中可以包含任何字符,可以是常数,也可以是表达式,预处理器进行宏展开时并不进行语法检查。,7.1.15不带参的宏定义,不带参数宏的一般定义形式为:#define宏名宏体宏名的命名规则与变量相同,一般习惯用大写字母,以便与变量区分,当然,这并不是说不允许使用小写字母作为宏名。来看一个不带参数宏的示例,从中学习一些宏的用法:#include/*使用printf要包含的头文件*/#include#defineSIDE5#defineSQUARESIDE*SIDE/*宏定义允许嵌套*/#definePI3.14159265#defineOUTPUTprintf(Hello,Cn);voidmain(void)/*主函数*/intx=SQUARE;printf(xis%dn,x);if(PInext,同时,释放掉Einsert占据的动态内存。如果删除的尾结点,即从到,只需让E1-next为NULL,同时释放掉Einsert占据的动态内存。,7.2.9链表逆置,所谓链表的逆置,是指“头变尾,尾变头”,将原来的“ABCD”变成“DCBA”,先从单链表模型来看,如:,7.2.10链表销毁,在链表使用完毕后,需将其销毁,回收所分配的内存。由于是整体销毁,实现起来比结点的删除简单,可以采取如下策略:每次删除第1个结点后面的结点,最后再删除头结点,这样即可实现整个链表的销毁。仅仅删除第1个结点并不意味着整个链表被删除掉了,链表是一个结点一个结点建立起来的,所以,销毁它也必须一个结点一个结点地删除才行。编写链表销毁的函数如下:voidfreeAll(STU*head)STU*p=NULL,*q=NULL;p=head;while(p-next!=NULL)q=p-next;p-next=q-next;/*删除结点*/free(q);/*释放内存*/free(head);/*释放第1个结点所占内存*/,7.2.11链表与数组的比较,数组,链表,链表与数组的比较.,内存中按照顺序存放寻址容易大小固定删除时需要很多移动静态数组无法增加,动态数组需要很多移动,内存中按照指针链式存放寻址需要循环大小可变查找时需要很多移动删除,插入非常便捷,啥时候用数组,啥时候用链表.,各个不同,实现链表逆转,实现链表排序以及删除所有节点,构建一个链表的数据结构,7.2.12作业练习,7.3栈,队列,综合学习,栈和队列。栈和队列的操作受到了一定程度的限制对栈而言,只能在栈顶一端进行元素的插入和删除.队列只允许在一段插入,在另外一端删除元素。数据结构是合理组织数据的手段,掌握数据结构,能使代码组织清晰,程序质量高,易读易维护。,7.3.1栈,栈是种“先入后出”的结构,打个比方,栈相当于放餐具的带底木桶,而数据相当于一个个的盘子,刷完的盘子一个个摞起来放在桶里,用盘子时就一个个从桶中取出。很容易理解,最先刷好的盘子会放在桶底,此时,只有上面的盘子用光了才会将其拿出来,这就是所谓的先入后出FILO(FirstInLastOut),等价的说法是后入先出。一个栈有以下要素:栈底(表示栈的开始位置,木桶的底部),栈顶(当前数据已经排放在什么位置了,当前盘子摞了多高了),不含元素的栈称为空栈。形象的示意如:,7.3.2顺序栈与链式栈,根据元素储存方式的不同,可以将栈分为顺序栈和链式栈两类:(1)顺序栈利用一组连续的内存单元依次存放自栈底到栈顶的数据,同时,用一个指针top只是栈顶的位置,在C语言中,这可用数组来实现,一般是先开辟一块区域,在编程中可根据需要再对此区域进行调整。(2)链式栈链式栈的结构与链表类似,如所示,其中,top为栈顶指针,始终指向栈顶元素,栈顶元素的指针指向下一个元素,依此类推,直到栈底,栈底元素的指针区域为空如果top为空,表示该栈是个空栈。,7.3.3栈的操作,对栈元素的操作有一定限制,不允许随意访问栈中间的元素,只允许访问栈顶元素,对栈的操作有以下几种:判断栈是否为空,判断栈是否已满(只针对顺序栈),将一个元素压入栈,从栈中弹出一个元素,销毁一个栈(或称清空一个栈)。判断栈是否为空相对来说比较简单,只要判断下top指针是否为NULL即可,下面给出栈的使用范例,如:,7.3.4队列,日常生活中,去银行取款、火车站买票等都需要排队,队列这个名词大家一定不会陌生,和栈不同,队列的特点是“先到先办”FIFO(FirstInFirstOut),可将队列形象地比作管道,如所示:,用栈实现进制转换,用栈实现逆序,用栈实现进制转换,7.3.5作业练习,项目实践,算法,信息处理,游戏,安全,案例实践,案例实践,案例实践,案例实践,7.4C语言实战,自顶向下,逐步求精,问题所在,问题分析,问题分解,设计逻辑与封装,逐步实现,1,2,3,4,5,7.4.1C语言设计规则,7.4.2面向过程的编程方法,入口,出口,面向过程的编程方法,传入数据,传出结果,对单个模块而言,只有一个入口,一个出口,是一种从上到下的流程式方法,减少了模块的相互联系使模块可作为插件或积木使用,降低程序的复杂性,提高可靠性,面向过程,编写高质量的C程序,设计规则,设计理念,封装,可复用,7.4.3C语言设计规则,耦合度,是指模块之间相互依赖性大小的度量,耦合度越小,模块的相对独立性越大。内聚度,是指模块内各成份之间相互依赖性大小的度量,内聚度越大,模块各成份之间联系越紧密,其功能越强。,America,Europe,Asia,巴西,美国,非洲,俄罗斯,澳大利亚,内聚,耦合,7.4.4实现高内聚与低耦合,7.5经典C语言基本笔试题,检验你前面学习的效果好坏,就看你是否能够通过世界五百强严酷的C语言考核,不过五百强很有挑战,你先搞定基础的面试题100题。,面试,笔试,机试,检验你是否通关,100条经典C语言笔试题目,1、请填写bool,float,指针变量与“零值”比较的if语句。提示:这里“零值”可以是0,0.0,FALSE或者“空指针”。例如int变量n与“零值”比较的if语句为:if(n=0)if(n!=0)以此类推。,100条经典C语言笔试题目,(1)请写出boolflag与“零值”比较的if语句:【标准答案】if(flag)if(!flag),100条经典C语言笔试题目,(2)请写出floatx与“零值”比较的if语句:【标准答案】constfloatEPSINON=0.00001;if(x=-EPSINON)char*p=str;intn=10;请计算(1)sizeof(str)=(2)sizeof(p)=(3)sizeof(n)=【标准答案】(1)6、(2)4、(3)4,100条经典C语言笔试题目,(4)voidFunc(charstr100);请计算sizeof(str)=(5)void*p=malloc(100);请计算sizeof(p)=【标准答案】(4)4、(5)4,100条经典C语言笔试题目,3、longa=0 x801010;a+5=?【标准答案】0 x801010用二进制表示为:“100000000001000000010000”,十进制的值为8392720,再加上5就是8392725。,100条经典C语言笔试题目,4、写一个函数找出一个整数数组中,第二大的数。,100条经典C语言笔试题目,5、设有以下说明和定义:typedefunionlongi;intk5;charc;DATE;structdataintcat;DATEcow;doubledog;too;DATEmax;则语句printf(%d,sizeof(structdate)+sizeof(max);的执行结果是:_【标准答案】DATE是一个union,变量公用空间.里面最大的变量类型是int5,占用20个字节.所以它的大小是20data是一个struct,每个变量分开占用空间.依次为int4+DATE20+double8=32.所以结果是20+32=52.,100条经典C语言笔试题目,6、请问以下代码有什么问题:intmain()chara;char*str=【标准答案】没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。,100条经典C语言笔试题目,7、请问以下代码有什么问题:char*s=AAA;printf(%s,s);s0=B;printf(%s,s);有什么错?【标准答案】AAA是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。cosntchar*s=AAA;然后又因为是常量,所以对是s0的赋值操作是不合法的。,100条经典C语言笔试题目,8、写出下面的结果charstr1=abc;charstr2=abc;constcharstr3=abc;constcharstr4=abc;constchar*str5=abc;constchar*str6=abc;char*str7=abc;char*str8=abc;cout(str1=str2)endl;cout(str3=str4)endl;cout(str5=str6)endl;cout(str7=str8)0,100条经典C语言笔试题目,22、关于内存的思考题(1)你能看出有什么问题?,100条经典C语言笔试题目,23、关于内存的思考题(2)你能看出有什么问题?,100条经典C语言笔试题目,25、关于内存的思考题(3)你能看出有什么问题?,100条经典C语言笔试题目,26、关于内存的思考题(4)你能看出有什么问题?,100条经典C语言笔试题目,27.main函数既然不会被其它函数调用,为什么要返回1intmain()intx=3;printf(%d,x);return1;,100条经典C语言笔试题目,28、请写出输出结果intsum(inta)autointc=0;staticintb=3;c+=1;b+=2;return(a+b+c);voidmain()intI;inta=2;for(I=0;I(Y)?(Y):(X)/结尾没有;,100条经典C语言笔试题目,40、带参宏与带参函数的区别(至少说出5点)?【标准答案】,100条经典C语言笔试题目,41、请写出数组的冒泡排序法,选择排序法,插入排序法。,100条经典C语言笔试题目,42、请写出链表的插入排序法,冒泡排序法。,100条经典C语言笔试题目,43、已知一个数组table,用一个宏定义,求出数据的元素个数。【标准答案】#defineNTBL(table)(sizeof(table)/sizeof(table0),100条经典C语言笔试题目,44、A.c和B.c两个c文件中使用了两个相同名字的static变量,编译的时候会不会有问题?这两个static变量会保存到哪里(栈还是堆或者其他的)?【标准答案】static的全局变量,表明这个变量仅在本模块中有意义,不会影响其他模块。他们都放在静态数据区,但是编译器对他们的命名是不同的。如果要使变量在其他模块也有意义的话,需要使用extern关键字。,100条经典C语言笔试题目,45、单连表的建立,把a-z26个字母插入到连表中,并且倒叙,还要打印,100条经典C语言笔试题目,46、求组合数:求n个数(1.n)中k个数的组合.如:combination(5,3)要求输出:543,542,541,532,531,521,432,431,421,321,,100条经典C语言笔试题目,47、求全排列:求n个数(1.n)中k个数的排列.如:P(2,2)1221如:P(3,2)122113312332,100条经典C语言笔试题目,48、程序的局部变量存在于_中,全局变量存在于_中,动态申请数据存在于_中。【标准答案】程序的局部变量存在于栈(stack)中,全局变量存在于静态数据区中,动态申请数据存在于堆(heap)中。,100条经典C语言笔试题目,49、什么是预编译,何时需要预编译:【标准答案】、总是使用不经常改动的大型代码体。、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。,100条经典C语言笔试题目,50、用两个栈实现一个队列的功能?要求给出算法和思路!【参考答案】设2个栈为A,B,一开始均为空.入队:将新元素push入栈A;出队:(1)判断栈B是否为空;(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;(3)将栈B的栈顶元素pop出;,100条经典C语言笔试题目,51、对于一个频繁使用的短小函数,在C语言中应用什么实现,在C+中应用什么实现?【标准答案】c用宏定义,c+用inline,100条经典C语言笔试题目,52、1.用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)【参考答案】#defineSECONDS_PER_YEAR(60*60*24*365)UL,100条经典C语言笔试题目,53、有一分数序列:1/2,1/4,1/6,1/8,用函数递归调用的方法,求此数列前20项的和,100条经典C语言笔试题目,54、在C+程序中调用被C编译器编译后的函数,为什么要加extern“C”?【标准答案】C+语言支持函数重载,C语言不支持函数重载。函数被C+编译后在库中的名字与C语言的不同。假设某个函数的原型为:voidfoo(intx,inty);该函数被C编译器编译后在库中的名字为_foo,而C+编译器则会产生像_foo_int_int之类的名字。C+提供了C连接交换指定符号extern“C”来解决名字匹配问题。,100条经典C语言笔试题目,55、请简述以下两个for循环的优缺点。,100条经典C语言笔试题目,100条经典C语言笔试题目,56、两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串,100条经典C语言笔试题目,57、请编写一个C函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。,100条经典C语言笔试题目,58、请写出下列代码的输出内容#includeintmain()inta,b,c,d;a=10;b=a+;c=+a;d=10*a+;printf(b,c,d:%d,%d,%d,b,c,d);return0;【标准答案】10,12,120,100条经典C语言笔试题目,59、unsignedchar*p1;unsignedlong*p2;p1=(unsignedchar*)0 x801000;p2=(unsignedlong*)0 x810000;请问p1+5=;p2+5=;【标准答案】0 x801005、0 x810020,100条经典C语言笔试题目,60、main()inta5=1,2,3,4,5;int*ptr=(int*)(请问输出:【标准答案】2,5,100条经典C语言笔试题目,61、请问下面程序有什么错误?inta602501000,i,j,k;for(k=0;k=1000;k+)for(j=0;j250;j+)for(i=0;i6):puts(6”。原因是当表达式中存在有符号类型和无符号类型时所有的数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。,100条经典C语言笔试题目,74、评价下面的代码片断:unsignedintzero=0;unsignedintcompzero=0 xFFFF;/*1scomplementofzero*/【参考答案】对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下:unsignedintcompzero=0;这一问题真正能揭露出应试者是否懂得处理器字长的重要性。在我的经验里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而PC机程序往往把硬件作为一个无法避免的烦恼。,100条经典C语言笔试题目,75、下面的代码片段的输出是什么,为什么?char*ptr;if(ptr=(char*)malloc(0)=NULL)puts(Gotanullpointer);elseputs(Gotavalidpointer);,100条经典C语言笔试题目,76、编写strcpy函数已知strcpy函数的原型是char*strcpy(char*strDest,constchar*strSrc);其中strDest是目的字符串,strSrc是源字符串。(1)不调用C+/C的字符串库函数,请编写函数strcpy。(2)strcpy能把strSrc的内容复制到strDest,为什么还要char*类型的返回值?,100条经典C语言笔试题目,77、编程实现:把十进制数(long型)分别以二进制输出,不能使用printf系列库函数。,100条经典C语言笔试题目,78、请编写一个C函数,该函数给出一个字节中被置1的位的个数。,unsignedintTestAsOne0(charlog)inti;unsignedintnum=0,val;for(i=0;ii;/移位val,100条经典C语言笔试题目,79、请编写一个C函数,该函数将给定的一个字符串转换成整数。【参考答案】,intInvert(char*str)intnum=0;while(*str!=0)intdigital=*str-48;num=num*10+digital;str=str+1;returnnum;,100条经典C语言笔试题目,80、请编写一个C函数,该函数将给定的一个整数转换成字符串。,voidIntToCharChange(intnum,char*pval)charstrval100;inti,j;intval0=0;intval1=0;val0=num;for(i=0;i100;i+)val1=val0%10;/取余val0=val0/10;/取整strvali=val1+48;/数字字符if(val010)i+;strvali=val0+48;break;for(j=0;jarrj)/交换记录arr0=arrj+1;/R0不是哨兵,仅做暂存单元arrj+1=arrj;arrj=arr0;exchange=1;/发生了交换,故将交换标志置为真if(!exchange)/本趟排序未发生交换,提前终止算法return;/endfor(外循环),100条经典C语言笔试题目,87、实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。,/删除操作StatusListDelete_DuL(DuLinkList,/插入操作StatusListInsert_DuL(DuLinkList,100条经典C语言笔试题目,88、,100条经典C语言笔试题目,89、输出和为一个给定整数的所有组合,100条经典C语言笔试题目,90、输入一行字符,统计其中有多少个单词。,#includemain()charstring81;inti,num=0,word=0;charc;gets(string);for(i=0;(c=stringi)!=0;i+)if(c=)word=0;elseif(word=0)word=1;num+;printf(Thereare%dwordsinthelinen,num);,100条经典C语言笔试题目,91、有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除,100条经典C语言笔试题目,92、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?,#includestdio.h#includestdlib.hmain()inti,j,k;printf(n);for(i=1;i5;i+)/*以下为三重循环*/for(j=1;j5;j+)for(k=1;k5;k+)if(i!=k,100条经典C语言笔试题目,93、取一个整数a从右端开始的47位。【参考答案】,main()unsigneda,b,c,d;scanf(%o,100条经典C语言笔试题目,94、判断一个字符串是不是回文。,1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论