程序设计基础(C语言)_第1页
程序设计基础(C语言)_第2页
程序设计基础(C语言)_第3页
程序设计基础(C语言)_第4页
程序设计基础(C语言)_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

1、程序设计基础(C语言)程序设计基础(C语言)数组概念基本概念问题的提出? a,b从大到小排序输出?Programming1 : if (ab) temp=a; a=b; btemp; printf(“%d%dn”,a,b); a,b,c从大到小排序输出?Programming1 : if (ab) temp=a; a=b; b=temp; if (ac) temp=a; a=c; c=temp; if (bc) temp=b; b=c; c=temp; printf(“%d%d%dn”,a,b,c); a,b,c,d从大到小排序输出? a,b,从大到小排序输出?利用数组可以进行数据的排序3基本

2、概念问题的提出?用变量来解决:#include main() float cj1,cj2,cj3, cj10; /*定义10个变量*/ float pj; scanf(“%f”,&cj1); /*输入10个数据*/ scanf(“%f”,&cj2); scanf(“%f”,&cj10); pj=cj1+cj2+cj10; pj=pj/10; /*求平均值*/ /*打印低于平均成绩的同学成绩*/ if (cj1pj) printf(“%fn”,cj1); if (cj1pj) printf(“%fn”,cj2); if (cj1pj) printf(“%fn”,cj10); 例2:计算10个同学

3、的成绩:计算平均成绩、打印低于平均成绩的同学成绩如果增加1000个成绩?4基本概念问题的提出?用数组来解决:#include main() float cj10; /*定义一个实型数组存放10个成绩*/ float pj; int i; for (i=0;i10;i+) /*输入10个数据*/ scanf(%f,&cji); for(i=1,pj=0;i10;i+) /*求平均值*/ pj=pj+cji; pj=pj/10; for (i=0;i10;i+) /*打印低于平均成绩的同学成就*/ if (cjipj) printf(cj=%d=%fn,i+1,cji); 例2:计算10个同学的成

4、绩:计算平均成绩、打印低于平均成绩的同学成绩5基本概念问题的提出?用数组解决此类问题在程序设计中,数组是十分有用的数据类型循环中使用数组能更好地发挥循环的作用例2:采用数组和循环相结合,循环变量的值改变某些问题不使用数组就难以解决例1 :优点程序简洁、思路清楚明了书写简洁,通用性强6基本概念什么是数组?是一组具有固定数目的、有序的、类型相同的数据的集合是同类型有序数据的集合可以为该数据集合起一个名字,称为数组名该数据集合中的各数据项称为数组元素,用数组名和下标表示 根据数组下标的多少,数组可以分为一维数组和多维数组一维只有一个下标,例如:cj10二维有两个下标,例如:grade347基本概念什

5、么是数组?一个数组就是一组连续的内存空间,用来保存数据,数组中的每一项称为一个元素C语言数组的特点数组的个数必须确定不允许变动,但数组元素的值可以改变数组元素的类型必须是相同的不允许混合的a0a1a2a3a4DFFODFF2DFF4DFF6DFF8a8基本概念什么是数组?使用下标的优点?下标唯一确定了元素在数组中的位置(或者说是排列顺序)采用数组名+下标 可以准确访问到数组中的每一个元素提示C语言是一个有趣的语言,它从0开始计数,而不是从1开始,所以例题中10个元素的编号是从0到9a10 a0 a1 a2 a9数组名数组元素名数组长度9程序设计基础(C语言)一维数组一维数组一维数组的定义格式:

6、类型说明符 数组名常量表达式;说明:数据类型是数组全体数组元素的数据类型数组名用标识符表示符合表示服的命名规则整型常量表达式代表数组具有的数组元素个数必须是正的整型常量表达式,不能出现变量或非整型值提示编译程序为数组开辟连续的存储单元,用来顺序存放数组的各数组元素用数组名表示该数组存储区的首地址数组元素的下标一律从0开始一维数组元素按顺序存放,其所占字节数的计算公式: 数组所占总字节数=sizeof(type)*size11一维数组一维数组的定义 int a5,b5;float c10;说明:定义了整型数组a和 b以及实型数组ca和 b的 数组元素的类型都是intc的 数组元素的类型都是flo

7、ata数组有5个数组元素,b数组有5个数组元素,c数组有10个元素以a5为例a数组的数组元素是a0,a1,a2,a3和a4 共5个数组元素a数组元素的下标大于等于0,且小于5定义了int型数组a编译程序将为a数组在内存中开辟5个连续的存储单元(每个int存储单元占2个字节),用来存放a数组的5个数组元素a0代表这片存储区的第一个存储单元数组名a代表a数组的首地址,即a0存储单元的地址ai实际上代表这片存储区序号为i的存储单元ai就是一个带下标的int型变量a数组是这些int型下标变量的集合12一维数组一维数组的定义正确的定义方式#define N 5 int aN; /* N是符号常量,其值为

8、5 */int b2+3; /* 2+3是常量表达式,其值为5 */int c10;错误的数组定义int aj; /* j不是常量 */int x=10,bx; /* ? */int M(4); /* 不能用圆括号定义数组 */int n1.0; /* ?*/13一维数组一维数组初始化格式说明可在 中给出各数组元素的初值各初值之间用逗号分开把 中的初值依次赋给各数组元素数据类型 数组名整型常量表达式=初值1,初值2,;14一维数组初始化例int num 4= 1,2,3,4;表示把初值1,2,3,4依次赋给num 0, num1, num2 ,num 3相当于执行如下语句int num 4;

9、num 0=1; num 1=2; num 2=3; num 3=4;提示初始化的数据个数不能超过数组元素的个数,否则出错例如:int a4=1,2,3,4,5;是错误的一维数组15一维数组一维数组初始化对数组的部分元素赋初值例int num5=1,2,3 ;numnum0 num1 num2 num3 num4 1 2 3 0 0该语句执行:num0=1;num1=2;num2=3;num3=0;num4=0; 16一维数组一维数组初始化提示初始化的数据个数不能超过数组元素的个数,可以少于数组元素的个数 数组的元素不能自动初始化采用语句 int cj10=0;将数组cj的元素初始化为0若数组

10、元素的个数定义省略,则系统根据初值的个数来确定数组元素的个数例如:int a3=1,2,3;数组有3个数组元素:a0=1,a1=2,a2=3若省略数组元素个数的定义,则初值必须完全给出C 语言编译系统将自动根据初始化数据的个数来确定数组的长度17一维数组数组的引用数组引用两种形式对整个数组的引用只给出数组名即可对数组元素的引用需要给出数组名下标的形式形式: 数组名 下标表达式 例如 int a5,i=1,j=2,k=4;ak,aj-1,aj+i都是对a数组元素的合法引用ak=ai-1+a0;表示a0的值与a2的值求和并赋给a4for(i=0;i5;i+) scanf(%d,&ai); 表示依次

11、为a数组的5个元素输入数据18一维数组数组的引用提示定义时整型常量表达式与引用时的数组元素的下标表达式是完全不同的概念数组定义: int a5; 整型常量表达式5表示a数组有5个数组元素数组元素的引用a2=a1+a5; 下标表达式2和1均表示数组元素的下标a5是错误的数组元素引用,因为下标从0开始,所以数组元素的下标小于5,下标已经越界系统不检查数组元素下标是否越界只能由编程者自己掌握下标越界会破坏其它变量的值编程时一定要保证数组元素下标不越界19问题1: int a2; scanf(“%d%d”, &a1,&a2); ? 错误: 在C语言中数组元素的下标由 0开始,一个数组的下标的合法范围在

12、0n-1,因此该题正确的写法是: int a2; scanf(“%d%d”, &a0,&a1);错误: 数组元素是通过数组名下标来访问的,其中下标必须是大于0的整数、整型变量或整型表达式,在这段程序中,i是浮点数,不能做数组元素的下标。问题2:int a10; float i=3; ai=10; ?一维数组20一维数组一维数组的操作数组只是一种便于实现算法的数据结构,如何使用它解决实际问题才是实质在程序设计中常使用数组,很多算法也是建立在数组和循环之上由于数组元素具有相同的性质处理他们往往需要重复操作,因此数组操作离不开循环结构数组与循环总是联系在一起的21一维数组一维数组的操作例:在数组中查

13、找和X相同的元素的位置,如果找到打印元素的位置,如果未找到则打印信息(假定数组中的元素互不相同)。#include#define SIZE 10main()int aSIZE=1,2,35,6,39,47,53,4,5,10; int i,x; printf(“please enter a x:n”); scanf(“%d”,&x); for (i=0;i=SIZE-1;i+) if(ai = x)break; if (i SIZE) printf(“%d,poster is %dn”,x,i); else printf(“no find %d n”,x); 22一维数组一维数组的操作例:已知

14、一维数组中存放10个互不相同的整数,从键盘输入一个数,并从数组中删除与该值相同的元素中的值。#include#define SIZE 10main()int aSIZE=1,2,35,6,39,47,53,4,5,10; int i,j,x; for (i=0;iSIZE;i+) printf(“%4d”,ai); printf(“please enter a x:n”); scanf(“%d”,&x); for (i=0;iSIZE;i+) if(ai= =x)break; for (j=i;jSIZE-1;j+) aj=aj+1; for (i=0;iSIZE-1;i+) printf(“

15、%4d”;ai); printf(“n”); 说明:做删除操作时,首先要找到删除元素的位置,找到后,立即用break语句推出循环并进行删除操作,删除操作实质是把一些数组元素向前移动一位。最后一位的删除不必移位,直接输出前size-1位。23一维数组一维数组的操作例:编写程序求10个数中的最大值和最小值以及求10个数中的最大值和最小值的位置#define N 10main ( ) int aN,k,max,min; for ( k=0; kN; k+ ) /* 将N个数输入到a数组中 */ scanf(%d,&ak); max=a0; for ( k=1; kN; k+ ) /* 依次比较各数,

16、找出最大值max */ if ( maxak ) max=ak; min=a0; for ( k=1; kak ) min=ak; printf (max=%d,min=%dn,max,min); 求10个数中的最大值和最小值。把以上求最大值的程序和求最小值的程序按串行方式写入一个程序中。程序中先求最大值,然后再求最小值24一维数组一维数组的操作例:编写程序求10个数中的最大值和最小值以及求10个数中的最大值和最小值的位置#define N 10#include stdio.hmain ( ) int aN,k,max,min; for(k=0;kN;k+) /* 将N个数输入到a数组中 */

17、 scanf(%d,&ak); max=min=0; /* 假定最大值和最小值均为a0,记录它们的下标0 */ for ( k=1;kN;k+ ) /* 依次比较各数,找出最大值和最小值的下标max、min */ if(amaxak) min=k; /* 找出最小值下标min */ printf(max=a%d=%d,min=a%d=%dn,max,amax,min,amin); 在上面程序中必须增加记忆最大值下标和最小值下标的语句。即每当产生一个最大(小)值时,立即记录它的下标。若最大值下标是max,最小值下标是min,则amax就是最大值,amin就是最小值25程序设计基础(C语言)二维数

18、组二维数组二维数组的定义需要两个下标才能识别某个元素的数组称为“二维数组”二维数组可以看作具有行和列的平面数据结构如矩阵 格式说明数据类型是数组全体数组元素的数据类型数组名用标识符表示两个整型常量表达式分别代表数组具有的行数和列数数组元素的下标一律从0开始例:int array34;类型说明符 数组名常量表达式1常量表达式2;27012第0行第1行第2行 0 1 2 3第0列 第1列 第2列 第3列 数组名行下标列下标 a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 该二维数组包含三行四列,因此称为34数组。数组中的每一个元素都用aij的形式表示

19、。所以: 该例中定义了一个3*4(3行4列)的数组,我们可以将其视为一个有3个元素a0、a1、a2组成的一维数组,而a0、a1、a2又是包含4个元素的一维数组。因此,可以将a0、a1、a2分别看成是三个一维数组的名字。二维数组28二维数组二维数组的存放方式在C语言中,二维数组在内存中的存储是按行存放的a11a12a13a20a21a22a23 a00 a01a02a03a10 a a00 a01. a22 a23二维数组存储所占的内存字节数的计算公式为:数组总字节数=sizeof(type)*size1*size229二维数组二维数组的初始化形式数据类型 数组名整常量表达式 整常量表达式= 初

20、始化数据 ;在 中给出各数组元素的初值各初值之间用逗号分开把 中的初值依次赋给各数组元素初始化方式分行进行初始化例:int a23=1,2,3,4,5,6;在 内部再用 把各行分开提示初始化的数据个数不能超过数组元素的个数,否则出错30二维数组二维数组的初始化按二维数组在内存中的排列顺序初始化例:int a23= 1,2,3,4,5,6;把 中的数据依次赋给a数组各元素(按行赋值)为部分数组元素初始化例:int a23=1,2,4;省略第一维的定义,但不能省略第二维的定义系统根据初始化的数据个数和第2维的长度可以确定第一维的长度例:int a 3= 1,2,3,4,5,6;a数组的第一维的定义

21、被省略,初始化数据共6个,第二维的长度为3,即每行3个数,所以a数组的第一维是2省略第一维的定义时,第一维的大小按如下规则确定:初值个数能被第二维整除,所得的商就是第一维的大小;若不能整除,则第一维的大小为商再加1例如int a 3= 1,2,3,4;等价于:int a23= 1,2,3,4; 31二维数组二维数组的初始化提示只对部分数组元素初始化。未被初始化的数组元素将被编译系统自动清0两种初始化方法得到的初始结果是不同的int a23=5,6,7,8;5,6,07,8,0int a23=5,6,7,85,6,78,0,032二维数组二维数组的初始化例:一下能够对二维数组a进行正确初始化的语

22、句是:(A)int a2=1,0,1,2,0,2;(B)int a3=1,2,3,4,5,6;(C)int a24=1,2,3,4,5,6;(D)int a3=1,0,1, ,2,3;例:已知 int a3=0,1,2,3,4,5,6 ;则数组 的第一维的大小是多少?(A) 2 (B) 3 (C) 4 (D)无确定值33二维数组二维数组元素的引用格式 数组名下标1下标2;每个元素同一般变量一样使用例: int a24 ;a02=a13*4;例:int a23,i=1,j=2,k=0;合法引用aik,aj-1i,a1j+k aik=ai-1j+a1j;错误引用a23下标越界a32,行下标越界a1

23、,0 a(1)(2) C语言不进行数组的越界检查,在引用时不要使数组越界34二维数组二维数组的操作可以采用循环(嵌套)结构实现对二维数组的操作例从键盘依次为数组元素输入数据计算数组a24的所有元素之和的操作将数组a24的第二行的所有元素初始化值为0的操作for(i=0;i2;i+) for(j=0;i3;i+) scanf(%d,&aij); total=0; for (row=0;row=1;row+) for (column=0;column=3;column+) total+=arowcolumn; for(column=0;column=3;column+) a1column=0;35

24、二维数组【例】:阅读下列程序,选择程序的运行结果。 int m33=1,2,3; int n33=1,2,3; main() printf(”%dn”,m10+n00);/*1.结果*/ printf(”%dn”,m01+n10);/*2.结果*/ 1.结果:A)0 B)1 C)2 D)32.结果:A)0 B)1 C)2 D)336【例】:阅读下列程序,选择程序的运行结果。 main() int a66,m,n; for(m=1;m6;m+) for(n=1;n6;n+) amn=(m/n)*(n/m); for(m=1;m6;m+) for(n=1;n6;n+) printf(”%2d”,a

25、mn); printf(”n”); A)1111111111111111111111111B)0000100010001000100010000C)1000001000001000001000001D)1000101010001000101010001二维数组37二维数组应用例 将一个二维数组的每个元素按逆序存放在另一个数组中main() int a23=1,2,3,4,5,6; int b23; int i,j; printf(array a:n); for(i=0;i2;i+) for(j=0;j3;j+) printf(%4d,aij); bi2-j=aij; printf(n); pr

26、intf(array b:n); for(i=0;i2;i+) for (j=0;j3;j+) printf(%4d,bij); printf(n); 关系: bi2-j=aij 38二维数组应用例:求出一个二维数组的两条对角线上的元素之和 #include”stdio0.h” main() int a33=1,3,7,13,19,27,37,49,63; int sum1=0,sum2=0,m,n; for(m=0;m3;m+) for(n=0;n3;n+) if(m=n) sum1=sum1+amn; for(m=0;m=0;n-) if(m+n=2) sum2=sum2+amn; pri

27、ntf(“sum1=%d,sum2=%dn”,sum1,sum2); 39二维数组应用例:根据用户输入的年份和月份,输出这个月的天数分析要考虑平年和闰年的二月份的天数是不一样的程序中采用一个二维数组来存放平年和闰年的各个月份的天数#include main() int days212=31,28,31,30,31,30,31,31,30,31,30,31, 31,29,31,30,31,30,31,31,30,31,30,31 ; int year,month; int leap ;40二维数组应用 printf(“enter a year:n”); scanf(“%d” ,&year); p

28、rintf(“enter a month:n”); scanf(“%d” ,&month); if (month=1&month=12) if (year%4= =0&year%100!= 0)| (year%400=0) leap=1; else leap=0; i=daysleapmonth-1 ; printf(“%dyear%dmonth%ddays” ,year,month,i); else printf(“enter error month!n”); 演示 66.c41小测试1. 以下对一维数组a的正确说明是。A、char a(10);B、int a ; C、int k=5,ak;

29、 D、char a =a , b , c; 2. 若有说明语句:int y 4=0,0; 则下面叙述不正确的是。A、数组y的每个元素都可得初值0B、二维数组y的行数为1C、该说明等价于int y 4=0;D、只有元素y00和y01可得到初值0,其余元素均得不到初值0 42小结提示“数组的第1个元素”和“下标为1的元素”之间的区别数组在编译时占用内存空间,要指定空间长度下标是一个整数或整数表达式在使用循环访问数组时,数组下标应该不小于0并且小于数组元素的个数初始化数据列表的数据个数可以少于数组元素个数常见错误缺少对数组元素的初始化声明时进行初始化的数据列表 的数据个数多于数组元素的个数越界访问数

30、组元素43程序设计基础(C语言)字符数组与字符串 基本概念字符数组定义当数组元素为字符类型时,被称之为字符型数组具有一般数组的性质定义的格式char str10 ; /*含有10个字符的一维字符型数组*/ char stree310 ;/*含有3*10个字符的二维字符型数组*/也可以将其看成3行并且每行各含有10个字符的一维字符数组45基本概念字符数组字符数组的引用同数值型数组在用法上一样字符数组中的一个元素位置存放一个字符用赋值语句为其赋值时应该是单个字符例:int str10 ; str0=A;str1= ;str2=n; str3=e;str4=w;str5= ; str6=y;str7

31、=e;str8=a; str9=r;str A n e w y e a rstr开辟的连续存储单元中存放的是: A new year。(一串字符)46例如: char name4; main() name0=c;name1=+; name2=+;name3=0; 此程序段建立了一个四个元素的字符型数组。基本概念字符数组字符串串就是一组字符C语言没有提供内部串的类型串是由字符数组创建的实际上字符串就是带有若干限制的字符型数组其中一个限制条件是用0(NULL)来表示串的结束str A n e w y e a r0字符串47基本概念字符数组双重性可被认为是一个表示若干个字符的字符类型的数组可被认为是

32、一个字符串类型变量(如果一串字符的最后一个字符是一个0字符 )提示字符型数组作为字符串形式处理时,无需使用下标实际上是将数组以指针的方式进行处理当使用下标时,实际上使用的是字符串中某一位置上的字符,而不是整个字符串字符型数组也不能整体赋值操作不允许一个数组赋给另一个数组48基本概念字符数组赋值和引用方法将其元素作为字符型采用一般数组的处理方式, 赋值、引用或初始化以字符串形式进行赋值、引用或初始化char message 6=“hello”;或 char message = “hello” ;char message=h,e,l,l,o; 不是字符串;char message=h,e,l,l,

33、o,0; 是字符串;49基本概念字符数组赋值和引用方法区别字符常量char message5= h ,e , l , l ,o;存放方式:字符串常量char message =“hello”;存放方式 h e l l o 0char message=h ,e , l , l ,o ,0;h e l l o50基本概念存放方式: t h i s i k ! 0 P . C H I N A 0 0 0 J A P A N 0 0 0 0 0 C A N A D A 0 0 0 0 存放方式: char str16=“This is a book!”;或省略 ,直接写成: char str16= “

34、This is a book!” ; char str1310=“P.CHINA”,“JAPAN”,“CANADA”; 51基本概念字符数组提示两种方式实现对字符数组的部分元素的初始化(赋初值)可省略一维数组的维长度和二维数组的第一维长度(与数值型相同)当用字符串常量赋初值时,系统自动加上“0”字符字符数组的维长度要比实际字符长度多1个字符数组存放字符串时,应该事先估计出来实际字符串的长度保证数组的长度始终大于字符串的实际长度如果在一个数组中先后存放多个长度不同的字符串,数组长度的定义应大于最长字符串的长度如果字符串的长度大于存储它的字符数组的长度,由于C语言不提供越界检查。超出字符数组长度的

35、部分就会将内存中字符数组后面的数据覆盖掉赋初值时,初值个数要少于数组的维长度,否则进行系统编译时越界例如:char str23=“this” ,“is” ,“a” ,“book”;52基本概念【例1】下面有关字符数组和字符串说法正确的是: A)字符数组中存放的一定是一个字符串。 B)所有的字符数组都可以被当作字符串处理。 C)对存放字符串的字符数组可以像一般数组一样对数组中 的单个元素进行操作。 D)一个字符数组可以认为就是一个字符串。【例2】合法的数组说明语句是 。int a=“string”; int a5=0,1,2,3,4,5;char a=“string”;char a=0,1,2,

36、3,4,5; 在 C语言中,字符变量中存放的是与字符对应的ASCII码。数值 0,1,2,3,4,5 所对应的ASCII字符虽然是不可显示的字符,但是这些都可以作为控制字符。53【例3】若有以下语句,则正确的描述是 。 char x =“12345”; char y =1,2,3,4,5;X数组和y数组的长度相同X数组长度大于y数组长度X数组长度小于y数组长度X数组等价与y数组【例4】阅读下面的程序给出执行结果。 main() int i=0; char a33=1,2,3,4,5,6,7,8,9; for (i=0;i3;i+) printf(“%d”,ai1); A)50,53,56 B)

37、49,52,55 C)2,5,8 D)1,4,7基本概念54字符数组输入/输出输入采用%c格式符,逐个输入所有字符main() int i,string15 ; for (i=0;i15;i+) scanf(“%c” ,&stringi); printf(“%c” , stringi ); 演示7C3.C55字符数组输入/输出输入采用%s格式符,输入字符串整体将字符数组作为字符串变量处理例scanf(“%s” ,string);说明该函数向数组string中输入一个字符串数组名在数组中代表着首地址,所以scanf函数中的变量地址表中的输入变量只需写数组名string不能写成: scanf(“%

38、s” ,&string)为什么?scanf(“%c” ,&stringi)针对的是某一变量元素的地址,取一字符串中一个元素的地址 scanf(“%s” ,string)是要读入一串字符,数组名即是首地址56字符数组输入/输出输入采用%s格式符,输入字符串整体例此时假设数据输入的是: this is a book则数组中的存储格式为:例: main() int i; char string15 ; scanf(“%s” ,string); t h i s 0为什么?57字符数组输入/输出输入采用%s格式符,输入字符串整体如何解决scanf()函数不能完整输入全部字符(包括空格)的问题?C语言提供

39、一个专门读入字符串的函数getsgets (string)其功能是从控制台读取一个字符串该函数可以读入包括空格在内的所有字符,直到遇到回车符作为结束标志,函数的值为字符串上例可写成此时输入This is a book在内存中的存放格式为: main() int i; char string15 ; gets(string); T h i s i s a b o o k 0 58字符数组输入/输出输出使用函数puts输出字符串puts()格式 puts(字符串名)或 puts(字符串常量)main() int i=0; char ch,text80; puts(“Enter a line of

40、text:”); while (ch=getchar()!=n) texti+=ch; texti=0;/*在字符串的最后加入一个NULL字符*/ puts(“nThe line ertered was:”); puts(text); 演示7C6。C59字符串运算函数C语言支持多串函数的操作最常用的包括 strcpy(s1, s2)将s2拷贝到 s1 strcat(s1, s2)将s2连接到 s1的尾部 strlen (s1) 返回s1的长度(不包括0) strcmp(s1,s2) 若s1与s2相等,返回值为0 若s1s2,返回值大于060字符串运算函数C语言支持多串函数的操作提示字符串处理函

41、数的说明定义在头文件中处理字符串时最好的方式是使用指针对字符串变量(字符数组)不能采用直接赋值的方法赋值,必须使用strcpy()函数来处理strcpy在拷贝时连同0一起拷贝两个字符串(数组)不能使用逻辑运算直接比较大小,必须使用strcmp()函数str=“abcd” 非法strcpy(str, “abcd”)合法if (str1str2)printf(“true!”);非法if (strcmp( str1,str2 )= =1) printf(“true!”); 合法61字符串运算函数字符串应用编写一个比较两个字符串大小的程序分析字符串的比较规则是按两个字符串自左至右逐个字符比较(按其AS

42、CII码值大小比较),直到出现不同的字符或遇到0为止若所有的字符全部相同,则两个字符串相等否则按第一个不同字符的比较结果处理#include main() int i,c; char s120, s220; printf(First string:); gets(s1); printf(Second string:); gets(s2); i=0;62 while(s1i!=0&s2i!=0) if (s1is2i) c=1; break; else if(s1is2i) c=-1; break; else i=i+1; 字符串运算函数63 if (s1i!=0&s2i=0) c=1; if

43、(s1i=0&s2i!=0) c=-1; if (s1i=0&s2i=0) c=0; if (c=0) printf(%s=%sn,s1,s2); else if(c=-1) printf(%s%sn,s1,s2); 字符串运算函数64字符串数组字符串数组定义就是说数组的每一个元素均是一个字符串 C语言中,常用二维字符数组的形式建立字符串数组数组的第一个下标(左下标)决定字符串的个数第二个下标(右下标)说明每个串的最大长度例如: char str_array3080;说明定义了一个可以存放30个字符串的字符串数组,每个串的最大长度为80个字符提示在 C语言中,一维字符数组的最普遍的用法是作为字符串使用数组处理字符串的另一种常见的形式是字符串数组65字符串数组字符串数组引用访问字符串数组中一个单独的字符串只需要标明左下标即可例如gets(str_array0);数组 str_array中的第一个字符串为参数调用函数gets()实际上是将 str_array0作为指针处理的它指向字符数组元素str_array00的地址上述语句等价于gets(&str_array00);提示定义字符串数组时,数组的第二个下标应比实际字符串长度大1,以存放字符

温馨提示

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

评论

0/150

提交评论