C语言程序设计六_第1页
C语言程序设计六_第2页
C语言程序设计六_第3页
C语言程序设计六_第4页
C语言程序设计六_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、2022-4-14C语言程序设计-第六章2基本类型基本类型 构造类型构造类型派生类型派生类型整型整型intint结构体结构体structstruct数组类型数组类型字符型字符型charchar共用体(联合)共用体(联合)型型unionunion指针类型指针类型实型实型floatfloat枚举型枚举型enumenum双精度型双精度型DoubleDouble用户定义类型用户定义类型typedeftypedef 空值型空值型voidvoid构造数据类型(导出构造数据类型(导出类型):由基本数据类型):由基本数据类型按一定规则组合类型按一定规则组合而成的。广义上包括而成的。广义上包括表中的构造类型和派

2、表中的构造类型和派生类型。生类型。 2022-4-14C语言程序设计-第六章36.1 一维数组一维数组6.2 多维数组多维数组6.3 字符数组字符数组第6章 数组2022-4-14C语言程序设计-第六章4数组和数组元素数组和数组元素数数 组组: :构造数据类型之一,是一种数据结构,处于这种结构中的变量具有相同的性质,并按一定的顺序排列。数组的定义: 数据类型数据类型 数组名数组名 数组长度数组长度;例例: int: int a6; a6; a00145a1a2a3a4a523a数组元素数组元素 下标变量下标变量 数组中的每个分量,用下标来表示其所处位置,各分量排列有序且数据类型相同。数组元素的

3、表示: 数组名数组名 下标下标 例:a3, data34数组名数组名表示数组存储区域的首地址,数组的首地址也就是第一个元素的地址,是一个地址常量,不能向它赋值。例:a或&a0下下 标标用来表示该数组元素在数组中的相对位置,是整型常量,最小值为0,最大值为数组长度-1。例: a3中的下标3 :数组运算符单目运算符优先级1左结合2022-4-14C语言程序设计-第六章5一维数组一维数组:带有一个方括号的数组。a6二维数组:二维数组:带有两个方括号的数组。data34三维数组:三维数组:带有三个方括号的数组。c345 n 维数组维数组: 带有n个方括号的数组。b4 4多多维维数数组组用数组表

4、示向量D和矩阵A数组d10表示向量D: d0,d1,d2,d3,d4,d5,d6,d7,d8,d9数组a43表示矩阵A:a00,a01,a323231302221201211100201009876543210),(aaaaaaaaaaaaAddddddddddD2022-4-14C语言程序设计-第六章66.1 一维数组一维数组6.1.1 一维数组的定义和使用一维数组的定义和使用v定义方式: 数据类型 数组名常量表达式; 例例6.1 int a6;a00145a1a2a3a4a523a编译时分配连续内存编译时分配连续内存内存字节数内存字节数=数组元素个数数组元素个数*sizeof(元素数据类型

5、元素数据类型)2022-4-14C语言程序设计-第六章79 8 7 6 5 4 3 2 1 0例例6.2一维数组元素的使用。一维数组元素的使用。main() int i,a10; for (i=0;i=0;i-) printf(%d ,ai);2022-4-14C语言程序设计-第六章86.1.2 一维数组的初始化一维数组的初始化初始化方式 在定义数组时,为数组元素赋初值(在编译阶段使之得到初值) int a5=1,2,3,4,5;等价于:a0=1; a1=2; a2=3; a3=4; a4=5;v说明:l数组不初始化,其元素值为随机数l对static数组元素不赋初值,系统会自动赋以0值l当全部

6、数组元素赋初值时,可不指定数组长度如 int a5=6,2,3; 等价于: a0=6; a1=2;a2=3; a3=0; a4=0;如 int a3=6,2,3,5,1; ()static int a5;等价于:a0=0; a1=0; a2=0; a3=0; a4=0;l只给部分数组元素赋初值 int a=1,2,3,4,5,6;编译系统根据初值个数确定数组维数2022-4-14C语言程序设计-第六章9例例6.3整数数组的初始化。整数数组的初始化。#include”stdio.h”main() int i;int a=0,1,0,0,1;for (i=0;i5;i+) printf(%d ,a

7、i);0 1 0 0 12022-4-14C语言程序设计-第六章10例38 49 65 76 13 27 30 97第一趟38 49 65 13 27 30 76第二趟38 49 13 27 30 65第三趟38 13 27 30 49第四趟13 27 30 38第五趟13 27 30第六趟49 38 65 97 76 13 27 30初始关键字n=83849769713972797309713767676273013652765306513134949304927382738303813 27第七趟2022-4-14C语言程序设计-第六章11例6.4冒泡法从小到大排序程序。排序过程:排序过程

8、:设有设有n个数据个数据,存放到存放到a1到到an的的n个数组元素中。个数组元素中。 (1) 从从a1到到an,依次把两个相邻元素两两比较,即,依次把两个相邻元素两两比较,即a1与与a2比,比,a2与与a3比,比,an-1与与an比比;(2) 每次两相邻元素比较后,若前一个元素值比后一个元素每次两相邻元素比较后,若前一个元素值比后一个元素值大,则交换两元素值;否则,不交换。值大,则交换两元素值;否则,不交换。(3)重复上述算法,把重复上述算法,把a1到到an中的最大值换到中的最大值换到an ,再把,再把a1到到an-1中最大值换到中最大值换到an-1 ,最后把最后把a1到到a2中最大值换到中最

9、大值换到a2中,即中,即完成排序。完成排序。Input 8 numbers:2 6 5 4 1 9 8 3The sorted numbers:1 2 3 4 5 6 8 96.1.3 一维数组程序举例一维数组程序举例 main() int i,j,t,a9; printf(Input 8 numbers : n); for (i=1;i=8;i+) scanf(%d,&ai); printf(n); for (j=1;j=7;j+) for (i=1;iai+1)t=ai;ai=ai+1;ai+1=t; printf(the sorted numbers : n); for (i=1

10、;i=8;i+) printf(%d ,ai);2022-4-14C语言程序设计-第六章12例例6.5比较交换法从小到大排序程序。比较交换法从小到大排序程序。排序过程排序过程:(1)通过比较交换将数组元素通过比较交换将数组元素a1到到an中的最大值放入中的最大值放入a1中中;(2)再次比较交换将数组元素再次比较交换将数组元素a2到到an中的最大值放入中的最大值放入a2中中; (3)以此类推,将以此类推,将ai到到an中的最大值存入到中的最大值存入到ai中,直到最后二个中,直到最后二个元素元素an-1与与an进行一次比较,依条件交换,较大值存入进行一次比较,依条件交换,较大值存入an-1中,中,

11、即达到了按从大到小的排序。即达到了按从大到小的排序。#define N 6main() int i,j,t,aN+1; printf(Input 6 numbers: n); for(i=1;i=N;i+) scanf(%d,&ai); printf(n); for(i=1;i=N-1;i+) for(j=i+1;j=N;j+) if(aiaj) t=ai;ai=aj;aj=t; printf(the sorted numbers : n); for(i=1;i=N;i+) printf(%d ,ai);Input 8 numbers:5 7 4 3 8 6The sorted num

12、bers:8 7 6 5 4 32022-4-14C语言程序设计-第六章13例初始: 49 38 65 97 76 13 27 kji=11349一趟: 13 38 65 97 76 49 27 i=22738二趟: 13 27 65 97 76 49 38 三趟: 13 27 38 97 76 49 65 四趟: 13 27 38 49 76 97 65 五趟: 13 27 38 49 65 97 76 六趟: 13 27 38 49 65 76 97 kkkkjjjjjjjjjj2022-4-14C语言程序设计-第六章14例例6.6选择法排序从大到小排序程序。选择法排序从大到小排序程序。排

13、序过程排序过程: 在每一轮比较中不是每当在每一轮比较中不是每当aiaj时就交换,而是用一个变时就交换,而是用一个变量量k记下其中值较大的元素的下标值,在记下其中值较大的元素的下标值,在ai与与ai1到到an都比较都比较后,只将后,只将ai与与ai1到到an中值最大的那个元素交换,为此,在每中值最大的那个元素交换,为此,在每一轮只需将一轮只需将ai与与ak的值交换即可。的值交换即可。#define N 6main() int i,j,t,k,aN+1; printf(Input 6 numbers : n); for(i=1;i=N;i+) scanf(%d,&ai); printf(n

14、); for(i=1;i=N-1;i+) k=i; for(j=i+1;jak) k=j; if(k!=i) t=ai;ai=ak;ak=t; printf(the sorted numbers : n); for(i=1;i=N;i+) printf(%d ,ai);Input 8 numbers:5 7 4 3 8 6The sorted numbers:8 7 6 5 4 32022-4-14C语言程序设计-第六章156.2 多维数组多维数组 6.2.1 二维数组的定义和使用二维数组的定义和使用 6.2.2 二维数组的初始化二维数组的初始化 6.2.3 二维数组程序举例二维数组程序举例

15、2022-4-14C语言程序设计-第六章166.2.1 二维数组的定义和使用二维数组的定义和使用1.二维数组的定义二维数组的定义 类型类型 数组名数组名常量表达式常量表达式1常量表达式常量表达式2;例:int a34; a00a01a02a03a10a11a12a13a20a21a22a23014523a01a02a03a10a11a00a13a20a21a22a23a1267101189a0a1a2a0a1a2存储结构存储结构:以行为主序行为主序方式存放。数组长度数组长度=常量表达式1*常量表达式2逻辑结构逻辑结构:行数列数行名2022-4-14C语言程序设计-第六章17三维数组int b2

16、34的存储结构:01234567.20212223b000b001b002b003b010b011b012b013b020b021b022b023b100b101b102b103b110b111b112b113b120b121b122b1232.二维数组元素的使用二维数组元素的使用二维数组名的使用:是该数组的首地址。二维数组元素的使用: 数组名数组名下标下标1下标下标2行号列号2022-4-14C语言程序设计-第六章18例例6.7输入一个二维数组值输入一个二维数组值,并将其在数组中的内容及并将其在数组中的内容及地址显示出来。地址显示出来。main() int a23; int i; for(i

17、=0;i2;i+) printf(Enter a%d0,a%d1,a%d2n,i,i,i); scanf(%d,%d,%d,&ai0,&ai1,&ai2); for(i=0;i2;i+) printf(a%d0=%d,addr=%xn,i,ai0,&ai0); printf(a%d1=%d,addr=%xn,i,ai1,&ai1); printf(a%d2=%d,addr=%xn,i,ai2,&ai2); Enter a00,a01,a0210,20,30Enter a10,a11,a1240,50,60a00=10,addr=ffd4 a01=

18、20,addr=ffd6 a02=30,addr=ffd8 a10=40,addr=ffda a11=50,addr=ffdc a12=60,addr=ffde2022-4-14C语言程序设计-第六章19多维数组的初始化有两种方式:直述型:将所有常量写在一个花括号内,各个常量之间用逗号分开,按数组元素存储的顺序对各元素赋初值。6.2.2 二维数组的初始化二维数组的初始化 int a34=1,2,3,4,5,6,7,8,9,10,11,12;int a34=1,2,3,4,5,6,7,8,9,10,11,12;分列型:用花括号嵌套,即每一组一维数组的初值数据再用一对花括号括起。注:若对全部元素都

19、赋初值,第一维长度可省略,但第二维长度不能省。int a34=1,5,9;int a4=1,2,3,4,5,6,7,8,9,10,11,12;2022-4-14C语言程序设计-第六章20例例6.8输入一个输入一个3*3的数组,将其行和列互换。的数组,将其行和列互换。main() int i,j,b33; static int a33=1,2,3,4,5,6,7,8,9; for(i=0;i=2;i+) for(j=0;j=2;j+) bji=aij; for(i=0;i=2;i+) for(j=0;j=2;j+) printf(%d ,bij); printf(n); 14 72 5 83 6

20、 92022-4-14C语言程序设计-第六章21例例6.9有一个有一个3*4的矩阵,要求编程求出第的矩阵,要求编程求出第i行、第行、第j列元素的值。列元素的值。main() int i,j; static int a34=1,2,3,4,9,8,7,6,-10,10,-5,2; printf(input integer i: ); scanf(%d,&i); printf(input integer j: ); scanf(%d,&j); printf(a%d%d=%d,i-1,j-1,ai-1j-1); input integer i: 2input integer j: 3

21、a12=76.2.3 二维数组程序举例二维数组程序举例 2022-4-14C语言程序设计-第六章22main() int i,j,k,m=2,n=3,p=2; static int a23= 6,8,7, 3,4,5 ; static int b32= 1,2, 2,1, -1,0 ; static int c22= 0,0, 0,0; for(i=0;im;i+) for(j=0;jp;j+) cij=0; for(k=0;kn;k+) cij=cij+aik*bkj; for(i=0;im;i+) for(j=0;jp;j+) printf(%d ,cij); printf(n); 例例6

22、.10求矩阵求矩阵A与乘积。与乘积。15 206 102022-4-14C语言程序设计-第六章236.3 字符数组字符数组 6.3.1 字符数组的定义字符数组的定义 6.3.2 字符数组的初始化字符数组的初始化 6.3.3 字符串的输入和输出字符串的输入和输出 6.3.4 用于字符处理的库函数用于字符处理的库函数2022-4-14C语言程序设计-第六章246.3.1 字符数组的定义字符数组的定义字符数组的定义:字符数组的定义: char/int数组名数组名数组长度数组长度;char c10; 注:char/int两种表示方式所占的空间不同,因字符型占一个字节,而整型占两个字节。2022-4-1

23、4C语言程序设计-第六章251 用字符常量对字符数组进行初始化6.3.2 字符数组的初始化字符数组的初始化 char str8=p,r,o,g,r,a,m,0; char str8=112,114,111,103,114,97,109,0;2 用字符的ASCII码值对字符数组进行初始化3 用字符串对字符数组进行初始化char str=“program”;char str=“program”; 注:只能在定义时赋初值,不能在语句中直接将一个字符串赋给一个字符数组,可用strcpy()实现将一个字符串赋给予一个字符数组。 int qus19;qus=“Whats your name?”; 2022

24、-4-14C语言程序设计-第六章26 例 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”;用字符串常量ch0Helloch1ch2ch3ch40ch52022-4-14C语言程序设计-第六章27 例 char diamond5=., .,*,.,*,.,*, *, .,

25、., . ,*,.,*, .,*,., .,*;二维字符数组初始化.*00.*.*0*.*.*.*0.*00diamond0diamond1diamond2diamond3diamond4 例 char fruit7=“Apple”,”Orange”, ”Grape”,”Pear”,”Peach”;二维字符数组初始化fruit0fruit1fruit2fruit3fruit4Apple00Orange0Grape00Pear000Peach002022-4-14C语言程序设计-第六章281 逐个字符的输入和输出逐个字符的输入和输出scanf( “%c”,&ch);printf(“ %c

26、”,ch);ch=getchar();putchar( ch); 6.3.3 字符串的输入和输出字符串的输入和输出例例6.11逐个字符输入输出。逐个字符输入输出。main() int i; char str10; for(i=0;i9;i+)scanf(“%c”,&stri); stri=0; for(i=0;i9;i+)printf(“%c”,stri);123456789123456789stri=getchar();putchar(stri);2022-4-14C语言程序设计-第六章29例 输出一个字符串#include main() char c10=I, ,a,m, ,a,

27、,b,o,y; int i; for(i=0;i10;i+) printf(%c,ci); printf(n);Iamaboy01234567892022-4-14C语言程序设计-第六章30例main( ) char a5=H,e,l,l,o; printf(“%s”,a); 例 main( ) char a =“Hello”; printf(“%s”,a); 结果:Hello#-=*结果:Hello用“%s”输出时,遇0结束2022-4-14C语言程序设计-第六章312. 字符串的整体输入和输出字符串的整体输入和输出 scanf( “ %s”,字符数组名字符数组名);注:输入时自动加0。 p

28、rintf(“%s”,字符数组名字符数组名);注:输出时遇第一个0结束。123456789123456789123456789123456char c=“China”;printf(“%s”,c);输出: Chinamain() char a=h,e,l,0,l,o,0; printf(%s,a);输出:helchar str13;scanf(“%s”,str);输入: How例6.12字符串整体输入输出。main() int i; char str10; scanf(%s,str); printf(%sn,str); printf(%6sn,str); printf(%-.6sn,str);

29、例例6.13字符串的输入输出。字符串的输入输出。main()static char qus=What is your name ?; char name20; printf(%sn,qus); scanf(%s,name); printf(nMy name is %sn,name);Whats your name?LimingMy name is Liming.2022-4-14C语言程序设计-第六章32用字符数组名用字符数组名,不要加不要加&输入串长度输入串长度数组长度数组长度遇空格或回车结束遇空格或回车结束自动加自动加0用字符数组名用字符数组名,遇遇0结束结束例例 用用%s %s

30、main() char str5; scanf(“%s”, str); printf(“%s”, str);2022-4-14C语言程序设计-第六章33例 字符串输入举例 H o w 0 a r e 0 y o u ? 0 #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=How运行情况:输入:How

31、 are you?scanf中%s输入时,遇空格或回车结束2022-4-14C语言程序设计-第六章343. 整行输入和输出整行输入和输出 gets(str); 注:读入由键盘输入的字符(包括空格),直至换行符为止(换行符不存入),且自动在结尾处加0。 puts(str); 注:把字符串的内容显示在屏幕上。char str=“ChinanBeijing”;puts(str);输出: China Beijing2022-4-14C语言程序设计-第六章35#include main() char a15; gets(a); puts(a);运行情况:输入:How are you?输出:How are

32、 you?例 若准备将字符串“This is a string.”记录下来,错误的输入语句为:(A)scanf(“%20s”,s);(B)for(k=0;k17;k+) sk=getchar();(C)while(c=getchar()!=n) sk+=c;2022-4-14C语言程序设计-第六章36u字符串连接函数strcat格式:strcat(字符数组1,字符数组2)功能:把字符数组2连到字符数组1后面返值:返回字符数组1的首地址说明:字符数组1必须足够大 连接前,两串均以0结束;连接后,串1的0取消, 新串最后加0u字符串拷贝函数strcpy格式:strcpy(字符数组1,字符串2)功能

33、:将字符串2,拷贝到字符数组1中去返值:返回字符数组1的首地址说明:字符数组1必须足够大 拷贝时0一同拷贝 不能使用赋值语句为一个字符数组赋值例 char str120,str220; str1=“Hello!”; () str2=str1; ()v6.3.4 用于字符处理的库函数用于字符处理的库函数包含在头文件 string.h2022-4-14C语言程序设计-第六章37例 strcpy与strcat举例#include #include void main() char destination25; char blank = , c= C+, turbo = Turbo; strcpy(d

34、estination, turbo); strcat(destination, blank); strcat(destination, c); printf(%sn, destination);Turbo C+TrboC+0123456789u024.Trbo0123456789u024.Trbo00123456789u24.2022-4-14C语言程序设计-第六章38u字符串比较函数strcmp格式:strcmp(字符串1,字符串2)功能:比较两个字符串比较规则:对两串从左向右逐个字符比较(ASCII码), 直到遇到不同字符或0为止返值:返回int型整数,a. 若字符串1 字符串2, 返回正

35、整数 c. 若字符串1= 字符串2, 返回零说明:字符串比较不能用“=”,必须用strcmpu字符串长度函数strlen格式:strlen(字符数组)功能:计算字符串长度返值:返回字符串实际长度,不包括0在内例 对于以下字符串,strlen(s)的值为:(1)char s10=A,0,B,C,0,D;(2)char s =“tv0willn”;(3)char s =“x69082n”; 答案:1 3 12022-4-14C语言程序设计-第六章39#include #include main() char str1 = ”Hello!, str2 = ”How are you?”,str20;

36、int len1,len2,len3; len1=strlen(str1); len2=strlen(str2); if(strcmp(str1, str2)0) strcpy(str,str1); strcat(str,str2); else if (strcmp(str1, str2)0) strcpy(str,str2); strcat(str,str1); else strcpy(str,str1); len3=strlen(str); puts(str); printf(”Len1=%d,Len2=%d,Len3=%dn”,len1,len2,len3);例 strcmp与strle

37、n举例How are you?Hello!Len1=6,Len2=12,Len3=182022-4-14C语言程序设计-第六章40应用举例例 输入一行字符,统计其中有多少个单词输入一字符串给 string i=0 num=0 word=0当(c=stringi)!=0)c=空格真真假假word=0word=1num=num+1i=i+1输出:numword=0#include main() char string81; int i,num=0,word=0; char c; gets(string); for(i=0;(c=stringi)!=0;i+) if(c= ) word=0; els

38、e if(word=0) word=1; num+; printf(There are %d words in the linen,num);2022-4-14C语言程序设计-第六章41当前字符=空格是否未出现新单词,使word=0,num不累加前一字符为空格(word=0),新单词出现,word=1,num加1前一字符为非空格(word=1),未出现新单词,num不变否0是11是1未01否0是12否1未12是1未02否0是13是1未03否0是14否1未14否1未14否1未14例 输入:I am a boy. 当前字符是否空格word原值新单词开始否word新值num值Iamaboy.2022-4-14C语言程序设计-第六章42例 有三个字符串,找出其中最大者 H o w 0 H e l l o 0 H i g h 0 str0str1str2#include #include main() char string20,str320; int i; for(i=0;i0)strcpy(string,str0); else strcpy(string,str1); if(strcmp(str2,string)0)strcpy(string,str2); printf(The largest st

温馨提示

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

评论

0/150

提交评论