【自学】C语言 第一章 程序设计与C语言

1.1 计算机语言的发展

计算机的每一步操作,是按照人类的命令执行的

计算机程序
什么是程序呢?
所谓程序就是一组计算机能够识别和执行的指令。一个特定的指令序列用来完成一定的功能。
在这里插入图片描述

指令是可以被计算机理解并执行的基本操作命令。
软件是指与计算机操作系统有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。
在这里插入图片描述

计算机语言
中国人交流用中文,与外国人交流用英语
人与计算机之间用的语言,是人创造的一种人和计算机都能识别的语言,就是计算机语言
按照对机器的依赖性、接近自然语言的程度和语言的发展过程,我们将计算机语言分为:

机器语言、汇编语言和高级语言

机器语言
计算机能直接识别和接受的二进制代码称为机器指令。机器指令的集合就是该计算机的机器语言。
难学、难记、难检查、难修改、难推广、难移植。由于不同机器的指令系统不一样,因此机器语言依赖于具体的机器,造成机器语言程序的移植也非常的困难。

汇编语言
机器语言的符号化。
用英文字母和数字表示指令的符号语言,比机器语言简单。汇编语言得通过汇编程序才能被计算机所理解和执行。同时也没有解决具体依赖于机器难以移植的问题。
在这里插入图片描述

高级语言
高级语言更接近于人们习惯使用的自然语言和数学语言。功能强、移植性强、不依赖具体机器。
通过编译程序转换为机器指令的目标代码之后才能被机器理解和执行。

在这里插入图片描述

在这里插入图片描述

高级语言的发展
非结构化的语言—结构化语言—面向对象的语言
在这里插入图片描述

结构化语言
包括顺序结构、选择结构、和循环结构组成,程序中的流程不允许随意的进行跳转,由上而下顺序执行各个基本的结构。因此,结构化语言开发的程序结构清晰、易编写、阅读和维护。
面向对象的语言,通过将现实世界中的事物抽象成对象现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与建模。

1.2 C语言的发展

• 1972—1973年间,美国贝尔实验室的D.M.Ritchie 在B语言的基础上设计出了C语言。
• 最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的。
• 随着UNIX的日益广泛使用,C语言也迅速得到推广。1978年以后,C语言先后移植到大、中、小和微型计算机上。C语言便很快风靡全世界,成为世界上应用最广泛的程序设计高级语言。
• 以UNIX第7版中的C语言编译程序为基础,1978年,Brian W.Kernighan和Dennis M.Ritchie 合著了影响深远的名著The C Programming Language,这本书中介绍的C语言成为后来广泛使用的C语言版本的基础,它是实际上第一个C语言标准。
• 1983年,美国国家标准协会(ANSI),根据C语言问世以来各种版本对C语言的发展和扩充,制定了第一个C语言标准草案(’83 ANSI C)。
• 1989年,ANSI公布了一个完整的C语言标准——ANSI X3.159—1989(常称为ANSI C或C 89)。
• 1990年,国际标准化组织ISO(International Standard Organization)接受C 89作为国际标准ISO/IEC 9899:1990,它和ANSI的C 89基本上是相同的。
• 1999年,ISO又对C语言标准进行了修订,在基本保留原来的C语言特征的基础上,针对应用的需要,增加了一些功能,尤其是C++中的一些功能,并在2001年和2004年先后进行了两次技术修正,它被称为C 99, C 99是C 89的扩充。
目前由不同软件公司所提供的一些C语言编译系统并未完全实现C 99建议的功能,它们多以C 89为基础开发。

C语言的特点

1.语言简洁、紧凑,使用方便、灵活

37个关键字、9种控制语句
程序书写形式自由
主要用小写字母代替

2.运算符丰富
在这里插入图片描述

3.数据类型丰富
整型
浮点型
字符型
数组类型
指针类型
结构体类型
共用体类型
C99又扩充了复数浮点类型、超长整型(long long)和布尔类型(bool)

4.具有结构化的控制语句
if—else语句
while语句
do—while语句
switch语句
for语句

5.语法限制不十分严格,程序设计自由度较大
例如:不检查数组下标越界

6.C语言允许直接访问物理地址
能进行位(Bit)操作
能实现汇编语言的大部分功能
可以直接对硬件进行操作

7.用C语言编写的程序可移植性好

8.生成目标代码的质量高,程序执行的效率也高

1.3 最简单的C语言程序

【例1.1】要求在屏幕上输出:This is a C program.
解题思路: 在主函数中用printf函数原样输出以上文字。


#include <stdio.h>                                    //这是编译预处理指令
int main()                                            //定义主函数
{                                                     //函数开始的标志
printf("This is a C program.\n");                     //输出所指定的一行信息
return 0;                                             //函数执行完毕时返回函数值0
}                                                     //函数结束的标志

main是函数的名字,表示“主函数”;每一个C语言程序都必须有一个 main 函数。
• main前面的int表示此函数的类型是int类型(整型),即在执行主函数后会得到一个值(即函数值),其值为整型。
return 0; 的作用是当main函数执行结束前将整数0作为函数值,返回到调用函数处。
• 函数体由花括号 {} 括起来。
printf是C编译系统提供的函数库中的输出函数(详见第4章)。printf函数中双引号内的字符串″This is a C program.″按原样输出。\n是换行符,即在输出″This is a C program.″后,显示屏上的光标位置移到下一行的
开头。
• 每个语句最后都有一个分号,表示语句结束。

在使用函数库中的输入输出函数时,编译系统要求程序提供有关此函数的信息,程序第1行“#include<stdio.h>”的作用就是用来提供这些信息的。stdio.h是系统提供的一个文件名,stdio是standard inpu & 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); 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函数的位置
}

• 本程序包括两个函数:①主函数main;②被调用的函数max。
• max函数的作用是将x和y中较大者的值赋给变量z,最后通过return语句将z的值作为max的函数值返回给调用max函 数的主函数。
scanf是输入函数的名字(scanf和printf都是C的标准输入输出函数)。该scanf函数的作用是输入变量a和b的值。
max(a,b) 调用max函数。在调用时将a和b作为max函数的 实际参数 的值分别传送给max函数中的 形式参数 x和y。

注意:本例程序中两个函数都有
return语句,请注意它们的异同。

两个函数都定义为整型,都有函数值,都需要用return语句为函数指定返回值。

main函数中的return语句指定的返回值一般为0。

max函数的返回值是max函数中求出的两数中的最大值z,只有通过return语句才能把求出的z值作为函数的值并返回调用它的main函数中。

C语言程序的结构

  1. 一个程序由一个或多个源程序文件组成
    • 源程序文件包括:预处理指令、全局声明、函数定义
  2. 函数是C程序的主要组成部分
    • 一个C语言程序是由一个或多个函数组成的,其中必须包含唯一一个main函数
    • 程序中被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己编制设计的函数
  3. 一个函数包括两个部分:函数首部和函数体,函数体一般包括声明部分和执行部分
  4. 程序总是从main函数开始执行
  5. 程序中的操作是由函数中的C语句完成的
  6. 在每个数据声明和语句的最后必须有一个分号
  7. C语言本身不提供输入输出语句,输入输出操作由函数完成
  8. 程序应当包含注释

运行C程序的步骤与方法

在这里插入图片描述

程序设计的任务

问题分析------设计算法------编写程序------对源程序进行编辑、编译和连接------运行程序分析结果------编写程序文档

参考资料

谭浩强《C程序设计》第五版 清华大学出版社
需要电子版参考资料请私信

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值