承办单位教科办计算机中心课件.ppt

上传人(卖家):晟晟文业 文档编号:5196796 上传时间:2023-02-16 格式:PPT 页数:213 大小:1.87MB
下载 相关 举报
承办单位教科办计算机中心课件.ppt_第1页
第1页 / 共213页
承办单位教科办计算机中心课件.ppt_第2页
第2页 / 共213页
承办单位教科办计算机中心课件.ppt_第3页
第3页 / 共213页
承办单位教科办计算机中心课件.ppt_第4页
第4页 / 共213页
承办单位教科办计算机中心课件.ppt_第5页
第5页 / 共213页
点击查看更多>>
资源描述

1、 努力辅导努力辅导及格及格oror优秀!优秀!日期日期星期星期授课时间授课时间10.10星期一星期一17.3020.4510.17星期一星期一17.3020.4510.24星期一星期一17.3020.4510.31星期一星期一17.3020.4511.5周六周六13.3016.20答疑:每周答疑:每周五五 15.0017.00,机房,机房内容安排内容安排1.基本数据类型及其基本运算:基本数据类型及其基本运算:2.输入和数出输入和数出3.选择结构:选择结构:*4.循环结构循环结构:设计、阅读(素数、最大公约数、级数)设计、阅读(素数、最大公约数、级数)*5.数组:设计、阅读、填充数组:设计、阅读

2、、填充、改错(排序、查找)、改错(排序、查找)*6.函数:设计、阅读、填充函数:设计、阅读、填充、改错、改错*7.指针:阅读、简答题指针:阅读、简答题*8.结构体:单链表建立、插入、删除、输出。结构体:单链表建立、插入、删除、输出。填充填充*9.文件文件:建立和使用建立和使用*讲课思路讲课思路通过例题,说明概念和应用通过例题,说明概念和应用重在重在基本知识基本知识,解析,解析二级考题二级考题编辑编辑编译编译有错?连接连接执行执行结果正确?结束源程序f.c目标程序f.obj库函数和其它目标程序可执行目标程序f.exe开始正确不正确有无C 程程序序的的上上机机调调试试步步骤骤F9,ctrl+f9,

3、alt+f5,f108 分分1.1 数据类型数据类型数据类型基本类型 *构造类型单精度型双精度型指针*枚举数组*结构体*共用体整型字符型实型(浮点型)1.2 标识符、常量与变量标识符、常量与变量1.2.1 标识符标识符概念:概念:用来对常量、变量、及用户自定义函数的用来对常量、变量、及用户自定义函数的名称进行标识的符号进行标识的符号.定义规则定义规则:以:以字母字母(az,AZ)或下划线下划线_开头其其后可跟字母、数字或下划线后可跟字母、数字或下划线_三种字符、长度不超三种字符、长度不超过过32的字符串。的字符串。例如例如:A,X2,MAX,stu_list,_day1;3a 大、小写字母表示

4、不同意义大、小写字母表示不同意义。不能与C关键字同名。关键字:被关键字:被C语言使用的字。如:语言使用的字。如:int while1.2.2 常量常量1.整型常量整型常量:三种形式三种形式十进制整数十进制整数:以非0开头的数开头的数.如如:456,-789,0。八进制整数八进制整数:以数字以数字0打头的数打头的数.如:如:06,0345,-027。十六进制整数十六进制整数:以数字:以数字0后跟x(或或X)打头的数。打头的数。如:如:0 x132,-0 x15f,0X67例例1:修改:修改2002 1.6设设 main()int x1,x2,x3,x4;x1=12&7;x2=69;x3=012|

5、5;x4=0 x12&3|5;Printf(“%d,%d,%o,%x”,x1,x2,x3,x4);4 (1100&0111=0100)15 (00110 01001=1111)15 (001010|000101=1111)7 (00010010&011|101=111)4,15,17,7长整数长整数长整数:用以扩大整数的取值范围。:用以扩大整数的取值范围。表示方法:在整数后面加一个:在整数后面加一个L或或l。例如:例如:50l-十进制长整数十进制长整数 050L-八进制长整数八进制长整数 0 x12l-十六进制长整数十六进制长整数2.实型常量实型常量两种方式表示两种方式表示:十进制形式:如:如

6、:87.45,-87.0,87.,0.87,.87,0.0(必须有小数点必须有小数点)指数形式:由正负号、整数部分、小数点、由正负号、整数部分、小数点、小数部分和字母小数部分和字母E(e)后带或不带正负号的)后带或不带正负号的整数整数组成。组成。E之前必须有数字之前必须有数字.(表示太大或太表示太大或太小的数小的数)如如10-50.00001 1e-5(精度控制)(精度控制)3.字符常量字符常量如如:a,F,8;字符常量具有数值字符常量具有数值,其值就是该字符其值就是该字符的的ASCII代码值代码值.a:97,A:65,32数字字符和数字的数字字符和数字的关系关系:848+8=0+8转义字符转

7、义字符:p131.Print(“%s”,”wang isnot a studentn”);2.Print(“%s”,”x41 is”A”n”);3.Print(“%s”,”abcnefg0 xyzn”);0 0空字符,表示字符串的结束 n n换行 r r回车 t t Tab b b退格 f f换页 a a 响铃 单引号”双引号 d dd dd d1-3位8进数,表示字符的ASCII码 x xh hh h1-2位16进数,表示字符的ASCII码1.Wang isnot a student2.A is A3.abc efg (%S:遇遇0输出结束输出结束)4.字符串常量字符串常量字符串常量在内存中

8、存储时自动在尾部追加一字符串常量在内存中存储时自动在尾部追加一个个0字符字符,以便系统据此以便系统据此判断字符串是否结束.如:“abc”9798 99 0字符串长度测试字符串长度测试:sizeof(“abc”);strlen(“abc”);长度为n的字符串常量,在内存占n+1个字节43(不包含不包含0)测试存储空间测试存储空间长度函数长度函数sizeof(int);5.符号常量符号常量#define R 5.1789#define X 10#define Y 20#define Z X*Y宏定义有参和无参举例:#define F “r=%fn area=%.2fn”#define PI 3.1

9、4159#define S(R)PI*R*R#define N printf(“n”)Main()float a,area;a=3.6;b=1.4;area=S(a);N;printf(F,area);运行结果r=3.600000area=40.715038S(a+b);3.14*a*a()PI*(R)*(R)无参宏定义宏展开3.14159*a+b*a+b ()有参宏定义1.2.3 变量变量C中的变量有中的变量有普通变量普通变量和和指针变量指针变量.普通变量普通变量:用来存放普通的数据变量用来存放普通的数据变量,包括整型、实型和字符型包括整型、实型和字符型.指针变量指针变量:用来存放地址的变量

10、用来存放地址的变量。都必须都必须“先定义,后使用”.掌握数据类型的标识符、长度、范围和存放格式。掌握数据类型的标识符、长度、范围和存放格式。见见P12表表2.3,表,表2.4内存中以内存中以补码形式补码形式存放。存放。类型及其特性类型及其特性类型标识符类型标识符长长度度数据范围数据范围存放格式存放格式符号位符号位数据位数据位int2-3276832767(215-1)115short2-3276832767115long4-21474836487131unsigned int2065535016unsigned short2065535016unsigned long4042949672950

11、32float(7位位)43.4e-38 3.4e+381+231+7double(15位位有效数字)有效数字)81.7e-308 1.7e+308 1+481+14例例2001_1.4Main()int a=-1;printf(“%d,%u,%x,%on”,a,a,a,a);运行结果:-1,65535,ffff,177777-1原码:10000000 00000001-1补码:原码取反111111111 11111111改为:a=-2输出如何?运行结果2:-2,65534,fffe,177776例如例如Main()float x,y;x=111111.111;y=222222.222;pri

12、ntf(“%fn”,x+y);运行结果运行结果:333333.328125可见x,y只有前7位位为有效数字为有效数字,后两位小数不起作用.若改为:若改为:double x,y运行结果运行结果:333333.3330003.字符字符变量变量一个字符变量只能存放一个字符一个字符变量只能存放一个字符标识符标识符:char ,占占1个字节,内存中存放的是该字符二进制形式的内存中存放的是该字符二进制形式的ASCII代码值代码值.Char型和型和int 型数据可以互换型数据可以互换.例:例:Main()int c1;char c2;c1=a;c2=98;printf(“%c%cn”,c1,c2);prin

13、tf(“%d%dn”,c1,c2);运行结果:a b97 984.指针变量指针变量存放变量的地址。例:存放变量的地址。例:2003 二级二级 1.4执行下列程序后执行下列程序后,b和和c的值各为多少的值各为多少?main()int b,c,*a;a=&b;*a=5;c=(*a)+;printf(“%d%dn”,b,c);6 5bc a 100010005a561.3 运算符和表达式运算符和表达式根据运算符在表达式中的作用根据运算符在表达式中的作用分类分类:算术运算算术运算符:符:+、-、*、/、%、+、-赋值运算符:赋值运算符:=+=/=位运算符:位运算符:&|关系运算关系运算符:符:=0)个

14、)个学生,最后一个班若不足学生,最后一个班若不足k人也单独编成一个班。人也单独编成一个班。写出条件表达式表示编班个数。写出条件表达式表示编班个数。例例1:n%k=0?n/k:n/k+1例例3:0,100)x=0&xx=0 例例4:写一个布尔表达式写一个布尔表达式,当整数当整数n n的值大于零、且的值大于零、且个位数为个位数为2 2或或7 7时时,该布尔表达式的值为真该布尔表达式的值为真.n0&(n%10=2 or n%10=7)3.逻辑运算:在逻辑表达式的求解中逻辑运算:在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式只是在必须执行下一个逻辑运

15、算符才能求出表达式的解时的解时,才执行该运算符才执行该运算符.1.a&b&c 只有只有a为真时为真时,才需要判别才需要判别b的值的值,只有只有a和和b都为真时都为真时,才需要判别才需要判别c的值的值.只要只要a为假为假,就不必判别就不必判别b和和c的值的值.若若a为真为真,b为假为假,不判别不判别c.2.A|b|c 只要只要a为真为真,就不必判断就不必判断b和和c;只有只有a为假为假,才需要判别才需要判别b,a和和b都为假才判别都为假才判别c.如如:a=1,b=2,c=3,d=4,m和和n的原值是的原值是1,执行执行:(m=ab)&(n=cd)后后m=?n=?01例例2001_1.3求运行结果

16、求运行结果Main()Int a=0,b=0,c=0,x;x=(a=50)&(b=0)&(c=100);printf(“%d,%d,%d,%dn”,x,a,b,c);运行结果:0,50,0,04.关系运算关系运算 例例2003 1.1Int a=5,b=4,c=3,r1,r2;执行执行 r1=abc;r2=ab&bc;r1=?r2=?01自左至右自左至右右结合性右结合性5.条件运算练习题条件运算练习题设设int a=1,b=3,c=4,d=8;表达式表达式(ab?c b?a:c d?c:d 等同于:a b?a:(c d?c:d)例2:main()/*求程序执行结果 94年等级考*/l3_2.c

17、 int a=1,b=2,c=3;a+?b+:c+;/没算 c+printf(“n a=%d,b=%d,c=%d”,a,b,c);/CRT:a=2,b=3,c=3 例3:main()/*执行结果?95 年等级考*/l3_3.c int i=6,j=6,k=3;k+=i j?i+:-j;/没算i+k+=5;printf(“i=%d,j=%d,k=%d”,i,j,k);/CRT:i=6,j=5,k=8例4 main()int a=1,b=2,c=3;a+=b+=c;printf(“%dn”,ab?a+:b+);a=3;b=c=4;printf(“%dn”,c=b&b=a);591例例5:设有变量定

18、义设有变量定义 int a=5,b=4,c=3,d=2;试写出计算表达式试写出计算表达式(-a=b+)?c-:+d后后,a,b,c,d的值的值.a=4,b=5,c=2,d=2;99年1.16.逗号运算符和逗号表达式逗号运算符和逗号表达式 例如:int test()int x=0;static int y=2;y+=+x;return x+y;main()printf(“%dn”,(test(),test();逗号表达式:表达式1,表达式2,表达式n求解过程:先求表达式1,再求表达式2.最后求表达式n.逗号表达式的值逗号表达式的值:表达式n的值.例如:int j=5;a=(a=j+1,a+2,a

19、+3);5结果:a=9若去掉括号 a=67 位运算符和位表达式位运算符和位表达式&|位运算符的优先级位运算符的优先级&|高低例例1:2002 1.6计算计算设设 int xx=12&7=?x=69=?x=012|5=?x=7&3|5=?4 (1100&0111=0100)15 (00110 01001=1111)15 (001010|000101=1111)7 (111&011|101=111)例2:写出 printf(“n%dt%d”,(52),(5&2);的输出结果 解:00000101 00000101 00000010&00000010 00000111 00000000 结果 7 0

20、2001年等级考年等级考输入两个整数,存入输入两个整数,存入a a、b b变量中,并由变量中,并由a a、b b两个数生成新的数两个数生成新的数c,c,其其生成规则是:将是:将a a的低字节作为的低字节作为c c的高字节,将的高字节,将b b的低字节作为的低字节作为c c的低字节,并显示出来。的低字节,并显示出来。将整数b的低字节取出,高字节置零.b&0 x00ff将整数a的低字节取出移至高字节,低字节再置零.(b&0 x00ff)8两者的结果进行合并.b&0 x00ff|(a&0377)8#include main()int a,b,c;printf(“Input a,b:”);scanf(

21、“%d%d”,&a,&b);c=(a&0 x00ff)8|(b&0 x00ff);printf(“c=%d”,c);例3&运算可取一个数中某些指定位2.1 输出函数 printf()1.格式:printf(“输出格式”,输出表列);如:printf(“a=%d,b=%f n”,a,3.14*a*a);(a)输出格式:由格式说明、按原样输出的字符和转义字符组成。%d 以十进整数的实际长度输出。%x 以16进制无符号形式输出整数。%o 以八进制无符号形式输出整数。%u 以十进制无符号形式输出整数。%c 输出单一字符。%s 输出一个字符串。%f 以小数形式输出实数。整数部分全部输出,小数 部分输出

22、6位小数。%e 以指数形式输出实数。指数部分5位(如e+002),尾数的小数点前只能有1位非0数字,小数为6位。%g 选用%f和%e中输出宽度较短的一种格式,不输 出无意义的0。p282.Printf()的输出格式选择项格式选择项例:%5d,%-7c,%8.2f ,%ld 放在%和格式字符之间,表示附加要求。、:号时,结果右对齐,号时,结果左对齐。0 :输出数值时,有0时,不用位置填0。例:%05d m.n:m是实数或字符串的总长度,n是小数部分或实际 字符的长度。例:%-5.3s ,%8.3f 注 如实际位数超过m,则按实际长度输出。l :用于输出长整型或无符号长整型。l :长双精度型。(e

23、,f,g)h:用于输出短整型或无符号短整型。#:用于o和x格式输出0或0 x;3.Printf()使用注意几点使用注意几点1、变量定义为long,输出时必须%ld,否则仅将后16位输出。2、如要输出%,则在格式字符串中应输入%。3、printf(“%d”,3.5)输出不是3而是0!取低2个字节输出。Print(“%f”,3.5)输出3.500000 例1:main()printf(“%5s,%6s,%5.2sn”,“abc”,“def”,“abcde”);结果:abc,def,ab4、printf()处理表项时遵循处理表项时遵循“自右向左”的原则。不是的原则。不是“自左向右自左向右”例2:ma

24、in()int a=4;printf(“%d,%d”,a=a+5,a);/显示显示9,4不是不是9,9 printf(“a=%d”,a);/显示显示 a=9 printf(“%d,%d”,a ,a=a+5);/显示显示14,14不是不是9,14 printf(“a=%d”,a);/显示显示 14 2.2 输入函数输入函数scanf()()使用形式使用形式:scanf(“输入格式输入格式”,地址表列表列);输入格式输入格式:由格式说明和按原样输入的字符二部分组成。从键盘输入 的数据 按照格式说明转换为指定的格式存放到内存中。(%d%x%o%f%c%s)地址表列:变量的地址或字符串首地址组成变量的

25、地址或字符串首地址组成.例1:Scanf(“%d%d”,&a,&b);Scanf(“%d,%d”,&a,&b);Scanf(“a=%d,b=%d”,&a,&b);输入:12 234 12,234 a=12,b=234 p312.Scanf()使用注意点:1、输入格式字符串中的、输入格式字符串中的非格式字符非格式字符,输入时必须,输入时必须原样输入原样输入2、在用、在用%c 格式输入字符时,空格、转义字符都作为有效字格式输入字符时,空格、转义字符都作为有效字符输入符输入3、实数实数输入时不能规定输入时不能规定精度精度。4、格式字符格式字符不能有不能有n。5、变量前变量前勿忘勿忘&。6、*:指定输

26、入项在读入后:指定输入项在读入后不赋给不赋给相应的相应的变量变量。(跳过跳过)例例1:scanf(“%c%c%c”,&a,&b,&c);xyz 结果结果 x 赋给赋给a,空格空格 赋给赋给b,y 赋给赋给c。例例2:scanf(“%7.2f”,&a);是不允许的是不允许的。例例3:scanf(“%2d%4d%2d”,&a,&b,&c);19900125 则则 a=19 ;b=9001 ;c=25例例4:scanf(“%2d%*3d%2d”,&x,&y);1234567 则则 x=12;y=67例例 2003 二级二级1.5main()int a;float f;char *c;scanf(“%

27、4d%f%s”,&a,&f,c);printf(“a=%d,f=%.0f,c=%sn”,a,f,c);键入200015.0 p4 is GOOD!执行后的输出结果。a=2000,b=15,c=p4 在输入数据时,遇以下情况时该数据认为结束结束:遇空格,或回车或跳格键;遇宽度结束;遇非法输入;3.选择结构选择结构关系运算、逻辑运算、条件运算:关系运算、逻辑运算、条件运算:P38表表4.1 表表4.2 表表4.3注意事项:注意事项:p40If的三种形式:的三种形式:格式、执行过程格式、执行过程Switch语句:格式、执行过程语句:格式、执行过程p46X 当(x0);if(x0)y=x 例例1:用用

28、if和和switch语句实现下面运算:语句实现下面运算:Y=X 当(x0)if(x0)y=x;x*x 当0 x else y=x*x x*x 当当0 x1 if(x=4)x*x-5 当当1 x2 else if(x1)y=x*x x*x-2*x-1 当当2 x3 else if(x2)x*x+6*x-18 当当3 x4 else if(xc&c+ba&b+ca 三角形类型类型:等边:a=b&b=c 等腰:a=b|b=c|a=c 直角:a*a+b*b=c*c|a*a+c*c=b*b|b*b+c*c=a*a 面积公式公式:s=(a+b+c)/2 area=sqrt(s*(s-s)*(s-b)*(s

29、-c)程序结构:If()计算面积计算面积 if()else if()else else例4.9p48Main()int I,j,a,b,c;scanf(“%d,%d,%d”,&a,&b,&c);if()j=0;if(a*a+b*b=c*c|a*a+c*c=b*b|c*c+b*b=a*a)j=1;switch()case 0:printf(“不能构成三角形不能构成三角形!n”);case 1:printf(“能构成直角能构成直角!n”);case 2:printf(“三角形三角形!n”);例2.这是一个检验输入的三条边值能否构成三角形的程序.(完善程序)!(a+bc&b+ca&a+cb)jbre

30、akJ=2循环结构循环结构C语言有三种循环结构:语言有三种循环结构:(1)while结构结构 (2)do while 结构结构 (3)for 结构结构goto和和if语句构成循环语句构成循环.(不提倡应用不提倡应用)执行过程:执行过程:多重循环多重循环阅读程序阅读程序main()int a33,i,j;for(i=0;i3;i+)for(j=0;j3;j+)aij=i=j?0:i+j;for(i=0;i3;i+)for(j=0;j3;j+)printf(“%4d”,a i j );printf(“n”);0 1 21 0 32 3 0阅读程序阅读程序(99-2-2)void p(int k)i

31、nt i,m;for(m=2;m=k;m+)for(i=2;i=m;i+)if(!(m%i)break;if(i=m)printf(%4d,m);printf(n);main()p(15);2 3 5 7 11 13求求15的素数的素数判断素数判断素数的方法的方法阅读程序阅读程序(99-2-1)void s(int a,int n)int i,j,t;for(i=0;i=0&taj;j-)aj+1=aj;aj+1=t;main()int i,b6=24,12,14,32,22,34;S(b,6);for(i=0;i6;i+)printf(“%4d”,bj);printf(“n”);12 14

32、22 24 32 34右移右移比较趟数比较趟数寻找寻找t的排序位置的排序位置找到位置并置数找到位置并置数t2004.1.3main()char s=“2473”,c,i;for(i=0;c=si;i+)switch(c-0)case 2:case 3:putchar(c+4);continu;case 4:putchar(c+4);break;case 5:putchar(c+3);default:putchar(c+2);putchar(n);6897对对switch对对for本次循环结束2003.1.6main()int c1=0,c2=0,c3=0,c4=0;char*p=“123956

33、32123378”;while(*p)switch(*p)case 1:c1+;break;case 2:c2+;case 3:c3+;break;default:c4+;p+;printf(“c1=%d c2=%d c3=%d c4=%dn”,c1,c2,c3,c4);c1=2,c2=3,c3=7,c4=5例1 用下列公式求用下列公式求的近似值,直到最后的近似值,直到最后一项的绝对值小于一项的绝对值小于10-4为止。为止。sum=sum+psum=sum+p;p=p=1.0/i/i*s;s;i=i+2i=i+2;/*加加2 2得到下一个奇数得到下一个奇数*/s=-s;s=-s;/*相邻项符号

34、取反相邻项符号取反*/9171513114.循环体控制结束控制结束:fabs(1.0/i)=1e-41e-4););printfprintf(“pi=%fn”,(“pi=%fn”,sum*4););运行结果:运行结果:pi=3.141397a=bb=cc=a%b例例2:求两整数的最大公约数求两整数的最大公约数和最小公倍数。和最小公倍数。1.求最大公约数算法:求最大公约数算法:若有两整数若有两整数a,b,且且ab时:时:a除以b取余取余得c,若c=0,则b为两数的最大公约数。若c0,则a=b,b=c,回去执行。2.求最小公倍数算法:最小公倍数=两数乘积除以最大公约数。例:15,1215%12=3

35、12%3=0最大公约数:3例如:M=15,n=615%6=3,6%3=0(15*6)/3=30main()int m,n,a,b,t,c;printf(“Input two integer numbers:n);scanf(“%d%d”,&a,&b);m=a;n=b;if(ab)t=a;a=b;b=t;c=a%b;while(c!=0)a=b;b=c;c=a%b;printf (“The largest common divisor:%dn”,b);printf (“The least common multiple:%dn”,m*n/b);a大b小程序例例3:打印出以下图案打印出以下图案:*

36、算法分析:(前4行)行号 *的个数 *的起始位置1 1 3 2 3 2 3 5 14 7 0i 2i-1 4-i 1.确定起始位置(打几个空格):2.打印*的个数:For(j=1;j=4-i;j+)printf(“”);For(k=1;k=2i-1;k+)printf(“*”);printf(“n”);main()int i,j,k;for(i=1;i=4;i+)for(j=1;j=4-i;j+)printf(“”);for(k=1;k=2*i-1;k+)printf(“*”);printf(“n”);程序程序for(i=1;i=3;i+)for(j=1;j=i;j+)printf(“”);f

37、or(k=1;k=7-2*i;k+)printf(“*”);printf(“n”);前4行程序后3行程序程序设计程序设计1.使用控制语句使用控制语句,计算下列公式的近似值计算下列公式的近似值(do while)s=1-x2/2*1!+x4/4*3!-x6/6*5!+(某项值某项值=1;i+)for(n=1;n=4-i;n+)printf(“”);for(n=1;n=2*i-1;n+)printf(“%c”,a);printf(“n”);a+;程序程序2main()char a;int n;for(a=A;a=D;a+)printf(“n”);for(n=1;n=a-A;n+)printf(“”

38、);for(n=1;n=2*(D-a)+1;n+)printf(“%c”,a);控制行控制空格控制打印符号2003.4.1求求m的素因子的素因子Main()int m,i,n;for(m=4;m=10000;m+)n=m;For(i=2;i=m;i+)while(n%i=0)printf(“%d”,i);n=n/i;while(n%i=0&prime(i)Prime(int x)int i;for(i=2;x%i!=0;i+);return x=i?1:0;2003.4.2打印打印 A B C D EMain()int i,j,t;Char a5=“ABCDE”;FOR(i=0;i5;i+)F

39、or(j=i;j4)printf(“%c”,aj-5);else printf(“%c”,aj);printf(“n”;B C D E A C D E A B D E A B C E A B C D1.数组说明数组说明:p69数组中第一个元素的下标从数组中第一个元素的下标从0开始开始.a0数组名表示第一个元素的表示第一个元素的地址.即即&a0和和a的值相的值相同同.数组名数组名是地址常量,不能向它赋值和不能向它赋值和&运算运算.数组中各元素占一段连续的内存单元数组中各元素占一段连续的内存单元,数组名为首地址.引用数组元素时避免超界引用数组元素时避免超界.常量表达式只能是只能是常量和包含和包含符

40、号常量或sizeof表达式,不能包含变量不能包含变量.可以可以 int a1020,b30 同时定义多个数组同时定义多个数组例:#define MAXNUMB 100 char textMAXNUMB*3;float arraysizeof(double);例:Int n;scanf(“%d”,&n);int bn !2.一维数组元素的引用一维数组元素的引用数组元素的引用方法有两种数组元素的引用方法有两种:下标法和指针法.指针法1.指向数组元素的指针的定义与赋值.int*p,a20;p=&a0;(或或p=a)p指向数组第一个元素指向数组第一个元素 定义的同时赋初值定义的同时赋初值:int a2

41、0;int*P=&a0;(或或*p=a;)2.通过指针引用数组元素C规定规定:a+i和和p+i 数组元素数组元素ai的的地址 *(a+i)和和*(p+i)表示所指向的元素表示所指向的元素 ai数组元素数组元素ai的的实际地址:a+i*d (d是一个数组元素所占的字节数是一个数组元素所占的字节数)(d:2 4 1)例如:整型数组a的首地址为1000,a3地址为:1000+3*2=1006 即a+3和p+3都指向a3p+i,a+ip+7,a+7(1014)a0a1a2a7 P+0,a+0 (1000)p+1,a+1(1002)ai通过指针引用数组元素通过指针引用数组元素例例1用指针法进行数据处理用

42、指针法进行数据处理Main()int a10,i,*p;for(i=0;i=9;i+)scanf(“%d”,&ai);printf(“n”);for(p=a;p=a+9;p+)printf(“%d”,*p);printf(“n”);for(i=0;i=9;i+)printf(“%d”,*(a+i);运行结果:1 2 3 4 5 6 7 8 9 10 1234567891012345678910例例2 用指向字符数组的用指向字符数组的 指针进行字符处理指针进行字符处理.阅阅 读读 程程 序序Main()char a20,*p;int i;for(p=a;p=a+14;p+)scanf(“%c”,

43、p);printf(“n”);p=a;for(i=0;i=14;i+)printf(“%c”,*(p+i);运行结果:I am a student.I am a student.可见:对于字符串字符串的字符处理可通过字符数组字符数组来实现.也可通过指向字符串的指针实现.例例3用指向字符串的指针用指向字符串的指针进行字符处理进行字符处理Main()char*p=“I am a student.”for(;*p!=0;p+)printf(“%c”,*p);运行结果:I am a student.直接把字符指针指向字符串的首地址3 数组的初始化数组的初始化定义数组的同时对数组中元素赋值定义数组的同时

44、对数组中元素赋值.例如例如:一维数组一维数组 int a10=2,4,6,8,10,12,14,16,18,20;char ch5=c,h,i,n,a;(单个字符单个字符)char ch6=“china”;(字符串常量字符串常量)char ch6=“china”(省略花括号省略花括号)char ch6=c,h,i,n,a,0;(数组长度数组长度6)char ch=c,h,i,n,a,0;(不指定数组长度不指定数组长度)二维数组的初始化二维数组的初始化例例1:int a23=5,8,1,6,0,2;char b23=w,o,r,k,e,r;例例2:int a23=5,8,1,6,0,2;char

45、 b24=“wor”,“ker”;(由于由于0,下标不能用下标不能用3)char b24=w,o,r,0,k,e,r,0;例例3:int a 3=5,8,1,6,0,2;char b 3=w,o,r,k,e,r;char b 4=“wor”,“ker”;等价例例1:对十个整数排序:对十个整数排序(由小到大由小到大)。用起泡法和选择法.4 8 6 15 10 7 3 20 16 12 3 4 6 7 8 10 12 15 16 20 1.选择法排序:选择法排序:(n=10个数个数)将将n个数中最小的个数中最小的数数找出来出来,同第一同第一个数个数对调,再将后再将后n-1个数中最小的个数中最小的数

46、 同 第 二 个 数 对数 同 第 二 个 数 对调调.对对n(10)个数作个数作 n-1(9)轮比较,轮比较,每轮都找出一个未每轮都找出一个未经排序的数中最小经排序的数中最小的数。的数。基基 本本 思思 想想算法分析:i=1(比较9次找最小)min=i;for(j=2;j=10;j+)if(a(j)a(min)min=j;t=a(i);a(i)=a(min);a(min)=t;i=2(比较8次找最小)For(i=1;i=9;i+)比较找最小对调3;i+1;main()int i,j,k,t,*p;int a11=0,16,-5,9,3,1,27,81,-76,100,78;for(i=1,i

47、=9;i+)k=i;for(j=i+1;jaj)k=j;t=ai;ai=ak;ak=t;for(i=1;iaj+1)对调2.起泡法排序起泡法排序(由小到大由小到大)p74 6.5:程序程序 结构结构:if main()int i,j,t;int a11=0,16,-8,9,3,1,27,84,-76,100,54;for(i=1;ia(j+1)t=a(j);a(j)=a(j+1);a(j+1)=t;起泡法程序控制趟数控制次数if(*(p+j)*(p+j+1)t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;for(i=1;i=9;i+)for(j=1;j=10-i;j+)

48、比较对调输出下标法for(p=a+1;p=a+10;p+)printf(“%5d”,*p);指针法P=a;,*p;例例2把一个整数插入到由小到大排序的数列中把一个整数插入到由小到大排序的数列中,插插入后仍然有序入后仍然有序.1.解题思路:2 4 7 9 13 16 23 28 46 87a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11X=112 4 7 9 11 13 16 23 28 4687a5-a10后移一个位置1).确定插入位置p:(xai)i+;p=i ;for(i=10;i=p;i-)ai+1=ai;ap=x;for(i=1;iend)a11=x;else#de

49、fine N 10 main()int aN+2,p,x,i,end;for(i=1;i=N;t+)scanf(“%d”,&ai);scanf(“%d”,&x);程程序序#define N 10 main()int a12,p,x,*t;for(t=a+1;t*(t+p)&p=a+p;t-)*(t+1)=*t;t=a+p;*t=x;for(t=a+1;ta(m)换l=m+1 否则 h=m-1判断 X=am?条件:l=h 输输 入入 数数 组组 a 1 a 10 输输 入入 要要 找找 的的 数数 x l=1;h=10;p=a 当当 l *(p+m )n l=m +1 h=m -1 y l=h

50、n 打打 印印 数数 的的 位位 置置 打打 印印 无无 此此 数数二分法流程图出口处理main()int l,h,m,i,x,*p,a 11 ;for(i=1;i=10;i+)printf(“n a%d =”,i);scanf(“%d”,&a i );printf(“n Input x:”);scanf(“%d”,&x);l=1;h=10;p=a;while(l *(p+m)l=m+1;else h=m-1;if(l=h)printf(“n%d is the position%d”,x,m);else printf(“n There is no%d”,x);为数组赋值输入要查找的数二分法查找

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(承办单位教科办计算机中心课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|