由于本人提升技能需求,开始自学c语言程序设计,教材为《c程序设计》第五版谭浩强著。该系列为本人的学习笔记,记录的是知识点与例题,学到哪里,更到哪里。也希望能对正在学c程序设计的朋友有帮助。
目录
1,计算机程序
指令:可以被计算机理解并执行的基本操作命令。
程序:一组计算机能识别和执行的指令。一个特定的指令序列用来完成一定的功能。
软件:与计算机系统操作有关的计算机程序,规程,规则,以及可能有的文件,文档及数据。
2,计算机语言
有一个人为计算机语言做出过巨大贡献:数学家冯•诺依曼提出了重大的改进理论,主要有两点:其一是电子计算机应该以二进制为运算基础,其二是电子计算机应采用存储程序方式工作,并且进一步明确指出了整个计算机的结构应由五个部分组成:运算器、控制器、存储器、输入装置和输出装置。冯•诺依曼的这些理论的提出,解决了计算机的运算自动化的问题和速度配合问题,对后来计算机的发展起到了决定性的作用。直至今天,绝大部分的计算机还是采用冯•诺依曼方式工作。
第一代 机器语言 (machine language):
计算机能直接识别和接受的二进制代码称为机器指令。机器指令的集合就是该计算机的机器语言 (machine language)。特点:难学,难记,难检查,难修改,难以推广使用。依赖具体机器难以移植。
第二代 汇编语言(面向机器的程序设计语言):
机器语言的符号化。用英文字母和数字表示指令的符号语言。特点:相比机器语言简单好记,但任然难以普及。汇编指令需通过汇编程序转换为机器指令才能被计算机执行。依赖具体机器难以移植。
第三代 高级语言(High-level programming language ):
高级语言更接近与人们习惯使用的自然语言和数学语言。特点:功能强大,不依赖于具体机器。用高级语言编写的源程序需要通过编译程序转换为机器指令的目标程序。
3,高级语言的发展
非结构化语言→结构化语言→面向对象的语言
规定:程序必须由具有良好特性的基本结构(顺序结构,选择结构,循环结构)构成,程序中的流程不允许随意跳转,程序总是由上而下顺序执行各个基本结构。
特点:程序结构清晰,易于编写,阅读和维护。
4,C语言的发展
C 语言最早的原型是 ALGOL 60 1963 年,剑桥大学将其发展成为 CPL(Combined Programing Language)。1967 年,剑桥大学的 Matin Richards 对 CPL 语言进行了简化,产生了 BCPL 语言。
1970 年,美国贝尔实验室(Bell Labs)的 Ken Thompson 将 BCPL 进行了修改,并取名叫做 B 语言,意思是提取 CPL 的精华(Boiling CPL down to its basic good features)。并用 B 语言写了第一个 UNIX 系统。
1973 年,AT&T 贝尔实验室的 Dennis Ritchie(D.M.RITCHIE) 在 BCPL 和 B 语言的基础上设计出了一种新的语言,取 BCPL 中的第二个字母为名,这就是大名鼎鼎的 C 语言。
随后不久,UNIX 的内核(Kernel) 和应用程序全部用 C 语言改写,从此,C 语言成为 UNIX 环境下使用最广泛的主流编程语言。
1978 年,Dennis Ritchie 和 Brian Kernighan 合作推出了《The C Programming Language》的第一版(按照惯例,经典著作一定有简称,该著作简称为 K&R),书末的参考指南 (Reference Manual) 一节给出了当时 C 语言的完整定义,成为那时 C 语言事实上的标准,人们称之为 K&R C。从这一年以后,C 语言被移植到了各种机型上,并受到了广泛的支持,使 C 语言在当时的软件开发中几乎一统天下。
随着 C 语言在多个领域的推广、应用,一些新的特性不断被各种编译器实现并添加进来。于是,建立一个新的“无歧义、于具体平台无关的 C 语言定义” 成为越来越重要的事情。1983 年,ASC X3(ANSI 属下专门负责信息技术标准化的机构,现已改名为 INCITS)成立了一个专门的技术委员会 J11(J11 是委员会编号,全称是 X3J11),负责起草关于 C 语言的标准草案。1989 年,草案被 ANSI 正式通过成为美国国家标准,被称为 C89 标准。
随后,《The C Programming Language》第二版开始出版发行,书中内容根据 ANSI C(C89)进行了更新。1990 年,在 ISO/IEC JTC1/SC22/WG14 (ISO/IEC 联合技术第 I 委员会第 22 分委员会第 14 工作组) 的努力下,ISO 批准了 ANSI C 成为国际标准。于是 ISO C(又称为 C90) 诞生了。除了标准文档在印刷编排上的某些细节不同外,ISO C(C90) 和 ANSI C(C89) 在技术上完全一样。
之后,ISO 在 1994、1996 年 分别出版了 C90 的技术勘误文档,更正了一些印刷错误,并在1995 年通过了一份 C90 的技术补充,对 C90 进行了微小的扩充,经过扩充后的 ISO C 被称为 C95。
1999 年,ANSI 和 ISO 又通过了最新版本的 C 语言标准和技术勘误文档,该标准被称为 C99 。这基本上是目前关于 C 语言的最新、最权威的定义了。
现在,各种 C 编译器都提供了 C89(C90) 的完整支持,对 C99 还只提供了部分支持,还有一部分提供了对某些 K&R C 风格的支持。
5,C语言的特点
1,语言简洁,紧凑,使用方便,灵活。
2,运算符丰富。
3,数据类型丰富。
4,具有结构化的控制语句;用函数作为程序的模块单位,便于实现程序的模块化;C语言是完全模块化和结构化的语言。
5,语法限制不太严格,程序设计自由度大。
6,允许直接访问物理地址;能进行位(bit)操作;能实现汇编语言的大部分功能;可以直接对硬件进行操作;因此C语言既具有高级语言的功能,又具有低级语言的许多功能,可用来编写系统软件。
7,程序可移植性好。
8,生成目标代码质量高,程序执行效率高。
6,最简单的C语言程序
【例1.1】要求在屏幕上输出:Hello world
解题思路:在主函数中用printf函数原样输出以上文字。
#include<stido.h> //这是编译预处理指令
int main() //定义主函数
{ //函数开始的标志
printf("Hello world\n"); //输出所指定的一行信息
return 0; //函数执行完毕时返回函数0
} //函数结束的标志
输出结果:
程序分析:
main是函数的名字,表示“主函数”;每一个C语言程序都必须有一个main函数。
main前面的int表示此函数的类型是int类型(整型),即在执行主函数后会得到一个值(即函数值),其值为整型。
return 0;的作用是当main函数执行结束前将整数0作为函数值,返回到调用函数处。
函数体由花括号{}括起来。
printf是C编译系统提供的函数库中的输出函数。printf函数中双引号内的字符串"Hello world"按原样输出。\n是换行符,即在输出“Hello world”后,显示屏的光标位置移到下一行的开头。
每一个语句后都有一个分号,表示语句结束。
在使用函数库中的输出函数时,编译系统要求程序提供有关此函数的信息,程序的第一行"#include<stido.h>"的作用就是用来提供这些信息的。stdio.h是系统提供的一个文件名,stdio是standard input & output的缩写,文件后缀.h的意思是头文件(header file),因为这些文件都是放在程序各文件模块的开头的。输入输出函数的相关信息已事先放在stdio.h文件中。
//表示此处到本行结束是"注释",用来对程序有关部分进行必要的说明。在写C程序时应当多用注释,以方便自己和别人理解程序各部分的作用。在程序进行预编译处理时将每个注释替换成一个空格,因此在编译时注释部分不产生目标代码,注释对运行不起作用。注释是给人看的,而不是让计算机执行的。
【例1.2】求两个整数之和
解题思路:设置3个变量,a和b用来存放两个整数,sum用来存放和数。用赋值运算符"="把相加的结果传送给sum。
#include<stdio.h> //这是编译预处理指令
int main() //定义主函数
{ //函数开始
int a, b,sum; //本行是程序的声明部分,定义a,b,sum为整型变量
a = 123; //对变量a进行赋值
b = 456; //对变量b进行赋值
sum = a + b; //进行a+b的运算,并把结果存在变量sum中
printf("sum is %d\n",sum); //输出结果
return 0; //使函数值返回为0
} //程序结束
输出结果:
程序分析:
printf("sum is %d\n",sum);输出时用sum的值取代%d。
printf("sum is %d\n",sum);printf函数圆括号内有两个参数。第一个参数是双引号的内容sum is %d\n,它是输出格式字符串,作用是输出用户希望输出的字符和输出的格式。其中sum is是用户希望输出的字符,%d是指定的输出格式,d表示用"十进制整数"形式输出。圆括号内第二个参数sum表示要输出变量sum的值。在执行printf函数时,将sum变量的值(以十进制整数表示)取代双引号中的%d。
【例1.3】求两个整数中的较大者
解题思路:用一个函数来实现求两个整数中的较大者。在主函数中调用此函数并输出结果。
#include <stdio.h> //主函数
int main() //定义主函数
{ //主函数体开始
int max(int x,int y); //对被调用函数max的声明
int a,b,c; //定义变量a,b,c
scanf("%d,%d",&a,&b); //输入变量a和b的值
c=max(a,b); //调用max函数,将得到的值赋给c
printf("max=%d\n",c); //输出c的值
return 0; //返回函数值为0
} //主函数体结束
//求两个整数中的较大者的max函数
int max(int x,int y) //定义max函数,函数值为整型, 形式参数x和y为整型
{
int z; //max函数中的声明部分,定义本函数中用到的变量z为整型
if(x>y) z=x; //若x>y成立,将x的值赋给变量z
else z=y; //否则(即x>y不成立),将y的值赋给变量z
return(z); //将z的值作为max函数值,返回到调用max函数的位置
}
程序分析:
“ & ” 是地址符,&a 的含义是“变量 a 的地址”,&b 是“变量 b 的地址”。
执行 scanf 函数,从键盘读入两个整数,放到变量 a 和 b 的地址,然后把这两个整数分别赋给变量 a 和 b。
7,注释
C语言中,注释有两种类型:
单行注释:
单行注释通常用于对程序中的某一行代码进行解释,用”//”符号表示,后面为注释的内容。
多行注释:
多行注释就是注释中的代码,可以为多行,以符号”/“开头,以符号”/”结尾。
注意:
在C语言中,有的注释可以嵌套使用,有的不能嵌套。
多行注释”/……/“中,可以嵌套单行注释”//”。
多行注释”/……/”中,不能嵌套多行注释”/……/”。
8,C语言程序的结构
1,一个程序由一个或多个源程序文件组成,源程序文件包括:预处理指令、全局声明、函数定义。
2,函数是C程序的主要组成部分。一个C语言程序是由一个或多个函数组成的,其中必须包含唯一 一个main函数 。程序中被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己编制设计的函数。
3,一个函数包括两个部分:函数首部、函数体。
4,程序总是从 main 函数开始执行的。
5,程序中要求计算机完成的操作是由函数中的 C 语句完成。
6,在每个数据声明和语句的最后必须有一个分号。
7,C语言本身不提供输入输出语句,输入输出操作由函数完成。
8,程序应当包含注释。
9,运行C程序的步骤与方法
10,程序设计的任务
11,ASCII码表
12,C语言编译器
c语言最常用的编译器有MicrosoftVisualC++、MyEclipse、TurboC和gcc编译器等。
本人用的Visual stdio2022,可在微软商店下载。
如若安装不成功可参考博客:visual studio 2019/2022 安装时卡住,一直正在提取文件时的亲测有效的解决方案_北游当南归的博客-CSDN博客_visualstudio安装卡住