C语言电子教案

更新时间:2023-12-10 01:31:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章 C语言概述

1.1 C语言发展过程及特点 1.2 C语言的基本词汇 1.3 C程序结构

1.4 C语言程序上机调试过程

1.1 C语言发展过程及特点

C语言是在20世纪70年代初问世的。 总结起来C语言有以下几个特点。

(1)语言简洁、紧凑,使用方便、灵活。 (2)C语言运算符丰富,共有34种运算符。

(3)C语言的数据结构也比较丰富,具有现代计算机语言的各种数据结构。 (4)具有结构化的流程控制语句,如选择语句、循环语句等。 (5)流程控制和数据操作灵活多样,程序设计有较大的自由度。

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

(7)用C语言编写的程序可移植性好。

1.2 C语言的基本词汇

1.组成C语言基本词汇的基本字符

(1)数字10个(0~9);

(2)大、小写英文字母各26个(A~Z,a~z); (3)特殊符号,如表3-1所示。

表1-1 C语言的特殊符号

~ ) [ \\

2.保留字

! - ] \

# ? < '

% ? > |

^ { ? ;

* & : .

( } /

_(下划线) 空格 ,

C语言的保留字是具有特定含义的标识符,主要包括关键字和特定字两大类。关键字和特定字

的主要区别是所有的特定字都必须在使用前加“#”,如使用特定字define,应书写为#define。

1

(1)关键字

表1-2 C语言的关键字

auto break case doublelse enum e int long register struct switch typedef

(2)特定字

特定字主要用于编译预处理,主要有define,undef,include ifdef,ifndef,endif。 3.标识符

一个合理的标识符是由英文字母或下划线“_”开头的字母、下划线、数字字符组成的字符序列。 使用标识符时应注意以下几点。 (1)标准C不限制标识符的长度,但它受各种版本的C 语言编译系统限制,同时也受到具体机器的限制。 (2)在标识符中,大小写是有区别的。 (3)标识符是用于标识某个对象的符号。 (4)用户定义的标识符不应与保留字相同。

char extern return union const float short unsigned

continue

for signed void default goto sizeof volatile do if static while

1.3 C程序结构

例1.3 编写C程序,求3个数的和。 程序代码如下:

/*定义函数f1,求3个实数的和*/

float f1(float x,float y,float z) /*这部分是函数头。给出函数名、函数返回值的数据类型、形式参数x,y,z及它们的数据类型*/ {

float temp; /*定义函数f1内部的变量*/ temp=x+y+z; /*相加*/

return (temp); /*返回变量temp的值给调用处,并且结束本函数的运行*/ }

/*主函数*/ main( ) {

float a,b,c,sum;

printf(\ /*显示提示信息,可有可无*/

scanf(\ /*从键盘输入数据存储到a,b,c中*/ sum=f1(a,b,c); /*调用函数f1求3个数a,b,c的和*/ printf(\}

C语言程序的结构如下:

(1)程序是由一个或多个函数构成的,但必须有而且只有一个主函数main()。

(2)C程序的执行从主函数开始,也从主函数结束。其他函数的执行是通过主函数调用或别的函数调用来完成的。

(3)函数是构成C语言程序的基本单位,它完成相对独立的功能。它由函数头和函数体两部分组成。 (4)C语言程序的语句必须以分号结尾,复合语句除外。

(5)C语言本身没有输入输出语句,输入输出功能通过调用标准库函数来完成。

(6)一个C语言程序可根据需要适当加入一些注释行,以增加程序的可读性。注释的形式为“/*注释内容*/”。

2

(7)C语言程序书写格式自由,一行可写几条语句,一条语句也可写成几行。

2.4C语言程序上机调试过程

C语言是计算机高级语言,用C语言写好的程序不能直接上机运行,必须经过翻译变成机器语言程序后才能被计算机执行,即要经过“编辑→编译→连接→运行”的过程。假定编辑好的C源程序是study.c。要运行study.c就必须将其经过编译生成目标程序文件study.obj,目标程序文件study.obj也不能直接运行,必须经过连接将study.obj和C库函数经过连接生成可执行程序文件study.exe。

Turbo C 2.0 系统是一个集编辑、编译、连接、调试和运行等功能为一体的C语言程序集成开发系统。在使用Turbo C 2.0系统前,首先要在硬盘上创建一个子目录,命名该子目录名为TC,然后把Turbo C 2.0系统的内容拷贝到其中,执行可执行文件TC.EXE即可进入Turbo C 2.0系统环境。 图1.1 Turbo C 2.0系统主界面

图1.1 Turbo C 2.0系统主界面

Turbo C 2.0系统主界面

从上到下分为4个区:主菜单区、编辑区、信息区和功能键提示区。 (1)主菜单区

主菜单区有如下菜单项:

File Edit Run Compile Project Options Debug Break/watch (2)编辑区

编辑区供用户建立、修改源程序。 (3)信息区

信息区供显示编译、连接时出现的各种提示信息。 (4)功能键提示区

常用的功能键如表1-3所示。 表1-3 Turbo C常用功能键

F1 F2 F3 F4 F5

帮助 文件存盘 装入文件

程序运行到光标所在行

放大或缩小活动窗口(指光标所在窗口)

F6 F7 F8 F9 F10

开、关活动窗口

单步执行(跟踪进入函数内)

单步执行(不跟踪进入函数内)

编译、连接

光标在主菜单和编辑窗口间切换

3

下面以一简单实例说明基本上机步骤。 1.进入Turbo C 2.0系统 2.建立新文件

(1)在“File”菜单中选择“Load”子菜单项,出现如图1.2所示的对话框,在“*”处键入自己所需定义的文件名(如study.c)并回车。 图1.2 装入程序文件

3.录入程序

用户新建文件后可在编辑区录入程序,如图1.3所示。

4.保存文件

4

5.运行程序

6.查看结果

7.退出Turbo C 2.0系统

5

对象可以位于运算符前面,也可以位于运算符后面。当运算符位于运算对象前面时,称为前缀运算符,如?? i和??i;当运算符位于运算对象后面时,称为后缀运算符,如i??和i??。 自增自减运算符的功能是将运算对象加1或减1后,再将结果保存到运算对象中去,如i??等同于i?i?1。自增自减运算符的运算对象只能是变量。

当表达式中出现自增自减运算符时,表达式的求值过程如下。

(1)自增自减运算符是后缀运算符时,应先使用自增自减运算符的运算对象计算整个表达式的值,然后再计算自增自减。 例4.4 main() {

int i=2,j=3; int k;

k=(i++)+(j++)+4;

printf(\}

程序运行结果为: result:k=9,i=3,j=4

表达式k?(i??)?(j??)?4的运算可理解为:先运算表达式k?i?j?4,再计算i??和j??。

(2)自增自减运算符是前缀运算符时,应先完成自增自减,然后使用运算后的结果计算整个表达式的值。 例4.5 main() {

int i=2,j=3; int k;

k=(++i)+(++j)+4;

printf(\}

程序运行结果为: result:k=11,i=3,j=4

表达式k?(??i)?(??j)?4的运算可理解为:先运算??i和??j,再计算表达式k?i?j?4。

(3)当表达式中既含有后缀自增自减运算符,又含有前缀自增自减运算符时,应先计算所有的前缀自增自减运算,再计算整个表达式的值,最后计算所有的后缀自增自减运算。 例2.6 main() {

int i=2,j=3; int k;

k=(i++)+(j++)+4+(++i)+(++j);

printf(\}

程序运行结果为: result:k=18,i=4,j=5

表达式k?(i??)?(j??)?4?(??i)?(??j)的运算可理解为:先运算??i和??j,再计算表达式k?i?j?4?i?j,最后计算i??和j??。

注意:在运算的时候变量i,j是变化的,但在某瞬间值是确定的。

2.3.4 赋值运算符和赋值表达式 1.简单的赋值运算符和赋值表达式

C语言的赋值运算符是“?”,该运算符是双目运算符,它的优先级仅高于逗号运算符,是右结合性的。 由赋值运算符构成的赋值表达式的格式为: 变量?确定的值

赋值表达式会得到两个值。一个是赋值运算符左侧变量的值;另一个是赋值表达式的值,表达式的值与变量的值是相同的。

下列表达式是合乎C语言表达式规则的表达式:

11

a=123 a=123.456 c=a+'A' x=a+c

a+(x=a+4)/c /*算术表达式*/

(x=a)+(b=3) /*合法的算术表达式*/

2.复合的赋值运算符和复合的赋值表达式

在赋值运算符“?”前加上其他的运算符,可以构成复合的赋值运算符。如在“?”前加上“?”运算符就构成了“??”运算符。

C语言提供了10种复合的赋值运算符,它们是 +=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=

其中前5个是复合的算术赋值运算符,后5个是复合的位运算赋值运算符。复合的赋值运算符是双目运算符,优先级和赋值运算符相同,也是右结合性的。 由复合的赋值运算符构成的赋值表达式的格式为: 变量 <运算符= >确定的值 它等效于

变量=变量 <运算符 >确定的值 例如:

a+=5 等价于a=a+5 x*=y+7 等价于x=x*(y+7) r%=p 等价于r=r%p

2.3.5 逗号运算符和逗号表达式

在C语言中逗号“,”也是一种运算符,称为逗号运算符。 逗号运算符的优先级是最低的。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。

逗号表达式的一般形式为: 表达式1,表达式2

逗号表达式的求值过程是顺序求解表达式1、表达式2的值,并以表达式2的值作为整个逗号表达式的值。 例2.7 main() {

int a=2,b=4,c=6,x,y; y=(x=a+b),(b+c);

printf(\}

程序运行结果为: y=6,x=6

本例中的y等于6,而逗号表达式的值y?(x?a?b),(b?c)是10。 2.3.6 表达式小结

判断表达式类型应根据表达式中出现的运算符的优先级来判定。如果某一运算符在整个表达式的运算过程中优先级是最低的,或者是最后运算的运算符,那么表达式的类型就是该运算符所从属的类型。例如:

x=(a=3,b*3) 是赋值表达式; x=a=3,6*a 是逗号表达式; (x=8)>(y=9)+6 是关系表达式; (k=i++)/3*a 是算术表达式。

12

2.4 C语言中的类型转换

C语言规定不同类型的数据不能够直接进行运算,只有相同类型的数据才可以。但是在描述表达式时,参与运算的运算对象却可以是不同类型的数据,于是在表达式进行运算的时候存在类型的转换问题。C语言中有两种形式的类型转换。

2.4.1 类型的自动转换

1.赋值表达式中的类型转换

其转换的依据是将赋值运算符右侧的确定的值按照左侧变量定义的类型存储,即要把确定的值转换为变量定义的类型。

为了方便描述,以下所有的示例都假定有如下的变量说明: int a;

long int b; unsigned int c; float x; char c1;

(1)浮点型数据赋给整型变量

浮点型数据赋给整型变量转换的方法是舍去浮点型数据的小数部分,将整数部分赋给整型变量。 (2)整型数据赋给浮点型变量

整型数据赋给浮点型变量转换的方法是数值保持不变,只是将整型数据以浮点型数据的存储形式存储到相应的浮点变量中。 (3)字符型数据赋给整型变量

具体转换的方法是将字符型数据的ASCII码存储到整型变量的低字节中,整型变量的高字节的所有位存储的是低字节的“高位扩展”。如果低字节的最高位为0,则高字节的所有位全部扩展为0;如果低字节的最高位为1,则高字节的所有位全部扩展为1。 (4)整型数据赋给字符型变量

整型数据赋给字符型变量时的具体转换方法是将整型数据的低字节存储的内容存储到字符型变量中去,即“高位截断”。例如: c1=254

运算后c1的ASCII码值为254。 5)int型数据赋给long int型变量

int型数据赋给long int型变量时,具体转换的方法是将int型数据的值存储到long int变量的低字中。

(6)long int型数据赋给int 型或unsigned int型变量

具体转换的方法是将long int型数据的低字的内容存储到int型或unsigned int型变量中去 7)unsigned int型数据赋给long int型变量

具体转换的方法是将unsigned int型数据的值存储到long int型变量的低字中,long int型变量的高字的所有位存储的是0。

8)相同长度的整型数据赋给相同长度的整型变量

相同长度的整型数据赋给相同长度的整型变量转换的规则是存储形式不发生变化,但代表的真值不一定相同。

2.不同类型数据的混合运算

当某一运算符两侧的运算对象类型不相同时,应进行类型转换,转换的依据是低类型转换为高类型。

类型的高低是相对于某类型的数据在内存中所占的字节数而言的,占字节数少的数据类型就低,占字节数多的数据类型就高。在所有的数据类型中,字符型数据的类型是最低的,双精度浮点型的类型是最高的。

C语言规定在运算时char 数据必须转换为int型,float型数据必须转换为double型参与运算。float型数据

13

转换为double型的主要目的是为了提高运算的精度,因为double型提供的有效位数多于float型。这种情况下的类型转换称为必然的转换。

当类型不相同的数据参与运算时,应该将低类型的数据转换为高类型的数据,类型的高低依次是int→unsigned int →long→unsigned long int→double。这种情况下的转换称为可能的转换。低类型转化为高类型的转化规则按照赋值表达式转化规则转换。 例如,某函数的数据描述部分有: int a=3;

long int b=10; float x=4.2; 则表达式

a+'a'*b-'\\373'*x

的运算次序及类型转换情况为:先计算'a'*b,将'a'转换为整型数97,运算结果为970;再运算a?970,不存在类型转换,运算结果为973;然后运算'\\373'*x,'\\373'必然转换为整型?5(读者自己分析原因),x必然转化为双精度浮点型,?5和x类型不相同,存在可能的转换,将?5转换为双精度浮点型?5.0,运算结果为21.0;最后计算973?21.0,存在可能的转换,将973转换为双精度浮点型973.0,运算结果为952.0。表达式的结果为952.0,是双精度浮点型。 2.4.2 强制的类型转换

当自动的类型转换不能达到目的时,可以使用强制类型转换的方法。强制类型转换是通过类型转换运算来实现的。

类型转换运算符是: (类型符)

强制转换表达式的一般形式为: (类型符) (表达式)

其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。 例如:

(float) a /* 把a代表的值转换为实型*/ (int)(x+y) /*把x+y的结果转换为整型*/

(int)x+y /*把x的值转换为int型,再和y相加*/ (int)x%5 /*把x的值转换为int型,再和5取余*/

14

第3章

顺序结构程序设计

3.1 语 句 3.2 库函数的使用 3.3 顺序结构程序设计 3.1 语 句 3.1.1 语句的概念

语句是是算法实现的程序表示,是算法实现的最小单位。语句说明了一种行为,它是用计算语言编写的控制计算机完成确定操作的句子。 3.1.2 C语句的分类

C语言将语句分为以下几类: (1)表达式语句; (2)流程控制语句; (3)函数调用语句; (4)跳转语句; (5)标号语句; (6)复合语句; (7)空语句。

3.1.3 语句和表达式的区别

任意类型的表达式都是有值的,而语句是向计算机发出的完成表达式运算的一个动作,语句是没有值的。表达式可以作为运算对象参与其他表达式的运算,而语句则不能。例如, x=3*(a=4)

是合法的表达式,而 x=3*(a=3;)

则不是合法的表达式。

3.2 库函数的使用

在C语言中函数占有及其重要的地位,这里首先来简单介绍一下函数的概念。函数是事先编写好的完成一定功能的程序段。

下面以Turbo C为例,讲述部分输入输出和数学库函数的使用。 3.2.1 库函数的使用

标准的库函数使用方法较为简单,但是由于库函数是存放在函数库中的,因此在使用时必须告诉计算机该库函数属于哪一个库,以便计算机及时查找并执行其程序体,这一过程一般称为函数的声明。 #include \main() {

float x,y; … y=sin(x); … }

其中#include \就是对函数的声明过程。

include 是C语言的特定字,是包含的意思,在使用前要加符号“#”。被包含的文件又称为头文件。

函数的使用称为调用,在函数调用后加“;”就构成了函数调用语句,函数也可以作为运算的运算对象。函数名括号里面的量值称之为参数,当给定这些参数的量值时,编译系统就可通过给定的量值计算出所需的结果

3.2.2 常用的输出函数

1.多种类型数据输出函数 printf()

15

本文来源:https://www.bwwdw.com/article/yl95.html

Top