




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.3 简单的简单的C程序介绍程序介绍 为了更好、更快地掌握C程序,我们先看几个C语言程序:例例1. main( ) printf (This is a c programn); 例例2. main ( ) /*求两个数之和求两个数之和*/ int a, b, sum; /*这是定义变量这是定义变量*/ a=123; b=456; sum=a+b; printf(sum is %dn, sum); 例例3.main( ) /* 主函数主函数*/ int a, b, c; /*定义变量定义变量*/ scanf(%d, %d, &a, &b); /*输入变量输入变量a和和b的值的值
2、*/ c=max(a, b);/*调用调用max函数函数,将得到的值赋给将得到的值赋给c*/ printf(max=%d,c;) /*输出输出c的值的值*/ int max (x, y) int x, y; /*对形参对形参x、y作类型定义作类型定义*/ int z; /max函用到的变量函用到的变量z,也要加以也要加以定义定义 z=y; if (xy) z=x; return (z); /*将将z的值返回的值返回,通过通过max带回带回调用处调用处*/ 通过分析,初步看到:通过分析,初步看到:1. C程序全部由一个一个的函数构成。至少有一个程序全部由一个一个的函数构成。至少有一个主函数主函数
3、main ( ), 其它函数可被主函数调用或相互其它函数可被主函数调用或相互调用。调用。其它函数可为其它函数可为C函数函数库中函数库中函数,也可为自己也可为自己编的函数。编的函数。上述特点称为程序的模块化上述特点称为程序的模块化.2. 函数的构成函数的构成: 函数说明函数说明+函数体函数体 函数体:函数体: 变量变量定义与执行语句定义与执行语句 可允许空函数:可允许空函数: dump ( ) 函数说明包括函数说明包括:函数名函数名、类型类型、属性属性、参数等参数等3. 函数的执行一定从函数的执行一定从main ( )开始。尽管开始。尽管main ( )函函数位置可自由。数位置可自由。4. 书写
4、自由,一个语句可多行,一行可多个语句书写自由,一个语句可多行,一行可多个语句。5. 每一条语句必须有一个分号每一条语句必须有一个分号;6. C语言的输入语言的输入 / 出均以函数形式出现。出均以函数形式出现。scanf( ), printf( ).7. 可用可用/ /对对C语言加注释语言加注释第二章第二章 数据类型、运算符与表达数据类型、运算符与表达式式2.1. 数据类型数据类型 著名计算机科学家著名计算机科学家沃思沃思提出:提出: 程序数据结构算法程序数据结构算法 所以,存放数据的方式直接反映了一种所以,存放数据的方式直接反映了一种语言的数据表达能力语言的数据表达能力。 数据的存储方式又称之
5、为:数据类型。数据的存储方式又称之为:数据类型。 举举 一个例子:以考生各科成绩及总分排一个例子:以考生各科成绩及总分排队问题为列。队问题为列。 成绩的存放成绩的存放 以数组形式以数组形式 排队方法排队方法 算法算法C数据类型丰富,分为:数据类型丰富,分为:基本类型构造类型指针类型空类型整型整型字符型字符型实型实型单精度双精度数组数组结构体结构体共用体共用体数据有常量、变量之分,均为其中一种类型数据有常量、变量之分,均为其中一种类型。枚举枚举例例: #define PRICE 30 main ( ) int num, total; num=10; total=num*PRICE; printf
6、(total=%d,total); 还可用一个符号表示一个常量还可用一个符号表示一个常量 符号常量符号常量2.2.2变量变量 程序执行中可以改变的量称为变量。变量包括程序执行中可以改变的量称为变量。变量包括变量名和变量值。变量名和变量值。变量名变量名 用标识符命名用标识符命名,对应一定数量的内存存贮对应一定数量的内存存贮单元单元,其单元数视变量类型而定。其单元数视变量类型而定。标识符标识符 由字母、数字、下划线组成且由字母或由字母、数字、下划线组成且由字母或下划线开头的字符串。下划线开头的字符串。 标识符可用来命名变量及作为常量名、函数名、标识符可用来命名变量及作为常量名、函数名、类型名、文件
7、名等,一个程序内不得有重复名。类型名、文件名等,一个程序内不得有重复名。 如如: _sum, sum, student_name, price等等 习惯上习惯上,变量名、函数名等用小写字母表示。变量名、函数名等用小写字母表示。常量名用大写字母表示常量名用大写字母表示(以增加可读性以增加可读性)。C语言中语言中, 变量变量须先定义须先定义,后使用后使用 如如: int student student=30; 则若写成则若写成student=30, 则未定义则未定义, 编译时指出其错编译时指出其错。 一旦变量被定义一旦变量被定义,即可在编译时为其分配相应即可在编译时为其分配相应数量的数量的单元单元
8、,并检查其运算的合法性。并检查其运算的合法性。2.3.1 整型常量整型常量整型常量整型常量 整型常数整型常数C语言提供了三种形式语言提供了三种形式 十进制十进制 如如: 256, 308, 120等等 八进制八进制 以数字以数字0开头表示的整数开头表示的整数 例例:0235, 0146 012等等. 0235=28238515710 014618248610210 012(182)1010十六进制十六进制 以以0 x开头的整型数开头的整型数 如如: 0 x16, 0 x282.4 实型数据实型数据2.4.1 实型常量实型常量有二种表示形式有二种表示形式 1.十进制形式十进制形式 如如: 0.1
9、26, 523.64等等 2. 指数形式指数形式 对于较大或较小的数对于较大或较小的数,可用指数形式可用指数形式 0.0000126 1.26E 5 1260000 1.26E+6 或或1.26E6 E , e 均可均可.2.5 字符型数据字符型数据 用一对单引号括起来的单个字符。用一对单引号括起来的单个字符。 如如 a , A , 二者不一样二者不一样. 此外此外,以以 开头后接一个字符或开头后接一个字符或n个字符代表个字符代表了一种特殊字符常量。了一种特殊字符常量。 转义字符。转义字符。 如如 n 换行换行, r 回车回车2.5.1 字符常量字符常量其它如下表其它如下表:字符形式ntvbr
10、f dddxxh功能换行横向跳格(即跳到下一个输出区)竖向跳格退格回车走纸换页反斜杠字符“ ”单引号(撇号)字符1到3位8进制数所代表的字符1到2位16进制数所代表的字符其定义方式为:其定义方式为: char c1, c2; c1= A ; c2= B ;字符变量只占一个字节单元字符变量只占一个字节单元。 2.5.2 字符变量字符变量 用来存放用来存放一个一个字符的变量字符的变量. 一个字符存入一个字符变量。其对应单一个字符存入一个字符变量。其对应单元存放的是其元存放的是其ASCII码码,即即ASCII码的二进制码的二进制形式。形式。 由此由此: 字符变量中的数据是一整型数据。字符变量中的数据
11、是一整型数据。输出时既可输出字符输出时既可输出字符,亦可输出整数亦可输出整数,且字符且字符变量可作整数运算。变量可作整数运算。 2.5.3 字符数据的实际存放形式字符数据的实际存放形式例例1: main ( ) char c1, c2; c1=97; c2=98; printf (%c %c, c1, c2) 运行结果 a b 看如下几个例子:例例2: main ( ) char c1, c2; c1= a ; c2= b ; c1=c1 32; c2=c2 32; printf (%c %c, c1, c2) 运行结果 A B例例3: main ( ) int i; char c; i= a
12、 ; c=97; printf (%c, %d n, c, c); printf (%c, %d n, i, i); 运行结果: a , 97 a , 97用双引号括起来的字符串。用双引号括起来的字符串。 例例: Good Morning! 注意注意A 与与A是不同是不同字符串存放时字符串存放时,在最后加上在最后加上/ 0 空字符。空字符。 于是于是:Good Morning ! /0 2.5.4 字符串常量字符串常量A A /0但A A注意注意:1. 字符串长度字符串长度=实际字符个数实际字符个数+1,但最后但最后0不输出不输出. printf ( Good Morning! )此处不写 /
13、0。 自动加上。2. 单个字符的字符串不能赋给字符变量。单个字符的字符串不能赋给字符变量。 例例: char c; c= a ; 是错误的。是错误的。2.8 2.8 算术运算符算术运算符与算术与算术表达式表达式运算符: 运算的符号表示。 C语言有丰富的运算功能,先简述之 2.8.1. C运算符运算符1. 算术运算符 +, , , /, % , 等3. 逻辑运算符 !, &, 2. 关系运算符 , =, =, !=4. 位运算符 , , , , &.5. 赋值运算符 = 等6. 条件运算符 ? =7. 逗号运算符 ,8. 指针运算符 *, &11. 分量运算符 , ,12
14、. 下标运算符 13. 其它运算符 如函数的调用( )9. 求字节数运算符 size of 10. 强制类型转换运算符 (类型) 2.8.2 算术运算符和算术表达式算术运算符和算术表达式一、基本算术运算符+ 加法加法 正值正值 3+6, +3 减法减法 负值负值 6 4, 5 乘法乘法 3 8/ 除法除法 8 / 5% 求余求余 7 % 4 的值为的值为3注注: 两个整型数据相除两个整型数据相除 (结果为整结果为整,一般向零靠拢一般向零靠拢)。 5/ 3 1“ /” 中中,有一个有一个 float, 则结果为则结果为double型型,使使用时千万注意用时千万注意 int / int 出现数据丢
15、失。出现数据丢失。四、自增,自减运算符设设有有int i = 3;+ + 自增1 自减1则则: + +i, i+都会使都会使i变为变为4,但有区别但有区别:+i: 先使先使i值值+1,再使用再使用i值值;i+: 先使用先使用i值值,再使再使i值值+1.j= +i; j=4, i=4. (i=i+1; j=i;)j=i+; j=3, i=4. (j=i; i=i+1)同理同理: i, i ,均使均使i值值1,但但: 又如又如: printf (i=%dn, i+); 结果结果: i=3若若: printf (i=%dn, +i); 结果结果: i=4 i: 先使先使i值值1,再使用再使用i值值;
16、i : 先使用先使用i值值,再使再使i值值1i=3;几几点注意点注意:1. +和和 运算法只能用于变量运算法只能用于变量,不得用于常量和表不得用于常量和表达式达式.2. +, ,的结合性为从右至左的结合性为从右至左,而一般算术运算符而一般算术运算符为从左至右。为从左至右。如如:如如 5+ +, (a+b)+ +均为不合法均为不合法.i+ 和和+ +为同一优先级为同一优先级.i+相当于相当于(i+)若 i=3, 则结果为则结果为3, i为为4. +, 主要用于循环变量自增或自减。主要用于循环变量自增或自减。第三章第三章 最简单的最简单的C C程序设计程序设计3.1 C语句概述语句概述 C语句全部
17、为可执行语句,对应若干机器操作指命令C程序由许多源文件组成。(分别编译,然后连接)每一个源文件由预编译命令和若干函数组成。每一个函数由说明部分和语句部分组成。其结构如图除说明部分外,重要部分为语句部分。C 程 序源程序文件1源程序文件i源程序文件n预编译命令函 数 1函 数 n说 明 部 分执行部分(语句)控制语句控制语句改变语句的执行顺序改变语句的执行顺序共有共有9种控制语句种控制语句: if ( ) else (条件) for ( ) (循环) while ( ) (循环) do while (循环) continue (结束本次循环) switch (多分支选择) break (中止整个
18、循环) goto (转移) return ( 函数返回)( )表示条件, 表示语句 在C程序的顺序、选择、循环三种结构中,选择结构是一重要结构问题:条件如何表达?逻辑运算、关系运算 关系运算比较运算, 如: a3为一比较运算,当a=5, a3成立。结果称为“ 真”, 否则, 如: a=1,a3不成立,为假。上述表达式a3称为关系表达式。4.1.1 关系运算符及其优先次序关系运算符及其优先次序1. , , =为同一优先级, = =, !=等为同一优先级, 但前者高于后者。2. 关系运算符优先级低于算术运算符。C语言提供了六种关系运算符 = = = !=优先级为:3. 关系运算符优先级高于赋值运算
19、符。如下图:算术运算符算术运算符赋值运算符赋值运算符关系运算符关系运算符高低举例: ca+b c(a+b)ab!=c (ab)!=ca= =bc a= =(bc a=(bc)4.1.2 关系表达式关系表达式关系表达式的结果值规定为1或0.如: ab, a+bb+c, (a=3)(b=5) , a b , (ab)(by) printf( %d, x)形式形式1 if(表达式表达式) 语句语句A其流程图:形式形式2 if(表达式表达式) 语句语句A else 语句语句B功能功能: 表达式为非表达式为非0,执行语句执行语句A 表达式为表达式为0,执行语句执行语句B表达式语句A语句B 0= 0例例:
20、 if(xy)printf(%d, x);else printf( %d, y);形式形式3 if(表达式表达式1) 语句语句1 else if (表达式表达式2) 语句语句2else if (表达式表达式3) 语句语句3 else if(表达式表达式n) 语句语句nelse 语句语句n流程:表达1表达2表达3表达n语句1语句2语句3语句n语句n语句1 0= 0= 0 0 0 0如如: if (3) prinft(o.k); if (a) 1. 表达式可以是逻辑、关系,甚至是算术表达式。表达式可以是逻辑、关系,甚至是算术表达式。 2. 上述形式中的语句必须以分号结束上述形式中的语句必须以分号结
21、束 3. 上述形式中的语句可以是由上述形式中的语句可以是由 括起来的复合语括起来的复合语句。此时句。此时,在在 外可以不用分号外可以不用分号.注意的问题:main ( ) float a, b, t; scanf (%f, %f, &a, &b); if (ab) t=a; a=b; b=t; printf (%5.2f, %5.2f, a, b);例例4.1 输入两个实数,按代数值由小到大次序输出输入两个实数,按代数值由小到大次序输出这两个数。这两个数。 3.6, 3.2 3.20, 3.60运行情况如下:运行情况如下:例例4.2 输入三个数,按大小顺序输出。输入三个数,按大
22、小顺序输出。 main ( ) float a, b, c,t; scanf(%f,%f,%f, &a, &b,&c); if (ab) t=a; a=b; b=t; if (ac) t=a; a=c; c=t; if (bc) t=b; b=c; c=t; printf(%5.2f, %5.2f, %5.2f, a, b, c);运行情况如下:3,7,1 1.00, 3.00, 7.004.3.2. if语句的嵌套if (表达式1)内嵌ifelse内嵌注意注意: else与最近的与最近的if 配对配对.一般形式 在上述形式的在上述形式的if语句中语句中, 又可以是又可
23、以是if语句语句称称为嵌套。为嵌套。if (表达式2) 语句1if (表达式3) 语句3else 语句2else 语句4例: if ( )if ( ) 语句2else 语句3if ( ) if ( ) 语句1 else 所以:必要时加 .if ( ) 语句1else 问题问题: 当某一表达式有当某一表达式有n个取值个取值,每一取值执行一每一取值执行一语句语句,则如果用内嵌则如果用内嵌if十分繁锁十分繁锁,而用而用switch简单简单.一般形式一般形式: switch(表达式表达式) case 常量表达式常量表达式1: 语句语句1 case 常量表达式常量表达式2: 语句语句2 case 常量表
24、达式常量表达式n: 语句语句n default : 语句语句n+1 例例: 根据成绩等级打印百分数段根据成绩等级打印百分数段.switch (grade) case A: printf (85100n);case B: printf (7084n);case C: printf (6069n);case D: printf (60n); break; case D: printf(60n); break; 前面已介绍了顺序结构前面已介绍了顺序结构,选择结构,本章介绍选择结构,本章介绍循环结构。循环结构。如: sum=1+2+3+100;, i1002i实际问题实际问题: 一组重复执行的语句。一
25、组重复执行的语句。则用循环结构解决。则用循环结构解决。C语言用四种形式循环语言用四种形式循环2. while 语句语句3. do while 语句语句4. for语句语句1.if语句与语句与goto语句语句1. 形式形式: while (表达式表达式)语句语句2. 执行过程执行过程: 先判断表达式的值。若先判断表达式的值。若 0.则执行其后则执行其后面的语句面的语句,否则否则while执行完毕。执行完毕。专门的当型循环语句专门的当型循环语句while语句语句3. 流程图:表达式语句0=0下一语句将上述例子用将上述例子用while语句写出语句写出 while (i=100) sum+ =i; i
26、+; 语句中应有使表达式语句中应有使表达式=0的语句。的语句。 否则会出现无限循环否则会出现无限循环死死循环。循环。注注: while后面的语句后面的语句一般为复合语句一般为复合语句, 即:加即:加 一种专门的一种专门的“ 直到型直到型” 循环语句。循环语句。2. 执行过程执行过程: 先执行语句先执行语句,再判表达式的值再判表达式的值,若若 0,再再执行语句执行语句,否则结束循环否则结束循环3. 流程流程:语句表达式0=01. 形式形式: do语句语句while(表达式表达式);main ( ) int i, sum=0; i=1; do sum=sum+i; i+; while (i=100
27、); printf(%d,sum); 程序如下:程序如下: while语句与语句与dowhile语句的区别语句的区别: 当第一次当第一次执行时,若表达式执行时,若表达式=0时时,则则while语句语句与与do while有所不同有所不同,do while 执行一次后面的语句执行一次后面的语句,而而while不执行。不执行。1. 形式形式 首先计算表达式首先计算表达式1,接着执行表达式接着执行表达式2,若表达式若表达式2的值的值 0,则执行语句则执行语句,接着计算表达式接着计算表达式3,再判断表达再判断表达式式2的值的值.依此重复下去依此重复下去,直到表达式直到表达式2的值的值=0(假假)。一种
28、形式更为灵活的循环语句。一种形式更为灵活的循环语句。2.执行过程执行过程for(表达式表达式1; 表达式表达式2; 表达式表达式3)语句语句3. 流程流程:计算表达式1求表达式2值语句计算表达式3结束for语句=0(假)0(真)用用for语句写出上述例子语句写出上述例子for用用while代替的流程代替的流程 表达式表达式1; while(表达式表达式2) 语句语句 表达式表达式3; for ( i=1; ib) i=b; j=a; for (; i=j; i+) sum=sum+i; printf ( n sum=%d, sum); 表达式表达式2一般不可省略一般不可省略,否则为无限循环否则
29、为无限循环相当于相当于: while (1) sum=sum+i; i+; 例例: for (i=1; ; i+) sum=sum+i;相当于条件永真、永不为相当于条件永真、永不为0,若用若用while表示表示 表达式表达式3亦可省略亦可省略,但在循环体中须有语句修改循但在循环体中须有语句修改循环变量环变量;以使表达式以使表达式2在某一时刻为在某一时刻为0而正常结束循而正常结束循环。环。例例: for (sum=0,i=1;i=100;) sum=sum+v; i+; 若同时省略表达式若同时省略表达式1,表达式表达式3,则相当于,则相当于while(表表达式达式2)语句。语句。相当于相当于 w
30、hile (i=100) sum+=i; i+; 例例: for (; i100时结束。时结束。for(r=1; r100) break; printf (%f, area); 从结构化程序要求出发从结构化程序要求出发,用用break,退出循环退出循环,进进入下入下一条语句。一条语句。 注注: break只能用于循环语句和只能用于循环语句和switch语句。语句。 main( ) int n; for (n=100; n200; n+) if (n%3!=0) printf(%d, n); 问题问题: 编写程序编写程序,打印打印100200中不能被中不能被3整除的数。整除的数。换一种方式换一种
31、方式: main ( ) int n; for (n=100; n2)程序如下: main ( ) long int f1, f2;int i;f1=1; f2=1;for (i=1; i=20; i+)printf(%12ld %12ld , f1, f2); if (i%2= =0) printf(n ); f1=f1+f2; f2=f2+f1; f1=1, f2=1 for i=1 to 20 输出f1, f2 f1=f1+f2 f2=f2+f1图5.13运行结果为:运行结果为:1534233159710946750255142293524578241578171855377258417
32、7111211393832040570288739088169213896104181286571964181346269922746563245986321144987676546368317811217830914930352102334155 判一个数判一个数m是否为素数的方法是否为素数的方法: 每打印每打印10个数个数,换一次行。换一次行。m当用当用2, 3, 的整数去除它时均不能除的整数去除它时均不能除尽尽, 则为素数。则为素数。程序如下程序如下: #include #include main ( ) 例例2. 求求100200的素数的素数. int m, k, i, n=0; fo
33、r (m=101; m=200; m=m+2) if ( n%10= =0) printf(n); k=sqrt(m); for (i=2; i=k+1) printf(%d ,m); n=n+1; 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199运行结果如下:一冒泡法:一冒泡法:排序过程:排序过程:(1)比较第一个数与第二个数,)比较第一个数与第二个数,若若a0a1,则交换;则交换;然后然后比较第二个数与第三个数;依比较第二个数与第三个数;依次类推,直至第次类推,直至第n-1
34、个数和个数和第第n个数比较为个数比较为止止第一趟冒泡排序,结果最大的数被安第一趟冒泡排序,结果最大的数被安置置在最后在最后一个元素位置上一个元素位置上(2)对前)对前n-1个数进行第二趟冒泡排序,结个数进行第二趟冒泡排序,结果使次大的数被安置果使次大的数被安置在第在第n-1个元素位置个元素位置(3)重复上述过程,共经过)重复上述过程,共经过n-1趟冒泡排序趟冒泡排序后,排序结束。后,排序结束。#include main() int a11,i,j,t; printf(Input 10 numbers:n); for(i=1;i11;i+) scanf(%d,&ai); printf(n
35、); for(j=1;j=9;j+) for(i=1;iai+1) t=ai; ai=ai+1; ai+1=t; printf(The sorted numbers:n); for(i=1;iaj交换ai ajBANoYesjj+1jnii+1i n1打印结果结束内循环外循环BANoYesYesNo程序程序: main ( ) int a 11; int i, j, t; printf ( please input 10 n:n ); for (i=1; i=n; i+) scanf( %d , &ai); printf( n ); for (i=1; i=9; i+) for (j=
36、i+1; jaj) t=ai; ai=aj; aj=t;printf ( the sorted numbers: n );for (i=1; i=10; i+) printf(“ %d ”, ai); 前面所用到的数据均为基本类型前面所用到的数据均为基本类型(整、实、字整、实、字符符),为了丰富数据类型,为了丰富数据类型 ,须提供强有力的数据表,须提供强有力的数据表达方式。达方式。C语言提供了一种构造类型数据语言提供了一种构造类型数据由基由基本类型按某一规则组合在一起。本类型按某一规则组合在一起。 其中数组:同一种其中数组:同一种(基本基本)类型按一定顺序组类型按一定顺序组合在一起的数据类型。
37、合在一起的数据类型。6.16.1 一维数组一维数组6.1.1 一维数组的定义一维数组的定义1. 数组名的确定方法同变量名。数组名的确定方法同变量名。2. C语言用方括号语言用方括号 表示数组元数个数。表示数组元数个数。形式形式: 类型说明符类型说明符 数组数组名名常量表达式常量表达式;例例: int a 20; float x 100;3. 常量表达式为常量和符号常量。不允许有变量常量表达式为常量和符号常量。不允许有变量,其表达式的值代表了元素的个数。其表达式的值代表了元素的个数。例例: int a20; 表示有表示有20个元素个元素 且元素从且元素从0开始编排:开始编排:a0,a1,a 19
38、4. 可在定义时对静态数组和外部存储可在定义时对静态数组和外部存储(全局全局)数组赋数组赋初值初值, 方法如下方法如下: 对部分元素赋初值对部分元素赋初值 static int a10=0,1,2,3,4;静态 对全部元素赋初值对全部元素赋初值 static int a10=10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 如此如此,只有前只有前5个元素初值确定个元素初值确定,后后5个元素由系个元素由系统设置。统设置。 如对数组元素赋同一初值如对数组元素赋同一初值,必须一一写出必须一一写出: static int a10=0,0,0,0,0,0,0,0,0,0;
39、若赋全部元素的初值若赋全部元素的初值,可省略常量表达式可省略常量表达式 a =0,1,2,3; 表示表示a4,即只有即只有4个元素。个元素。6.1.2 一维数组的引用一维数组的引用 2. 引用方式引用方式: 数组名数组名下标下标 代表了一个元素代表了一个元素,等价一个同类型的变量。等价一个同类型的变量。 3. 一般地一般地,一维数组各元素分配在连续地内存单元一维数组各元素分配在连续地内存单元之中。之中。1. 须象使用变量那样须象使用变量那样,先定义先定义,后使用后使用例例: a 0 5+a1 6 为正确的算术表达式为正确的算术表达式6.2 6.2 二维数组二维数组6.2.1 二维数组的定义二维
40、数组的定义1. 不可将定义写为不可将定义写为int a4,10。形式形式 类型说明符类型说明符 数组名数组名常量表达式常量表达式 常量表达式常量表达式例例: int a4 10; float x8 20;2. 可将二维数组的元素看成为若干个特殊的一维数可将二维数组的元素看成为若干个特殊的一维数组。组。 如如: int b3 4; 则则: 有三个特殊的一维数组有三个特殊的一维数组b0,b1, b2,每一每一个又有四个元素个又有四个元素: b00, b01, b02, b03, b10, b11, b12, b13, b20, b21, b22, b23,3. 二维数组的存放方式为二维数组的存放方
41、式为: 按行存放。由此可推广按行存放。由此可推广 至三维、至三维、n维数组的定义和存放。维数组的定义和存放。 即即: 最右边的下标变化最快。最右边的下标变化最快。4. 初始化初始化: 按行给二维数组赋初值按行给二维数组赋初值: static int a34=1,2,3,4, 5,6,7,8, 9,10,11,12,;可以去掉其中的可以去掉其中的 。 可以对部分元素赋初值可以对部分元素赋初值,但需表达清楚。如但需表达清楚。如: static int a34=1,2,3,8。则相当于则相当于 1 2 0 0 3 0 0 0 8 0 0 0可通过赋初值决定数组大小。如为二维可通过赋初值决定数组大小。
42、如为二维,则只则只可省略第一维的大小可省略第一维的大小. static int a 4=1,2,3,12;6.2.2 二维数组元素的引用二维数组元素的引用形式形式: 数组名数组名下标下标下标下标 其中的下标为整型表达式其中的下标为整型表达式,但不得越界。但不得越界。 与一维数组元素一样与一维数组元素一样,二维数组元素相当于同二维数组元素相当于同类型的简单变量。类型的简单变量。6.2.3 程序举例程序举例 a=1 2 34 5 6b=1 42 5 3 6程序如下: main ( ) static int a2 3=1, 2,3,4, 5,6; static int b3 2, i, j;例例1
43、将一个二维数组行和列元素互换,存到另一将一个二维数组行和列元素互换,存到另一个二维数组中。例如:个二维数组中。例如: printf(array a: n);for (i=0; i=1; i+) for (j=0; j=2; j+) printf(%5d, aij); bji=aij; printf(n);printf(array b:n);for (i=0; i=2; i+) for (j=0; jmaxmax= aijrow=icolum=j输出:max和row,colum真假 二维数组一般用二重循环二维数组一般用二重循环据此写出以下程序: main ( ) int i,j, row=0,
44、colum=0, max; static int a34=1,2,3,4,9,8,7,6, 10,10, 5, 2 max=a00; for (i=0;i=2; i+) for (j=0; jmax) max=aij; row=i; colum=j; printf( max=%d,row=%d, colum=%dn , max, row, colum); 输出结果为:输出结果为: max=10, row=2, colum=16.3 6.3 字符数组字符数组6.3.1字符数组的定义字符数组的定义类型名 数组名大小1. 初始化初始化: 直接给出字符串中的各字符直接给出字符串中的各字符 static
45、 char a4= G , o , o , d ; 存放字符数据。字符串存放字符数据。字符串用字符数组存放。用字符数组存放。 char c10;若字符多于元素个数若字符多于元素个数,则语法错则语法错,反之反之,后而补后而补0可以去掉定义时的大小设置可以去掉定义时的大小设置,而通过自动赋值决而通过自动赋值决定定长度长度(大小大小) static char x = I , , a , m , , a, , s , t , u , d , e , n , t ;2. 字符数组的引用字符数组的引用 每一个字符数组元素相当于一个字符变量。每一个字符数组元素相当于一个字符变量。格式符格式符: %c 逐个输
46、入逐个输入/输出字符。输出字符。 %s 整个串一次输入整个串一次输入/输出。输出。1. 输出输出 (用用%s) 用用%s输出时输出时,不输出不输出 0. 在在printf中须直接写数组名中须直接写数组名. static char c =I am a student; printf(%s, c);6.3.2 字符数组的输入输出字符数组的输入输出 若数组长度大于字符串长度若数组长度大于字符串长度,则遇到则遇到 0 即停止输出即停止输出 static char c10= china; printf( %s, c); 输出时遇到第一个输出时遇到第一个 0即结束。即结束。2. 输入输入(用用%s) 输入
47、多个字符串输入多个字符串,可用空格隔开。可用空格隔开。 Static char str15, str25, str35; scanf( %s%s%s, str1, str2,str3); 输入字符串时输入字符串时,系统自动加上系统自动加上 0则则:输入输入 How are you? str1: H o w 0 str2: a r e 0 str3: y o u 0输入输入: How are you 则只会将则只会将How输入输入,且存为且存为 scanf中须用地址量,数组名表示地址量。中须用地址量,数组名表示地址量。str: H o w 0 但若但若: static char str13 sc
48、anf(%s, str);6.3.4 字符串数组举例字符串数组举例例:例:输入一行字符,统计其中有多少个单词,单词输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。之间用空格分隔开。程序如下:程序如下:# include stdio.hmain ( )char string81;int i, num=0, word=0; char c; gets (string); for (i=0; (c=stringi)!= 0 ; i+)if ( c= = )word=0;else if (word = =0) word=1; num+; printf(There are %d words in
49、 the line n , num); 运行情况如下:运行情况如下: I am a boy. There are 4 words in the line7.1 7.1 概述概述1) 除除main外外, 其它为系统函数、自编函数其它为系统函数、自编函数, 系统函数:由系统提供,用户可调用。系统函数:由系统提供,用户可调用。 自编函数:由用户按语法规则编写。自编函数:由用户按语法规则编写。C程序由一个程序由一个main和任意个函数组成。和任意个函数组成。 2) 除除main函数函数外外,其它函数可相互调用其它函数可相互调用main ( )abcdxz3)函数不可嵌套定义函数不可嵌套定义,具有全局性
50、、平行性具有全局性、平行性,4)函数分为有参与无参函数函数分为有参与无参函数5)程序从程序从main开始执行开始执行,最后又回到最后又回到main函函 数结束。数结束。类型标识符类型标识符 函数名函数名( ) 说明部分说明部分 语句语句 类型标识符类型标识符: 表示返回值类型。表示返回值类型。1. 无参函数无参函数定义形式定义形式 调用方式调用方式函数名函数名( ) ;若有返回值可出若有返回值可出现在表达式中现在表达式中无返值可单独出现无返值可单独出现类型标识符类型标识符 函数名函数名(形参表列形参表列) 形参说明形参说明 说明部分说明部分 语句语句 2. 有参函数有参函数 定义形式定义形式例
51、例: 求二数之最大值求二数之最大值 int max (int x, int y) int z; z=xy? x:y; return (z); 出现出现return语句语句,返回值一般与函数类型一致,返回值一般与函数类型一致. 调用方式调用方式 函数名函数名(实参表列实参表列); 无值返回无值返回: 有值返回有值返回:3. 形参与实参形参与实参调用时调用时: 实参值实参值单向单向传递传递形参。形参。 函数被调用时,临时分配单元给形参函数被调用时,临时分配单元给形参,调用完调用完毕毕,这些,这些单元被释放。单元被释放。注注: 实参可为表达式实参可为表达式,其值传递。其值传递。实参实参: 出现在调用
52、函数中,出现在调用函数中, 形参形参: 出现被调用函数中。出现被调用函数中。 实参、形参类型一致。实参、形参类型一致。 可在形参表列中对形参说明。可在形参表列中对形参说明。4. 函数返回值函数返回值变量等变量等 通过通过return语句将返回值传给函数名语句将返回值传给函数名,可有可有多个多个return. 返回值类型为函数类型。返回值类型为函数类型。 一般一般return中的返中的返回值类型应与函数定义时的类型一致,回值类型应与函数定义时的类型一致, 不一致时不一致时,以函数定义类型为准。以函数定义类型为准。 return (表达式表达式);由函数名只能得到一个返回值。由函数名只能得到一个返
53、回值。5. 调用函数应对被调用函数的返回值类型作出说调用函数应对被调用函数的返回值类型作出说明明:(函数名相当于一变量函数名相当于一变量,但应有所区别但应有所区别)例例: 求二实数之和求二实数之和 main ( ) float add( ); float a, b, c; scanf(%f, %f,&a, &b); c=add(a, b);类型符类型符 函数名函数名( );它不同于函数的定义它不同于函数的定义(功能定义功能定义) printf (sum= %f;c); float add( float x, float y) float z; z=x+y; return z;
54、以下几种情况可省略对被调函数的说明:以下几种情况可省略对被调函数的说明: 当返回值为整型、字符型。当返回值为整型、字符型。 在调用之前定义函数。在调用之前定义函数。 在整个文件的开头定义函数。在整个文件的开头定义函数。6. 实参传递给形参时实参传递给形参时,实参的计算有的系统自左至实参的计算有的系统自左至右右,有的自右至左。有的自右至左。7. 调用系统函数调用系统函数, 需根据系统提供的手册而确定是需根据系统提供的手册而确定是否要加上预编译命令,如:否要加上预编译命令,如:getchar ( )需加需加include stdio.h 函数不能嵌套定义,但可嵌套调用函数不能嵌套定义,但可嵌套调用
55、a( ) 调用调用b b( ) main 调用调用a 求求取大于取大于50小于小于100的能被的能被3整除的数的和。整除的数的和。#includeint sum(int x,int y) int s=0; int check(int);for(int i=x;i1)即即: 条件成立条件成立,调用递归调用递归,否则结束。否则结束。一个最常用的例子一个最常用的例子: 求求n!1. 从数学上定义从数学上定义2. 程序程序 float fac(int n) float f; if (n%cn , getone, putone); void hanoi (int n, one, char two, ch
56、ar three) /*将将n个盘从个盘从one借助借助two,移动,移动three*/ if (n= =1) move (one, three); else hanoi (n1, one, three, two); move (one, three); hanoi (n1, two, one, three); void main ( ) int m; printf ( input the number of disdes :); scanf( %d ,&m);printf( The step to moving %3d disdes:n , m);hanoi (m, A, B, C)
57、;运行情况如下:运行情况如下: input the number of disdes:3 The step to moving 3 diskes: A C A B C B A C B A B C A C两个函数两个函数: move (getone, putone) 表示从表示从getone 塔移一个盘子至塔移一个盘子至putone塔塔 hanoi(n, one, two, three) 表示表示n个盘子从个盘子从one塔借助于塔借助于two塔塔(空空)移至移至three塔。塔。 调用时塔用字符常量调用时塔用字符常量A , B , C 表示。表示。7.5 7.5 数组作为函数参数数组作为函数参数
58、分为两种情况分为两种情况:1. 数组元素作为实参数组元素作为实参2. 数组名同时为形、实参数组名同时为形、实参一、数组元素作为实参一、数组元素作为实参 由于数组元素与相同类型的简单变量地位完由于数组元素与相同类型的简单变量地位完全一样;因此,数组元素作函数参数也和简单变全一样;因此,数组元素作函数参数也和简单变量一样,量一样, 也是也是值的单向传递值的单向传递int x, a10;如如: xa5即即a5为一元素为一元素,与与x完全一样。完全一样。例例:设有两个同样大小的一维数组设有两个同样大小的一维数组,a10,b10将相将相应元素比较应元素比较,统计统计a中大于中大于b中对应元素的个数中对应
59、元素的个数,小小于的个数于的个数,相等时的个数。相等时的个数。程序如下:程序如下: main ( ) int large(int,int); int a10, b10, i, n=0, m=0, k=0; printf(enter array a:n); for (i=0; i10; i+) scanf (%d, &ai); printf (n); printf(enter array b:n); for (i=0; i10; i+) scanf (%d, &bi); printf (n); for (i=0; ibi %d timesnai=bi %d timesnaik)
60、printf(array a is larger than array bn); else if (ny) flag=1; else if (x=y) flag= 0; else flag=-1; return (flag); 运行情况如下:运行情况如下: enter array a: 1 3 5 7 9 8 6 4 2 0 enter array b: 5 3 8 9 1 3 5 6 0 4 aibi 4 times ai=bi 1 times aibi 5 times array a is smaller than array b特点特点: 直接用数组名作参数时,则为地址传送直接用数组名作参数时,则为地址传送(不是不是值传送值传送),即实参数组的首地址传递给形参,即实参数组的首地址传递给形参数组首地址。所以数组首地址
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 类风湿性关节炎病例分享
- 儿童肾脏恶性肿瘤影像诊断
- 护理三查九对制度
- 南开中国史考研课件
- 小学生文明礼仪课件
- 小学生文件夹课件教学
- 2025年云南客运从业资格证仿真考试
- 小学生数学讲解课件
- 车间生产主任培训课件
- 基于大数据的机械故障诊断
- 2025年1月浙江省普通高校招生选考历史试卷(含解析)
- 华为销售培训
- 中小学小班化教学模式与支持体系构建研究
- 中药药浴技术课件
- 安全生产主要负责人考试题及答案
- 英语教师进城选调考试试题及答案
- 交投国企面试题目大全及答案
- 2025年一级建造师《市政实务》考点精粹
- 公路养护工考试试题及答案
- 2025年四级中式烹调师(中级)职业技能鉴定参考试题库(含答案)
- 2025-2030全球及中国精制花生油行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
评论
0/150
提交评论