c语言教学教案
更新时间:2023-03-08 05:15:14 阅读量: 综合文库 文档下载
第一讲 C语言概述 1.1 C语言发展概述
C语言是在1972年至1973年间由美国的贝尔实验室的M.D.Ritchie和K.Thompson以及英国剑桥大学的M.Richards等为描述和实现UNIX操作系统而设计的。
最初的C语言是附属于UNIX的操作系统环境,而它的产生却可以更好地描述UNIX操作系统。时至今日,C语言已独立于UNIX操作系统。它已成为微型、小型、中型、大型和超大型(巨型)计算机通用的一种程序设计语言。
随着C语言的不断发展、应用和普及,目前,C语言已经能够在多种操作系统下运行,实用的C语言编译系统种类繁多,如Microsoft C、Turbo C等。 1.2 C语言的特点
C语言能够成为目前广泛的高级设计语言之一,完全是由其语言特点决定的。
(1)语言基本组成部分紧凑简洁。 (2)C语言运算符丰富,表达能力强。 (3)C语言数据结构丰富,结构化好。 (4)具有结构化的控制语句。
(5)C语言提供了某些接近汇编语言的功能。 (6)C语言程序所生成的目标代码质量高。 (7)C语言程序可移植性好。
C语言的弱点:
(1)运算符的优先级较复杂,不容易记忆
(2)C语言的语法限制不太严格,一定程度上降低了某些安全性。 1.3 简单的C语言程序。 1.3.1 C语言程序的构成 1.3.2 C语言程序的特点
(1)C程序是由函数构成的,其中至少包括一个函数main( )。 (2)函数体是由左右花括号{ }括起来的部分。 (3)C语言中的每个基本语句都以“;”结束。
(4)C语言书写格式自由,一行内可以写一个语句,也可以写多个语句。
(5)#include语句是编译预处理语句,其作用是将由双引号或尖括号括起来的文件内容读入该语句位置处。 对程序说明:
(1)可用/*?*/对C程序中的任何部分作注释。
(2)C语言中所有变量都必须先定义类型,然后再使用。 (3)一个C语言程序通过函数之间的相互调用来实现相应的功能。即可以是系统提供的库函数,也可以是根据需要自己定义的函数。 1.4 C语言上机步骤
运行环境:DOC操作系统下的Turbo C 1.4.1 C程序上机步骤
1.编辑:在TurboC环境下。将C语言源程序通过键盘输入到计算机
中,并以文件形式存盘,源程序都是以.C为扩展名。
2.编译:通过编辑程序将源程序输入到计算机后,需要经过C语言编译器将其生成目标程序。得到的目标文件都是以.OBJ为文件扩展名。 3.连接:经过编译后生成的目标文件需经过连接后才能生成可执行代码。其扩展名是.EXE。
所谓连接,是将目标文件和库函数或其他目标程序连接成可执行的目标程序。
4.执行:连接后源程序的目标程序就是可执行文件了。在DOS系统下,只要键入可执行文件名,按回车键就可以了。 1.4.2 Turbo C系统菜单 1.Turbo C的主屏幕和主菜单功能 2.文件菜单及功能 1.4.3 程序调试方法
一个计算机程序必须对其进行测试来确定其可以正确地工作,这一过程称为调试。 程序错误
语法错误:通过编译和连接就会找到 运行错误:通过调试自己找出问题所在 1.设置和使用观察变量 2.单步执行程序 3. 设置和使用断点
2.1 常量和变量 2.2 整型数据 2.3 字符型数据 2.4 浮点型数据 2.5 变量的初始化 第二章 数据类型与表达式 2.1 常量和变量
2.1.1 常量:在程序运行过程中其值不能被改变的量。 2.1.2 变量:在程序运行过程中其值可以被改变的量。
标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。 1.标识符的有关规定:
(1)由英文字母、数字、下划线组成,且第一个字符必须是字母或下划线,一般不超过8个字符; (2)大小写字母的含义不同。
(3)不能使用C语言中的关键字做标识符,
(4)用户取名时,应当尽量遵循“简洁明了”和见名知意的原则。 2.变量名的有关规定:
(1)使用变量名前,一定先定认,后使用,否则不能做为变量名。 (2)每一个变量属于一种类型,便于在编译时据此检查该变量所进行的运算是否合法。
(3)变量名的定义:存储属性、数据类型、变量名表 3.数据类型 2.2 整型数据 2.2.1整型常量
(1)十进制整数:数码直接开头的十进制数。如1234,-234。 (2)八进制整数:以0开头的常量是八进制数。如011=(11)8 (3)十六进制整数:以0x开头的数是十六进制。如0x123即(123)16
例2.1 三种进制表示方法的转换 源程序a1.c main() {
Int x=1246,y=01246,z=0x1246; Printf(“%d,%d,%d\\n”,x,y,z); Printf(“%o,%o,%o\\n”,x,y,z); Printf(“%x,%x,%x\\n”,x,y,z); } C:\\>a1 1246,678,4678 2336,1246,11106 4de,2a6,1246 2.2.2整型变量
原则:使用变量前,先定义,后使用。 (1)基本型:用int表示;
(2)短整型:用short int或short表示; (3)长整型:用long int或long表示; (4)无符号型:
无符号整型:用unsigned int或unsigned表示;
无符号短整型:用unsigned short int或unsigned short表示; 无符号长整型:用unsigned long int或unsigned long表示; 2.2.3 整型变量使用
不同的整型数据,应根据其特性和取值范围,将其定义成不同类型的整型变量。
例2.2不同类型的数据进行算术运算。 源程序a2.c Main() {
Int a,b,s1,s2; Unsigned x; a=10;b=-30;x=20; S1=a+x;s2=b+x;
Printf(“a+x=%d,b+x=%d\\n”,s1,s2); } C:\\>a2
运行结果为 a+x=30,b+x=-10 2.2.3 整型变量使用
不同的整型数据,应根据其特性和取值范围,将其定义成不同类型的整型变量。
例2.3 整型数据各类型所能表示的范围 源程序a3.c main() {int a,b; long c,d; unsigned e,f; a=32767;b=1; c=2147483647;d=1; e=65535;f=1;
Printf(“int: %d,%d,\\n”,a,a+b); Printf(“long: %d,%ld\\n”,c,c+d); Printf (“unsigned: %u,%u\\n”,e,e+f); } C:\\>a3 运行结果为 Int: 372767,-32768
Long: 2147483647,-2147483648
Unsigned:65535,0 2.3 字符型数据 2.3.1 字符型常量
字符常量是由一对单引号括起来的单个字符构成,例如:‘A’,‘b’,’2’,’%’’;’等。一个字符型常量是该字符集中对应的编码值:‘0’~‘9’的ASCⅡ编码值是48~57。显然‘0’与数字0是不同的。
2.3.2 字符型变量
字符型数据分为两类:一般字符类型(char) 和无符号字符类型(unsigned char)。
例2.4 字符型数据与整型数据可以通用 源程序a3.c Main() {char c1,c2;
Printf(“%c,%c\\n”,c1,c2); Printf(“%d,%d\\n”,c1,c2); } C:\\>a4 运行结果为 A,B
65,66
2.3.3 字符串常量
字符串常量是由一对双引号括起来的字符序列,例:“fsdf”,”A”等。 字符串常量中不能直接包括单引号、双引号和反斜杠“\\“。 字符串常量与字符常量的区别:
(1)字符串常量是用双引号括起来的字符序列。 (2)字符串常量有串尾标记”\\0”; (3)字符串常量允许扩展表示法;
(4)C语言中没有专门的字符串变量。字符串如果需要存放在变量中,需要用字符型数组来存放。
注意:不要将单个字符组成的字符串常量与字符常量混淆。‘a’为字符串常量,不能把一个字符串常量赋给一个字符变量。例如:下面的用法都是错误的: Char c1,c2; C1=“a” C2=“CHINA”;
字符‘\\0’由系统自动加入到每个字符串的结束处,不必由编程人员加入。
字符串“CHINA”在内存中的存放形式如下图,其长度是六个字节,而不是5个字节。字符‘\\0’所对应的ASCⅡ值为0,即“空”字符。 2.4 浮点型数据
2.4.1 浮点型常量
浮点型常量有两种表示形式。 十进制数形式
它是由数字和小数组成,如:3. 14159,-7.2,8.9 指数法形式
如:180000.0用指数法可表示为1.8e5,1.8称为尾数,5称为指数。 0.00123用指数法可表示为1.23e-3 注意:
(1)字母e 或E之前(即尾数部分)必须是有数字的。 (2)e或E后面的指数部分必须是整数。 如:e-3,9.8e3.1,e5都是不合法的。 2.4.2 浮点型变量(实型变量)
把带有小数点的数称为浮点数,或实型数。浮点型变量又称为实型变量,按能表示数的精度,分为:单精度浮点型变量和双精度浮点型变量,其定认方法如下:
float a,b; /*单精度变量的定义*/ double c,d; /*双精度变量的定义*/
单精度:占4个字节,有效位为7位,数值范围为10-37~1038 双精度:占8个字节,有效位为15~16位,数值范围约为10-307~10308 浮点型常量不存在单精度型和双精度型之分。 2.5 变量的初始化
变量的初始人化:在定义变量的同时给变量赋予初值。 方法:
(1)先说明变量类型,然后再赋值。
(2)在对变量类型说明的同时,给变量赋初值。 先定义后赋值 int a,b,c; char d; floatb f; a=2; b=5; c=10; d=‘a’; f=5.7;
定义和赋值同时进行 int a=5; short b=10; char c=‘a’; float d=7.8;
3.对几个变量同时赋一个初值 Int a1=10,a2=10,a3=10;
初始化不是在编译阶段完成的,而是在程序运行时执行本函数时
赋以初值的。相当于一个赋值语句。例如: int a=10; 相当于: int a;
a=10; 又如: Int a;,b,c=20; 相当于: Int a,b,c; C=20;
第三讲 运算符以及数据类型 2.6 运算符及表达式 2.7 数据类型转换 2.8 类型定义 2.6 运算符及表达式
C语言运算符可以分为:算术运算符、逻辑运算符、关系运算符、位运算符、赋值运算符。 2.6.1 算术运算符和算术表达式
1. 算术运算符:加、减、乘、除及取模即:+,-,*,/,%来表示。 C语言规定:
(1)模运算符%,仅用于整型变量或整型常量。
(2)优先级:一个表达式中如有多个运算符,则计算先后次序为相应运算符的优先级高的优先。乘、除、模优先级高于加、减的优先级。
(3)结合方向:是一个运算对象两侧的运算符的优先级别相同时,应遵循的处理规则。
算术运算符的结合方向是从左至右; 赋值运算符的结合方向是从右至左。
算术表达式:由算术运算符、括号以及操作对象组成的符号C语言语法规则的表达式称为算术表达式。 2.6.2 赋值语句 1. 赋值运算符
语言的赋值运算符是“=”,它的作用是赋值运算符右边表达式的值赋给其左边的变量。
例如:a=10,x=a+5,前者是把常量10赋给变量a,后者是将表达式a+5的值赋给变量x.
注意:如果“=”两侧的类型不一致,在赋值时要进行类型转换。例如a=b,执行该语句时,b的结果转换为a的类型后才能进行赋值运算。 2. 复合赋值运算符
C语言允许在赋值运算符“=“之前加上其它运算符,以构成其复合运算符。复合运算符多数为双目。 复合运算符有:
+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|= 例:
a+=2 等价于 a=a+2
x*=y+5 等价于 x=x*(y+5) x%=8 等价于 x=x%8 赋值运算符都是自右向左执行。 3. 赋值语句与赋值表达式 赋值语句最简单的形式是: <变量>= <表达式>;
功能:是赋值运算符右边的“表达式”的值赋给左边的变量。
赋值表达式也可以包含复合的赋值运算符,例: 如果a=10,表达式a+=a-=a*a的值为-180。其步骤为: (1)先进行a-=a*a的计算,它相当于a=a-a*a=10-10*10=-90. (2)再进行a+=-90的计算,它相当于a=a+(-90)=-90-90=-180. 4. 自增自减运算符
i++(或i--)表示在使用该表达式值之后将i值加1(或减1)。 ++i(或--i)表示在使用该表达式值之前将i值加1(或减1)。 说明:
(1)++和--仅适用于变量,不能用于常量或表达式。 (2)++和--运算符的结合方向是“至右向左”。 Main() {int a=100;
printf(“a++=%d\\n”,a++); printf(“++a=%d\\n”,++a); printf(“a--=%d\\n”,a--); printf(“--a=%d\\n”,--a); }
输出结果: a++=100 ++a=102 a--=102 --a=100
2.6.3 关系运算符和关系表达式 1. 关系运算符
关系运算符均为两目运算符。共有六种: > 大于 < 小于 >= 大于等于 <= 小于等于 == 等于 != 不等于
关系运算符要求两个操作数是同一种数据类型,其结果为一逻辑值,即关系成立时,其值为真(true),用非0值表示;关系不成立时,其值为假(false),用0表示。
关系运算符的优先级借低于算术运算符,关系运算符==和!=低于前四种运算符,并且结合方向均为自左至右。
2.地址表
Scanf函数中的“地址表”部分是由变量的地址组成的,如果有多个变量,则各变量之间用逗号隔开。地址运算符为“&“,如变量a的地址可以写为&a。
例3.2用scanf函数,从键盘 上输入一个整型数、一个浮 点数和一个字符,分别存入 变量i、f和c中。
#include”stdio.h” main() { int i; float f; char c;
scanf(“%d,%f,%c”,&I,&f,&c); printf(“i=%d,f=%f,c=%c”,i,f,c); } 说明:
(1)在scanf函数“格式控制”部分中的每个格式说明符都必须在“地址表列”中有一个变量与之对应格式说明符必须要与相应变量的类型
一致。
(2)当格式说明符之间没有任何字符时,在输入数据时,两个数据之间要使用“空格”、“Tab”或“回车”键做间隔;如果格式说明符之间包含其它字符,则输入数据时,应输入与这些字符相同的字符做间隔,如:
Scanf(“%d,%f,%c”,&i,&f,&c); 在输入数据时,应采用如下形式:20,7.8,a
(3)可以在格式说明符的前面指定输入数据所占的列数,系统将自动按此列数来截取所需的数据,如:
scanf(-=”,&x,&y); 当用户输入78985时,系统将自动地将78赋给变量x,将985赋给变量y。这种方式也可用于字符型数据的输入。
(4)应该特别注意的是,scanf函数中的“地址表列”部分应当中变量的地址,而不是变量名。
3 .2 数据的输出
3.2.1 字符输出函数putchar
数据的输出一般是以终端显示器(屏幕)为处理对象。 格式:向终端输出一个字符。
说明:变量c可以是字符型,也可以是整型。 例3.3 从键盘输入一个字符,在屏幕上显示出来。 #include”stdio.h”
main() { char c;
c=getchar(); /*从键盘输入一个字符*/ putchar(c); /*在屏幕上显示一个字符*/ }
putchar函数也可以输出一些特殊字符(控制字符),如:putchar(‘\\n’) 作用是输出一个“换行”字符。 3.2.2 格式控制函数printf
格式: printf(格式控制,输出表); 功能:输出任何类型的数据。 1.格式控制
“格式控制”部分与scanf函数的相似,也是由双引号括起来的字符串,主要包括格式说明和需要原样输出的字符。
“格式说明”:由“%”和格式符组成,如%c和%f等,作用是将要输出的数据转换为指定格式后输出。 printf函数中使用的格式字符见表3.2 。
表3.2 printf函数格式字符 注意:格式字符必须小写 输出表
printf函数中的“输出表”部分由表达式组成,这些表达式应与“格式控制”字符串中的格式说明符的类型一一对应,若“输出表”中有
多个表达式,则每个表达式之间应由逗号隔开。
例3.4 从键盘输入一个整数和一个浮点数,并在屏幕上显示出来。 #include”stdio.h” main() { int i; float f;
scanf(“%d,%f”,&i,&f); printf(“i=%d,f=%f”,I,f); }
执行此程序,按格式输入数据: 50,8,9 i=50,f=8.900000 说明:
(1)printf函数中的“格式控制”字符串中的每一个格式说明符,都必须与“输出表”中的某一个变量相对应,如上述程序中的“%”与i对应;“%f”与f对应,而且格式说明符应当与其所对应变量的类型一致。
若要显示“%”字符,则应在“格式控制”字符串中连写两个“%”,如:
Printf(“x=%d%%”,100/4); 将显示:x=25%。
(2)对格式说明符c、d、s和f等,可以指定输出字段的宽度。
%md:m为指定的输出字段的宽度。如果数据的位数大于m,则按实际位数输出,否则输出时向右对齐,左端补以“空格”符。 %mc:m为指定的输出字段的宽度。若m大于一个字符的宽度,则输出时向右对齐,左端补以“空格”符。
%mc:m为输出时字符串所占的列数。如果字符串的长度(字符个数)大于m,则按字符串的本身长度输出,否则,输出时字符串向右对齐,左端补以“空格”符。
%-ms:mr的意义同上。如果字符串的长度小于m,则输出时字符串向左对齐,右端补以“空格”符。
%m.nf:m为浮点数据所占的总列数(包括小数点),n为小数点后面的位数。如果数据的长度小于m,则输出时向右对齐,左端补以“空格”符。
%-m.nf:m、n的意义同上。如果数据的长度小于m,则输出向左对齐,右端补以“空格”符。
(3)除了格式说明符及其输出字段的宽度外,在“格式控制”字符中的其他字符,将按原样输出。
(4)在显示数据时,可以不指定输出字段的宽度,而直接利用系统隐含的输出宽度。 3.3 应用举例
例3.5 分析下列程序,观察运行结果。 main() {
else if(score>59) grade=‘3’; else grade=‘2’; 说明:
(1)if语句中的表达式可以是C语言的合法表达式。
(2)第二种、第三种格式的if语句中,在每个else前面有一个分号,整个语句结束处也有一个分号。这是由于分号是C语句中不可缺少的部分,这个分号是if语句中的内嵌语句所要求的。
(3)在if和else后面可以只含有一个内嵌的操作语句,也可以含有多个操作语句,此时应用花括号“{ }“将几个语句括起来,构成一个复合语句。
例4.1 将两个数中较大者赋给 s。 main() { int a,b,s; a=10;b=20; if(a>b) s=a; else s=b;
printf(“s=%d\\n”,s); }
执行结果: s=20
例4.2 比较两个数,按由大到小输出。
main( ) {
int a,b,x,y; a = 10; b = 20;
if (a>b) {x=a;y=b;} else {x=b;y=a;}
printf(“x=%d,y=%d\\n”,x,y); }
执行结果: x=20,y=10 4.2.2 if语句的嵌套
在if 语句中又包含一个或多个if语句,称为if语句的嵌套。一般形式如下: if( )
if( ) 〈语句1〉 else 〈语句2〉 else
if( ) 〈语句3〉 else 〈语句4〉 if( )
if( ) 〈语句1〉
else
if( ) 〈语句2〉 else 〈语句3〉 说明:
(1)if与else的配对关系,从最内层开始,else总是与离它最近的未曾配对的if配对。
(2)if与else的个数最好相同,从内层到外层一一对应,以避免出错。
(3)如果if与else的个数不相同,可以用花括号来确定配对关系。例如: If ( )
{if( )〈语句1〉} else
〈语句2〉
这时{ }限定了内嵌if 语句的范围,因此else与第一个if配对。 例4.3 有一函数
编一程序,输入一个x值,输出y 值。 main( ) { int x,y;
scanf(“%d”,&x);
if(x<0) y=-1; else if(x==0) y=0; else y=1;
printf(“x=%d,y=%d\\n”,x,y);} 4.2.3 条件运算符
如果if语句的形式如下所示: if(表达式1) x=〈表达式2〉; else
x=〈表达式2〉;
无论表达式1为“真”还是为“假”,都只执行一个赋值语句且给同一个变量赋值。
可以利用条件运算符,将这种语句简单地用如下语句来表示。 x=〈表达式1〉?〈表达式2〉:〈表达式3〉;
说明:即当表达式1的值为“真”时,将表达式2的值赋给变量x;当表达式1的值为“假”时,将表达式3的值赋给变量x。 如:
a=5,b=10,c=20; x=a>b? c*b:c/b;
因为a>b为假,则x=c/b=2。
例4.4 输入两个数,并将其中较大者显示出来。 #include “stdio.h”
main( ) { int a,b,max;
scanf(“%d%d”,&a,&b); max=(a>b)? a:b;
printf(“max=%d”,max); }
条件运算符也可以嵌套使用,如:
Grade=(score>=90)?’A’:(score<=70)?’C’:’B’当score>=90时,将字符‘A’赋给变量grade; 当score<=70时,将字符‘C’赋给变量grade; 否则将字符‘B’赋给变量grade. 4.3 switch语句
Switch语句是多分支选择语句,其一般形式如下:Switch(表达式) {
case 〈常量表达式1〉:〈语句1〉 case 〈常量表达式2〉:〈语句2〉 ┆
case 〈常量表达式n〉:〈语句n〉 default:〈语句n+1〉 }
;
正在阅读:
c语言教学教案03-08
氯化橡胶防腐涂料标准05-19
我和我的祖国节目串词07-31
塑料原材料牌号及用途大全-最新版本2011 - 图文09-17
电磁学及答案03-31
电工学试题库及答案06-05
大学建筑物理学课后习题答案06-19
考研历史 世世界近代史选择题10-19
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 教案
- 语言
- 教学
- 《〈先秦诸子选读〉概说》导学案
- 钉钉管理员认证考试 部分试题(含答案)
- 施工现场重大事故应急救援预案
- I甘肃 S227头寨子至渭源公路段改建工程施工组织设计施工组织设计
- 计算机网络谢希仁第五版课后答案 - 图文
- 高一信息技术第一学期教案全 - 图文
- 山东省泰安市2014届高三上学期期末考试数学(文)试题含答案 -
- 郑州大学远程教育《国际贸易实务》在线测试及答案
- 辅导讲义:常见辅助线作法
- 会计电算化用友软件操作流程
- 元曲三百首读后感
- 物理竞赛辅导一运动学(高考难度) - 图文
- 品质工程师的面试题
- 泵送混凝土作业指导书
- 重庆市巴蜀中学2014-2015学年高二生物上学期期末考试试卷
- 2017-2018学年度第二学期八年级数学下册教学计划
- 数字信号处理期末试题3套含答案(大学期末复习资料)
- 19.赵州桥
- 《如何规范农村三年级小学生汉字书写的研究》 胡恩勤
- 南开大学政治经济学(2012年)考试范围