C语言程序设计(第三版)全套教学课件_第1页
C语言程序设计(第三版)全套教学课件_第2页
C语言程序设计(第三版)全套教学课件_第3页
C语言程序设计(第三版)全套教学课件_第4页
C语言程序设计(第三版)全套教学课件_第5页
已阅读5页,还剩206页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 程序设计语言及其发展程序设计语言的发展机器语言汇编语言高级语言CPU指令系统,由0、1序列构成的指令码组成如:10000000 加 10010000 减用助记符号描述的指令系统如 ADD A, B分为解释类和编译类1967年 Martin Richards开发BCPL1970年 Ken Thompson开发B语言1972年 Dennis Ritchie设计了C语言C标准1980年 Bjarne Stroustrup开发“带类的C语言”,最终成为C+语言。1.2 C语言的历史1978年 The C Programming Language1989-1990年

2、 C89标准1995年 C95标准1999年 C99标准2011年 C11标准(ISO/IEC 9899:2011)1.3 C语言的标准例1.1 输出字符串#include main() printf(“hello,worldn”);运行结果:Hello,world主函数字符串包含头文件1.4 C语言的程序结构库函数缩进格式例1.2/*功能:计算两个数的和,并输出*/#include /* 包含头文件stdio.h */main( )int a, b, sum; /* 定义变量 */a=10; /* 给变量a赋整数值10 */b=20; /* 给变量b赋整数值20 */sum=ab; /* 求

3、和 */printf(sum=%dn, sum); /* 输出sum的值 */运行结果: sum=30注释语句1.4 C语言的程序结构(续)若输出1020=30 则程序中的printf语句可改写为:printf(%d%d=%dn, 10,20,sum);1.4 C语言的程序结构(续)例1.3 输入两个数,求和并输出#include main( )int a, b, sum; /* 定义变量 */scanf(%d, &a); /* 输入第一个整数 */scanf(%d, &b); /* 输入第二个整数 */sum=ab; /* 计算和 */ /* 输出和 */printf(The sum of

4、%d and %d is %d.n, a,b,sum);scanf获得键盘输入1.4 C语言的程序结构(续)总结:C程序结构特点函数与主函数程序由一个或多个函数组成必须有且只能有一个主函数main()程序执行从main开始,在main中结束程序语句C程序由语句组成用“;”作为语句终止符注释/* */为注释,不能嵌套采用缩进格式1.5 C语言程序的运行2.1常量2.2变量2.3运算符与表达式2.4运算符的优先级与结合性2.5类型转换2.1 常量定义:程序运行时其值不能改变的量(即常数)分类:整型常量十进制常量1245 401 -3210 +569 八进制常量01245 0401 -0321001

5、84 想想为什么?十六进制常量 0 x1245 0 x401 -0 xabcd0 x2z12.1 常量浮点型常量十进制小数形式0.0083 .125 -123. +3.14159 指数形式表示实型常量1.23e3 12345.6E-2 2.23e1.5 1.23e 想想为什么?单字符常量普通字符常量用单引号括起来 A a转义字符见书中表2.12.1 常量字符串常量字符串常量是由一对双引号括起来的字符序列。例如,“Hello !”、“C Language ”h e l l o 0X X 0例 X“X”字符串一般都有一个结束标志0X与“X”是有区别的例2.1 输入一个半径,求圆周长和圆面积#inc

6、lude #define PI 3.14159main()float radius,circumf,area; scanf(“%f”,&radius);circumf2.0*PI*radius; /* 计算周长 */areaPI*radius*radius; /* 计算面积 */printf(circumference%.2f ,area%.2fn, circumf,area);运行结果:1circumference6.28 ,area3.14符号常量PI符号常量定义格式为:#define 2.2 变量概念:其值可以改变的量变量名与变量值变量定义的一般格式: 数据类型 变量1,变量2,变量n;

7、变量初始化:定义时赋初值 例: int a,b,c; float data;决定分配字节数和数的表示范围合法标识符例: int a=2,b,c=4; float data=3.67; char ch=A; int x=1,y=1,z=1;变量的使用:先定义,后使用变量定义位置:一般放在函数开头例: int student; student=19; main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data);2.2.1 变量名在C语言中,用户自定义的标识符需要符合以下规则(1)必须以字母或下划线(_)开头,

8、C语言区分大小写,ABC,Abc和abc是不相同的。(2)只能由字母、数字或下划线组成,不能有空格,小数点等特殊字符。(3)不能和C中的系统保留的关键字重名。autodoubleintStructbreakelselongSwitchcaseenumregistertypedefcharexternreturnunionconstfloatshortunsignedcontinueforsignedvoiddefaultgotosizeofvolatiledoifstaticwhile系统保留的关键字2.2.2 变量的类型数据长度类型标识符数值范围有符号整数 16位 short int 327

9、6832767 32位 int 21474836482147483647 32位 long int 21474836482147483647 无符号整数 16位 unsigned short int 065535 32位 unsigned int 04294967295 32位 unsigned long int 04294967295 整型变量例如:int i=0;整型数据的长度、类型标识符与数值范围2.2.2 变量的类型浮点型变量float:单精度浮点数double:双精度浮点数long double:长精度浮点数浮点数的特征类型数据长度取值范围与有效位数float 32位 约(3.4E-

10、383.4E+38), 6位有效数字 double64位 约(1.7E-3081.7E+308),16位有效数字 2.2.2 变量的类型字符型变量用char进行定义,用单引号引起来的单个字符如字符 A、a、0、$ 等#includemain( ) char lowercasea;char uppercaselowercase-32;printf(%c,uppercase);【例2.2】 小写字母转换成大写字母大写字母的ASCII值比对应的小写字母小32sizeof运算符运算符sizeof可以测定某种类型的数据所占的字节数。#includemain( )printf(int: %d bytesn

11、,sizeof(int);printf(double: %d bytesn,sizeof(double);【例2.3】 用sizeof运算符测定所用C系统中int型和double型数据所占内存空间的字节数基本用法是 sizeof(类型名)运行结果:int: 4 bytesdouble: 8 bytes2.2.3 变量的定义及操作int age,reach;定义age、reach为基本int类型变量。unsigned int height,weight;定义height、weight为无符号int类型变量变量的定义先定义,赋值后使用#include main( )int age;printf(%

12、dn,age);age未进行初始化,所以输出结果是不确定的2.3 运算符与表达式C运算符算术运算符:(+ - * / % + -)关系运算符:( = !=)逻辑运算符:(! & |)位运算符 :( | &)赋值运算符:(= 及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(* &)求字节数 :(sizeof)强制类型转换:(类型)分量运算符:(. -)下标运算符:()其它 :(( ) -)算术运算符和表达式基本算术运算符: + - * / %结合方向:从左向右优先级: - -* / % - + -说明:“-”可为单目运算符时,右结合性两整数相除,结果为整数%要求两侧均为整型数据例

13、5/2 = -5/2.0 =例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2例 5/2 = 2 -5/2.0 = -2.5例 5%2 = 1 -5%2 = -1 1%10 = 1 5%1 = 0 5.5%2 ()关系运算符和表达式关系运算符种类: = !=结合方向:自左向右优先级别:=!=优先级高优先级低例 ca+b /c(a+b) ab!=c /(ab)!=c a=bc /a=(bc /a=(bc)关系表达式的值:是逻辑值“真”或“假”,用1和0表示例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc/表达式值1/表达式值1/表达式值0/d

14、=1/f=0ab!a!ba&ba|b真假真假假假真真逻辑运算符和表达式逻辑运算符种类: ! & |逻辑运算真值表C语言中,运算量: 0表示“假”, 非0表示“真”, 运算结果: 0表示“假”, 1表示“真”,真假假假假假真真假假真真真假真真赋值运算符和表达式简单赋值运算符符号: =格式: 变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量复合赋值运算符种类:+= -= *= /= %= = = &= = |=含义: exp1 op= exp2 exp1 = exp1 op exp2a+=3 a=a+3x*=y+8 x=x*(y+8)x%=3 x=x%3例 a=3; d=func()

15、; c=d+2;自增、自减运算符+ -作用:使变量值加1或减1种类:前置 +i, -i (先执行i+1或i-1,再使用i值)后置 i+,i- (先使用i值,再执行i+1或i-1)例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b; /k=4,j=4/k=3,j=4/4/3/c=20,a=4/c=15,a=4条件运算符与表达式一般形式: expr1 ? expr2 : expr3执行过程功能:相当于条件语句,但不能取代一般if语句例 if (a

16、b) printf(“%d”,a); else printf(“%d”,b);printf(“%d”,ab?a:b);例 求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b);expr1取expr2值取expr3值非0=0条件运算符可嵌套 如 x0?1:(x0?-1:0)逗号运算符和表达式形式:表达式1,表达式2,表达式n结合性:从左向右逗号表达式的值:等于表达式n的值用途:常用于循环for语句中例如:value(x10,y5,xy); 首先将10赋值给x,然后将5赋值给y,最后将15(即105)赋值给value。2.4 优先级与结合性优先级用于确定复杂表达式求值时不同

17、运算符的计算顺序。结合性用来决定复杂表达式求值时含有同优先级运算符的计算顺序。左结合表达式3*8/4%4*5等价于(3*8)/4)%4)*5)右结合表达式ab*c5等价于(a(b*(c5)2.5 类型转换隐式类型转换显示类型转换显示类型转换的一般表示形式为:(类型标识符) 表达式 int totalScores500,num6;/* 定义总分totalScores和学生人数num */float average; /* 定义平均分average */averagetotalScores/num; /* average83.0000 */average(float) totalScores/nu

18、m; /* average83.3333 */隐式类型转换显式类型转换3.1 读入一个字符3.2 输出一个字符3.3 格式化输入3.4 格式化输出3.5 程序举例 3.1 读入一个字符函数功能从标准输入设备读取一个字符函数的语法格式getchar( );【例3.1】 从键盘上输入一个字符,然后显示出来。#includemain( )char ch;ch=getchar();printf(%c,ch); 3.2 输出一个字符函数功能将字符输出到标准输出设备上函数的语法格式putchar(c );【例3.2】 显示A。#includemain( )char ch;ch=A;putchar(ch);

19、3.3 格式化输入格式: scanf(“格式控制串”,地址表)功能:按指定格式从键盘读入数据,存入地址表指定的 存储单元中,并按回车键结束返值:正常,返回输入数据个数地址表:变量的地址,常用取地址运算符 &格式字符:d,i,o,x,u,c,s,f,e例 scanf(“%d”,&a); 输入:10 则 a=10例 scanf(“%4d%2d%2d”,&yy,&mm,&dd); 输入 19991015 则1999yy, 10 mm, 15 dd例 scanf(“%3d%*4d%f”,&k,&f); 输入 12345678765.43 则123k, 8765.43f例 scanf(“%2d%*3d%

20、2d”,&a,&b); 输入 1234567 则12a, 67b例 scanf(“%3c%2c”,&c1,&c2); 输入 abcde 则ac1, d c2输入分隔符的指定一般以空格、TAB或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字符例 scanf(“%d:%d:%d”,&h,&m,&s); 输入 12:30:45 则12 h, 30 m, 45 s例 scanf(“%d,%d”,&a,&b) 输入 3,4 则3a, 4 b例 scanf(“a=%d,b=%d,c=%d”,&a,&b,&c); 输入 a=12,b=24,c=36 输入数据时,遇以下情况认为该数据结束:遇空格、T

21、AB、或回车遇宽度结束遇非法输入 3.4 格式化输出格式:printf(“格式控制串”,输出表)功能:按指定格式向显示器输出数据返值:正常,返回输出字节数;出错,返回EOF(-1)输出表:要输出的数据(可以没有,多个时以“,”分隔)格式控制串:包含两种信息格式说明: %修饰符格式字符 ,用于指定输出格式普通字符或转义序列:原样输出格式字符d,ix,Xoucse,Efg%格式字符:十六进制无符号整数不带符号十进制整数十进制整数指数形式浮点小数单一字符字符串八进制无符号整数小数形式浮点小数e和f中较短一种百分号本身int a=567;printf ( “%d”,a);int a=255;print

22、f(“%x”,a);int a=65;printf(“%o”,a);int a=567;printf(“%u”,a);char a=65;printf(“%c”,a);printf(“%s”,“ABC”);float a=567.789;printf(“%e”,a);float a=567.789;printf(“%f”,a);float a=567.789;printf(“%g”,a);printf(“%”);567ff101567AABC5.677890e+02567.789000567.789% 3.5 程序举例- 例3.4#include #define PI 3.1415926mai

23、n( )float r,h,l,s,sq,vq,vz; /*变量定义*/printf(please input r,h:n); /*输入提示信息*/scanf (%f,%f, &r, &h);/*从键盘输入圆半径r、圆柱高h*/l=2*PI*r; /*计算圆周长*/s=PI*r*r; /*计算圆面积*/sq=4*PI*r*r; /*计算圆球表面积*/vq=4.0/3.0*PI*r*r*r;/*计算圆球体积*/vz= PI*r*r*h; /*计算圆柱体积*/printf(%6.2fn,l);printf(%6.2fn,s);printf(%6.2fn,sq);printf(%6.2fn,vq);

24、printf(%6.2fn,vz); 3.5 程序举例-例3.6#include main()int num1,num2,temp;scanf(%d,%d,&num1,&num2);printf(交换前:num1=%d,num2=%dn,num1,num2);/* swap num1 and num2 */temp=num1;num1=num2;num2=temp;printf(交换后:num1=%d,num2=%dn,num1,num2);两个数交换的核心语句4.1 选择结构程序概述4.2 if语句4.3 switch语句选择结构单分支双分支if (表达式) 语句多分支if (表达式) 语句

25、else 语句if (表达式1) 语句else if (表达式) 语句else 语句nif 语句的嵌套switch 语句4.1.1 简单if语句1.语法格式if(条件) 语句2. 说明 (1)执行过程: 当条件为“真”时,执行语句;为“假”时,跳过语句,而直接执行整个if语句后的其它语句。 (2)条件中的结果为逻辑值。 (3)语句如果有多条语句,要用一对花括号“ ”将其括起来,成为一个复合语句。 例4.1#includemain( )float x,y;printf(请输入数据:n);scanf(%f,&x);y=x; /* 初始化y值 */if (x0) y=-x*x;printf(f(%.

26、2f)=%.2f,x,y);例4.2#include main( )float a,b,temp;scanf(%f%f,&a,&b);if (ab)temp=a; /* 三条语句,实现a、b变量值交换 */a=b;b=temp;printf(a=%.2f b=%.2fn,a,b);4.1.2 if . else 语句1. 语法格式if (条件) 语句1 else 语句22. 说明(1)执行过程:当条件为“真”时,执行语句1; 为“假”时,执行语句2。 (2)语句1和语句2都可为复合语句。例4.3#includemain( )float weight,pay ;printf(请输入重量n);sc

27、anf(%f,&weight);if (weightb) max=a; else max=b;printf(%d,max);嵌套if . else 语句在一个if.else语句中又包含一个或多个if.else语句时,称为嵌套if.else语句。在C语言中允许多层嵌套。例4.4 使用嵌套if语句来选出三个数字中最大的数,然后再显示它#includemain( )float a,b,c;printf(“Enter three valuesn”);scanf(“%f %f %f”,&a,&b,&c);printf(“nLargest values is ”);if (ab)if(ac)printf(

28、“%fn”,a);elseprintf(“%fn”,c);elseif(cb)printf(“%fn”,c);elseprintf(“%fn”,b);4.1.4 阶梯式if . else 语句利用阶梯式if.else可解决多分支的问题。其一般形式如下:if (条件表达式1) 语句序列1else if (条件表达式2) 语句序列2 else if (条件表达式3) 语句序列3 else if(条件表达式4) 语句序列4 . else if(条件表达式n-1) 语句序列n-1 else 语句序列n 如果没有任何缩进,我们应准确判断出if和else的配对关系,在下表中同时给出了正确的嵌套形式和错误的

29、嵌套形式,结果是不同。在C语言中,一个else语句总是与最近的未终止的if匹配。原型嵌套:正确理解嵌套:错误理解 m=0;if(ab)if(ac)m=10;elsem=20;printf(m=%d,m);m=0;if(ab) if(ac)m=10; elsem=20; printf(m=%d,m); m=0;if(ab) if(ac) m=10; else m=20;printf(m=%d,m);当a=2;b=1;c=3;时,结果:m=0当a=2;b=1;c=3;时,结果:m=0当a=2;b=1;c=3;时,结果:m=20当a=2;b=3;c=1;时,结果:m=20当a=2;b=3;c=1;时

30、,结果:m=20当a=2;b=3;c=1;时,结果:m=0当a=1;b=2;c=3;时,结果:m=10当a=1;b=2;c=3;时,结果:m=10当a=1;b=2;c=3;时,结果:m=104.2 switch语句1. 语法格式switch(表达式) case 常量表达式1: 语句序列1; break; case 常量表达式2: 语句序列2; break; case 常量表达式n: 语句序列n; break; default:语句序列 2. 执行流程例4.5 根据输入的数据判断星期几,然后再显示它#include main( )int a;printf(input integer number

31、:n );scanf(%d,&a);switch(a)case 1:printf(Mondayn);case 2:printf(Tudsdtayn);case 3:printf(Wednesdayn);case 4:printf(Thursdayn);case 5:printf(Fridayn);case 6:printf(Saturdayn);case 7:printf(Sundayn);default:printf(error!n);运行结果:input integer number: 3WednesdayThursdayFridaySaturdaySundayerror!3case 3:

32、printf(Wednesdayn);case 4:printf(Thursdayn);case 5:printf(Fridayn);case 6:printf(Saturdayn);case 7:printf(Sundayn);default:printf(error!n);例4.5 根据输入的数据判断星期几,然后再显示它#include main( )int a;printf(input integer number:n );scanf(%d,&a);switch(a)case 1:printf(Mondayn);break;case 2:printf(Tudsdtayn);break;c

33、ase 3:printf(Wednesdayn);break;case 4:printf(Thursdayn);break;case 5:printf(Fridayn);break;case 6:printf(Saturdayn);break;case 7:printf(Sundayn);break;default:printf(error!n);运行结果:input integer number: 3Wednesday3case 3:printf(Wednesdayn);break跳出5.1 goto语句5.2 while循环5.3 do-while循环5.5 break.continue语

34、句5.6 循环嵌套5.1 goto语句一般形式:语句标号:语句 . goto 语句标号;1. 功能是无条件转到语句标号处。2. 用途: 与if语句一起构成循环结构; 从循环体中跳到循环体外。3. 因为滥用goto语句会破坏结构化,使流程无规律,所以应限制使用。除非不得已时(例如能大大提高效率)才使用。说明:语句标号:1.用于定义程序中的某个位置。2.用标识符表示,开头不能是数字。如:goto 3t; 错误 goto t3; 正确3.只能加在可执行语句前面。用if语句和goto语句构成循环 计算#include main( ) int i,sum=0; i=1;loop: if(i=100) s

35、um+=i; i+; goto loop; printf(%d,sum);sum=sum+1=1sum=sum+2=3sum=sum+3=6sum=sum+4=10sum=sum+100=5050循环初值循环终值循环变量增值循环条件循环体分析:这是一个累加求和的问题 sum=1+2+3+100 5.2 while语句用while语句实现当型循环 当表达式的值为真(非0)时,执行其中的内嵌语句(循环体),然后回过头来再判断表达式的值,如此重复;当表达式为假(0)时结束循环。一般形式:while(表达式) 循环体语句表达式循环体假(0)真(非0)执行过程:特点:先判断表达式,后执行循环体。分析:累

36、加求和的问题 s=1+2+3+100s=0s=s+1s=s+2s=s+3和的新值s=s+k和的当前值求和项当前值用while语句计算#include main( ) int k,s; s=0;k=1; while(k=100) s=s+k; k+; printf(“s=%d,s);注意:s、k的初值及位置5.3 do.while语句用do-while语句实现直到型循环 执行循环体,当表达式的值为真(非0)时,再次执行循环体,如此重复;当表达式为假(0)时结束循环。一般形式:do 循环体语句while(表达式); 表达式循环体假(0)真(非0)执行过程:先执行循环体,后判断表达式。循环体至少执行

37、一次。do-while语句可转化成while语句。“;”不可省略例 用do-while语句计算#include main( ) int k,s; s=0;k=1; while(k=100) s=s+k; k+; printf(“s=%d,s);#include main( ) int k,s; s=0;k=1; do s= s+k; k+; while(k=100); printf(“s=%d,s);先判后做先做后判5.4 for循环最简单的应用形式:for(循环变量赋初值;循环条件;循环变量增值;) 循环体语句例如:for(i=1;i=100;i+) sum+=i;一般形式:for(表达式1

38、;表达式2;表达式3;) 循环体语句 (1) 先求解表达式1。 (2) 求解表达式2,若其值为真(值为非0), 则执行for语句中指定的循环体语句,然后 执行下面第(3)步。若为假(值为0),则 结束循环,转到第(5)步。 (3) 求解表达式3。 (4) 转回上面第(2)步骤继续执行。 (5) 循环结束,执行for语句下面的一个语句 执行过程:例如:for(i=1;i=100;i+) sum+=i;for(表达式1;表达式2;表达式3;) 循环体语句例 用for语句计算#include main( ) int k,s; s=0;k=1; while(k=100) s=s+k; k+; prin

39、tf(“s=%d,s);#include main( ) int k,s; s=0;k=1; do s= s+k; k+; while(k=100); printf(“s=%d,s);先判后做先做后判#include main( ) int k,s; s=0; for(k=1;k=100;k+) s=s+k; printf(“s=%d,s);#include main( ) int k,s; s=0; for(k=1;k=100;k+) s=s+k; printf(“s=%d,s);5.5 break语句和continue语句break语句: break;功能:跳出switch结构;在循环语句

40、中,终止并跳出本层循环。例 计算r=1到r=10的圆面积,直到面积大于100时停止。#define PI 3.1415main( ) int r;float area; for(r=1;r100) break; printf(r=%d,area=%.2fn,r,area); 运行结果:r=1,area=3.14r=2,area=12.57r=3,area=28.27r=4,area=50.26r=5,area=78.54r=6,area=113.094,退出循环continue语句: continue;功能:结束本次循环,跳过本层循环体中尚未执行的语句,进行下一次是否执行循环体的判断。说明:c

41、ontinue仅用于循环语句中。一般与if一起使用例 把100-200之间不能被3整除的数输出 。main( ) int n; for(n=100;n=200;n+) if(n%3=0) continue; printf(“%d ,n); 100110010121011020跳过printf语句说明:continue语句只结束本次循环; break语句是终止本层循环的执行;要从很多重循环的内层跳到最外层,可考虑用goto语句,但应尽量少用。: for() for() for() if() goto end; end:printf(“error”);continue语句和break语句goto的

42、区别5.6 循环的嵌套分析:1.每行的起始位置不同,空格数递减1。2.每行的字符数相同。3.用二重循环实现: 外循环控制输出行数; 内循环控制输出的空格数。main( )int row, col; for(row=1;row=5;row+) for (col=1;col=5-row;col+) printf(“ ”);/内循环体 printf(*n); *6.1 一维数组6.2 二维数组6.3 字符数组与字符串一、数组的引入为了便于处理一批类型相同的数据,引入了数组类型. 假设现在要保存每个学生的成绩,那就需要40个变量,但这样一来输入、输出、计算都会变得繁琐。 在这种情况下,我们可以使用数组

43、类型,声明一个含有40个元素的数组,每个数组元素存放一个成绩,成绩的输入、输出、计算都可通过循环来实现。例:某班有40名学生,求该班成绩的平均分 #include main( ) int j , sum , s ; float ave ; sum=0; for(j=1; j=40 ; j+) scanf(“%d”,&s); sum=sum+s; ave=sum/40; printf(“ave=%f”,ave);二、数组的概念 构造数据类型之一1.数组:由具有相同类型的有序 数据的集合。用数组名标识。#include main( ) int j , sum , s40 ; float ave ;

44、 sum=0; for(j=0; j=39 ; j+) scanf(“%d”,&sj); sum=sum+sj; ave=sum/40; printf(“ave=%f”,ave); 2.数组元素:每一个数组元素 都是一个变量,为了与一般 的变量相区别,我们称数组 元素为下标变量3.下标变量在数组中的位置 序号称下标,c语言中下标 从0开始 6.1 一维数组 6.1.1一维数组的定义 定义方式: 数据类型 数组名常量表达式 ; 合法标识符表示元素个数下标从0开始例 int a10;数组名表示数组所在内存首地址也是a0的地址,是地址常量 84 : 66 80 95a0a1a2 :a9a6.1.2

45、数组元素的引用数组必须先定义,后使用下标可以是常量或整型表达式如: a1 , a2*3只能逐个引用数组元素,不能一次引用整个数组下标不要超范围(越界)区分:数组定义:int a10,数组元素引用 t=a6; 例 int a10; printf(“%d”,a); ()必须 for(j=0;j10;j+) printf(“%dt”,aj); ()引用形式 : 数组名 下标 例 int data5; data5=10; () /C语言对数组不作越界检查,使用时要 注意6.1.3 数组元素的初始化与赋值在定义数组时,为数组元素赋初值(在编译阶段使之得到初值) int a5=1,2,3,4,5;等价于:

46、a0=1; a1=2; a2=3; a3=4; a4=5;说明: 数组不初始化,其元素值为随机数 对static数组元素不赋初值,系统会自动赋以0值 当全部数组元素赋初值时,可不指定数组长度 可以只给部分数组元素赋初值 一维数组的赋值是指数组已经定义完毕,对数组元素作动态赋值。例如:int a5; /* 定义一维数组a,每个元素的值是不确定的 */a0=1;a1=2;a2=3; /* 逐个赋值 */3. int a5; a= 1, 2, 3, 4, 5 ; 4. int a10; float i=3; ai=10; 1. char name0; float weight10.3; int ar

47、ray-100; 6.int i, a5; for(i=0;i5;i+) scanf(“%d”,&ai); for(i=0;i5;i+) printf(“%d”, ai); 2. int i=5; int ai= 1, 2, 3, 4, 5; 5. int a5; scanf(“%d”,&a); printf(“%d”, a); 讨论:以下几种用法是否正确?一维数组的赋值【例6.1】 编程,输入10个整数,计算最大值并输出。源程序:#include main( )int i,max,a10;printf(Input 10 numbers:n);for(i=0;i10;i+)scanf(%d,&

48、ai);max=a0;for(i=1;imax)max=ai;printf(Max=%dn,max);控制输入10个数据核心算法语句【例6.2】 用冒泡排序法对N个数进行排序(从小到大),用6个演示冒泡排序方法: 依次比较相邻的两个数,将小数放前面,大数放后面.经过第1轮(共5次比较与交换)后最大的数9已“沉底” 。再对余下的前面5个数进行第二轮比较,次大的数又被安置。n个数排序需要进行n-1轮比较,从第1轮到第n-1轮,各轮的比较次数依次为:n-1次、n-2次 1次,第i轮比较中要进行n-i次两两比较。 9 7 2 5 4 1a0a1a2a3a4a5 7 2 5 4 1 92775471 2

49、 5 4 1 7 94515 2 4 1 5 7 9 2 1 4 5 7 91412 9 7 2 5 4 19999972541初始状态第1轮第2轮第3轮第4轮第5轮76.2 二维数组姓名高等数学大学英语C程序设计王青808286陈丹788980赵乐767281李磊536770罗鹏878291该表共有15个数值,我们可以把它看作是由5行3列组成的矩阵。在数学中,我们使用双下标变量来表示矩阵中的某个值,其中一个变量表示行,另一个变量表示列。在C语言中可以使用二维数组来定义这样的表。该表在C中可以这样来定义:int v53; /* v是二维数组名称,5表示行数,3表示列数,int表示元素类型 */

50、6.2.1 二维数组的定义定义形式 : 类型说明符 数组名 常量表达式1 常量表达式2 ; 如: int a34 ; 6.2.2 二维数组的引用 数组元素的表示形式 : 数组名 下标 下标 注意 : (1) 每个下标都要用 括起来,如 a 2 1 不能写成 a 2,1 (2) 下标从0开始,且不要超过定义的范围6.2.3 二维数组的初始化与赋值1. 分行初始化 int a34= 1, 2, 3, 4 , 5, 6, 7, 8 , 9, 10, 11, 12 ; 此方法较直观, 第一对 内的数据赋给第一行数组元素, 依次类推 2. 按数据的排列顺序对数组元素赋初值 int a34= 1, 2,

51、3, 4, 5, 6, 7, 8, 9, 10, 11, 12; 将数据依次赋给元素 a00 , a01 a23 123456789101112注意: 此方法数据无明显的界限, 当数据较多时容易出错3. 对数组的部分元素赋初值,未赋值元素自动取0 int a34= 1,2 , 3 ,4,5,6 ; int a34= 1,2,3,4,5,6 ;120030004560123456000000 4. 对数组的全部元素赋初值时可以省略第一维的长度(行下标), 系统会根据数据的个数和第二维的长度自动求出第一维长度, 但第二维下标不可省. int b 2= 1, 2, 3, 4, 5, 6, 7, 8

52、;数组a 第一维长度为 3 数组b 第一维长度为 4 如仅对部分元素赋初值,要想省略数组的行数,则必须分行赋值。 int a 4= 1, 2 , 0, 3, 4 , 5 ;【例6.3】 求一个44矩阵的主对角线上各元素之和。#include main( )int a44=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;int i,j,sum=0;for(i=0;i4;i+)for(j=0;j4;j+)if(i=j) sum=sum+aij;printf(sum=%d,sum);方阵主对角线上元素的特征是:行标值等于列标值。6.3 字符数组与字符串一、字符数组1.

53、定义例 char c10, ch34; 例 char ch5; ch0= H; ch1= e; ch2= l; ch3= l; ch4= o;ch0Hello逐个字符赋值ch1ch2ch3ch4注意 例 char ch5=H,e,l,l,o;ch0Hello逐个字符赋值ch1ch2ch3ch4 例 char ch5=B,o,y;ch0Boy00逐个字符赋值ch1ch2ch3ch4 例 char ch5=“Boy”;ch0Boy00用字符串常量ch1ch2ch3ch4 例 char ch6=“Hello”; char ch6=“Hello”; char ch=“Hello”;用字符串常量ch0H

54、elloch1ch2ch3ch40ch5 例 char diamond5=., .,*,.,*,.,*, *, ., ., . ,*,.,*, .,*,., .,*;二维字符数组初始化.*00.*.*0*.*.*.*0.*00diamond0diamond1diamond2diamond3diamond4 例 char fruit7=“Apple”,”Orange”, ”Grape”,”Pear”,”Peach”;二维字符数组初始化fruit0fruit1fruit2fruit3fruit4Apple00Orange0Grape00Pear000Peach00例 输出一个字符数组#includ

55、e main() char c10=I, ,a,m, ,a, ,b,o,y; int i; for(i=0;i10;i+) printf(%c,ci); printf(n);Iamaboy0123456789二、字符串1、字符串存放及其结束标志无字符串变量,用字符数组处理字符串字符串结束标志:0例 “hello”共5个字符,在内存占6个字节 字符串长度5 h e l l o 0 104 101 108 108 111 0内存存放字符ASCII码等价于:char s1 =C, h, i, n , a ,0 ; char s210= C, h, i, n , a ; char s1 = “Chin

56、a” ; char s210= China ;字符串在字符数组中的存放s24s25s27s26s28s2s20s22s21s2310个字节 C i n a h0s29 0 0 0 0 0 s35s1s30s32s31s336个字节s34C i n ah 数组名:字符数组(字符串)在内存的首地址。 作为字符串进行存储时,字符串与字符数组的长度可以不等,系统自动加0为结束标志。ss10s12s11s135个字节s14C i n ah 0 s35s1s30s32s31s336个字节s34C i n ah字符串在字符数组中的存放不等价于: char s 5= C, h, i, n , a ;char

57、s1 = “China” ; 不能写成: char s15= China ; 用字符串作初值时,数组的长度应足够大以便能容纳全部字符和0。2、字符串的输入输出逐个字符I/O: %c整个字符串I/O: %s例 用%c main() char str5; int i; for(i=0;i5;i+) scanf(“%c”, &stri); for(i=0;i5;i+) printf(“%c”, stri);例 用%s main() char str5; scanf(“%s”, str); printf(“%s”, str);main( ) char a5=H,e,l,l,o; printf(“%s”

58、,a); main( ) char a =“Hello”; printf(“%s”,a);结果:因为没有0结束符,输出Hello,后面的字符不确定。结果:Helloprintf的s输出字符串main() char a=h,e,l,0,l,o,0; printf(%s,a);输出:hel h e l 0 l o 0数组中有多个0时,遇第一个结束用“%s”输出时,遇0结束h e l l o02314main() int i; char a5; scanf(%s,a); for(i=0;i5;i+) printf(%d,ai);运行情况:(1)若输入 hel , 正常(2)若输入 hell , 正常

59、(3)若输入 hello , 用%s 输出时,会出现问题输入字符串长度数组维数scanf的s输入字符串 h e l 0 h e l l 0 h e l l oscanf的s输入字符串#include main() char a15,b5,c5; scanf(%s%s%s,a,b,c); printf(a=%snb=%snc=%sn,a,b,c); scanf(%s,a); printf(a=%sn,a);运行情况:输入:How are you?输出:a=How b=are c=you?输入:How are you?输出:a=Howscanf中%s输入时,遇空格或回车结束 H o w 0 a r

60、 e 0 y o u ? 0 3、常用的字符串处理函数除puts和gets外,包含在头文件 string.h(1)字符串输出函数puts格式:puts(字符数组)功能:向显示器输出字符串(输出完,换行)说明:字符数组必须以0结束(2)字符串输入函数gets格式:gets(字符数组)功能:从键盘输入一以回车结束的字符串放入字符数组中, 并自动加0说明:输入串长度应小于字符数组维数例 #include main( ) char string80; printf(“Input a string:”); gets(string); puts(string); 输入: How are you?输出: H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论