pascal早还是c语言早
Pascal是一种计算机通用的高级程序设计语言。它由瑞士Niklaus Wirth教授于六十年代末设计并创立。 C语言的原型ALGOL 60语言。(也称为A语言) 1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。 1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。 1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。 而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。由上看C比P要晚
C语言的发展及其特点
C 语言特点1.C语言是一种成功的系统描述语言,用C语言开发的UNIX操作系统就是一个成功的范例;2.同时C语言又是一种通用的程序设计语言,在国际上广泛流行。世界上很多著名的计算公司都成功的开发了不同版本的C语言,很多优秀的应用程序也都使用C语言开发的,它是一种很有发展前途的高级程序设计语言。3.C是中级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。 4.C是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。5.C语言功能齐全。具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。6. C语言适用范围大。适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。C语言对编写需要硬件进行操作的场合,明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。 7.C语言具有较好的可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。常用的C语言IDE(集成开发环境)有Microsoft Visual C++,Dev-C++,Code::Blocks,Borland C++,Watcom C++,Borland C++ Builder,GNU DJGPP C++,Lccwin32 C Compiler 3.1,High C,Turbo C,C-Free,win-tc 等等…… c语言的学习 对于一个初学者,Microsoft Visual C++是一个比较好的软件。界面友好,功能强大,调试也很方便。这是微软出的一个C语言集成开发环境(IDE),主要有:VC++6.0、VS2005、VS2008、VS2010等,分为企业版和学生版等。对于初学者VC++6.0是比较容易上手的,但由于其对标准支持的不好可能使人养成不良编程习惯,因此论坛上也有人主张舍弃VC++6.0。 在unix/linux操作系统上,学习c语言一般使用vim/emacx来编辑源文件,使用gcc/cc来编译源文件,使用make程序来管理编译过程。编辑本段发展历史c语言C语言的祖先是BCPL语言。 1967年,剑桥大学的Martin Richards 对CPL语言进行了简化,于是产生了BCPL(Basic Combined Pogramming Language)语言。 1970年,美国贝尔实验室的Ken Thompson。以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)。并且他用B语言写了第一个UNIX操作系统。 在1972年,美国贝尔实验室的D.M.Ritchie在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。 为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。 1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchie合著 c语言程序设计了著名的《The C Programming Language》一书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准化协会(American National Standards Institute)在此基础上制定了一个C语言标准,于一九八三年发表。通常称之为ANSI C。 K&R第一版在很多语言细节上也不够精确,对于pcc这个“参照编译器”来说,它日益显得不切实际;K&R甚至没有很好表达它所要描述的语言,把后续扩展扔到了一边。最后,C在早期项目中的使用受商业和政府合同支配,它意味着一个认可的正式标准是重要的。因此(在M. D. McIlroy的催促下),ANSI于1983年夏天,在CBEMA的领导下建立了X3J11委员会,目的是产生一个C标准。X3J11在1989年末提出了一个他们的报告[ANSI 89],后来这个标准被ISO接受为ISO/IEC 9899-1990。 1990年,国际标准化组织ISO(International Organization for Standards)接受了89 ANSI C 为I SO C 的标准(ISO9899-1990)。1994年,ISO修订了C语言的标准。 1995年,ISO对C90做了一些修订,即“1995基准增补1(ISO/IEC/9899/AMD1:1995)”。1999年,ISO有对C语言标准进行修订,在基本保留原来C语言特征的基础上,针对应该的需要,增加了一些功能,尤其是对C++中的一些功能,命名为ISO/IEC9899:1999。 2001年和2004年先后进行了两次技术修正。 目前流行的C语言编译系统大多是以ANSI C为基础进行开发的,但不同版本的C编译系统所实现的语言功能和语法规则有略有差别
什么是basic 语言和C语言?
分类: 电脑/网络 >> 程序设计 >> 其他编程语言 解析: BASIC是Beginner"s All-purpose Symbolic Instruction Code的缩写。意即初学者通用符号指令代码。它是一种国际通用的计算机高级语言。一般认为它是从FORTRAN中提炼、简化而来。因此简单易学,BASIC入门了,再学其它高级语言也就不难了。 2. BASIC语言的版本 电脑语言一般都有版本序列。BASIC语言也经历了不断的发展与改进,形成了不同环境下的不同版本。如BASIC、BASICA、F-BASIC、H-BASIC、Q-BASIC等等。但一般来说都大同小异、基本的东西不变、较高版本兼容较低版本。所以需恐慌与诧异。让我们从最基本的也就是BASIC来学起,先入门,有兴趣的同学,就可以通过自学深入和提高。 3. BASIC语言的特点(1)简单易学。基本BASIC的语句一共只有17种,且使用准英语或者叫类英语,表达式与运算符号也与数学中使用的差不多。 (2)会话功能。BASIC是高级语言,具有很强的会话功能。语句、表达式及运行到某句出错时,电脑会进行人机对话,及时给出提示等。因此可以边做边改。直至正确与满意为止,这一点对初学者十分方便。 (3)环境特点。BASIC程序的运行分解释型与编译型两种。一般在学习与编制程序时使用解释型环境。也就是说要在DOS下先运 行BASIC.EXE文件,进入BASIC的解释环境状态(其提示符是OK),编写程序所形成的文件其扩展名约定为BAS。这就叫BASIC的源程序。当源程序调试好了,反复运行都满意,可以用BASIC的编译工具软件把它编译成扩展名为EXE的文件便能直接在DOS下运行。有关BASIC的启动知识 C语言是目前世界上流行、使用最广泛的高级程序设计语言。 C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。 C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言。 常用的编译软件有Microsoft Visual C++,Borland C++,Wat C++ ,Borland C++, Borland C++ Builder,Borland C++ 3.1 for DOS,Wat C++ 11.0 for DOS,GNU DJGPP C++, Lccwin32 C Compiler 3.1,Microsoft C,High C,等等...... C语言的发展历史 C语言的发展颇为有趣。它的原型ALGOL 60语言。 1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。 1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。 1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。 而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BGPL的第二个字母作为这种语言的名字,这就是C语言。 为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。 1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《The C Programming Language》,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。 1988年,随着微型计算机的日益普及, 出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准, 成为现行的C语言标准 3.C语言的主要特点 。C语言发展迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。用C语言加上一些汇编语言子程序, 就更能显示C语言的优势了,象PC- DOS 、WORDSTAR等就是用这种方法编写的。 C语言的特点 1. 简洁紧凑、灵活方便 C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。 2. 运算符丰富 C的运算符包含的范围很广泛,共有种34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。 3. 数据结构丰富 C的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能, 支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。 4. C是结构式语言 结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 5. C语法限制不太严格、程序设计自由度大 一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度。 6. C语言允许直接访问物理地址,可以直接对硬件进行操作 因此既具有高级语言的功能,又具有低级语言的许多功能,能够象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。 7. C语言程序生成代码质量高,程序执行效率高 一般只比汇编程序生成的目标代码效率低10へ20%。 8. C语言适用范围大,可移植性好 C语言有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型。
c语言问题?
你初始设定n=0所以第一次判定n%5==0的时候是通过的会执行printf(" ")如果要去掉第一行的空行的话可以在if里加一个n大于0的判断
c语言是有什么
编程语言啊,详细介绍请百度
C语言程序开发历史
C语言的原型ALGOL 60语言。(也称为A语言)1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。即是著名的ANSI C。1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《C语言程序》(The C Programming Language),从而使C语言成为当时世界上流行最广泛的高级程序设计语言。1988年,随着微型计算机的日益普及, C语言出现了许多版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准, 成为现行的C语言标准3.C语言的主要特点 。C语言发展迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。用C语言加上一些汇编语言子程序, 就更能显示C语言的优势了,象PC- DOS 、WORDSTAR等就是用这种方法编写的。
c语言中的a=++c是什么意思?
c语言中的a=++c是什么意思? c++ 就是先对c取值,然后c再加1 ++c就是先对c加1,然后再取值 例如,c=4 a=++c 则,a=5 你可以写个小程式试一下。一个写a=++c,一个写a=c++。。 c语言中的“%c”是什么意思? 例如 printf( "%c", c ); scanf(“%c”,&c); 代表输入或输出格式是一个字元变数 。。 对于一个字元型或者int型都能用%c。。与ASCII码表对应。。 C语言的祖先是BCPL语言。 1967年,剑桥大学的 Martin Richards 对CPL语言进行了简化,于是产生了BCPL(Basic Combined Pogramming Language)语言。 1970年,美国贝尔实验室的 Ken Thompson。以BCPL语言为基础,设计出很简单且很接近硬体的B语言(取BCPL的首字母)。并且他用B语言写了第一个UNIX作业系统。 在1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。 为了使UNIX作业系统推广,1977年Dennis M.Ritchie发表了不依赖于具体机器系统的C语言编译文字《可移植的C语言编译程式》。 1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchie合著了著名的《The C Programming Language》一书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准化协会(American National Standards Institute)在此基础上制定了一个C语言标准,于一九八三年发表。通常称之为ANSI C。 C语言中的c是什么意思? bine。刚开始是叫b语言,主要由kenTompson开发完成,后来又由Dennis.M.Ritchie在b语言的基础上发展成c语言。所以现在一般说c语言都是由他两发明的。 C语言是在B语言的基础上发展起来的,它的根源可以追溯到ALGOL 60。1960年出现的ALGOL 60是一种面向问题的高阶语言,它离硬体比较远,不宜用来编写系统程式。1963年英国的剑桥大学推出了CPL(Combined Programming Language)语言。CPL语言在ALGOL60的基础上接近硬体一些,但规模比较大,难以实现。1967年英国剑桥大学的Matin Richards对CPL语言作了简化,推出了BCPL(Basic Combined Programming Language)语言。1970年美国贝尔实验室的Ken Thompson以BCPL语言为基础,又作了进一步简化,设计出了很简单的而且很接近硬体的B语言(取BCPL的第一个字母),并用B语言写了第一个UNIX作业系统,在PDP-7上实现。1971年在PDP-11/20上实现了B语言,并写了UNIX作业系统,但B语言过于简单,功能有限。1972年至1973年间,贝尔实验室的D.M.Ritchie在B语言的基础上设计出了C语言(取BCPL的第二字母)。C语言既保持了BCPL和B语言的优点(精练,接近硬体),又克服了它们的缺点(过于简单,资料无型别等)。最初的C语言只是为描述和实现UNIX作业系统提供一种工作语言而设计的。1973年,K.Thompson和D.M.Ritchie两人合作把UNIX的%90以上用C改写(即UNIX第5版。原来的UNIX作业系统是1969年由美国的贝尔实验室的K.Thompson和D.M.Ritchie开发成功的,是用汇编语言写的)。 C语言中c语言中ishavefive 是什么意思 这个是自定义的吧 没什么具体意义 c语言中的!(c%2)是什么意思 c%2就是求c除以2后的余数,值为0或者1。0为假1为真。 !是真假调换,就是0变1,1变0。 总之就是说如果c是偶数则值为1,奇数则值为0. c语言中的&&是什么意思??? 于 记得采纳啊 C语言中的__是什么意思 好多意思!看后面是什么东东 额!学的东西很多! C语言中的%是什么意思 不要听他们那么多废话,%就两种用法: 一:求余运算子,要求两个资料必须为整型或相容它的型别(字元型),如5%3的值的2; 二:作为格式输入输出符的先行符号,比如%f。%d。 C语言中没有你说的+++这个运算子。 如果是a+++b,那么等价于(a++)+b
计算机C语言中的“C”代表什么意思?
C语言是在B语言的基础上发展起来的。 1960年出现了一种面向问题的高级语言ALGOL 60 。 1963年英国剑桥大学推出了CPL(Combined Programming Language)语言,后来经简化为BCPL语言。 1970年美国贝尔(Bell)实验室的K.Thompson以BCPL语言为基础,设计了一种类似于BCPL的语言,取其第一字母B,称为B语言。 1972年美国贝尔实验室的Dennis M.Ritchie为克服B语言的诸多不足,在B语言的基础上重新设计了一种语言,取其第二字母C,故称为C语言。 1980年贝尔实验室的Bjarne Stroustrup对C语言进行了扩充,推出了“带类的C”,多次修改后起名为C++。以后又经过不断的改进,发展成为今天的C++
c语言的发展史?
C语言诞生于美国的贝尔实验室,由D.M.Ritchie以B语言为基础发展而来,在它的主体设计完成后,Thompson和Ritchie用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI c”,截至2020年,最新的C语言标准为2017年发布的 “C17”。 C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。20世纪60年代,美国AT&T公司贝尔实验室(AT&T Bell Laboratory)的研究员Ken Thompson闲来无事,手痒难耐,想玩一个他自己编的,模拟在太阳系航行的电子游戏——Space Travel。他背着老板,找到了台空闲的机器——PDP-7。但这台机器没有操作系统,而游戏必须使用操作系统的一些功能,于是他着手为PDP-7开发操作系统。后来,这个操作系统被命名为——UNIX。1970年,美国贝尔实验室的 Ken Thompson,以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)。并且他用B语言写了第一个UNIX操作系统。1971年,同样酷爱Space Travel的Dennis M.Ritchie为了能早点儿玩上游戏,加入了Thompson的开发项目,合作开发UNIX。他的主要工作是改造B语言,使其更成熟。1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。1973年初,C语言的主体完成。Thompson和Ritchie迫不及待地开始用它完全重写了UNIX。此时,编程的乐趣使他们已经完全忘记了那个"Space Travel",一门心思地投入到了UNIX和C语言的开发中。随着UNIX的发展,C语言自身也在不断地完善。直到2020年,各种版本的UNIX内核和周边工具仍然使用C语言作为最主要的开发语言,其中还有不少继承Thompson和Ritchie之手的代码。 在开发中,他们还考虑把UNIX移植到其他类型的计算机上使用。C语言强大的移植性(Portability)在此显现。机器语言和汇编语言都不具有移植性,为x86开发的程序,不可能在Alpha、SPARC和ARM等机器上运行。而C语言程序则可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的C语言编译器和库,然后将C源代码编译、连接成目标二进制文件之后即可运行。 1977年,Dennis M.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。C语言继续发展,在1982年,很多有识之士和美国国家标准协会为了使这个语言健康地发展下去,决定成立C标准委员会,建立C语言的标准。委员会由硬件厂商、编译器及其他软件工具生产商、软件设计师、顾问、学术界人士、C语言作者和应用程序员组成。1989年,ANSI发布了第一个完整的C语言标准——ANSI X3.159—1989,简称“C89”,不过人们也习惯称其为“ANSI C”。C89在1990年被国际标准组织ISO(International Standard Organization)一字不改地采纳,ISO官方给予的名称为:ISO/IEC 9899,所以ISO/IEC9899: 1990也通常被简称为“C90”。1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC 9899:1999,简称“C99”。在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899: 2011,简称为“C11”。
c程序的C语言的发展历史
C语言的发展颇为有趣。它的原型ALGOL 60语言。(也称为A语言)1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《The C Programming Language》,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。1987年,随着微型计算机的日益普及, 出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准, 成为现行的C语言标准 3.C语言的主要特点 。C语言发展迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。用C语言加上一些汇编语言子程序, 就更能显示C语言的优势了,象PC- DOS 、WORDSTAR等就是用这种方法编写的。1990年,国际化标准组织ISO(International Standard Organization)接受了87 ANSI C为ISO C 的标准(ISO9899-1990)。1994年,ISO修订了C语言的标准。目前流行的C语言编译系统大多是以ANSI C 为基础进行开发的,但不同版本的C编译系统说实现的语言功能和语法规则有略有差别。
请编程高手向我介绍一下C语言的历史,谢谢!!!
//检查x是否为素数,如果为素数返回1,否则返回0 int check(int x) { int i=0; for(i=2;i<x;i++) //如果存在一个能被2到x-1的数整除的话,,wgHoTU
C语言是谁首创的?要详细资料
它由美国贝尔研究所的D.M.Ritchie于1972年推出。 C语言的原型ALGOL 60语言。(也称为A语言) 1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。 1967年,剑桥大学的Martin Richards 对CPL语言进行了简化,于是产生了BCPL语言。 1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。 而在1972年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.Ritchie在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。 为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。 1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchie合著了著名的《The C Programming Language》一书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准化协会(American National Standards Institute)在此基础上制定了一个C语言标准,于一九八三年发表。通常称之为ANSI C。
C语言的创始人是谁
其实C语言源于一个失败的项目:Muktics工程,这可是个庞大的工程,不过由于过于复杂和庞大,导致最后项目的失败,项目的参与这之一通用电气公司也因此退出软件领域。 贝尔实验室(此项目的另一个参与单位)的一个研究员Ken Thompson感到郁闷,工作之余他为PDP-7系统编写了一个简单的操作系统,当然是用汇编写的(那时候还没C语言),Brian Kernighan(以后简称K)在1970为其取命为UNIX,所以著名的操作系统UNIX是早于C语言出现的,后来才用C语言重写的。 不过汇编写起程序来不仅吃力而且效率比较低,所以Ken就考虑利用高级语言的优点,他创建了B语言,不过B语言无法表达不同的数据类型,Dennis Ritchie(简称R)创立了能解决这个问题的新语言:New B,后来改名为C,这个时候C语言才真正出现
c语言的创始人
早期发展C语言创始人D.M.RitchieC语言之所以命名为C,是因为 C语言源自 Ken Thompson 发明的 B语言,而 B语言则源自BCPL语言。1967年,剑桥大学的 Martin Richards 对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。20世纪60年代,美国AT&T公司贝尔实验室(AT&T Bell Laboratory)的研究员Ken Thompson闲来无事,手痒难耐,想玩一个他自己编的,模拟在太阳系航行的电子游戏——Space Travel。他背着老板,找到了台空闲的机器——PDP-7。但这台机器没有操作系统,而游戏必须使用操作系统的一些功能,于是他着手为PDP-7开发操作系统。后来,这个操作系统被命名为——UNIX。1970年,美国贝尔实验室的 Ken Thompson。以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)。并且他用B语言写了第一个UNIX操作系统。1971年,同样酷爱Space Travel的Dennis M.Ritchie为了能早点儿玩上游戏,加入了Thompson的开发项目,合作开发UNIX。他的主要工作是改造B语言,使其更成熟。1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。1973年初,C语言的主体完成。Thompson和Ritchie迫不及待地开始用它完全重写了UNIX。此时,编程的乐趣使他们已经完全忘记了那个"Space Travel",一门心思地投入到了UNIX和C语言的开发中。随着UNIX的发展,C语言自身也在不断地完善。直到今天,各种版本的UNIX内核和周边工具仍然使用C语言作为最主要的开发语言,其中还有不少继承Thompson和Ritchie之手的代码。在开发中,他们还考虑把UNIX移植到其他类型的计算机上使用。C语言强大的移植性(Portability)在此显现。机器语言和汇编语言都不具有移植性,为x86开发的程序,不可能在Alpha,SPARC和ARM等机器上运行。而C语言程序则可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的C语言编译器和库,然后将C源代码编译、连接成目标二进制文件之后即可运行。1977年,Dennis M.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
C语言名称的由来?
???
C语言是谁开发的
C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。 C语言的原型ALGOL 60语言。(也称为A语言) 1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言
C语言编程问题:题目计算圆的面积。
你这个怎么看都是错的第一,主函数是这样定义的吗第二,这里乘法运算需要把float型转化为double型最后,没有返还函数,了return 0;改正如下:#include <stdio.h>#define PI 3.14159int main(){ float r,s; scanf("%f",&r); s=float(PI*r*r); printf("面积=%f ",s); return 0;}
VB与C语言哪个出现的晚些?晚几年?
C已经出生好几十年了vb才10多年
C语言名称的由来
C语言的历史: 著名的计算机科学家丹尼斯·里奇(Dennis Ritchie)创造的。1967年, Ritchie进入贝尔实验室工作。贝尔实验室是当时世界上最有创造力的地方之一,著名的C语言、C++语言和Unix操作系统都诞生于此。一开始, 里奇和他的同事肯·汤普生开始研究DEC PDP-7机器,但是在这个机器上写程序很困难,只能用很底层很高深的汇编语言。于是汤普生设计了一种高级程序语言,并把它命名为B语言。但是由于B语言本身设计的缺陷,使他在内存的限制面前一筹莫展。1973年,里奇决定对B语言进行改良,他赋予了新语言强有力的系统控制方面的能力,并且新语言非常简洁、高效,里奇把它命名为C语言,意为B语言的下一代。 在开发C语言的同时,里奇和汤普生、布朗(贝尔实验室的另一名科学家)还接受了一个新任务,就是在DEC PDP-7上开发一个多任务、多用户的操作系统,1969年,他们用汇编语言完成了这个操作系统的第一个版本,里奇受一个更早的项目Multics的启发,将这个系统命名为Unix。 为了在全世界面前展现C语言强大的能力,里奇用C语言把Unix操作系统重写了一遍,这就是Unix第三版。而之前的第二版是用B语言开发的。1977年,为了推广贝尔实验室开发的Unix操作系统,里奇发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》,使C语言再向前跨出一大步,各种计算机都开始支持C语言。 1978年里奇和布朗一起出版了《C语言》一书,从而使C语言成为世界上应用最广泛的高级程序设计语言,而该书也成为计算机科学界最畅销的书籍之一。里奇把全部精力都放到Unix、C语言、C++语言的应用和推广上,曾在很多国家进行过教学和讲座活动。2000年,他来到了中国,在北京大学和复旦大学进行了题为《贝尔实验室与操作系统》的讲演,为推动中国Unix/Linux的应用和发展贡献了力量。 1983年,人们将计算机科学方面的最高荣誉——图灵奖颁发给了里奇,以表彰他对计算机科学所做出的杰出贡献。 C语言的特色 C语言是高级程序语言,也就是说程序员不必知道具体的中央处理器型号也可以为计算机进行程序编制。它主要用来进行计算机的程序设计。C语言具有高效、灵活、功能丰富、表达力强和移植性好等的特点,在计算机语言中备受青睐。 在程序能够运行前,源代码必须有编译器编译成机器语言。相对于汇编语言只能针对具体型号的CPU才能运行,C语言的便捷性是很明显的。 C语言的主要特性 C语言保留了低级语言的特性,例如涉及内存的指针。 C语言通过参数在函数里传递数值。 使用了预处理机制,使得程序里可以通过包含例如宏处理的方式来处理源程序。 C语言提供了一套标准库,这些库里提供了十分有用的功能。 但是并不是所有的这些特性都是有效的。例如,预处理通常作为一个独立的程序被处理,这使得与处理的程序并不一定被完全编译。 虽然C是高级语言,但是它同时拥有一些汇编语言的特性,对其它的语言来说这是接近低级语言的特点。例如,在C语言里,程序员可以对计算机内存进行管理。在默认的情况下,C语言不会对数组的范围进行检查,也就是说即使数组越界,C语言也不会作出错误提示。对计算机内存的管理使得程序员可以变出更快捷、更有效的程序,这对于设备驱动程序来说尤为重要。但是这也使得程序容易产生令人讨厌的“臭虫”,例如缓冲器溢出错误。然而,这些错误可以由一些工具来避免。 C语言的不足可以由由C语言发展而来的更新的编程语言改进。Cyclone语言的拥有提防对于内存错误的特性。C++和Objective C提供了用于面向对象的编程结构。Java和C#增加了面向对象的结构使得对内存的管理自动化。 C语言的版本 K&R C C不断的从它的第一版本进行改进。在1978年,Kernighan和里奇的C编程语言第一版出版。它介绍了下面的有关C语言版本的特性: struct数据类型 long int数据类型 unsigned int数据类型 把运算符=+改为+=,依次类推。因为=+使得编译器混淆。 在以后的几年里,C编程语言一直被广泛作为C语言事实上的规范。在这本书中,C语言通常被表述成"K&R C"。(第二版的包括了ANSI C标准) K&R C通常被作为C编译器所支持的最基本的C语言部分。虽然现在的编译器并不一定都完全遵循ANSI标准,但K&R C作为C语言的最底要求仍然要编程人员掌握。但是无论怎样,现在使用广泛的C语言版本都已经与K&R C相距甚远了,因为这些编译器都使用ANSI C标准。 ANSI C和ISO C 1989年,C语言被ANSI标准化。(ANSI X3.159-1989)。标准化的一个目的是扩展K&R C。这个标准包括了一些新的特性。在K&R出版后,一些新的特征被“非官方”的加到C语言中。 void函数 函数返回struct或union类型 void *数据类型 在ANSI标准化自己的过程中,一些新的特征被加了进去。ANSI也标准了函数库。ANSI C标准被ISO(国际标准化组织)采纳成为ISO 9899。ISO的第一个版本文件在1990年出版。 C99 在ANSI标准化后,C语言的标准在一段相当的时间内都保持不变,尽管C++继续在改进。(实际上,Normative Amendment1在1995年已经开发了一个新的C语言版本。但是这个版本很少为人所知。)标准在90年代才经历了改进,这就是ISO9899:1999(1999年出版)。这个版本就是通常提及的C99。它被ANSI于2000年三月采用。 在C99中包括的特性有: 可变范围的数组 新增加的数据类型,包括long long int,布尔类型和用于表示复数的类型 支持用//表示注释(这个特性实际上在C89的很多编译器上已经被支持了) snprintf 但是各个公司对C99的支持所表现出来的兴趣不同。当GCC和其它一些商业编译器支持C99的大部分特性的时候,微软和Borland却似乎对此不感兴趣。 C++历史: 语言的发展是一个逐步递进的过程,C++ 是直接从 C 语言发展过来的,而 C 语言是从 B 语言发展过来的,B 语言是 BCPL 的一个解释性后代,BCPL 是 Basic CPL。其中最有趣的是 CPL 中 C 的由来,由于当时这个语言是剑桥大学和伦敦大学合作开发的,在伦敦的人员加入之前,C 表示剑桥,伦敦人员加入之后,C 表示 Combined 组合。还有一种非正式的说法,C 表示 Christopher,因为 Christopher 是 CPL 背后的主要动力。 最初导致C++诞生的原因是在Bjarne博士等人试图去分析UNIX的内核的时候,这项工作开始于1979年4月,当时由于没有合适的工具能够有效的分析由于内核分布而造成的网络流量,以及怎样将内核模块化。同年10月,Bjarne博士完成了一个可以运行的预处理程序,称之为Cpre,它为C加上了类似Simula的类机制。在这个过程中,Bjarne博士开始思考是不是要开发一种新的语言,当时贝尔实验室对这个想法很感兴趣,就让Bjarne博士等人组成一个开发小组,专门进行研究。 当时不是叫做C++,而是C with class,这是把它当作一种C语言的有效扩充。由于当时C语言在编程界居于老大的地位,要想发展一种新的语言,最强大的竞争对手就是C语言,所以当时有两个问题最受关注:C++要在运行时间、代码紧凑性和数据紧凑性方面能够与C语言相媲美,但是还要尽量避免在语言应用领域的限制。在这种情况下,一个很自然的想法就是让C++从C语言继承过来,但是我们的Bjarne博士更具有先见之明,他为了避免受到C语言的局限性,参考了很多的语言,例如:从Simula继承了类的概念,从Algol68继承了运算符重载、引用以及在任何地方声明变量的能力,从BCPL获得了//注释,从Ada得到了模板、名字空间,从Ada、Clu和ML取来了异常。 下面让我们来一起看一下C++历史上的主要事件: 1983年8月, 第一个C++实现投入使用(所以我喜欢说1983年C++开了天界) 1983年12月,Rick Mascitti建议命名为CPlusPlus,即C++。 1985年2月, 第一个C++ Release E发布。 10月,CFront的第一个商业发布,CFront Release 1.0。 10月,Bjarne博士完成了经典巨著The C++ Programming Language第一版 1986年11月,C++第一个商业移植CFront 1.1,Glockenspiel。 1987年2月, CFront Release 1.2发布。 11月,第一个USENIX C++会议在新墨西哥州举行。 1988年10月,第一次USENIX C++实现者工作会议在科罗拉多州举行。 1989年12月,ANSI X3J16在华盛顿组织会议。 1990年3月, 第一次ANSI X3J16技术会议在新泽西州召开. 5月, C++的又一个传世经典ARM诞生。 7月, 模板被加入。 11月,异常被加入。 1991年6月, The C++ Programming Language第二版完成。 6月, 第一次ISO WG21会议在瑞典召开。 10月,CFront Release 3.0发布。 1993年3月, 运行时类型识别在俄勒冈州被加入。 7月, 名字空间在德国慕尼黑被加入。 1994年8月, ANSI/ISO委员会草案登记。 1997年7月, The C++ Programming Language第三版完成。 10月,ISO标准通过表决被接受 1998年11月,ISO标准被批准。 接下来让我们一起看一下C++编译器的“第一个”: 1985年10月,Cfront Release 1.0发布。 1987年12月,GNU C++发布。 1988年1 月,第一个Oregon Software C++发布。 6 月,第一个Zortech C++发布。 1990年5 月,第一个Borland C++发布。 1992年2 月,第一个Dec C++发布。 3 月,第一个Microsoft C++发布。 5 月,第一个IBM C++发布。 如果你对C++的历史发展很感兴趣,你可以参考The Design and Evolution of C++。
C语言为什么叫做C语言而不叫A,B,D..Z等语言
C语言是由BCPL语言改进而来,名字取了BCPL的第二个字母,所以就叫C语言。
“c语言”用英语怎么说
在常见的描述语言的句子里就写大写的“C”就够了。能懂的人自然会懂。单独描述“C语言”这个概念,可以写成 C (Programming) Language
c语言是谁发明的/
不知道 嘻嘻 有知道的也告诉我
c语言的创始人?
c语言创始人是吴涛吧
C语言诞生的时候,是在什么操作系统下运行的?
c 语 言 C语言的原型ALGOL 60语言。(也称为A语言)1963年, 剑桥大学 将ALGOL 60语言发展成为 CPL (Combined Programming Language)语言。1967年,剑桥大学的Martin Richards 对CPL语言进行了简化,于是产生了BCPL语言。1970年,美国 贝尔实验室 的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个 UNIX 操作系统。 而在1972年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.Ritchie在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。 为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。 1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchie合著 了著名的《The C Programming Language》一书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准化协会(American National Standards Institute)在此基础上制定了一个C语言标准,于一九八三年发表。通常称之为ANSI C。
C语言是谁发明的?
C语言是“C语言之父”Dennis MacAlistair Ritchie(中文名:丹尼斯·里奇)创造出来的。C语言是D.M.Ritchie在B语言的基础上创造出来的。C语言的出现经历了以下历程:在1970年,美国贝尔实验室的 Ken Thompson,以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)。并且他用B语言写了第一个UNIX操作系统。1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。1973年初,C语言的主体完成。Thompson和Ritchie迫不及待地开始用它完全重写了UNIX。直到今天,各种版本的UNIX内核和周边工具仍然使用C语言作为最主要的开发语言,其中还有不少继承Thompson和Ritchie之手的代码。扩展资料:丹尼斯·里奇发明出C语言之后,产生了十分强大的社会影响,具体如下:C语言是使用最广泛的语言之一。C语言的诞生是现代程序语言革命的起点,是程序设计语言发展史中的一个里程碑。自C语言出现后,以C语言为根基的C++、Java和C#等面向对象语言相继诞生,并在各自领域大获成功。但C语言依旧在系统编程、嵌入式编程等领域占据着统治地位。C语言,这种最有效、最通用的编程语言,就是丹尼斯·里奇开发的,而这还是他在做另一个项目时的副产品。丹尼斯·里奇还和肯·汤普逊一起开发了Unix操作系统,因此,他还是名副其实的Unix之父。参考资料来源:百度百科-丹尼斯·里奇
C语言获取CPU tick
好时尚是重实践。
c语言可以开发iOS软件吗
应该是不行的 ios貌似是基于linux的 mac的我就不知道了
c语言可以开发iOS软件吗(ios手机编写c语言的软件)
准确的说,是使用objective-c语言开发iOS应用第一阶段:网站中的TheiOSApprentice教程(难度指数:※)以上有几个答案提到了这个网站,但看什么教程没有细说,我在这里简单说说。TheiOSApprentice的教程针对完全没有编程经验的人设计。这个教程是外国人写的并且有免费试读版,感兴趣的人要看看。里面说的东西都非常非常基本,里面一个共讲解了4个不同类型app,强烈建议一步一步按照上面所写的步骤敲一遍代码。其中你会遇到很多复杂的语句和长的可怕的函数,你不用感到恐慌,照着敲,知道它干嘛用完全OK了,随着你编程时间以及经验的增加,你都会懂得。第二阶段:培训班的网络课程及入门书籍经过第一个阶段你应该已经大致掌握IOS开发流程,能编写一个非常简单的应用了。这时候相信你的热情应该会很高涨,但接下来的学习可能会很枯燥,做好准备。网络课程的话推荐李明杰的课程,不推荐其他的。(他目前在广州创业建立自己的培训品牌,没有自制力看网络课程的请去找他。杰哥开源了一些非常优秀的框架如:MJExtension)建议首先要恶补基础知识。经过第一个阶段你可能觉得你懂不少了,但是只是表面,尤其是没学过编程的应该好好学习一下视频前面的课程,主要看看语法。等你看恶心了看烦了就去看视频里UI部分,这里相对于来说比较轻松,一定要把视频里写的语句打一遍,相信这样你理解会更深刻。里面说的不清楚的地方上网可以百度,可以查书(如果你有书的话)。Q:视频教程是用来做什么的?A:光有实践没有知识是写不好程序的,第一阶段基本都是实践,第二部分则是用来查缺补漏。之所以推荐网络课程是因为讲解的比较系统,各种入门知识都会涉及。因为iOS所涉及内容庞大单看几本书还是涉及不全的。Q:上不上培训班?A:个人意见是不推荐去,自学足够了。现在学习iOS的环境比前几年好太多了,光凭借网上的资料是完全可以的学得很好的,如果你连这点学习能力还没有我也不相信你将来能成为一个很优秀的工程师。而且你会发现在社会上一些互联网公司是拒绝接收培训班出来的人。推荐入门书籍:tips:以下所有书籍有英文版看英文版,有最新版看最新版1、《Objective-C程序设计》(难度指数:※※)2、《iOS7应用开发入门经典》(难度指数:※※)3、《iOS开发指南-0基础到AppStore上架》(难度指数:※※※)4、《iOS编程实战》(难度指数:※※※※)这里面讲解的很清楚,后面甚至有简单的项目可以练手,这对于看视频教程看恶心的同学是个福音~你可以先做项目遇到不懂的再看视频。这里我想多说一句,买iOS开发的辅导书千万别买过时太久的,我看以上有答案还推荐iOS4系列丛书呢...拜托现在都什么年代了,现在iOS8教程都要出来了,你iOS6的教程都过时好久了更别提iOS4了...对于新出的swift语言好多人难以选择不知道该学OC好还是Swift好。我个人建议现在学OC,一门新语言的诞生需要经过时间的考验与洗礼。等你学好了OC以后再看也不迟。第三阶段及以后到这个阶段你应该拥有了充分的自学能力,已经达到了入门水平。这时候以下网址将成为你的家常便饭:Github,如果你编程遇到困难,在上面应该都能找到合适的解答。(前提是你英文不要太差)。Github上好多开源代码足够丰富你的眼界。如果你想成为一个iOS开发者的话这上面两个网站是你经常以及必须会用到的。
C语言程序各行意思?求大神
朋友,纠正一下,你这个不是C语言,是Arduino语言,有很多语法像而已。同时,提醒一下,你这个代码很不完整,连loop函数都没有,工作不了的,而且setup函数都没写完。这个必定是一个带超声波感应的小车子了,但看代码,很多功能都没有打开。另外,百度知道最长只能有1024个字符,给你注释的代码无法发到回答区,就给你截取三个图好了,都是高清的,你将就着看吧。
linux下C语言怎么读鼠标左键
linux 下操作鼠标的函数都在"/dev/input/mice“ 下。有对应的函数可以操作鼠标坐标,功能实现。
c语言中,a[++x][y] = ++tot; 是什么顺序
分解如下:x += 1;tot+=1;a[x][y] = tot;
求C语言的笔试题和编程题!!~~~谢谢~~!!
99乘法表输入十个从大到小数排序输入日期YYYYMMDD判断是不是闰年,这个月有多少天,这个日期的前一天和后一天。
C语言程序答案:将一个整数n转成字符串输出。???不用递归法,还能怎么写
#include <stdio.h>void f(int n, char* buf){ sprintf(buf,"%d",n);}
C语言解答
一般编译器将其视作语法上讲合法,但是行为是典型的未定义行为,结果是不确定的http://bbs.csdn.net/topics/370153775
C语言递归算法?
C语言开发学习有困难,到AAA试听一下
10道经典的C语言例题(含参考程序)
1.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153是一个“水仙花数”,因为153=1^3+5^3+3^3。 #include #include int main() { int bai_wei,shi_wei,ge_wei,i,sum=0; for(i=100;i<1000;i++) { bai_wei=i/100; shi_wei=(i%100)/10; ge_wei=i%10; if(i==pow(bai_wei,3)+pow(shi_wei,3)+pow(ge_wei,3)) { printf("%d ",i); sum++; if(sum%5==0) printf(" "); } } printf(" "); return 0; } 2.请输入任意两个整数x和y,求其最大公约数和最小公倍数。 #include int main() { int x,y,min,max,i; printf("请输入任意两个整数:"); scanf("%d%d",&x,&y); min=x>y?y:x; max=x>y?x:y; for(i=min;i>0;i--) if(x%i==0&&y%i==0) { printf("这两个整数的最大公约数为:%d ",i); break; } for(i=max;i<=x*y;i++) if(i%x==0&&i%y==0) { printf("这两个整数的最小公倍数为:%d ",i); break; } return 0; } 3.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 #include #include #define N 50 int main() { int sum1=0,sum2=0,sum3=0,sum4,i=0; char str[N]; printf("请输入一串字符串:"); scanf("%s",str); for(i=0;i<strlen(str);i++) p=""> </strlen(str);i++)> { if((str[i]>="a"&&str[i]="A"&&str[i]<="Z")) sum1++; if(str[i]==" ") sum2++; if(str[i]>="0"&&str[i]<="9") sum3++; } sum4=strlen(str)-sum1-sum2-sum3; printf("英文字母的个数:%d ",sum1); printf("空格的个数:%d ",sum2); printf("数字的个数:%d ",sum3); printf("其他符号的个数:%d ",sum4); return 0; } 4.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 #include #include int main() { int a,n,s=0,i,x=0,y=0; printf("请输入整数a的值:"); scanf("%d",&a); printf("请输入相加的个数n:"); scanf("%d",&n); for(i=0;i<n;i++) p=""> </n;i++)> { x=y+2*pow(10,i); y=x; s=s+x; } printf("s=%d ",s); return 0; } 5.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3。编程找出1000以内的所有完数。 #include int main() { int sum=0,i,j; printf("在1000以内的完数有:"); for(i=2;i<=1000;i++) { for(j=1;j<i;j++) p=""> </i;j++)> if(i%j==0) sum=sum+j; if(sum==i) printf("%d ",i); sum=0; } printf(" "); return 0; } 6.输入一个不多于5位的正整数,要求:1、求它是几位数;2、逆序打印出个位数字。 #include int pows(int a,int n) { int sum=1,i; for(i=0;i<n;i++) p=""> </n;i++)> sum=sum*a; return sum; } int main() { int n,i,k,x; printf("n="); scanf("%d",&n); for(i=1;i<6;i++) if(n/pows(10,i)==0) { printf("%d ",i); k=i; break; } for(i=0;i<k;i++) p=""> </k;i++)> { x=n/pows(10,i)%10; printf("%d",x); } printf(" "); return 0; } 7.输入一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 #include int main() { int n,a[5],i=0; printf("请输入一个5位数:"); scanf("%d",&n); while(n!=0) { a[i]=n%10; n=n/10; i++; } if(a[0]==a[4]&&a[1]==a[3]) printf("这个数是回文数 "); else printf("这个数不是回文数 "); return 0; } 8.利用递归算法,将所输入的5个字符,以相反顺序打印出来。 #include void digui(char a[],int n) { if(n==1) printf("%c",a[0]); else { printf("%c",a[n-1]); digui(a,n-1); } } int main() { char str[5]; printf("请输入5个字符:"); scanf("%s",str); digui(str,5); printf(" "); return 0; } 9.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…球出这个序列的前20项之和。 #include int main() { int i,a=1,b=1; float sum=0.0; for(i=1;i<=20;i++) { sum=sum+(float)(a+i)/b; b=a+i; a=i; } printf("sum=%f ",sum); return 0; } 10.利用递归算法求5!。 #include int digui(int n) { if(n==1) return 1; else return n*digui(n-1); } int main() { int n,sum; printf("n:"); scanf("%d",&n); sum=digui(n); printf("sum=%d ",sum); return 0; }
关于数据结构的问题,用C语言描述
数据结构复习重点归纳笔记[清华严蔚敏版]数据结构复习重点归纳[适于清华严版教材]一、数据结构的章节结构及重点构成数据结构学科的章节划分基本上为:概论,线性表,栈和队列,串,多维数组和广义表,树和二叉树,图,查找,内排,外排,文件,动态存储分配。对于绝大多数的学校而言,“外排,文件,动态存储分配”三章基本上是不考的,在大多数高校的计算机本科教学过程中,这三章也是基本上不作讲授的。所以,大家在这三章上可以不必花费过多的精力,只要知道基本的概念即可。但是,对于报考名校特别是该校又有在试卷中对这三章进行过考核的历史,那么这部分朋友就要留意这三章了。按照以上我们给出的章节以及对后三章的介绍,数据结构的章节比重大致为:概论:内容很少,概念简单,分数大多只有几分,有的学校甚至不考。线性表:基础章节,必考内容之一。考题多数为基本概念题,名校考题中,鲜有大型算法设计题。如果有,也是与其它章节内容相结合。栈和队列:基础章节,容易出基本概念题,必考内容之一。而栈常与其它章节配合考查,也常与递归等概念相联系进行考查。串 :基础章节,概念较为简单。专门针对于此章的大型算法设计题很少,较常见的是根据KMP进行算法分析。多维数组及广义表 :基础章节,基于数组的算法题也是常见的,分数比例波动较大,是出题的“可选单元”或“侯补单元”。一般如果要出题,多数不会作为大题出。数组常与“查找,排序”等章节结合来作为大题考查。树和二叉树 :重点难点章节,各校必考章节。各校在此章出题的不同之处在于,是否在本章中出一到两道大的算法设计题。通过对多所学校的试卷分析,绝大多数学校在本章都曾有过出大型算法设计题的历史。图 :重点难点章节,名校尤爱考。如果作为重点来考,则多出现于分析与设计题型当中,可与树一章共同构成算法设计大题的题型设计。查找 :重点难点章节,概念较多,联系较为紧密,容易混淆。出题时可以作为分析型题目给出,在基本概念型题目中也较为常见。算法设计型题中可以数组结合来考查,也可以与树一章结合来考查。排序 :与查找一章类似,本章同属于重点难点章节,且概念更多,联系更为紧密,概念之间更容易混淆。在基本概念的考查中,尤爱考各种排序算法的优劣比较此类的题。算法设计大题中,如果作为出题,那么常与数组结合来考查。二、数据结构各章节重点勾划:第0章 概述本章主要起到总领作用,为读者进行数据结构的学习进行了一些先期铺垫。大家主要注意以下几点:数据结构的基本概念,时间和空间复杂度的概念及度量方法,算法设计时的注意事项。本章考点不多,只要稍加注意理解即可。第一章 线性表作为线性结构的开篇章节,线性表一章在线性结构的学习乃至整个数据结构学科的学习中,其作用都是不可低估的。在这一章,第一次系统性地引入链式存储的概念,链式存储概念将是整个数据结构学科的重中之重,无论哪一章都涉及到了这个概念。总体来说,线性表一章可供考查的重要考点有以下几个方面:1.线性表的相关基本概念,如:前驱、后继、表长、空表、首元结点,头结点,头指针等概念。2.线性表的结构特点,主要是指:除第一及最后一个元素外,每个结点都只有一个前趋和只有一个后继。3.线性表的顺序存储方式及其在具体语言环境下的两种不同实现:表空间的静态分配和动态分配。静态链表与顺序表的相似及不同之处。4.线性表的链式存储方式及以下几种常用链表的特点和运算:单链表、循环链表,双向链表,双向循环链表。其中,单链表的归并算法、循环链表的归并算法、双向链表及双向循环链表的插入和删除算法等都是较为常见的考查方式。此外,近年来在不少学校中还多次出现要求用递归算法实现单链表输出(可能是顺序也可能是倒序)的问题。在链表的小题型中,经常考到一些诸如:判表空的题。在不同的链表中,其判表空的方式是不一样的,请大家注意。5.线性表的顺序存储及链式存储情况下,其不同的优缺点比较,即其各自适用的场合。单链表中设置头指针、循环链表中设置尾指针而不设置头指针以及索引存储结构的各自好处。第二章 栈与队列栈与队列,是很多学习DS的同学遇到第一只拦路虎,很多人从这一章开始坐晕车,一直晕到现在。所以,理解栈与队列,是走向DS高手的一条必由之路,。学习此章前,你可以问一下自己是不是已经知道了以下几点:1.栈、队列的定义及其相关数据结构的概念,包括:顺序栈,链栈,共享栈,循环队列,链队等。栈与队列存取数据(请注意包括:存和取两部分)的特点。2.递归算法。栈与递归的关系,以及借助栈将递归转向于非递归的经典算法:n!阶乘问题,fib数列问题,hanoi问题,背包问题,二叉树的递归和非递归遍历问题,图的深度遍历与栈的关系等。其中,涉及到树与图的问题,多半会在树与图的相关章节中进行考查。3.栈的应用:数值表达式的求解,括号的配对等的原理,只作原理性了解,具体要求考查此为题目的算法设计题不多。4.循环队列中判队空、队满条件,循环队列中入队与出队算法。如果你已经对上面的几点了如指掌,栈与队列一章可以不看书了。注意,我说的是可以不看书,并不是可以不作题哦。第三章 串经历了栈一章的痛苦煎熬后,终于迎来了串一章的柳暗花明。串,在概念上是比较少的一个章节,也是最容易自学的章节之一,但正如每个过来人所了解的,KMP算法是这一章的重要关隘,突破此关隘后,走过去又是一马平川的大好DS山河了,呵呵。串一章需要攻破的主要堡垒有:1.串的基本概念,串与线性表的关系(串是其元素均为字符型数据的特殊线性表),空串与空格串的区别,串相等的条件2.串的基本操作,以及这些基本函数的使用,包括:取子串,串连接,串替换,求串长等等。运用串的基本操作去完成特定的算法是很多学校在基本操作上的考查重点。3.顺序串与链串及块链串的区别和联系,实现方式。4.KMP算法思想。KMP中next数组以及nextval数组的求法。明确传统模式匹配算法的不足,明确next数组需要改进之外。其中,理解算法是核心,会求数组是得分点。不用我多说,这一节内容是本章的重中之重。可能进行的考查方式是:求next和nextval数组值,根据求得的next或nextval数组值给出运用KMP算法进行匹配的匹配过程。第四章 数组与广义表学过程序语言的朋友,数组的概念我们已经不是第一次见到了,应该已经“一回生,二回熟”了,所以,在概念上,不会存在太大障碍。但作为考研课程来说,本章的考查重点可能与大学里的程序语言所关注的不太一样,下面会作介绍。广义表的概念,是数据结构里第一次出现的。它是线性表或表元素的有限序列,构成该结构的每个子表或元素也是线性结构的,所以,这一章也归入线性结构中。本章的考查重点有:1.多维数组中某数组元素的position求解。一般是给出数组元素的首元素地址和每个元素占用的地址空间并组给出多维数组的维数,然后要求你求出该数组中的某个元素所在的位置。2.明确按行存储和按列存储的区别和联系,并能够按照这两种不同的存储方式求解1中类型的题。3.将特殊矩阵中的元素按相应的换算方式存入数组中。这些矩阵包括:对称矩阵,三角矩阵,具有某种特点的稀疏矩阵等。熟悉稀疏矩阵的三种不同存储方式:三元组,带辅助行向量的二元组,十字链表存储。掌握将稀疏矩阵的三元组或二元组向十字链表进行转换的算法。4.广义表的概念,特别应该明确表头与表尾的定义。这一点,是理解整个广义表一节算法的基础。近来,在一些学校中,出现了这样一种题目类型:给出对某个广义表L若干个求了若干次的取头和取尾操作后的串值,要求求出原广义表L。大家要留意。5.与广义表有关的递归算法。由于广义表的定义就是递归的,所以,与广义表有关的算法也常是递归形式的。比如:求表深度,复制广义表等。这种题目,可以根据不同角度广义表的表现形式运用两种不同的方式解答:一是把一个广义表看作是表头和表尾两部分,分别对表头和表尾进行操作;二是把一个广义表看作是若干个子表,分别对每个子表进行操作。第五章 树与二叉树从对线性结构的研究过度到对树形结构的研究,是数据结构课程学习的一次跃变,此次跃变完成的好坏,将直接关系到你到实际的考试中是否可以拿到高分,而这所有的一切,将最终影响你的专业课总分。所以,树这一章的重要性,已经不说自明了。总体来说,树一章的知识点包括:二叉树的概念、性质和存储结构,二叉树遍历的三种算法(递归与非递归),在三种基本遍历算法的基础上实现二叉树的其它算法,线索二叉树的概念和线索化算法以及线索化后的查找算法,最优二叉树的概念、构成和应用,树的概念和存储形式,树与森林的遍历算法及其与二叉树遍历算法的联系,树与森林和二叉树的转换。下面我们来看考试中对以上知识的主要考查方法:1.二叉树的概念、性质和存储结构考查方法可有:直接考查二叉树的定义,让你说明二叉树与普通双分支树的区别;考查满二叉树和完全二叉树的性质,普通二叉树的五个性质:第i层的最多结点数,深度为k的二叉树的最多结点数,n0=n2+1的性质,n个结点的完全二叉树的深度,顺序存储二叉树时孩子结点与父结点之间的换算关系(左为:2*i,右为:2*i+1)。二叉树的顺序存储和二叉链表存储的各自优缺点及适用场合,二叉树的三叉链表表示方法。2.二叉树的三种遍历算法这一知识点掌握的好坏,将直接关系到树一章的算法能否理解,进而关系到树一章的算法设计题能否顺利完成。二叉树的遍历算法有三种:先序,中序和后序。其划分的依据是视其每个算法中对根结点数据的访问顺序而定。不仅要熟练掌握三种遍历的递归算法,理解其执行的实际步骤,并且应该熟练掌握三种遍历的非递归算法。由于二叉树一章的很多算法,可以直接根据三种递归算法改造而来(比如:求叶子个数),所以,掌握了三种遍历的非递归算法后,对付诸如:“利用非递归算法求二叉树叶子个数”这样的题目就下笔如有神了。我会在另一篇系列文章()里给出三种遍历的递归和非递归算法的背记版,到时请大家一定熟记。3.可在三种遍历算法的基础上改造完成的其它二叉树算法:求叶子个数,求二叉树结点总数,求度为1或度为2的结点总数,复制二叉树,建立二叉树,交换左右子树,查找值为n的某个指定结点,删除值为n的某个指定结点,诸如此类等等等等。如果你可以熟练掌握二叉树的递归和非递归遍历算法,那么解决以上问题就是小菜一碟了。4.线索二叉树:线索二叉树的引出,是为避免如二叉树遍历时的递归求解。众所周知,递归虽然形式上比较好理解,但是消耗了大量的内存资源,如果递归层次一多,势必带来资源耗尽的危险,为了避免此类情况,线索二叉树便堂而皇之地出现了。对于线索二叉树,应该掌握:线索化的实质,三种线索化的算法,线索化后二叉树的遍历算法,基本线索二叉树的其它算法问题(如:查找某一类线索二叉树中指定结点的前驱或后继结点就是一类常考题)。5.最优二叉树(哈夫曼树):最优二叉树是为了解决特定问题引出的特殊二叉树结构,它的前提是给二叉树的每条边赋予了权值,这样形成的二叉树按权相加之和是最小的。最优二叉树一节,直接考查算法源码的很少,一般是给你一组数据,要求你建立基于这组数据的最优二叉树,并求出其最小权值之和,此类题目不难,属送分题。6.树与森林:二叉树是一种特殊的树,这种特殊不仅仅在于其分支最多为2以及其它特征,一个最重要的特殊之处是在于:二叉树是有序的!即:二叉树的左右孩子是不可交换的,如果交换了就成了另外一棵二叉树,这样交换之后的二叉树与原二叉树我们认为是不相同的两棵二叉树。但是,对于普通的双分支树而言,不具有这种性质。树与森林的遍历,不像二叉树那样丰富,他们只有两种遍历算法:先根与后根(对于森林而言称作:先序与后序遍历)。在难度比较大的考试中,也有基于此二种算法的基础上再进行扩展要求你利用这两种算法设计其它算法的,但一般院校很少有这种考法,最多只是要求你根据先根或后根写出他们的遍历序列。此二者的先根与后根遍历与二叉树中的遍历算法是有对应关系的:先根遍历对应二叉树的先序遍历,而后根遍历对应二叉树的中序遍历。这一点成为很多学校的考点,考查的方式不一而足,有的直接考此句话,有的是先让你求解遍历序列然后回答这个问题。二叉树、树与森林之所以能有以上的对应关系,全拜二叉链表所赐。二叉树使用二叉链表分别存放他的左右孩子,树利用二叉链表存储孩子及兄弟(称孩子兄弟链表),而森林也是利用二叉链表存储孩子及兄弟。树一章,处处是重点,道道是考题,大家务必个个过关。第六章 图如果说,从线性结构向树形结构研究的转变,是数据结构学科对数据组织形式研究的一次升华,那么从树形结构的研究转到图形结构的研究,则进一步让我们看到了数据结构对于解决实际问题的重大推动作用。图这一章的特点是:概念繁多,与离散数学中图的概念联系紧密,算法复杂,极易被考到,且容易出大题,尤其是名校,作为考研课程,如果不考查树与图两章的知识,几乎是不可想像的。下面我们看一下图这一章的主要考点以及这些考点的考查方式:1.考查有关图的基本概念问题:这些概念是进行图一章学习的基础,这一章的概念包括:图的定义和特点,无向图,有向图,入度,出度,完全图,生成子图,路径长度,回路,(强)连通图,(强)连通分量等概念。与这些概念相联系的相关计算题也应该掌握。2.考查图的几种存储形式:图的存储形式包括:邻接矩阵,(逆)邻接表,十字链表及邻接多重表。在考查时,有的学校是给出一种存储形式,要求考生用算法或手写出与给定的结构相对应的该图的另一种存储形式。3.考查图的两种遍历算法:深度遍历和广度遍历深度遍历和广度遍历是图的两种基本的遍历算法,这两个算法对图一章的重要性等同于“先序、中序、后序遍历”对于二叉树一章的重要性。在考查时,图一章的算法设计题常常是基于这两种基本的遍历算法而设计的,比如:“求最长的最短路径问题”和“判断两顶点间是否存在长为K的简单路径问题”,就分别用到了广度遍历和深度遍历算法。4.生成树、最小生成树的概念以及最小生成树的构造:PRIM算法和KRUSKAL算法。考查时,一般不要求写出算法源码,而是要求根据这两种最小生成树的算法思想写出其构造过程及最终生成的最小生成树。5.拓扑排序问题:拓扑排序有两种方法,一是无前趋的顶点优先算法,二是无后继的顶点优先算法。换句话说,一种是“从前向后”的排序,一种是“从后向前”排。当然,后一种排序出来的结果是“逆拓扑有序”的。6.关键路径问题:这个问题是图一章的难点问题。理解关键路径的关键有三个方面:一是何谓关键路径,二是最早时间是什么意思、如何求,三是最晚时间是什么意思、如何求。简单地说,最早时间是通过“从前向后”的方法求的,而最晚时间是通过“从后向前”的方法求解的,并且,要想求最晚时间必须是在所有的最早时间都已经求出来之后才能进行。这个问题拿来直接考算法源码的不多,一般是要求按照书上的算法描述求解的过程和步骤。在实际设计关键路径的算法时,还应该注意以下这一点:采用邻接表的存储结构,求最早时间和最晚时间要采用不同的处理方法,即:在算法初始时,应该首先将所有顶点的最早时间全部置为0。关键路径问题是工程进度控制的重要方法,具有很强的实用性。7.最短路径问题:与关键路径问题并称为图一章的两只拦路虎。概念理解是比较容易的,关键是算法的理解。最短路径问题分为两种:一是求从某一点出发到其余各点的最短路径;二是求图中每一对顶点之间的最短路径。这个问题也具有非常实用的背景特色,一个典型的应该就是旅游景点及旅游路线的选择问题。解决第一个问题用DIJSKTRA算法,解决第二个问题用FLOYD算法。注意区分。第七章 查找在不少数据结构的教材中,是把查找与排序放入高级数据结构中的。应该说,查找和排序两章是前面我们所学的知识的综合运用,用到了树、也用到了链表等知识,对这些数据结构某一方面的运用就构成了查找和排序。现实生活中,search几乎无处不在,特别是现在的网络时代,万事离不开search,小到文档内文字的搜索,大到INTERNET上的搜索,search占据了我们上网的大部分时间。在复习这一章的知识时,你需要先弄清楚以下几个概念:关键字、主关键字、次关键字的含义;静态查找与动态查找的含义及区别;平均查找长度ASL的概念及在各种查找算法中的计算方法和计算结果,特别是一些典型结构的ASL值,应该记住。在DS的教材中,一般将search分为三类:1st,在顺序表上的查找;2nd,在树表上的查找;3rd,在哈希表上的查找。下面详细介绍其考查知识点及考查方式:1.线性表上的查找:主要分为三种线性结构:顺序表,有序顺序表,索引顺序表。对于第一种,我们采用传统查找方法,逐个比较。对于及有序顺序表我们采用二分查找法。对于第三种索引结构,我们采用索引查找算法。考生需要注意这三种表下的ASL值以及三种算法的实现。其中,二分查找还要特别注意适用条件以及其递归实现方法。2.树表上的查找:这是本章的重点和难点。由于这一节介绍的内容是使用树表进行的查找,所以很容易与树一间的某些概念相混淆。本节内容与树一章的内容有联系,但也有很多不同,应注意规纳。树表主要分为以下几种:二叉排序树,平衡二叉树,B树,键树。其中,尤以前两种结构为重,也有部分名校偏爱考B树的。由于二叉排序树与平衡二叉树是一种特殊的二叉树,所以与二叉树的联系就更为紧密,二叉树一章学好了,这里也就不难了。二叉排序树,简言之,就是“左小右大”,它的中序遍历结果是一个递增的有序序列。平衡二叉树是二叉排序树的优化,其本质也是一种二叉排序树,只不过,平衡二叉树对左右子树的深度有了限定:深度之差的绝对值不得大于1。对于二叉排序树,“判断某棵二叉树是否二叉排序树”这一算法经常被考到,可用递归,也可以用非递归。平衡二叉树的建立也是一个常考点,但该知识点归根结底还是关注的平衡二叉树的四种调整算法,所以应该掌握平衡二叉树的四种调整算法,调整的一个参照是:调整前后的中序遍历结果相同。B树是二叉排序树的进一步改进,也可以把B树理解为三叉、四叉....排序树。除B树的查找算法外,应该特别注意一下B树的插入和删除算法。因为这两种算法涉及到B树结点的分裂和合并,是一个难点。B树是报考名校的同学应该关注的焦点之一。键树也称字符树,特别适用于查找英文单词的场合。一般不要求能完整描述算法源码,多是根据算法思想建立键树及描述其大致查找过程。3.基本哈希表的查找算法:哈希一词,是外来词,译自“hash”一词,意为:散列或杂凑的意思。哈希表查找的基本思想是:根据当前待查找数据的特征,以记录关键字为自变量,设计一个function,该函数对关键字进行转换后,其解释结果为待查的地址。基于哈希表的考查点有:哈希函数的设计,冲突解决方法的选择及冲突处理过程的描述。第八章 内部排序内排是DS课程中最后一个重要的章节,建立在此章之上的考题可以有多种类型:填空,选择,判断乃至大型算法题。但是,归结到一点,就是考查你对书本上的各种排序算法及其思想以及其优缺点和性能指标(时间复杂度)能否了如指掌。这一章,我们对重点的规纳将跟以上各章不同。我们将从以下几个侧面来对排序一章进行不同的规纳,以期能更全面的理解排序一章的总体结构及各种算法。从排序算法的种类来分,本章主要阐述了以下几种排序方法:插入、选择、交换、归并、计数等五种排序方法。其中,在插入排序中又可分为:直接插入、折半插入、2路插入、希尔排序。这几种插入排序算法的最根本的不同点,说到底就是根据什么规则寻找新元素的插入点。直接插入是依次寻找,折半插入是折半寻找。希尔排序,是通过控制每次参与排序的数的总范围“由小到大”的增量来实现排序效率提高的目的。交换排序,又称冒泡排序,在交换排序的基础上改进又可以得到快速排序。快速排序的思想,一语以敝之:用中间数将待排数据组一分为二。快速排序,在处理的“问题规模”这个概念上,与希尔有点相反,快速排序,是先处理一个较大规模,然后逐渐把处理的规模降低,最终达到排序的目的。选择排序,相对于前面几种排序算法来说,难度大一点。具体来说,它可以分为:简单选择、树选择、堆排。这三种方法的不同点是,根据什么规则选取最小的数。简单选择,是通过简单的数组遍历方案确定最小数;树选择,是通过“锦标赛”类似的思想,让两数相比,不断淘汰较大(小)者,最终选出最小(大)数;而堆排序,是利用堆这种数据结构的性质,通过堆元素的删除、调整等一系列操作将最小数选出放在堆顶。堆排序中的堆建立、堆调整是重要考点。树选择排序,也曾经在一些学校中的大型算法题中出现,请大家注意。归并排序,故名思义,是通过“归并”这种操作完成排序的目的,既然是归并就必须是两者以上的数据集合才可能实现归并。所以,在归并排序中,关注最多的就是2路归并。算法思想比较简单,有一点,要铭记在心:归并排序是稳定排序。基数排序,是一种很特别的排序方法,也正是由于它的特殊,所以,基数排序就比较适合于一些特别的场合,比如扑克牌排序问题等。基数排序,又分为两种:多关键字的排序(扑克牌排序),链式排序(整数排序)。基数排序的核心思想也是利用“基数空间”这个概念将问题规模规范、变小,并且,在排序的过程中,只要按照基排的思想,是不用进行关键字比较的,这样得出的最终序列就是一个有序序列。本章各种排序算法的思想以及伪代码实现,及其时间复杂度都是必须掌握的,学习时要多注意规纳、总结、对比。此外,对于教材中的10.7节,要求必须熟记,在理解的基础上记忆,这一节几乎成为很多学校每年的必考点。至此,数据结构所有章节的章节重点问题,我们已经规纳完毕,使用清华严版教材的同学,在复习的同时,可以参照本贴给出的重点进行复习。但是,由于作者本人水平有限,可能有很多考点没有规纳出来,也可能有些考点规纳有误,在此,作者本人诚恳希望诸位朋友直面提出,我会不断完善和发布新的关于数据结构复习的总结以及笔记严蔚敏数据结构为主的笔记二第二章:线性表(包括习题与答案及要点)--------------------------------------------------------------------------------本章的重点是掌握顺序表和单链表上实现的各种基本算法及相关的时间性能分析,难点是使用本章所学的基本知识设计有效算法解决与线性表相关的应用问题。要求达到<识记>层次的内容有:线性表的逻辑结构特征;线性表上定义的基本运算,并利用基本运算构造出较复杂的运算。要求达到<综合应用>层次的内容有:顺序表的含义及特点,顺序表上的插入、删除操作及其平均时间性能分析,解决简单应用问题。链表如何表示线性表中元素之间的逻辑关系;单链表、双链表、循环链表链接方式上的区别;单链表上实现的建表、查找、插入和删除等基本算法及其时间复杂度。循环链表上尾指针取代头指针的作用,以及单循环链表上的算法与单链表上相应算法的异同点。双链表的定义和相关算法。利用链表设计算法解决简单应用问题。要求达到<领会>层次的内容就是顺序表和链表的比较,以及如何选择其一作为其存储结构才能取得较优的时空性能。--------------------------------------------------------------------------------线性表的逻辑结构特征是很容易理解的,如其名,它的逻辑结构特征就好象是一条线,上面打了一个个结,很形象的,如果这条线上面有结,那么它就是非空表,只能有一个开始结点,有且只能有一个终端结点,其它的结前后所相邻的也只能是一个结点(直接前趋和直接后继)。关于线性表上定义的基本运算,主要有构造空表、求表长、取结点、查找、插入、删除等。--------------------------------------------------------------------------------线性表的逻辑结构和存储结构之间的关系。在计算机中,如何把线性表的结点存放到存储单元中,就有许多方法,最简单的方法就是按顺序存储。就是按线性表的逻辑结构次序依次存放在一组地址连续的存储单元中。在存储单元中的各元素的物理位置和逻辑结构中各结点相邻关系是一致的。在顺序表中实现的基本运算主要讨论了插入和删除两种运算。相关的算法我们通过练习掌握。对于顺序表的插入和删除运算,其平均时间复杂度均为O(n)。--------------------------------------------------------------------------------线性表的链式存储结构。它与顺序表不同,链表是用一组任意的存储单元来存放线性表的结点,这组存储单元可以分布在内存中任何位置上。因此,链表中结点的逻辑次序和物理次序不一定相同。所以为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还存储了其后继结点的地址信息(即
c语言采用递归调用方法倒序输出26个英文大写字母,各位大侠帮忙,急求...
ZYXWVUTSRQPONMLKJIHGFEDCBA#include <stdio.h>fun(char c){ printf("%c",c); while (c<"A"); fun(--c);}main(){ char ch="Z"; fun(ch);}
用c语言编一个程序 要求1:输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940
#include<stdio.h> #include<stdlib.h> char* month_str[]={"January","February","March","April","May","June","July","August","September","October","November","December"}; char* week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; int IsLeapYear(int year) /*find out the year is leap year or not*/ { if((year%4==0&&year%100!=0)||(year%400==0)) //这里是判断是否是闰年的 return 1; //如果是闰年就返回值1 else return 0;//不是的话返回0 } int month_day(int year,int month) //这个函数用来判断这年的月分有多少天的 { int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31}; if(IsLeapYear(year)&&month==2) /*判断是判断是否是闰年,如果是闰年而且这个月是2月那这个月有29天*/ return 29; else return(mon_day[month-1]); } int DaySearch(int year,int month,int day) /*这个函数是计算输入的日期对应的星期*/ { int c=0; float s; int m; for(m=1;m<month;m++) c=c+month_day(year,m); //这是计算输入的月分的累计天数 c=c+day; //计算日期在这一年中是第几天 s=year-1+(int)(year-1)/4+(int )(year-1)/100+(int)(year-1)/400-40+c; /*这是计算日期对应的星期公式,这个公式可在网上查到*/ return ((int)s%7); //与上语句同属计算日期对应的星期 } int PrintAllYear(int year)/*这个函数是用来输出全年的日历*/ { int temp; int i,j; printf(" %d Calander ",year); for(i=1;i<=12;i++) { printf(" %s(%d) ",month_str[i-1],i); //输出月分名称 printf("0 1 2 3 4 5 6 "); printf("S M T W T F S "); temp=DaySearch(year,i,1); for(j=1;j<=month_day(year,i)+temp;j++) { if(j-temp<=0) printf(" "); else if(j-temp<10) printf("%d ",j-temp); else printf("%d ",j-temp); if(j%7==0) printf(" "); } } return 0; } int main() { int option,da; char ch; int year,month,day; printf("Copyright @ 2005 TianQian All rights reserved!:):):)"); printf(" Welcome to use the WanNianLi system! "); while(1) { printf(" Please select the service you need: "); //用来提示选择执行功能 printf(" 1 Search what day the day is"); //选择1时,用来计算这一天是星期几 printf(" 2 Search whether the year is leap year or not"); //计算是否这年是闰年 printf(" 3 Print the calander of the whole year"); //输入全年的日历 printf(" 4 Exit "); //选择退出程序 scanf("%d",&option); switch(option) //用来选择执行 { case 1: while(1) { printf(" Please input the year,month and day(XXXX,XX,XX):"); //提示输入 scanf("%d,%d,%d,%c",&year,&month,&day); //读入数据 da=DaySearch(year,month,day); //调用DaySearch()函数来计算是星期几 printf(" %d-%d-%d is %s,do you want to continue?(Y/N)",year,month,day,week[da]); fflush(stdin); //刷新输入缓冲区 scanf("%c",&ch); if(ch=="N"||ch=="n") break; } break; case 2: /*当为2时,进行相应运算*/ while(1) { printf(" Please input the year which needs searched?(XXXX)"); scanf("%d",&year); if(IsLeapYear(year)) printf(" %d is Leap year,do you want to continue?(Y/N)",year); else printf(" %d is not Leap year,do you want to continue(Y/N)?",year); fflush(stdin); scanf("%c",&ch); if(ch=="N"||ch=="n") break; } break; case 3: /*当为3时运行相应的运算*/ while(1) { printf(" Please input the year which needs printed(XXXX)"); scanf("%d",&year); PrintAllYear(year); printf(" Do you want to continue to print(Y/N)?"); fflush(stdin); scanf("%c",&ch); if(ch=="N"||ch=="n") break; } break; case 4: fflush(stdin); printf("Are you sure?(Y/N)"); scanf("%c",&ch); if(ch=="Y"||ch=="y") exit(1); break; default: printf(" Error:Sorry,there is no this service now! "); break; } } return 0; }我只有这个代码
c语言中的递归
递归具体用法其实就是让你把一个问题分解成很多个类似的情况,虽然你要解决这个问题非常难,莫名其妙,要你想几年,但是把他一直递归分解,就变成很好理解的单种情况,而你整个问题又是跟这个单种情况类似,把整个问题通过递归调用一层一层分解到最低级简单的那种情况,就是你所需要理解的了。一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层。(引自谭浩强的C语言书里)用递归法计算n!可用下述公式表示: n!=1 (n=0,1) n×(n-1)! (n>1)具体如下long ff(int n){ long f; if(n<0) printf("n<0,input error"); else if(n==0||n==1) f=1; else f=ff(n-1)*n; return(f);}main(){ int n; long y; printf(" input a inteager number: "); scanf("%d",&n); y=ff(n); printf("%d!=%ld",n,y);}较难题:一块板上有三根针,A,B,C。A针上套有64个大小不等的圆盘,大的在下,小的在上。如图5.4所示。要把这64个圆盘从A针移动C针上,每次只能移动一个圆盘,移动可以借助B针进行。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。求移动的步骤。具体如下move(int n,int x,int y,int z){ if(n==1) printf("%c-->%c ",x,z); else { move(n-1,x,z,y); printf("%c-->%c ",x,z); move(n-1,y,x,z); }}main(){ int h; printf(" input number: "); scanf("%d",&h); printf("the step to moving %2d diskes: ",h); move(h,"a","b","c");} 从程序中可以看出,move函数是一个递归函数,它有四个形参n,x,y,z。n表示圆盘数,x,y,z分别表示三根针。move 函数的功能是把x上的n个圆盘移动到z上。当n==1时,直接把x上的圆盘移至z上,输出x→z。如n!=1则分为三步:递归调用move函数,把n-1个圆盘从x移到y;输出x→z;递归调用move函数,把n-1个圆盘从y移到z。在递归调用过程中n=n-1,故n的值逐次递减,最后n=1时,终止递归,逐层返回。当n=4 时程序运行的结果为:
c语言中,什么是函数的递归,能举个例子么
int rev(int i){ if(i<5) rev(i++); else return i;}
有什么好玩的C语言小程序
只要你喜欢都是。
C语言编程,输入十进制数输出十六进制和八进制
#includevoid showbit(int n){ if(n>1){ showbit(n/2); printf(""); } printf("%d",n%2);}void showoct(int n){ if(n>7){ showoct(n/8); printf(""); } printf("%d",n%8);}void showhex(int n){ if(n>15){ showhex(n/16); printf(""); } printf("%d",n%16);}int main(){ int a; printf("input a num:"); scanf("%d",&a); showbit(a); printf(" "); showoct(a); printf(" "); showhex(a); printf(" ");}
C语言。将输入的十进制数转为b进制数。
填空是m%kfor(;i>=0;i--)这行语句要改下,改成for(i--;i>=0;i--) 因为上面for循环多加了1,这里打印不减的话会多打出一个垃圾数。
C语言初学者代码问题
tran[j]+=ch[j];改为tran[j]=ch[j]+1;
C语言问题--时间片轮转调度算法
#include "stdio.h"#include "stdlib.h"#include "string.h"typedef struct node{ char name[10]; /*进程标识符*/ int prio; /*进程优先数*/ int round; /*进程时间轮转时间片*/ int cputime; /*进程占用CPU时间*/ int needtime; /*进程到完成还要的时间*/ int count; /*计数器*/ char state; /*进程的状态*/ struct node *next; /*链指针*/}PCB;PCB *finish,*ready,*tail,*run; /*队列指针*/int N; /*进程数*//*将就绪队列中的第一个进程投入运行*/firstin(){ run=ready; /*就绪队列头指针赋值给运行头指针*/ run->state="R"; /*进程状态变为运行态*/ ready=ready->next; /*就绪对列头指针后移到下一进程*/}/*标题输出函数*/void prt1(char a){ if(toupper(a)=="P") /*优先数法*/ printf(" name cputime needtime priority state "); else printf(" name cputime needtime count round state ");}/*进程PCB输出*/void prt2(char a,PCB *q){ if(toupper(a)=="P") /*优先数法的输出*/ printf(" %-10s%-10d%-10d%-10d %c ",q->name, q->cputime,q->needtime,q->prio,q->state); else/*轮转法的输出*/ printf(" %-10s%-10d%-10d%-10d%-10d %-c ",q->name, q->cputime,q->needtime,q->count,q->round,q->state);}/*输出函数*/void prt(char algo){ PCB *p; prt1(algo); /*输出标题*/ if(run!=NULL) /*如果运行指针不空*/ prt2(algo,run); /*输出当前正在运行的PCB*/ p=ready; /*输出就绪队列PCB*/ while(p!=NULL) { prt2(algo,p); p=p->next; } p=finish; /*输出完成队列的PCB*/ while(p!=NULL) { prt2(algo,p); p=p->next; } getch(); /*压任意键继续*/}/*优先数的插入算法*/insert1(PCB *q){ PCB *p1,*s,*r; int b; s=q; /*待插入的PCB指针*/ p1=ready; /*就绪队列头指针*/ r=p1; /*r做p1的前驱指针*/ b=1; while((p1!=NULL)&&b) /*根据优先数确定插入位置*/ if(p1->prio>=s->prio) { r=p1; p1=p1->next; } else b=0; if(r!=p1) /*如果条件成立说明插入在r与p1之间*/ { r->next=s; s->next=p1; } else { s->next=p1; /*否则插入在就绪队列的头*/ ready=s; }}/*轮转法插入函数*/insert2(PCB *p2){ tail->next=p2; /*将新的PCB插入在当前就绪队列的尾*/ tail=p2; p2->next=NULL;}/*优先数创建初始PCB信息*/void create1(char alg){ PCB *p; int i,time; char na[10]; ready=NULL; /*就绪队列头指针*/ finish=NULL; /*完成队列头指针*/ run=NULL; /*运行队列指针*/ printf("Enter name and time of process "); /*输入进程标识和所需时间创建PCB*/ for(i=1;i<=N;i++) { p=malloc(sizeof(PCB)); scanf("%s",na); scanf("%d",&time); strcpy(p->name,na); p->cputime=0; p->needtime=time; p->state="w"; p->prio=50-time; if(ready!=NULL) /*就绪队列不空调用插入函数插入*/ insert1(p); else { p->next=ready; /*创建就绪队列的第一个PCB*/ ready=p; } } clrscr(); printf(" output of priority: "); printf("************************************************ "); prt(alg); /*输出进程PCB信息*/ run=ready; /*将就绪队列的第一个进程投入运行*/ ready=ready->next; run->state="R";}/*轮转法创建进程PCB*/void create2(char alg){ PCB *p; int i,time; char na[10]; ready=NULL; finish=NULL; run=NULL; printf("Enter name and time of round process "); for(i=1;i<=N;i++) { p=malloc(sizeof(PCB)); scanf("%s",na); scanf("%d",&time); strcpy(p->name,na); p->cputime=0; p->needtime=time; p->count=0; /*计数器*/ p->state="w"; p->round=2; /*时间片*/ if(ready!=NULL) insert2(p); else { p->next=ready; ready=p; tail=p; } } clrscr(); printf(" output of round "); printf("************************************************ "); prt(alg); /*输出进程PCB信息*/ run=ready; /*将就绪队列的第一个进程投入运行*/ ready=ready->next; run->state="R";}/*优先数调度算法*/priority(char alg){ while(run!=NULL) /*当运行队列不空时,有进程正在运行*/ { run->cputime=run->cputime+1; run->needtime=run->needtime-1; run->prio=run->prio-3; /*每运行一次优先数降低3个单位*/ if(run->needtime==0) /*如所需时间为0将其插入完成队列*/ { run->next=finish; finish=run; run->state="F"; /*置状态为完成态*/ run=NULL; /*运行队列头指针为空*/ if(ready!=NULL) /*如就绪队列不空*/ firstin(); /*将就绪对列的第一个进程投入运行*/ } else /*没有运行完同时优先数不是最大,则将其变为就绪态插入到就绪队列*/ if((ready!=NULL)&&(run->prio<ready->prio)) { run->state="W"; insert1(run); firstin(); /*将就绪队列的第一个进程投入运行*/ } prt(alg); /*输出进程PCB信息*/ }}/*时间片轮转法*/roundrun(char alg){ while(run!=NULL) { run->cputime=run->cputime+1; run->needtime=run->needtime-1; run->count=run->count+1; if(run->needtime==0)/*运行完将其变为完成态,插入完成队列*/ { run->next=finish; finish=run; run->state="F"; run=NULL; if(ready!=NULL) firstin(); /*就绪对列不空,将第一个进程投入运行*/ } else if(run->count==run->round) /*如果时间片到*/ { run->count=0; /*计数器置0*/ if(ready!=NULL) /*如就绪队列不空*/ { run->state="W"; /*将进程插入到就绪队列中等待轮转*/ insert2(run); firstin(); /*将就绪对列的第一个进程投入运行*/ } } prt(alg); /*输出进程信息*/ }}/*主函数*/main(){ char algo; /*算法标记*/ clrscr(); printf("type the algorithm:P/R(priority/roundrobin) "); scanf("%c",&algo); /*输入字符确定算法*/ printf("Enter process number "); scanf("%d",&N); /*输入进程数*/ if(algo=="P"||algo=="p") { create1(algo); /*优先数法*/ priority(algo); } else if(algo=="R"||algo=="r") { create2(algo); /*轮转法*/ roundrun(algo); }}
有关C语言编程的题!急!!!
楼上会不会搜索啊?搜了这么个
栈和队列,pop,push是c语言中本身就有的还是需要自己定义?
它们不是C语言本身的组成部分,需要程序员自定义。
c语言去掉字符串的空格函数trim
c语言去掉字符串的空格函数 void trim(char *s){} 如下:#include <stdio.h>void trim(char *s){int i,L;L=strlen(s);for (i=L-1;i>=0;i--) if (s[i]==" ")strcpy(s+i,s+i+1);}int main(){char s[100];printf("input 1 line string ");gets(s);trim(s);printf("%s ",s);return 0;}例如:input 1 line stringabc 123 XYZ |输出:abc123XYZ|
C语言问题,求大神解答!
#include <stdio.h>int main( ){float Score[83],sum=0,avg;int i;for(i=0;i<83;i++)//输入成绩{printf("请输入学号为%d的同学的语文成绩 ",i+1);scanf("%f",&Score[i]);sum+=Score[i];}avg=sum/83;for(i=0;i<83;i++){if(Score[i]<avg)printf("学号:%d 成绩:%0.2f",i+1,Score[i]);}return 0;}烦请采纳 谢谢
c语言编程 结构体
这个太长了,这会写不起,给你个模板把
C语言、asp和cgi脚本语言,有人能详细的说说有什么不同处
CGI CGI是公共网关接口的英文缩写,是一个在Web服务器和CGI程序之间传递信息的规范。CGI程序是为接收和返回符合CGI规范的数据设计的。这种程序可以用任意编程语言编写,如C、Perl、Java或Visual Basic。 CGI程序是Web服务器同用户动态交互作用的最普遍方式。例如,许多含有表格的HTML页面用CGI程序处理表格数据。另一种为Web用户提供动态反馈的越来越常见的方式是包含在用户机器上运行而不是在Web服务器上运行的脚本或程序。这些程序可以是Java小应用程序、Java脚本或ActiveX控件。这些技术统称客户端解决方法,而CGI是服务器端解决方法,因为处理过程是在Web服务器上进行的。 CGI存在一个问题,即每执行一次CGI脚本就要启动一个新过程。对于繁忙的Web网站,这可能明显降低服务器速度。一个更有效但也更难实现的解决方法是用服务器API,如ISAPI或NSAPI。还有一个日益流行的解决方法是用Java小服务程序。 活动服务器页面 活动服务器页面(Active Server Pages)是一个用ActiveX脚本——通常是VB脚本或JScript代码——动态创建带.ASP扩展名的Web页面的规范。当浏览器请求ASP页面时,Web服务器就用HTML代码生成页面并发送给浏览器。ASP页面类似CGI脚本,但它能让Visual Basic程序员使用熟悉的工具。
c语言为什么我这个链表第一个成绩输出时永远都是0
score应该使用%f来读入
求将下面C语言翻译成汇编语言
你用的什么单片机啊
c语言这里的p1=p2=(struct student *)malloc(LEH)中struct student *这里为什么要加*呢?
首先得了解p1,p2是什么类型,类型需要匹配左值才能被赋值。
记P=photosumo;在c语言中有printf("%6.3s",P);输出结果是 pho。前面表示空格,这是为什么呢?求知道呀
小数点前面的数字含义如下:用于控制显示数值的宽度。小数点后面的数字含义如下:当type=d,i,o,u,x时,没有影响当type=e,E,f时表示的最大小数位数 当type=其他,表示数值显示的最大宽度也就是说:你限制了数值最大的宽度为3,而用6个宽度来显示,所以就会得到三个空格+三个字符咯。
c语言高手帮忙给分析一下,并作出解释
一团糟!看不懂!把你的程序规范化写出来,这样才能让别人接受!
C语言是什么?cmd是c语言吗?
首先cmd是command 系统命令执行程序,只是系统模拟的dos操作环境下的命令,和这个没多大关系。C与C++的区别 C是一个结构化语言,如谭老爷子所说:它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。 对语言本身而言,C是C++的子集,那么是什么样的一个子集?从上文可以看出, C实现了C++中过程化控制及其它相关功能,而在C++中的C(我称它为“C+”),相对于原来的C还有所加强,引入了重载、内联函数、异常处理等等玩艺儿,C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类等等。 再提高一点,在C++中,数据封装、类型这些东东已不是什么新鲜事了,需要考虑的是诸如:对象粒度的选择、对象接口的设计和继承、组合与继承的使用等等问题。 所以相对于C,C++包含了更丰富的“设计”的概念,但C是C++的一个自洽子集,也具有强大的功能,同样值得学习。 可以这样说想学好C++,非学C不可!!! 若有帮助 望采纳!
c语言中tydeof struct是什么?
有关结构体的。。。查查C语言结构体方面的资料看看
c语言中container_of, typeof, offsetof这些是哪个标准的?
1. container_of是Linux内核中实现的宏,不是C语言的标准函数。不能跨平台。#define container_of(ptr, type, member) ({ const typeof( ((type *)0)->member ) *__mptr = (ptr); (type *)( (char *)__mptr - offsetof(type,member) );})2. typeof是GNU C的扩展,不是ISO标准中的函数。用gcc编译可以跨平台。3. offsetof是C语言标准库中的宏,定义在头文件stddef.h中。可以跨平台。
vc2008中编译c语言提示没有找到#include ,这个头文件是不是只在linux中有
常用的unistd.h
vc2008中编译c语言提示没有找到#include ,这个头文件是不是只在linux中有
常用的unistd.h
用c语言编写modbus程序
#ifdef MODBUS////******************************************************************************// CRC 16 Data Table// *****************const unsigned int crc_tbl[256]={ 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xb981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040};//#pragma end_abs_address//******************************************************************************//#define DEFAULT_ADDRESS 1 // all slaves start with this Modbus address// communication commands://#define CHOOSE_SLOT 0x80//#define POLL_SLOT 0x81//#define POLL_ACK 0x82// positions in a Modbus packet#define ADDR 0#define FCN 1#define REGHI 2#define REGLO 3#define NUMREGSHI 4#define NUMREGSLO 5#define OUTBYTES 2// Modbus exception codes#define FCN_NOT_SUPPORTED 1 // a Modbus function code we can"t handle#define BAD_ADDR_OR_CMD 2 // a Modbus "register" (command or address to us) we don"t know#define BAD_COUNT 3 // num regs != num bytes * 2#define CMD_NOT_COMPLETE 4 // command didn"t complete successfully// other defines#define IN 0#define OUT 1//// SLOT_NUMBER is the 2 byte device configuration// the first byte is the ID// the second byte is the transmission mode coded as follows:// bit 0x01: 0=19200, 1=9600 baud// bit 0x02: 0=even parity, 1=odd parity// bit 0x04: 0=parity, 1=no parity// bit 0x08: 0=1 stop bit, 1=2 stop bits// if bit 0x04 is set and bit 0x08 is not set then it"s 8 bit mode (vs 9 bit mode)////unsigned char receiveBuffer[32] = {0}; // Reserve 32 bytes for packet.unsigned char device_addr = DEFAULT_ADDRESS; // assigned device address - start with disconnected//unsigned char timeout_counter = 10;//unsigned char timeout_duration = 10; // seconds, default//unsigned char pkt_index = 0;// return number of bytes in packet, not including crcunsigned char MDB_get_length(unsigned char in_out, unsigned char* ptr){ if(comControlByte & 0x20) return 6; switch(*(ptr+FCN)) { case 0x06: // write single reg return 6; case 0x03: // read multiple regs if (in_out == IN) // incoming packet return 6; else return *(ptr+OUTBYTES) + 3; case 0x10: // write multiple regs return (*(ptr+NUMREGSLO) << 1) + 7; default: // assume error packet return 3; }}// calculate CRC16 on a packetunsigned int MDB_crc_calc(unsigned char in_out, unsigned char* ptr){ unsigned char c1, c2; unsigned int crc = 0xffff; // initial value unsigned char* ptr_pkt_hdr = ptr; c2 = MDB_get_length(in_out,ptr); for(c1=0; c1<c2; c1++) crc = ((crc >> 8) & 0xFF) ^ crc_tbl[(crc ^ *ptr_pkt_hdr++) & 0xFF]; return crc;}// check crc on an incoming packetunsigned char MDB_crc_check(unsigned char* ptr){ unsigned int i1; unsigned char c1, c2, c3; i1 = MDB_crc_calc(IN, ptr); c1 = *(ptr+MDB_get_length(IN,ptr)+1); // msb of incoming crc c2 = *(ptr+MDB_get_length(IN,ptr)); // lsb of incoming crc c3 = (i1 >> 8); // msb of calculated crc if((c2 == (i1 & 0x00FF)) && (c1 == c3)) // compare msb & lsb return 1; else return 0;}// send Modbus packetsvoid MDB_pkt_sender(unsigned char* ptr){ unsigned char idx, pkt_len; unsigned int i1;// append crc, lsb 1st i1 = MDB_crc_calc(OUT,ptr); pkt_len = MDB_get_length(OUT,ptr); *(ptr+pkt_len++) = (unsigned char)i1; // lsb *(ptr+pkt_len++) = (i1 >> 8); // msb //SCI1C2 = 0x08; // transmit enable //comLedOn(); PTGD |= 0x80; for (idx = 0; idx < pkt_len; idx++) { while(!(SCI1S1 & 0x80)); // wait for tdre=1 i1 = SCI1S1; SCI1D = *(ptr+idx); } while(!(SCI1S1 & 0x80)); while(!(SCI1S1 & 0x40)); //comLedOff(); PTGD &= 0x7f; //SCI1C2 = 0x2c; // back to receive mode}// return a Modbus error packetvoid MDB_error(unsigned char exp_code, unsigned char* ptr){ *(ptr+FCN) |= 0x80; // set error code *(ptr+FCN+1) = exp_code; // set exception code MDB_pkt_sender(ptr);}//void MDB_read_data(unsigned char* ptr){ if(get_data((ptr+2), *(ptr+3))) { // get_data() sticks the length of the data in receiveBuffer[2] // receiveBuffer[3] & on will have actual data // receiveBuffer[0] & receiveBuffer[1] unchanged MDB_pkt_sender(ptr); // appends CRC before sending } else MDB_error(BAD_ADDR_OR_CMD, ptr);}// handle data writesvoid MDB_write_data(unsigned char* ptr){ if((*(ptr+5)<<1) == *(ptr+6)) { switch(*(ptr+3))//receiveBuffer[3]) { //case 0x18: // new timeout value // timeout_duration = receiveBuffer[7]; // MDB_pkt_sender(); // echo received command // break; //case 0x63: // lamp test // clampTest = 40; // MDB_pkt_sender(); // echo received command // break; case ADDRESS: //if(receiveBuffer[8] && (receiveBuffer[8] < 248)) // valid addresses if(*(ptr+8) && (*(ptr+8) < 248)) { //device_addr = *(ptr+8); // not until reset nonvolatile[0] = *(ptr+8); // device ID nonvolatile[1] = *(ptr+7); // transmission mode nonvolatile[2] = ~nonvolatile[0]; nonvolatile[3] = ~nonvolatile[1]; writeToNonvolatile(SLOT_NUMBER, &nonvolatile[0]); comControlByte |= 0x20; MDB_pkt_sender(ptr); comControlByte &= 0xdf; } else MDB_error(BAD_ADDR_OR_CMD, ptr); break; case INSTALLATION_DATE: // installation date readFromNonvolatile(DATE_DATA, &nonvolatile[0]); nonvolatile[4] = *(ptr+7);//receiveBuffer[7]; nonvolatile[5] = *(ptr+8);//receiveBuffer[8]; nonvolatile[6] = *(ptr+9);//receiveBuffer[9]; nonvolatile[7] = *(ptr+10);//receiveBuffer[10]; nonvolatile[12] = ~nonvolatile[4]; nonvolatile[13] = ~nonvolatile[5]; nonvolatile[14] = ~nonvolatile[6]; nonvolatile[15] = ~nonvolatile[7]; writeToNonvolatile(DATE_DATA, &nonvolatile[0]); comControlByte |= 0x20; MDB_pkt_sender(ptr); // echo received command comControlByte &= 0xdf; break; default: MDB_error(BAD_ADDR_OR_CMD, ptr); break; } } else MDB_error(BAD_COUNT, ptr);}//void MDB_parse(char *bufPtr){ unsigned char i = 0; if(MDB_crc_check(bufPtr)) { if(*(bufPtr+ADDR) == device_addr) { switch(*(bufPtr+FCN)) { case 0x03: // modbus read multiple regs MDB_read_data(bufPtr); break; case 0x10: // modbus write multiple regs MDB_write_data(bufPtr); break; default: // modbus function not supported MDB_error(FCN_NOT_SUPPORTED, bufPtr); break; } } }}
计算机C语言中的关键字:union是什么意思?
应该是结果并集
union在c语言中是什么意思
union在c语言中是联合体的意思。联合体(union),是c语言独有的一种数据类型,可以认为共用体的变量可以用来保存多个数据类型的数据,也可以认为是多个数据占用了同一块内存。
C语言:例子解释,关于union
union是联合的意思,也就是内部的变量是共用同一个存储空间的,以变量中存储空间最大的为整个union的占用空间。这个union中i是int型的占用4个字节,char x[2]是两个字节,那么这个union就占用4个字节。假设分别是byte3,byte2,byte1,byte0。如果用a.x[0]操作的就是byte0(对应16进制数是0xa),用a.x[1]操作的就是byte1(对应16进制数是0x1),byte3,byte2都没有被赋值(在调试已经初始化为0)。读取a.i 时,就是对byte3,byte2,byte1,byte0同时操作,组合成16进制数就是0x0000010a,也就是266.
c语言,union有什么用?
union是一种数据类型,在一段物理空间内可以存储你定义的不同的几个数据类型的一种。目的是节省空间和创建多个变量的花销。比如union{ int i; double j;}u;这个变量u为8个字节(int:4字节 double:8字节)这时候你可以用u.i存储int类型数据或者用u.j存储double类型数据切换使用时 后者数据会覆盖前者(因为共享一段内存)
c语言 联合体问题
UNION基本没地方用了吧现在
C语言union语句
这里有一个概念,就是整型数据占用几个字节并且是如何存储的union的定义表明:变量i占用4个字节,c与变量i的头一个字节共用一个单元a.i=0x1234;则变量i存储的4个字节按照地址递增顺序为:0x34,0x12,0,0,是先存储最低位字节然后是次低位字节、次高位字节和高位字节这个顺序因此c被赋值为0x34,即16*3+4=52
C语言union的用法
一楼说得很好啊。
c语言中的union是什么意思啊?
error:operatorneedsclass/struct/union操作需要类,结构体,联合体。。针对n.next或n->next其中n不是以上三者的情况
c语言中的union是什么意思啊?
http://baike.baidu.com/view/109447.html?wtp=tt#1
unit在c语言中什么意思
是不是自定义的数据类型。
c语言中uint是什么意思
联合体,是或者的关系吧
C语言 输出码值为33到127的ASCII码码值,字符对照表
printf("symble:%cvalue:%d",c,c);这里面应该是“,”不是“,”。表达式不能能全角符号。
输入小写字母的ascii码对照表(C语言编程)
#include<stdio.h>int main(){printf("输入小写字母的ascii码 ");char ch;ch="a";for(int i=0;i<=25;i++)printf("%C":%d ",ch+i,ch+i);printf(" ");return 0;}
如何用C语言输出26个英文字母和其ascii码的对照表
#include <stdio.h>intmain(){ printf("A 65 "); printf("A 65 "); printf("B 66 "); printf("C 67 "); printf("D 68 "); printf("E 69 "); printf("F 70 "); printf("G 71 "); printf("H 72 "); printf("I 73 "); printf("J 74 "); printf("K 75 "); printf("L 76 "); printf("M 77 "); printf("N 78 "); printf("O 79 "); printf("P 80 "); printf("Q 81 "); printf("R 82 "); printf("S 83 "); printf("T 84 "); printf("U 85 "); printf("V 86 "); printf("W 87 "); printf("X 88 "); printf("Y 89 "); printf("Z 90 "); printf( "Copyright Ferramat - all rights reserved. "); return 0;}
设计C语言程序,输出值为33~127的ASCII码码值,字符对照表
query取得iframe中元素的几种方法在iframe子页面获取父页面元素代码如下:$(