双槐子的C语言编程。 通过阅读我的文章,你可以了解一些C语言编程的基础知识。 作者水平有限。 如果您发现任何错误,请在评论区留言! 非常感谢!
还可以通过MOOC学习浙江大学翁开文老师讲授的《C语言程序设计》。 翁老师讲授的课程非常深入、浅显易懂,在网上得到了很多好评!
目录
前言
编程是一门基础课。 对于计算机相关专业的学生来说,编程是基础专业知识,也是进一步学习其他专业知识的阶梯; 对于非计算机专业的人来说,学习编程有助于了解计算机的能力,了解计算机是什么。 擅长解决计算机擅长的问题有哪些方法和方法,从而可以更好的利用计算机来解决一些专业领域的问题。
C语言是一门古老而常青的编程语言。 它具有现代编程的基本要求。 它的语法是许多其他编程语言的基础。 它在系统程序、嵌入式系统等领域仍然是不可替代的编程语言,在各种编程语言排名中始终占据前两名的位置。
编程是一门实践性很强的课程。 本课程的学习有其自身的特点。 你不能听也不能读,你只能练习。 必须通过大量的编程培训,在实践中掌握编程知识,培养编程能力,逐步理解和掌握编程思想和方法。 这里提供的只是基础知识解释。 如果你想学习编程,你将需要更多的时间和精力。
为了学习编程,您需要拥有一台计算机并安装必要的编程软件。 无论是MS Windows、Mac OS X还是Linux,都有适合C语言编程的软件。
一些建议:
1. 为什么要学习编程?
大学生不能满足于仅仅使用办公软件,应该有更高的要求,尤其是理工科专业的学生。 计算机的本质是“程序机器”,程序和指令的思想是计算机系统中最基本的概念。 编程是软件开发人员的一项基本技能。 只有了解了编程,我们才能进一步了解计算机,真正了解计算机是如何工作的。 通过学习编程,学生学习进一步了解计算机的工作原理,更好地理解和应用计算机,掌握利用计算机解决问题的方法,培养计算思维,提高分析问题和解决问题的能力,具备初步的编程能力。 即使你将来不是计算机专业,因为你学过编程,了解软件制作的特点和制作流程,你也能更好地与程序开发人员沟通和合作,进行该领域的计算机应用,并开发与该领域相关的应用程序。 程序。
2、为什么选择C语言?
进行编程,必须借助计算机语言作为工具,否则只是纸上谈兵。 有多种语言可供选择,每种语言都有自己的特点和应用领域。 C语言功能丰富,表达能力强,使用灵活方便,应用范围广泛,自标程序效率高,可移植性好。 它具有高级语言的优点和低级语言的许多特性,使其适合编写系统软件。 ,并且可以方便地用来编写应用软件。
有人认为C++语言出现后,C语言就会过时,会被淘汰。 这是一个误解。 C++是一种为处理更大规模程序开发而开发的大规模语言。 它比C语言复杂和难学得多。 事实上,未来并不是所有人都需要用C++编写大型程序。 C语言比较基础。 美国一位资深软件专家写了一篇文章,题为《给计算机专业学生的建议》,是根据经验写的,可以作为参考。 他说:“大学生毕业前一定要学好C语言。C语言是现在程序员的通用语言,它比你在大学里学的‘现代语言’(比如ML语言、Java等)更能让程序员相互交流。”语言、Python语言或者正在教授的流行语言)更接近机器。” 他指出:“无论你了解多少延续、闭包、异常处理,只要你不能解释为什么 while(★s++=×t++) 是复制字符串,那么你就是在盲目无知地编程,只是就像医生在不了解最基本的解剖学知识的情况下盲目开药一样。
C语言比较适合解决某些小程序编程。 作为传统的面向过程的编程语言,C 语言在编写低级设备驱动程序和嵌入式应用程序时往往是更好的选择。
如今,大多数高校都使用C语言作为第一门计算机语言来教授编程。 这是合适的。 有了C语言的基础,在需要的时候很容易过渡到进一步学习C++语言。
3. 如何处理算法和语言的关系
对于编程来说,需要解决两个问题:
(1)学习和掌握解决问题的思想和方法,即算法。
(2)学习如何实现算法,即用计算机语言编写程序,达到利用计算机解决问题的目的。
算法和语言:算法是灵魂。 不掌握算法,编程是没有用的。 语言是一种工具。 不掌握语言,编程就会成为空中楼阁。 两者缺一不可,缺一不可。 所以大家应该以编程为主,将两者紧密结合起来。 我们既不能孤立地、抽象地研究算法,也不能孤立地、枯燥地学习语法。
1.1. 计算机和编程语言什么是计算机程序?
有人认为计算机是“万能的”,可以自动执行所有任务。 他们甚至认为计算机是神秘莫测的。 这是很多初学者的一个误区。 事实上,计算机的每一次操作都是按照人们事先指定的指令进行的。 例如,一条指令用于要求计算机进行加法运算,另一条指令用于要求计算机将某一运算结果输出到显示屏上。 为了使计算机执行一系列操作,必须预先编写指令并输入计算机。
所谓程序是计算机能够识别并执行的一组指令。 每条指令都会使计算机执行特定的操作。 只要让计算机执行这个程序,计算机就会“自动”执行每一条指令,有条不紊地工作。 特定的指令序列用于完成特定的功能。 计算机系统为了实现各种功能,需要数以千计的程序。 这些程序大多是计算机软件设计者根据需要设计出来的,作为计算机软件系统的一部分提供给用户。 此外,用户还可以根据自己的实际需要设计一些应用程序,例如学生成绩统计程序、财务管理程序、工程计算程序等。
简而言之,计算机的所有操作都是由程序控制的。 没有程序,计算机将一事无成。 因此,计算机的本质是程序机器,程序和指令是计算机系统中最基本的概念。 只有理解了编程,我们才能真正理解计算机是如何工作的,才能更深入地使用计算机。
什么是计算机语言
人与人之间的交流需要语言。 中国人互相使用中文,英国人互相使用英语,俄罗斯人互相使用俄语,等等。 人与计算机在交流信息时也需要解决语言问题。 有必要创造一种计算机和人类都能识别的语言。 这是计算机语言。 计算机语言经历了以下发展阶段。
机器语言 计算机能够直接识别和接受的二进制代码称为机器指令。 机器指令的集合就是计算机的机器语言。 各种指令的表达形式及其功能都是在语言的规则中规定的。
计算机语言与人们习惯的语言差别太大。 学习、书写、记忆、检查、修改、推广使用都困难。 因此,早期只有极少数的计算机专业人员能够编写计算机程序。
符号语言 为了克服机器语言的上述缺点,人们创造了符号语言(symbolic langumg和A),它用一些英文字母和数字来表示一条指令,如ADD表示“加”,SUB表示“减”,LDR用于“传输”等。
计算机不能直接识别和执行符号语言的指令。 他们需要使用一种称为汇编程序的软件将符号语言的指令转换为机器指令。 通常,符号语言指令被转换为机器指令。 这种转换过程称为“替换”或“汇编”,因此符号语言也称为符号汇编语言(symbol assembler language)或汇编语言(assembler language)。
虽然汇编语言比机器语言更简单、更容易记忆,但它仍然很难普及,只有专业人士使用。 用于对不同类型计算机进行编程的机器语言和汇编语言不可互换。 用机器A的机器语言编写的程序不能在机器B上使用。机器语言和汇编语言完全依赖于具体的机器特性,是面向机器语言的语言。 因为它与计算机“接近”,或者说“非常接近”计算机,所以被称为低级计算机语言。
为了克服低级语言的缺点,第一个高级计算机编程语言 FORTRAN 在 20 世纪 50 年代诞生。 它非常接近人们习惯使用的自然语言和数学语言。 程序中使用的语句和指令均用英文单词表达。 程序中使用的运算符和表达式与人们日常使用的数学表达式类似,很容易理解。 程序运行结果以英文和数字输出,非常方便。 例如,在FORTRAN语言程序中,如果要计算并输出3.5×6sin(n/3),则只需编写以下语句:PRINT,3.5*6×SIN(3.1415926/3)即可得到计算结果结果。 显然,这很容易理解和使用。
这种语言的功能非常强大,并且不依赖于特定的机器。 用它编写的程序可以解决任何类型的计算机问题(或者只需要进行一些修改)。 它离具体机器“很远”,所以被称为计算机高级语言(high language)。
当然,计算机不能直接识别高级语言程序,必须经过“翻译”。 使用称为编译器的软件将用高级语言编写的程序(称为源程序)转换为机器指令的表示形式(称为目标程序),然后计算机执行机器指令程序。 ,最终得到结果。 高级语言中的一条语句往往对应多条机器指令。
自从高级语言出现以来,普通科技人员、管理人员、大中学生、计算机爱好者都可以轻松学会用高级语言编写程序并指挥计算机工作,无需考虑任何机器命令或深入探讨。 如果了解了计算机的内部结构和工作原理,就能够轻松地使用计算机完成各种任务,为计算机的推广和普及创造良好的条件。 人们称高级语言的出现是计算机发展史上的“惊人成就”。
高级语言经历不同的发展阶段:
***非结构化语言在早期,大多数语言都是非结构化语言。 编程风格相对随意。 只要符合语法规则即可,没有严格的规范要求。 程序流程可以随意跳转。 人们常常追求程序执行的效率。 为了提高效率使用了很多小技巧,导致程序难以阅读和维护。 早期的BASIC、FORTRAN和ALGOL都是非结构化语言。
***为了解决上述问题,结构化语言提出了“结构化程序设计方法”,规定程序必须由具有良好特性的基本结构(顺序结构、选择结构、循环结构)组成,并且流程程序不允许随意。 Jump总是从上到下依次执行每个国家的基本结构。 这种结构清晰,易于编写、阅读和维护。 QBASIC、FORTRAN 77和C语言都是结构化语言。 这些语言的特点是支持结构化编程方法。
***面向对象的语言 在过去的十几年里,在处理更大规模的问题时,已经使用了面向对象的语言。 C++、C#、Visual basic和Java等语言都是支持面向对象编程方法的语言。
1.2. 为什么C语言是C语言?
在很多情况下,C语言是唯一的选择,比如操作系统、嵌入式系统等,因此C在工业界得到了广泛的应用。 我们没有理由不研究一下这个C语言是什么样的。 另外,我们不选择其他语言而选择c语言还有其他原因:因为现代编程语言的语法差异非常小,所以很多语言现在都可以称为类c语言,因为它们基础的东西,比如它们的变量、如何命名、如何定义函数等基本上都接近C语言。 这与C语言在历史上取得的地位有很大关系。 那么,当我们说某种语言非常强大、好用的时候,往往并不是因为该语言本身的特性,而是因为别人为它编写的库(类库、函数库)。 这些库有各种应用程序的库。 它可以在这些应用程序中做非常强大的事情。 本身很难完成的事情可能只需要调用库的一个函数或者使用它的类来用这种语言来做一些事情。 ,那么这个问题就变得容易了。
c语言的发展及特点
C语言是世界上广泛流行的高级计算机语言。
C语言的祖先是BCPL语言。 1967年,英国剑桥大学的Martin Richards提出了无类型的BCPL(基本组合编程语言)语言。 1970年,美国AT&T贝尔实验室的Ken Thompson在BCPL语言的基础上设计了非常简单、贴近硬件的B语言(取BCPL的第一个字母)。 但B语言过于简单,功能有限。 1972年至1973年间,美国贝尔实验室的DMRitchie在B语言的基础上设计了C语言。 C语言既保持了BCPL和B语言的优点(细化、接近硬件),又克服了它们的缺点(过于简单、无数据类型等)。 C语言的新特性主要体现在它的多种数据类型(如字符)。 、值、数组、结构体和指针等)。 开发C语言的目的是为了尽可能减少用它编写的软件对硬件平台的依赖,并使其具有可移植性。
最初的C语言只是为了提供一种描述和实现UNIX操作系统的工作语言而设计的。 1973年,Ken Thompson和DMRitchie合作用C语言重写了UNIX的905%以上,即UNIX版本5(最初的UNIX操作系统由美国贝尔实验室的Ken Thompson和DMRitchie于1969年开发成功,使用汇编语言)。 随着UNIX的应用越来越广泛,C语言也得到了迅速的推广。 1978年以后,C语言陆续移植到大、中、小型、微型计算机上。 C语言很快风靡全球,成为世界上使用最广泛的高级编程语言。
基于 UNIX 第 7 版中的 C 语言编译器,1978 年 Brian W. Kernighan 和 Dennis M. Ritchie 共同创作了影响深远的巨著《C 编程语言》。 本书中介绍的C的原因后来被广泛使用。 C 语言版本的基础,实际上是第一个 C 语言标准。 1983年,美国国家标准协会(ANSI)成立了一个委员会,根据C语言问世以来各个版本对C语言的发展和扩展,制定了第一个C语言标准草案。 ANSI C 在最初的 C 的基础上有了很大的发展。Brian W.Kernighan 和 Dennis M.Ritchie 于 1988 年修订了他们的经典著作《C 编程语言》,并根据即将推出的新 ANSI C 标准重写了该书。 1989年,ANSI发布了完整的C语言标准——ANSI X3.159-1989(通常称为ANSI或C 89)。 1990年,国际标准化组织ISO接受C89为国际标准ISO/IEC9899:1990,与ANSI的C89基本相同。
1995年,ISO对C90进行了一些修订,即“1995 Baseline Supplement 1(ISO/IEC9899/AMD1:1995)”。 1999年,ISO修订了C语言标准。 在基本保留原有C语言功能的基础上,为了满足应用的需要,增加了一些函数,特别是C++中的一些函数,命名为ISO/IEC9899:1999。 2001年 2001年和2004年进行了两次技术修订,即2001年的TC1和2004年的TC2。ISO/IEC9899:1999及其技术修订版被称为C99。 C99 是 C89 的扩展。
需要注意的是,目前不同软件公司提供的一些C语言编译系统并没有完全实现C99推荐的功能,而大多是基于C89开发的。 大家应该了解自己所使用的C语言编译系统的特点。 初学者所使用的初步编程知识基本上都在C89的范围内,因此使用目前的C编译系统仍然可以满足初学者的教学需求。 今后在进行实际的软件开发工作时,应注意使用能够更大限度实现C99功能的编译系统。
C语言是一种通用、强大、灵活的过程编程语言。 它既可以用来编写应用软件,也可以用来编写系统软件。 因此,C语言自问世以来得到了迅速的推广。 自20世纪90年代初C语言开始在我国推广以来,越来越多的人学习和使用C语言,使其成为学习和使用人数最多的计算机语言。 绝大多数理工科大学都开设了C语言课程。 编程课程。 掌握C语言已经成为计算机开发人员的一项基本技能。
C语言有以下主要特点:
1)语言简洁紧凑,使用方便灵活。 C语言总共只有37个关键字和9条控制语句。 该程序以自由形式编写,主要以小写字母表示,压缩了所有不必要的组件。 C语言程序比许多其他高级语言更加简洁,源程序较短,因此进入程序时的工作量较小。
事实上,C是一种非常小的内核语言,只包括极少数与硬件相关的组件。 C语言不直接提供输入输出语句、与文件操作有关的语句、有关动态内存管理的语句(这些操作是由(由编译系统提供的库函数实现的)执行的,C编译系统相当简单。
2)、丰富的经营者。 C语言的运算符包括的运算符种类繁多,共有34个运算符。 C语言将括号、赋值、强制类型转换等作为运算符来处理,使得C语言的运算类型极其丰富,表达式类型多样化。 灵活运用各种运算符可以实现其他高级语言难以实现的操作。
3)、丰富的数据类型。 C语言提供的数据类型包括:整数、浮点、数组类型、指针类型、结构体类型和联合类型等。C99扩展了复杂浮点类型、长整型(long long)和布尔类型。 特别是指针类型数据使用起来非常灵活多样,可以用来实现对各种复杂数据结构的操作。
4). 具有结构化计算机控制语句(例如 if…else 语句、while 语句、do…while 语句、switch 语句和 for 语句)。 使用函数作为程序的模块单元,有利于程序的模块化。 C语言是完全模块化、结构化的语言。
5)、语法限制不太严格,编程自由度大。 例如,不检查数组下标越界,由程序员来确保程序正确。 变量类型的使用更加灵活。 例如,整数、字符数据和逻辑数据可以互换使用。 一般情况下,高层源代码的语法检查比较严格,几乎可以检测到所有的语法错误,而C语言则允许程序编写者有更大的自由度,因此放松了语法检查。 程序员应该仔细检查程序以确保其正确,并且不应过多依赖C语言编译器来检查错误。
6). C语言可以直接访问物理地质,可以进行位运算,可以实现汇编语言的大部分功能,可以直接操作硬件。 因此,C语言既具有高级语言的功能,又具有低级语言的许多特性。 功能,可以用来编写系统软件。 C 语言的这种双重性使其既是一种成功的系统描述语言,又是一种通用编程语言。
7). C语言编写的程序具有良好的可移植性。 由于C的编译系统相当简单,因此很容易移植到新系统。 而且,C编译系统在新系统上运行时可以直接编译“标准链接库”中的大部分函数,无需修改源代码,因为标准链接库是用可移植的C语言编写的。 因此,C语言几乎可以用于所有的计算机系统。
8). 生成的目标代码质量高,程序执行效率高。
C最初是专门为编写系统软件而设计的。 很多大型软件都是用C语言编写的。 这是因为C语言具有良好的可移植性、较高的硬件控制能力、较强的表达和计算能力。 很多以前只能用汇编语言解决的问题,现在可以用C语言来解决。 目前C的主要用途之一是编写“嵌入式系统的系统程序”。 由于以上优点,C语言有着广泛的应用范围,很多应用软件也是用C语言编写的。
关于C语言的上述特点,当你学完C语言之后,再复习一遍,你就会有更深刻的理解。
编程软件
C语言会用来编写操作系统、嵌入式系统、驱动程序等,它是工业语言,我们更看重的是它的开发效率。
推荐使用Dev C++,最大的好处是什么? :免费且易于安装
安装教程及资源获取请参考Dev-c++安装教程—图文解说_双槐子的博客-CSDN博客_dev c++安装
基本使用教程可以参考这篇文章
快速入门Dev C++,编译、运行和做一些简单的计算_双槐子的博客-CSDN博客
1.3. 第一个程序需要在屏幕上输出一行信息,例如“hello.world”。
编程:
#include //这是编译预处理命令
int main ( ) //定义主函数
{ //函数开始的标志
printf("hello world!\n"); //输入所指定的一行信息
return 0; //函数执行完毕时返回函数值0
} //函数结束的标志
运行结果:
程序分析
首先看程序第2行,其中main是函数名,意思是“主函数”。 main前面的int表示这个函数的类型是int类型(整数)。 执行完main函数后,会得到一个值(函数值),它的值是一个整数。
“return 0;”函数程序第5行是:在主函数执行结束前,将整数0作为函数值返回给调用函数。
每个C语言程序都必须有一个main函数。 函数体用大括号括起来,
在这个例子中,main函数中有两条语句。 程序的第4行是输出语句。 printf是C编译系统函数库中的输出函数。
字符串“hello word”。 printf 函数中的双撇号内按原样输出。 \n 是换行符,即输出“hello word.”后,显示屏上的灯位移动到下一行的行首。 这个光标位置称为输出的当前位置,即下一个输出字符将在该位置。
每条语句末尾有一个分号,表示该语句的结束。
在使用函数库中的输入输出函数时,编译系统要求程序提供有关该函数的信息(如输入输出函数的声明、宏的定义、全局变量的定义等,后面会介绍),程序的第1行“#ieb(stdio.h>”就是用来提供这些信息的。stdio.h是系统提供的一个文件名,是stdostandard input &.output的缩写,文件后缀.h表示头文件),因为这些文件被放置在程序的每个文件模块的开头。 输入输出函数的相关信息已经提前放在stdio.h文件中。 现在使用#include 指令来传输此信息以供使用。 如果没有这样的#include指令,就不可能执行printg号。 至于编译预处理指令#include,读者无需赘述。 只要记住:如果要在程序中使用标准库中的输入和输出函数,则应该位于该文件的模块的开头。 添加以下行:
#incudestdie.h
上述程序每一行的右侧,如果有//,则表示从这里到该行末尾是一个“注释”,用于对程序的相关部分提供必要的解释。 在编写C程序时,应该多使用注释,以便自己和他人更容易理解程序各部分的功能。 程序预编译时每个注释都被替换为空格,因此注释部分在编译时不会生成目标代码,注释对运行没有影响。 注释仅供人阅读,而不供计算机执行。
C语言允许两种注释方式
(1) 以//开头的单行注释。 如上所述。 该注释可以单独占一行,也可以出现在一行中其他内容的右侧。 此类注释的范围以 // 开始,以换行符结束。 换句话说,这种评论不能越界。 如果注释内容不能写成一行,可以使用多个单行注释。 例如,下面两行是连续的注释:
//如果评论内容不能写成一行
//您可以在下一行重复使用“//”并继续编写注释。
(2) 以/*开头、*/结尾的块注释。 该评论可以包含多行内容。 它可以占据一行(以 /* 开头,以 */ 结尾),也可以包含多行。 编译系统找到/*后,就会寻找注释结束符*/,并将内容放在两者之间。 作为注释。
但需要注意的是,字符串中的//和/*并不是作为注释的开头,而是作为字符串的一部分,如:
printf(“//你好吗!\n”);
输出是:
//你好吗!
评论可以用中文或英文表达。
双槐子自学C语言编程入门,点击关注查看后续内容。