1、 1第一章语言及程序设计概述本章要求:了解 C 语言的特点、C 语言与其它高级语言相比有什么异同;了解 C 程序在 PC 机上的建立、编译和运行过程;了解 C 语言程序设计思想的基本篇;重点:C 语言的主要特点;C 语言在 PC 机上的运行过程及上机操作过程;常用算法的应用难点:无一、C 语言概述 C 语言是目前国际上在各种计算机运行较为广泛流行的一种高级语言。主要表现为:C 语言:适合于作为系统描述语言可用来写系统软件。具有高级语言的特点,又有低级语言(汇编语言)的特点。C 语言:是 AT x=015 ; x=0xD 存储结构 见 P44 图 3.5注:数据超过数据范围,会发生数据溢出 例
2、3.2、3.3(2)实型(浮点数)1)实型常量: 十进制整数 1.23 .0123指数形式 1.23e3,1.00e-32)实型变量: 数的表示范围P46 表 3.2 单精度 float x (4 字节)3.4x10 -383.4x1038TC 默认 双精度 double x (8 字节)1.7x10 -3081.7x10308说明: 实型常量 不分 float 和 double,只有十进制表达方式8有的 C 编译系统 64 位存储方式,如尾加 f 或 F 可表示 32 位:324.567f例:x=1.23; x=123e3 P47 例 3.4(存储精度)(3)字符型1)字符常量: a) 用单
3、引号括起来的一个字符 aAb) 转义字符(由“专用字母” ) 书 P48表 3.3 例 3.50 字符串结束符 n 换行 t 水平制表 ddd 八进制数 xdd 十六进制数2)字符变量:char c (1 字节)说明:一个字符变量,只能放一个字符常量。实际是把该常量的ASCII 值,送入字符变量中。即:B (66) c (字符变量) 书 P374ASCII 表 p50 例 3.6-7c=B c 的内容为 66故:字符数据可以进行算术运算;即:c=B+2 为 68 字符数据在内存中的存储方式 书 P50unsigned char 0-255 char -128-127 有符号数在 TC 中是用补
4、码表示的127(0x7f) 0111 1111 128(0x80) 1000 0000 复习:补码的规定:正数:其原码、反码、补码相同负数:最高位为 1,其余各位为原码的反码(原码的相应位取反),然后对整个数加 1。140(0x8c) 1000 11001111 0011 + 1(取反加 1)1111 0100-0x74-0x74 1000 1011 + 1(取反加 1) 1000 1100 0x8c(0x80 为负数-74 高位为 1)3)字符串常量用双引号括起来的字符 “a” , “ABFD” “a” =“a0” = (优先级高) = = != (优先级低)(2)关系表达式表达式 关系运算
5、符 表达式即:ab a+b=b+c (a=4)b) | | (a+b=b+c) (a=4)说明:a )条件运算符要求有三个操作对象(称三目元运算符)b)条件运算符优先于赋值运算符y= ( ab ) ? a : b; 先求 ( ab ) ? a : b 后赋值c)条件运算符的结合方向为 “自右至左”( ab ) ? a : b 可写为: ab ? a : bab ? a : b+5 相当于: ab ? a :(b+5)ab ? a : c d ? c : d 相当于: ab ? a : ( c d ? c : d )* 9位运算符 (书 P298) (一般掌握)位运算: 是对字节或字中的实际位进
6、行检测、设置、屏蔽、移位。位运算符:表达式语句 函数调用也可以认为是表达式语句4、空语句:一个“;”5、复合语句(用:分程序) x=3; x=x+1;print(“x=%x”,x)二赋值语句变量名=表达式注:是组成顺序结构的主要语句。a=b; if ( max #include “stdio.h” 当前目录 当前定义的目录中寻找1printf 函数 格式输出函数格式:printf(格式控制,输出表列)格式控制: 用双引号括起来的字符串,也称为“转换控制字符串”printf 的格式字符 书 P77 表 41输出表列: 需要输出的数据、表达式 即:printf( “x=%5.1f, y=%d, z
7、=%c” , x, y, z )d,i 带符号十进制形式u 无符号十进制形式 例 3-3c 字符形式s 字符串形式f 实数( 小数)形式 默认 6 位小数16说明:1)printf( “ y=%-4d” , y ) 输出数据左对齐 (默认为右对齐)2)数据输出长度的修正;l 输出长整型或双精度数据 即:printf( “%ld, %lf ” , i, y )h 输出短型数据 即:printf( “%hu ” , a )-m.n m 最小宽度 n 小数(实数) -左对齐2putchar 函数 字符输出函数向终端输出一个字符格式:putchar (变量) putchar(x)putchar(“n”
8、 ) 输出一个换行符3scanf 函数 格式输入函数格式:scanf(格式控制,地址表列)格式控制: 用双引号括起来的字符串,也称为“转换控制字符串”scanf 的格式字符 书 P80 表 43地址表列: 由若干个地址组成的表列,有:变量地址 输入:12345678.93 时 得 I=1234 , p=8.93“*”作用是“虚读” ,跳过相应的数据2)带分隔字符的方式(分隔字符:空格、tab、回车、逗号)即:scanf( “%d, %d”, 注意“;”位置2) if (表达式) 语句 1 else 语句 2例: if (xy ) printf ( “%d” , x );elseprintf (
9、 “%d” , y ); 注意分号“;”3) if (表达式 1) 语句 1 else if (表达式 2) 语句 2else if (表达式 3) 语句 3else if (表达式 n) 语句 nelse 语句 n+1例:p92 图 5.6(2)if ()和 else 后的执行语句可以使用复合语句 例 5.1、5.2 p93 if 结构 将输入的三个数从大到小排列输出例 5.3 p95 if 嵌套结构 计算函数值(3)用条件运算符代替 if 语句例: if ( ab ) y=a; 条件运算符else 可以用: y= ( ab ) ? a : b;y=b; 例 5.4 p98 条件运算符代替
10、if 结构 将输入字符中的大写转换成小写输出2switch 语句( 了解 )switch 语句是多分支选择语句表达式 语句 1 语句 2 语句 3 语句 4 19格式: switch (表达式 ) 表达式=常量表达式 n 执行语句 n case 常量表达式 1 :语句 1;break;case 常量表达式 2 :语句 2;break;case 常量表达式 3 :语句 3;break;case 常量表达式 n :语句 n;break;default :语句 n+1;例:四级(ABCD)转化成百分制#include main()char grade;scanf(“%c“,switch(grade)
11、 case A:printf(“85100n“);break;case B:printf(“7584n“);break;case C:printf(“6074n“);break;case D:printf(“=3)4.p115 例 6.8 判断 m 是否是素数5.p115 例 6.9 求 100-200 间的所有素数6.例 求任意输入 10 个数中的最大数 6-max四、该章的主要习题P120 6.16.15五、该章的主要上机内容P115 例 6.5、例 6.6、例 6.7、例 6.9P120 习题 6.4、6.7、6.9 、6.11、6.14其他:上机实验指导书中内容作业解答:5-8 利润提
12、成:类似所得税24第七章 数组1、数组的概念及数组的定义;2、在程序设计中的如何使用数组;3、字符数组是 C 语言存放字符串的主要方法,并注意字符串结束标志的规定。重点:数组的组成和特点。一维数组和二维的定义、赋值。字符串与字符数组的关系以及数组在程序中的使用。难点:数组元素存储格式对程序设计的使用。字符串在数组中的组成以及字符串操作语句的使用。基本类型数组类型C 语言 :数据类型 构造类型 结构体类型共用体类型指针类型构造类型:是由基本类型按一定规则组成的类型一数组的概念数组: 1)是一组 有序数据 的集合2)这个集合用一个 数组名 来表示3)数组的元素序号用一个 下标值 来表示如:a0 ,
13、 a1 , a2 , a3 b11 , b12 , b21 , b22注意:a) 数组名后,用方括号; 下标从 0 开始。b) 下标值 可以是常量表达式常量表达式 :包括常量和符号常量(用#define 定义的),但不能包含变量。C 语言:不允许数组进行动态定义。即: int n ;scarf(“%d”,int xn; /*定义数组 */c)数组分为:一维、二维等,主要由下标值的多少来确定。二一维数组1定义25格式: 类型说明符 数组名常量表达式类型说明符:表示数组的类型int , short , long , unsigned , float , double , char 等数组名: 表示
14、各数组元素的统一名字,定义方法和变量名相同常量表达式:表示数组的长度即:int a10注意:C 语言不提供数组下标越界的保护,设计时要注意。2数组元素的初始化数组在定义的时候,同时,可对数组元素进行初始化格式: static int a10=0,0,0,0,0,0,0,0,0,0 静态定义a10=0,1,2,3,4,5,6,7,8,9说明:1)static 数组不赋初值,系统会对所有数组元素自动赋以 0值。即:int a10=0,0,0,0,0,0,0,0,0,0; 等价于: static int a10 ;2)对全部数组元素赋初值,可以不指定数组长度。即: static int a =0,1
15、,2,3,4,5;等价于: static int a6=0,1,2,3,4,5 ;3)可以部分赋初值即: int a5=1,3;3数组元素的引用C 语言规定:只能逐个引用数组元素,而不能一次引用整个数组。4程序举例书 P124 例 7.2 例 7.3 三二维数组和多维数组1定义格式: 类型说明符 数组名常量表达式 常量表达式类型说明符:表示数组的类型int , short , long , unsigned , float , double , char 等数组名: 表示各数组元素的统一名字常量表达式:表示数组的长度即:int a5 6说明:a)每一维的下标从 0 开始,整个数组元素为:56=
16、30 个b)C 语言中,二维数组中元素排列的顺序是 按行存放 。即:先存放第一行的元素,再存放第二行的元素Comment ji1: Page: 26Comment ji2: Page: 26263 4 5 存储单元 a= 6 7 8 对应表: 1 2 9 c)可以计算数组元素在数组中的序号假设 mn的数组 a,计算 aij序号的公式: in+j如:a01 03+1=1(第二个) 如 33a12 的序号是: 13+2=5a22 23+2=8d)多维数组的定义格式: 类型说明符 数组名常量表达式 常量表达式 常量表达式即: 类型说明符 数组名长度 1 长度 2 长度 3 int a2 342二维数
17、组初始化1)两种基本方法:(a)分行给二维数组赋初值static int a23=1,2,3,5,6,7(b)所有数据写在一个化括弧内static int a23=1,2,3,5,6,72)可以对部分元素赋初值static int a23=1,3即: 1 0 03 0 0static int a34=1,3,1,0,0,9即: 1 0 0 0 3 1 0 0 0 0 9 0 3 a004 a015 a026 a107 a118 a121 a202 a219 a22273)定义数组时,第一维的长度可以不指定,但第二维的长度要指定(编译系统自动计算)。static int a 3=1,2,3,4,
18、5,6,7,8,9等价于: static int a33=1,2,3,4,5,6,7,8,9static int a 4=1,3,1,0,0,9等价于: static int a34=1,3,1,0,0,94程序举例书 P128 例 7.4 二维数组行列转换例 7.5 34 矩阵求最大元素及行列号四字符数组存放字符数据的数组;每一个元素存放一个字符。1定义char 数组名 常量表达式即:char c10;说明:由于字符与整型是互相通用的,可使用 int c10 ; 定义。2字符数组的初始化1)static char c5=a, b, c, d, e;注意:static char c5=a, b
19、, c, d, e, f; ( 错误,多一个元素)static char c5=a, b, c; (正确) 后面元素自动定为空格2)static char c =a, b, c, d, e;系统自动根据初值个数确定数组长度3字符数组的引用一个字符数组元素,代表一个字符。即:x=c2 x 的值为“c”4字符串的使用C 语言中,将字符串作为字符串来处理。规定:一个“字符串结束标志” ,以字符0 ,在遇到字符0 时,表示字符串结束。1)使用字符串常量进行数组初始化static char c =“I am happy”;或 static char c =“I am happy”;等价于 static
20、char c =I, , a, m, h, a, p, p, y,0;注:(a)系统对字符串常量自动加一个0(b)字符数组并不要求它的最后一个字符为0282)数组长度始终保证大于字符串实际长度static char c10=“ABCDE”; (第 5 个元素0 ,第 6 个开始为空字符 ASC为 0)static char c10=A, B, C, D, E; (后面 5 个元素为空字符ASC为 0)例 7-6 P131:字符数组引用例子 打印图形 (J5_1.C)#define NL printf(“n“)main() char a10=*,*,*,*,*,*,*,*,*,*;int i,j
21、;for (i=0;i=str2b ) str1 必须是数组名,str2 可以是数组名或字符串常量c ) 可以解决字符串常量不能赋值给字符数组即:str1=“abcde” ; str1=str2; (不合法) 可用strcpy(str1, str2)注:strcpy (str1,str2 ,2) ; 是将 str2 中前面 2 个字符拷贝到 str1中去,然后再加一个0 。(6)strcmp 函数strcmp( str1 , str2 );功能:把 str1 与 str2 的内容进行比较(按 ASCII 码的大小进行比较)如果:str1=str2 ,则函数返回 0如果:str1str2 ,则函
22、数返回正整数如果:str1str2 ,则函数返回负整数(7)strlen 函数strlen( str ) 测试字符串长度,不包括0 (8)strlwr 函数strlwr ( str ) 将字符串中大写字母换成小写字母(9)strupr 函数strupr ( str ) 将字符串中小写字母换成大写字母7程序举例:书 P138 例 7.8 例 7.9 五、该章的主要例题:例 7.1、例 7.2、例 7.3、例 7.4、例 7.5、例 7.6、例 7.8、例 7.9六、主要习题:7.1、*7.2、7.3、7.5、7.6、*7.9、7.11、*7.13七、主要上机内容:例 7.2、例 7.3、例 7.4、例 7.5、例 7.7、例7.8、7.1、7.3、*7.9、7.11其他:上机实验指导书中内容