资源描述
C语言程序设计,任课教师:张 琎,一句题外话:,珍惜时间,大学时光应该如何度过?,艺多不压身,不要随波逐流,进入ftp服务器 ftp:/211.64.92.1/课程相关/张琎/C语言实验课 可以看到每次实验课任务,明天开始上实验课(12教401),学好C语言的六大理由: 理工类本科的必修课(历年来及格率比较低) 上机实践效率低,动手编程能力差 评估的重点考察课程 拓宽就业面的需要 考证的有效途径 一切程序思想的源泉,成绩评定方法: 期末考试成绩占70分,平时成绩占30分 下列情况平时成绩要酌情扣分: 理论课和上机课的旷课、迟到、早退 上机课做与学习无关的事情 上机课忘带笔、课本、实验教程等 实验报告情况(严惩抄袭) 其他的平时表现,回忆,计算机系统组成,运算器,硬件系统,控制器,软件系统,存储器,输入设备,输出设备,系统软件,应用软件 用户为解决具体问题而开发的软件,操作系统,语言及其处理程序,数据库管理系统,系统支撑软件,面向过程:C语言等,机器语言、汇编语言,面向对象:C等,绪论,教学要求 掌握程序设计语言的基本知识 常用算法 会读、会编、会调试C程序,具有初步程序设计能力 学习方法 多看书,自主学习 多上机实践(*) 教材和参考书 C程序设计(第二版),谭浩强著,清华大学出版社,1999,第一章 C程序基础,1.1 C语言程序的基本结构 1.2 C程序运行过程 1.3 编写简单的C语言程序 1.4 C语言基本语法成分 1.5 C语言数据类型 1.6 数据的输入与输出 1.7 算法 1.8 C语言的产生、发展及特点,1.1 C语言程序的基本结构 1.1.1 认识C语言程序,例1、一个最简单的C程序 void main() ,每个C程序必须有主函数main。main是函数名,main后的圆括号不能省略,void是一种数据类型,说明该函数没有返回值。,例2、在屏幕上显示 This is my first C program! #include void main() printf(“This is my first C program!”); ,例、在屏幕上显示 This is my first C program! And I am very happy! #include void main() printf(“This is my first C program! n ”); printf(“And I am very happy!”); ,n是换行的意思,例、计算两个数的和并显示结果 #include void main() int value1, value2, sum; value1=3; value2=5; sum=value1+value2; printf(“The sum is :%dn”, sum); ,如果想显示为 应该怎么写?,printf(“The sum is : %d n”, sum);,类似于做填空题: 全球最大的网络叫做: (用英文写出答案 ),%d是一种格式控制符,例、输入两个数,求和并显示 #include void main() int value1, value2, sum; scanf(“%d%d”, ,程序运行起来是黑屏,不好理解,怎么做更好一些?,printf(“Input two numbers:n”);,例6、输入两个数,求两数中较大的数并输出 #include void main( ) int a, b, c; scanf(“%d%d“, /*main函数结束*/,int max(int x, int y) int z; if (xy) z=x; else z=y; return(z); ,类似于数学中的先定义函数,再使用函数,如先定义f(x),再使用f(5),1.1.2 C语言程序的基本结构,编译预处理命令 /*目前只接触了#include*/ void main ( ) /*主函数,必须要有*/ /*一对花括弧为函数体*/ 声明部分 /*包括变量的声明和函数的声明*/ 执行部分 /*C语句*/ 其他函数定义 声明部分 执行部分 ,通过以上例子可以看出:,1、函数是程序的基本单位 一个C源程序一般由一个主函数和若干其他函数构成,注意一个C程序必须包含且只能包含一个main函数。 C函数分为标准函数(如scanf、printf等)和 用户自定义函数两种形式。 在调用标准函数时,要注意加文件包含命令; 用户自定义函数是用户根据程序需要,自己编写的函数,例6、输入两个数,求两数中较大的数并输出 #include void main( ) int a, b, c; scanf(“%d%d“, /*main函数结束*/,int max(int x, int y) int z; if (xy) z=x; else z=y; return(z); ,C程序从main函数开始执行, 调用其他函数后再返回到main 函数。注意其他函数不能调用main函数。,2、函数的基本结构 int max(int x, int y) int z; if (xy) z=x; else z=y; return(z); , 函数首部 返回值类型 函数名(参数列表), 函数体 函数首部下面用一对 括起来的部分。 函数体一般包括声明部分和执行部分。声明部分:定义本函数中所使用的变量。 执行部分:由若干条语句组成。,3、一个可执行的C语言程序总是从main函数开始执行,而不论其在整个程序中的位置如何。,4、每条语句和数据定义的最后必须有一个分号;。 说明:在以下三种情况下不允许有分号: 的 a. 定义函数时,函数名称后面不使用分号; b. 在右花括号“”后面不使用分号; c. 预处理语句后面不使用分号。,#include ; void main( ); printf(“This is my first C program!n”); ;,5、C程序书写格式自由,一行内可以写几个语句,一个语句也可以分写在多行上。 6、可用/*/对C程序中的任何部分作注释,注释可以写在程序的任何位置上,“/*”与“*/”也可不在同一行上,但/和*之间不能有空格。 7、在C语言中,大小写字母是有区别的。(C语言习惯用小写字母)。 8、书写程序时,最好使用缩进格式的形式。,1.1.3 语言的表达式和语句,表达式语句的一般形式: 表达式; 常见的表达式语句有: 1、赋值语句:由赋值表达式加上一个分号构成,是程序中使用最多的语句之一。 其一般形式为: 变量 = 表达式; =是赋值运算符,功能是将=右边表达式的值赋给左边的一个变量,不是算术中的相等(=) 例:x=9;y=a;i=i+1; 赋值运算符具有右结合性。 例:a=b=3+8; 先做3+8,然后将11赋给b,再将b的值11赋给a。,变量赋值的特点: 变量必须先定义,后使用 例:int x, y; x=6; y=23; z=y-x; 变量被赋值前,值是不确定的。 例: int i; if(i0) printf(“i是负数”); 对变量的赋值过程是“覆盖”过程,即用新值去替换旧值。 例: int x; x=1; x=x+1;,2、函数调用语句:由函数调用表达式加一个分号构成 。 例: scanf(“%d%d“, ,5、控制语句:完成一定的控制功能,只有种。 条件判断语句 if() else (条件语句) switch (多分支选择语句) 循环执行语句 for() (循环语句) while() (循环语句) do while() (循环语句) 转向语句 break (中止执行switch或循环语句) continue (结束本次循环语句) goto (转向语句) return (从函数返回语句),C程序运行原理图解,1.3 编写简单的语言程序,三种不同的程序设计结构 顺序结构 选择结构(分支结构) 循环结构 其中,顺序结构是最基本、最简单的程序结构。 在顺序结构程序中,各语句是按照位置的先后次序, 顺序执行的,且每个语句都会被执行到。,例、已知a=5,b=10,试交换a、b的值。,分析:交换两个变量的值,就像一个瓶装酱油,一个瓶 装醋,要交换内容需要借助第三个空瓶一样。交 换两个数也需要借助第三个变量。,#include void main( ) int a=5, b=10, temp; temp=a; a=b; b=temp; printf(“a=%d, b=%d n“, a, b); ,例8、求任意三个整数的平均值。,编程思路: 首先要有3个整数, 这3个数可以用a、b、c 三个整型变量存放 其次平均值应该用一个变量保存,该变量应该是实数类型 求任意3个整数的平均值, 所以这3个数应该从键盘输入 计算平均值: (a+b+c)/3.0, 因为C语言中两个整数相除得到的结果也是整数(去掉小数部分), 为保证结果正确必须用实数3.0,#include void main( ) int a ,b ,c; float ave; scanf(“%d%d%d“, ,例9、输入三角形的三边长,求三角形的面积。 设三边长a,b,c构成三角形,则Area= #include #include /*因为要调用sqrt,所以包含此头文件*/ void main () float a, b, c, s, area; printf(“Input 3 numbers:n”); scanf (“%f%f%f“, ,1.4 C语言基本语法成分,语言字符集 字符是C语言最基本的元素,C语言字符集由字母、数字、空白符、标点符号和特殊字符组成 在C程序是用下列字符所组成的字符集写成的: 字母: A-Z,a-z 数字: 0-9 标点符号、特殊字符(28个): ! # % : ? “ ( ) 空白符: 空格, 制表符(Tab跳格健), 换行符的总称。空白符除了在字符、字符串中有意义外, 在程序中只起间隔作用, 编译系统会忽略其它位置的空白符。,标识符 标识符是给程序中的实体所起的名字 这些实体指:变量, 常量, 函数, 数组, 类型 标识符的命名规则 由字母, 数字和下划线组成,必须以字母或下划线开头 标识符不能与C语言的关键字重名 建议用户定义标识符时尽量不用下划线开头 注意标识符的有效长度,不同的编译系统有不同的限制,一般不超过32个字符 标识符中区分大小写字母 (如: sum 和 SUM 是不同的标识符) 定义标识符应遵循的原则 尽量做到见名知义 一般习惯上变量名、函数名用小写 , 而符号常量用大写 应尽量避免使用容易认错的字符 如: 数字1和小写字母l,下面哪些标识符合法? a str20 area student Line TABLE go2map _good hello_world god_ 3th =xy “m+n” hello world int,关键字 关键字是C语言预先定义的、具有特定意义的标识符,也称为保留字。C语言包括32个关键字: 注意: C语言的关键字都是小写,不能重新定义关键字,运算符 运算符是用于描述某种运算功能的符号, 如+ - * / 等 运算符可以由一个或多个字符组成 根据参与运算的操作数个数,可分为:单目运算符、双目运算符和三目运算符,C语言运算符分为以下几类: 算术运算符:+、-、*、/、% 关系运算符:、=、= =、!= 逻辑运算符:!、&、| 位运算符:、|、& 赋值运算符:=及扩展赋值运算符 条件运算符:? : 逗号运算符: , 指针和地址运算符:*、& 求字节运算符:sizeof 分量运算符:.、- 下标运算符: 强制类型转换运算符:(类型) 其他:如函数调用运算符( ),分隔符 在c语言程序中, 空格、逗号、回车/换行等,在不同 的应用场合起着分隔符的作用。 例如: int x, y ; 中的空格和逗号都起着分隔符的作用, 如果int和x之间没有空格,程序就会出错;而在x和y之间少了逗号,xy就会被认为是一个变量。 其他符号 花括号 通常用于标识函数体或一个复合语句 /*/构成一组注释符,编译时系统将忽略注释 注释在程序中起提示、解释作用。 在程序调试过程中使用注释可以暂时屏蔽一些语句。,1.5 C语言数据类型,用程序设计语言处理问题最终是对数据的处理,而数据有不同类型的区分,这涉及到数据类型的概念。 数据类型 基本类型 整型(int) 实型(浮点型)(float double) 字符型(char) 构造类型 数组、结构体、共用体、枚举 指针类型 空类型(void),语言中的数据又分常量和变量,现介绍基本数据类型中的常量和变量。 常量 在程序执行期间其值不发生变化的量。又可分为直接常量和符号常量 直接常量 例:8(整型), 2.6(实型), b(字符型), “student” (字符串) 符号常量 在程序中用标识符代表的常数 定义符号常量的格式: #define 标识符 常数,例10、计算圆的周长和面积。 #include #define PI 3.14 void main( ) int r; float c, s, v; r=3; c=2*PI*r; s=PI*r*r; printf(“%f, %f“, c, s); ,使用符号常量的优点: (1) 含义清楚 (2) 修改方便 特点:标识符名一般大写,变量 在程序执行期间值可以变化的量 变量声明的格式:数据类型 变量名列表 ; 例:int x; int a, b, c; x = 3; 说明: 进行变量声明后,计算机系统会为声明的变量分配存储空间,用以存放数据。 变量的存储空间可能由一个或多个字节组成,内存中的每个字节都有自己的地址,变量名实际上是一个符号地址。在程序中对变量的赋值和取值操作实际上是通过变量名找到相应的内存地址,然后从对应的存储空间中读取数据。 变量的初始化: 在声明变量的同时对变量赋初值 例:int x=3; int x=3, y=5; int x, y=3, z;,1.5.1 整型数据,整型常量 十进制整型:23, -32, 0 八进制整型:以0开头 017, 023 十六进制整型:以0x(或0X)开头 0x17, 0X2e 整型变量 分三种类型:short int、 int、 long int;每种类型又分signed和unsigned,缺省为signed。 有符号基本整型 signed int (16位) 无符号基本整型 unsigned int (16位) 有符号短整型 signed short int (16位) 无符号短整型 unsigned short int (16位) 有符号长整型 signed long int (32位) 无符号长整型 unsigned long int (32位) 说明: 括起来的为可选项,说明变量时可以省略不写,如何定义整型变量呢? 例: int a; int x, y; short a ,b; unsigned long m;,如果在整常数后面加字母U或u,表示unsigned int型常量;加字母L或l表示long int型常量。 例:12U, 432L,1.5.2 实型数据,实型常量 十进制形式:由数字和小数点组成(必有小数) 例:2.8, -3.6, 3. , .75 (0可省) 指数形式:1.289e3, 31.4E 1 实型变量 分三类: 单精度型 float (占32位,有效数字67) 双精度型 double (占64位,有效数字1516) 长双精度型 long double (占128位,有效数字1819) 一个实型常数默认为double型。要表示float型数,则必须在实数后加上字母f或F,1.5.3 字符型数据,字符常量 用一对单引号括起来的单个字符 例:a, 8, A, * 转义字符:以“”开头,后跟一些指定字符,以表示特定的、具有控制功能的字符 例:n, , ”, , t, ddd, xhh 字符变量 分二类: 有符号:signed char (占8位) 无符号:unsigned char (占8位) 定义形式:char 变量列表; 例:char ch1, ch2; ch1=a; ch2 = $;,字符串常量 由一对双引号(“ ”)括起来的字符序列。 例:“Hello“、“I love China!“、“How do you do?“ 为了判断字符串结束,C编译器会自动在字符串的末尾加一个转义字符0,作为字符串常量的结束标志。0的ASCII值为0,是不可显字符,也不作任何操作,即“空操作字符”。因此字符串的实际长度为字符个数加1。 注意: a与“a“是不同的 a是字符常量,在内存中占1个字节 “a“是字符串常量,在内存中占2个字节,字符型数据与整型数据的相互运算 字符数据在内存中以相应的ASCII码存放, 实质上是二进制形式,而整型数据也以二进制形式存放,所以它们之间在一定范围内互相通用,#include void main( ) char ch; ch=a; printf(“%cn“,ch); printf(“%dn“,ch); 运行结果:a 97,#include void main( ) char ch; int x; ch=A; x=ch+32; printf(“%c,%dn“, ch, ch); printf(“%c,%dn“, x, x); 运行结果:A, 65 a, 97,1.6 数据的输入与输出,C语言的输入/输出均由函数来实现, 在使用输入输出函数时, 应在程序开头写预编译命令:#include 本节介绍最常用的输入输出函数 格式输入输出函数: scanf 和 printf 字符输入输出函数: getchar 和 putchar,1.6.1 printf( )函数,一般形式: printf(“格式控制”, 输出表列); 例:printf(“hello worldn”); printf(“sum is : %dn”, sum); printf(“a=%d,b=%dn”, a, b); 格式控制 普通字符原样输出 普通字母、数字及符号 转义字符:n, t等 格式控制说明:由%和格式字符及附加格式说明字符组成 %d:输出十进制整数 %f:输出十进制浮点数 %c:输出单个字符,格式控制 附加格式说明符 放置位置:在和格式字符之间 如下字符: 字母l:输出long型数据或double型数据,如:%ld,%lf等 m(正整数):数据的最小宽度 n(正整数):对于实数,表示输出n位小数;对于字符串,表示截取的字符个数 (负号):输出的数据或字符在域内向左对齐(缺省右对齐) 输出表列:输出项可以是常量, 变量, 表达式 例:int x=8; 输出结果: printf(“x=%8.4fn“, 6.85); x=6.8500 printf(“x=%dn“, x); x=8,1.6.2 scanf( )函数,一般形式:scanf(“格式控制”, 地址表列); 格式控制 格式控制字符:基本同printf()相似 普通字符原样输入 地址表列 由变量地址组成:即在变量名前加地址运算符“ 要求输入:a=5,b=8,注意问题 用%c输入字符时, 空格和转义字符都会作为有效字符输入 例: scanf(“%c%c“, 输入: 25 , 3 x 为25, y 无正确数据( 因遇逗号而出错) 不要在格式控制中输入转义字符及指定精度,1.6.3 putchar()函数,格式 : putchar(参数) 注意:参数只有一个 功能: 将参数对应的字符输出到显示器上, 参数可以是字符型或整型的常量和变量。 #include void main( ) char a=B, b; b=O; putchar(a); putchar(b); putchar(Y); 输出结果:BOY ,1.6.4 getchar()函数,格式 : getchar( ) 注意:它是无参函数 功能 : 从键盘输入一个字符 #include void main( ) char ch; ch=getchar( ); putchar(ch); putchar(n); ,输入: A 输出: A,1.7 算法,算法是对特定问题求解步骤的一种描述 算法的五大特性 有穷性:一个算法必须在执行有穷步之后结束。 确定性:算法的每一步必须是确切定义的,不能含糊。 同一程序对于相同输入必须得到相同结果。 输 入:算法有零个或多个输入。 输 出:算法执行完毕,必须有一个或多个输出结果。 有效性:算法的每一步都是能够实现的,即可操作的。,1.7.2 算法的表示方法,流程图表示算法 用图框表示各种操作,用箭头表示算法流程 优点:直观形象, 易于理解,C语言是一种结构化程序设计语言,结构化程序设计主要采用自上而下、逐步细化的方法。结构化程序有三种基本结构:,N-S流程图 顺序结构:先执行A操作,再执行B操作,两者是顺序执行关系 选择结构:当P条件为真时,执行A模块,否则执行B模块 循环结构: 当型循环:当P条件成立时,反复执行A,直到P为假。 直到型循环:先执行A操作,再判断P是否为假,若P为假,再执行A,直到P为真为止。 N-S流程图优点:比文字描述更加直观、形象,易于理解;比传统的流程图紧凑易画;废除流程线,整个算法结构是由各个基本结构按顺序组成的,1.8 C语言的产生、发展及特点,C语言的产生及发展 ALGOL60CPLBCPLBC标准CANSI CISO C 常见的C语言版本有 Borland公司: Turbo C Turbo C+ Borland C+ C+ Builder Microsoft公司: Microsoft C Visual C+,C语言的特点 C语言的语言成分简洁、紧凑、书写形式自由 C语言拥有丰富的数据类型 C语言的运算符丰富、功能更强大 C语言是结构化程序设计语言 C语言对语法限制不严格,程序设计灵活 C语言编写的程序具有良好的可移植性 C语言可以实现汇编语言的大部分功能 C语言编译后生成的目标代码小,质量高,程序的执行效率高,附:各类数值型数据间的混合运算,一、自动类型转换,语言允许不同数据类型之间的各种运算。如1.5+2*a-1.23456789;在运算中,系统自动将不同类型的数据先转换成同一类型,然后再运算。,转换规则如图:,向左的箭头表示必定的转换,纵向的箭头表示当运算对象为不同类型时转换的方向(箭头只表示数据类型级别的高低,由低向高转换)。,二、强制类型转换,语言允许用户使用强制类型转换运算符将一个表达式的值转换成所需的数据类型。,形式: (类型名)(表达式 ),x = (double)a; z = (int)(x+y); y = (float)(5%3);,注意 : (1) 为避免出错, 应将表达式用括号括起来。 (2) 对一个变量进行强制转换后,得到一个所需类型的中间变量,原来变量的类型和值不发生变化。,算术运算符,+ - * / % 注意: 两个整数相除舍去小数部分,结果为整数。如5/3=1。但在有负数操作数的情况下,整数除法截取的方向及取模运算结果的符号取决于具体机器的实现。 两个数中有一个为实数,则运算结果为double型,即1.0/3=0.333333,但1/3=0。 要求“%”两侧必须为整数;如7%3=1。,复合的赋值运算符,在赋值运算符“=”之前加上+、-、*、/、%、&、|等10种双目运算符,可构成复合的赋值运算符。即构成+=、-=、*=、/=、%=、=、&=、=、|=10种复合运算符。 例:,a += 5;,a = a+5;,y *= x-2;,y = y*(x-2);,x %= y/3;,x = x%(y/3);,自增与自减运算符,+、- 作用:使操作数递增1或递减1 形式: 前缀:+a; -a; 后缀: a+; a-; 例:int x, a = 5; x = a+; x = +a; x是多少? 注意: 自增、自减运算符只能作用于变量, 而不能是常量或表达式,如:8+、 (x*y)+ 错 在不需要使用任何具体值且仅需要递增变量的情况下,前缀方式和后缀方式的效果相同。,逗号运算符, 一般形式 : 表达式1 , 表达式2 , 表达式n ; 执行过程 : 从左至右依次求解表达式1, 表达式2表达式n 。逗号表达式的值就是表达式n 的值。 例:int i=2, j=3, k=4; i+1 , j+4 , k-2; 最后表达式语句的值为2 a=(a=6, a*3, a+3); 最后a的值为?,小结,掌握C程序的基本结构 了解C语言的产生过程 掌握C程序开发过程 掌握用TURBO C运行一个C程序 掌握C语言基本语法成分 掌握C语言数据类型 掌握数据的输入与输出的常用方法 了解算法的相关知识 了解C语言的产生、发展及特点,
展开阅读全文