程序设计基础(C语言).ppt
程序设计基础(C语言),程序设计基础(C语言),数组概念,3,基本概念,问题的提出?,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,从大到小排序输出?,利用数组可以进行数据的排序,4,基本概念,问题的提出?,用变量来解决:#include main()float cj1,cj2,cj3,cj10;/*定义10个变量*/float pj;scanf(“%f”,例2:计算10个同学的成绩:计算平均成绩、打印低于平均成绩的同学成绩,如果增加1000个成绩?,5,基本概念,问题的提出?,用数组来解决:#include main()float cj10;/*定义一个实型数组存放10个成绩*/float pj;int i;for(i=0;i10;i+)/*输入10个数据*/scanf(%f,例2:计算10个同学的成绩:计算平均成绩、打印低于平均成绩的同学成绩,6,基本概念,问题的提出?用数组解决此类问题在程序设计中,数组是十分有用的数据类型循环中使用数组能更好地发挥循环的作用例2:采用数组和循环相结合,循环变量的值改变某些问题不使用数组就难以解决例1:优点程序简洁、思路清楚明了书写简洁,通用性强,7,基本概念,什么是数组?是一组具有固定数目的、有序的、类型相同的数据的集合是同类型有序数据的集合可以为该数据集合起一个名字,称为数组名该数据集合中的各数据项称为数组元素,用数组名和下标表示 根据数组下标的多少,数组可以分为一维数组和多维数组一维只有一个下标,例如:cj10二维有两个下标,例如:grade34,8,基本概念,什么是数组?一个数组就是一组连续的内存空间,用来保存数据,数组中的每一项称为一个元素C语言数组的特点数组的个数必须确定不允许变动,但数组元素的值可以改变数组元素的类型必须是相同的不允许混合的,9,基本概念,什么是数组?使用下标的优点?下标唯一确定了元素在数组中的位置(或者说是排列顺序)采用数组名+下标 可以准确访问到数组中的每一个元素提示C语言是一个有趣的语言,它从0开始计数,而不是从1开始,所以例题中10个元素的编号是从0到9,程序设计基础(C语言),一维数组,11,一维数组,一维数组的定义格式:类型说明符 数组名常量表达式;说明:数据类型是数组全体数组元素的数据类型数组名用标识符表示符合表示服的命名规则整型常量表达式代表数组具有的数组元素个数必须是正的整型常量表达式,不能出现变量或非整型值提示编译程序为数组开辟连续的存储单元,用来顺序存放数组的各数组元素用数组名表示该数组存储区的首地址数组元素的下标一律从0开始一维数组元素按顺序存放,其所占字节数的计算公式:数组所占总字节数=sizeof(type)*size,12,一维数组,一维数组的定义 int a5,b5;float c10;说明:定义了整型数组a和 b以及实型数组ca和 b的 数组元素的类型都是intc的 数组元素的类型都是floata数组有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型下标变量的集合,13,一维数组,一维数组的定义正确的定义方式#define N 5 int aN;/*N是符号常量,其值为5*/int b2+3;/*2+3是常量表达式,其值为5*/int c10;错误的数组定义int aj;/*j不是常量*/int x=10,bx;/*?*/int M(4);/*不能用圆括号定义数组*/int n1.0;/*?*/,14,一维数组,一维数组初始化格式说明可在 中给出各数组元素的初值各初值之间用逗号分开把 中的初值依次赋给各数组元素,数据类型 数组名整型常量表达式=初值1,初值2,;,15,一维数组初始化例int num 4=1,2,3,4;表示把初值1,2,3,4依次赋给num 0,num1,num2,num 3相当于执行如下语句int num 4;num 0=1;num 1=2;num 2=3;num 3=4;提示初始化的数据个数不能超过数组元素的个数,否则出错例如:int a4=1,2,3,4,5;是错误的,一维数组,16,一维数组,一维数组初始化对数组的部分元素赋初值例int num5=1,2,3;,该语句执行:num0=1;num1=2;num2=3;num3=0;num4=0;,17,一维数组,一维数组初始化提示初始化的数据个数不能超过数组元素的个数,可以少于数组元素的个数 数组的元素不能自动初始化采用语句 int cj10=0;将数组cj的元素初始化为0若数组元素的个数定义省略,则系统根据初值的个数来确定数组元素的个数例如:int a3=1,2,3;数组有3个数组元素:a0=1,a1=2,a2=3若省略数组元素个数的定义,则初值必须完全给出C 语言编译系统将自动根据初始化数据的个数来确定数组的长度,18,一维数组,数组的引用数组引用两种形式对整个数组的引用只给出数组名即可对数组元素的引用需要给出数组名下标的形式形式:数组名 下标表达式 例如 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,表示依次为a数组的5个元素输入数据,19,一维数组,数组的引用提示定义时整型常量表达式与引用时的数组元素的下标表达式是完全不同的概念数组定义:int a5;整型常量表达式5表示a数组有5个数组元素数组元素的引用a2=a1+a5;下标表达式2和1均表示数组元素的下标a5是错误的数组元素引用,因为下标从0开始,所以数组元素的下标小于5,下标已经越界系统不检查数组元素下标是否越界只能由编程者自己掌握下标越界会破坏其它变量的值编程时一定要保证数组元素下标不越界,20,问题1:int a2;scanf(“%d%d”,?,错误:在C语言中数组元素的下标由 0开始,一个数组的下标的合法范围在0n-1,因此该题正确的写法是:int a2;scanf(“%d%d”,&a0,&a1);,错误:数组元素是通过数组名下标来访问的,其中下标必须是大于0的整数、整型变量或整型表达式,在这段程序中,i是浮点数,不能做数组元素的下标。,问题2:int a10;float i=3;ai=10;?,一维数组,21,一维数组,一维数组的操作数组只是一种便于实现算法的数据结构,如何使用它解决实际问题才是实质在程序设计中常使用数组,很多算法也是建立在数组和循环之上由于数组元素具有相同的性质处理他们往往需要重复操作,因此数组操作离不开循环结构数组与循环总是联系在一起的,22,一维数组,一维数组的操作,例:在数组中查找和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);,23,一维数组,一维数组的操作,例:已知一维数组中存放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”,i+)printf(“%4d”;ai);printf(“n”);,说明:做删除操作时,首先要找到删除元素的位置,找到后,立即用break语句推出循环并进行删除操作,删除操作实质是把一些数组元素向前移动一位。最后一位的删除不必移位,直接输出前size-1位。,24,一维数组,一维数组的操作,例:编写程序求10个数中的最大值和最小值以及求10个数中的最大值和最小值的位置,#define N 10main()int aN,k,max,min;for(k=0;kak)min=ak;printf(max=%d,min=%dn,max,min);,求10个数中的最大值和最小值。把以上求最大值的程序和求最小值的程序按串行方式写入一个程序中。程序中先求最大值,然后再求最小值,25,一维数组,一维数组的操作,例:编写程序求10个数中的最大值和最小值以及求10个数中的最大值和最小值的位置,#define N 10#include stdio.hmain()int aN,k,max,min;for(k=0;kak)min=k;/*找出最小值下标min*/printf(max=a%d=%d,min=a%d=%dn,max,amax,min,amin);,在上面程序中必须增加记忆最大值下标和最小值下标的语句。即每当产生一个最大(小)值时,立即记录它的下标。若最大值下标是max,最小值下标是min,则amax就是最大值,amin就是最小值,程序设计基础(C语言),二维数组,27,二维数组,二维数组的定义需要两个下标才能识别某个元素的数组称为“二维数组”二维数组可以看作具有行和列的平面数据结构如矩阵 格式说明数据类型是数组全体数组元素的数据类型数组名用标识符表示两个整型常量表达式分别代表数组具有的行数和列数数组元素的下标一律从0开始例:int array34;,类型说明符 数组名常量表达式1常量表达式2;,28,数组名,行下标,列下标,数组中的每一个元素都用aij的形式表示。,所以:该例中定义了一个3*4(3行4列)的数组,我们可以将其视为一个有3个元素a0、a1、a2组成的一维数组,而a0、a1、a2又是包含4个元素的一维数组。因此,可以将a0、a1、a2分别看成是三个一维数组的名字。,二维数组,29,二维数组,二维数组的存放方式在C语言中,二维数组在内存中的存储是按行存放的,a11,a12,a13,a20,a21,a22,a23,a00,a01,a02,a03,a10,a,二维数组存储所占的内存字节数的计算公式为:数组总字节数=sizeof(type)*size1*size2,30,二维数组,二维数组的初始化形式数据类型 数组名整常量表达式 整常量表达式=初始化数据;在 中给出各数组元素的初值各初值之间用逗号分开把 中的初值依次赋给各数组元素初始化方式分行进行初始化例:int a23=1,2,3,4,5,6;在 内部再用 把各行分开提示初始化的数据个数不能超过数组元素的个数,否则出错,31,二维数组,二维数组的初始化按二维数组在内存中的排列顺序初始化例: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数组的第一维的定义被省略,初始化数据共6个,第二维的长度为3,即每行3个数,所以a数组的第一维是2省略第一维的定义时,第一维的大小按如下规则确定:初值个数能被第二维整除,所得的商就是第一维的大小;若不能整除,则第一维的大小为商再加1例如int a 3=1,2,3,4;等价于:int a23=1,2,3,4;,32,二维数组,二维数组的初始化提示只对部分数组元素初始化。未被初始化的数组元素将被编译系统自动清0两种初始化方法得到的初始结果是不同的,int a23=5,6,7,8;,5,6,07,8,0,int a23=5,6,7,8,5,6,78,0,0,33,二维数组,二维数组的初始化,例:一下能够对二维数组a进行正确初始化的语句是:(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)无确定值,34,二维数组,二维数组元素的引用格式 数组名下标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,0 a(1)(2)C语言不进行数组的越界检查,在引用时不要使数组越界,35,二维数组,二维数组的操作可以采用循环(嵌套)结构实现对二维数组的操作例从键盘依次为数组元素输入数据计算数组a24的所有元素之和的操作将数组a24的第二行的所有元素初始化值为0的操作,for(i=0;i2;i+)for(j=0;i3;i+)scanf(%d,total=0;for(row=0;row=1;row+)for(column=0;column=3;column+)total+=arowcolumn;,for(column=0;column=3;column+)a1column=0;,36,二维数组,【例】:阅读下列程序,选择程序的运行结果。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)3,37,【例】:阅读下列程序,选择程序的运行结果。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”,amn);printf(”n”);,A)1111111111111111111111111B)0000100010001000100010000,C)1000001000001000001000001D)1000101010001000101010001,二维数组,38,二维数组,应用例 将一个二维数组的每个元素按逆序存放在另一个数组中,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);printf(array b:n);for(i=0;i2;i+)for(j=0;j3;j+)printf(%4d,bij);printf(n);,39,二维数组,应用例:求出一个二维数组的两条对角线上的元素之和,#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;m=0;n-)if(m+n=2)sum2=sum2+amn;printf(“sum1=%d,sum2=%dn”,sum1,sum2);,40,二维数组,应用例:根据用户输入的年份和月份,输出这个月的天数分析要考虑平年和闰年的二月份的天数是不一样的程序中采用一个二维数组来存放平年和闰年的各个月份的天数,#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;,41,二维数组,应用,printf(“enter a year:n”);scanf(“%d”,演示 66.c,42,小测试,1.以下对一维数组a的正确说明是。A、char a(10);B、int a;C、int k=5,ak;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,43,小结,提示“数组的第1个元素”和“下标为1的元素”之间的区别数组在编译时占用内存空间,要指定空间长度下标是一个整数或整数表达式在使用循环访问数组时,数组下标应该不小于0并且小于数组元素的个数初始化数据列表的数据个数可以少于数组元素个数常见错误缺少对数组元素的初始化声明时进行初始化的数据列表 的数据个数多于数组元素的个数越界访问数组元素,程序设计基础(C语言),字符数组与字符串,45,基本概念,字符数组定义当数组元素为字符类型时,被称之为字符型数组具有一般数组的性质定义的格式char str10;/*含有10个字符的一维字符型数组*/char stree310;/*含有3*10个字符的二维字符型数组*/也可以将其看成3行并且每行各含有10个字符的一维字符数组,46,基本概念,字符数组字符数组的引用同数值型数组在用法上一样字符数组中的一个元素位置存放一个字符用赋值语句为其赋值时应该是单个字符,例:int str10;str0=A;str1=;str2=n;str3=e;str4=w;str5=;str6=y;str7=e;str8=a;str9=r;,A n e w y e a r,str开辟的连续存储单元中存放的是:A new year。(一串字符),47,例如:char name4;main()name0=c;name1=+;name2=+;name3=0;此程序段建立了一个四个元素的字符型数组。,基本概念,字符数组字符串串就是一组字符C语言没有提供内部串的类型串是由字符数组创建的实际上字符串就是带有若干限制的字符型数组其中一个限制条件是用0(NULL)来表示串的结束,A n e w y e a r0,字符串,48,基本概念,字符数组双重性可被认为是一个表示若干个字符的字符类型的数组可被认为是一个字符串类型变量(如果一串字符的最后一个字符是一个0字符)提示字符型数组作为字符串形式处理时,无需使用下标实际上是将数组以指针的方式进行处理当使用下标时,实际上使用的是字符串中某一位置上的字符,而不是整个字符串字符型数组也不能整体赋值操作不允许一个数组赋给另一个数组,49,基本概念,字符数组赋值和引用方法将其元素作为字符型采用一般数组的处理方式,赋值、引用或初始化以字符串形式进行赋值、引用或初始化,char message 6=“hello”;或 char message=“hello”;,char message=h,e,l,l,o;不是字符串;char message=h,e,l,l,o,0;是字符串;,50,基本概念,字符数组赋值和引用方法区别字符常量char message5=h,e,l,l,o;存放方式:字符串常量char message=“hello”;存放方式,char message=h,e,l,l,o,0;,51,基本概念,存放方式:,存放方式:,char str16=“This is a book!”;或省略,直接写成:char str16=“This is a book!”;char str1310=“P.CHINA”,“JAPAN”,“CANADA”;,52,基本概念,字符数组提示两种方式实现对字符数组的部分元素的初始化(赋初值)可省略一维数组的维长度和二维数组的第一维长度(与数值型相同)当用字符串常量赋初值时,系统自动加上“0”字符字符数组的维长度要比实际字符长度多1个字符数组存放字符串时,应该事先估计出来实际字符串的长度保证数组的长度始终大于字符串的实际长度如果在一个数组中先后存放多个长度不同的字符串,数组长度的定义应大于最长字符串的长度如果字符串的长度大于存储它的字符数组的长度,由于C语言不提供越界检查。超出字符数组长度的部分就会将内存中字符数组后面的数据覆盖掉赋初值时,初值个数要少于数组的维长度,否则进行系统编译时越界例如:char str23=“this”,“is”,“a”,“book”;,53,基本概念,【例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,3,4,5;,在 C语言中,字符变量中存放的是与字符对应的ASCII码。数值 0,1,2,3,4,5 所对应的ASCII字符虽然是不可显示的字符,但是这些都可以作为控制字符。,54,【例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)49,52,55 C)2,5,8 D)1,4,7,基本概念,55,字符数组输入/输出,输入采用%c格式符,逐个输入所有字符,main()int i,string15;for(i=0;i15;i+)scanf(“%c”,&stringi);printf(“%c”,stringi);演示7C3.C,56,字符数组输入/输出,输入采用%s格式符,输入字符串整体将字符数组作为字符串变量处理例scanf(“%s”,string);说明该函数向数组string中输入一个字符串数组名在数组中代表着首地址,所以scanf函数中的变量地址表中的输入变量只需写数组名string不能写成:scanf(“%s”,&string)为什么?scanf(“%c”,&stringi)针对的是某一变量元素的地址,取一字符串中一个元素的地址 scanf(“%s”,string)是要读入一串字符,数组名即是首地址,57,字符数组输入/输出,输入采用%s格式符,输入字符串整体例此时假设数据输入的是:this is a book则数组中的存储格式为:,例:main()int i;char string15;scanf(“%s”,string);,为什么?,58,字符数组输入/输出,输入采用%s格式符,输入字符串整体如何解决scanf()函数不能完整输入全部字符(包括空格)的问题?C语言提供一个专门读入字符串的函数getsgets(string)其功能是从控制台读取一个字符串该函数可以读入包括空格在内的所有字符,直到遇到回车符作为结束标志,函数的值为字符串上例可写成此时输入This is a book在内存中的存放格式为:,main()int i;char string15;gets(string);,59,字符数组输入/输出,输出使用函数puts输出字符串puts()格式 puts(字符串名)或 puts(字符串常量),main()int i=0;char ch,text80;puts(“Enter a line of text:”);while(ch=getchar()!=n)texti+=ch;texti=0;/*在字符串的最后加入一个NULL字符*/puts(“nThe line ertered was:”);puts(text);演示7C6。C,60,字符串运算函数,C语言支持多串函数的操作最常用的包括 strcpy(s1,s2)将s2拷贝到 s1 strcat(s1,s2)将s2连接到 s1的尾部 strlen(s1)返回s1的长度(不包括0)strcmp(s1,s2)若s1与s2相等,返回值为0 若s1s2,返回值大于0,61,字符串运算函数,C语言支持多串函数的操作提示字符串处理函数的说明定义在头文件中处理字符串时最好的方式是使用指针对字符串变量(字符数组)不能采用直接赋值的方法赋值,必须使用strcpy()函数来处理strcpy在拷贝时连同0一起拷贝两个字符串(数组)不能使用逻辑运算直接比较大小,必须使用strcmp()函数,str=“abcd”非法strcpy(str,“abcd”)合法,if(str1str2)printf(“true!”);非法if(strcmp(str1,str2)=1)printf(“true!”);合法,62,字符串运算函数,字符串应用编写一个比较两个字符串大小的程序分析字符串的比较规则是按两个字符串自左至右逐个字符比较(按其ASCII码值大小比较),直到出现不同的字符或遇到0为止若所有的字符全部相同,则两个字符串相等否则按第一个不同字符的比较结果处理,#include main()int i,c;char s120,s220;printf(First string:);gets(s1);printf(Second string:);gets(s2);i=0;,63,while(s1i!=0,字符串运算函数,64,if(s1i!=0,字符串运算函数,65,字符串数组,字符串数组定义就是说数组的每一个元素均是一个字符串 C语言中,常用二维字符数组的形式建立字符串数组数组的第一个下标(左下标)决定字符串的个数第二个下标(右下标)说明每个串的最大长度例如:char str_array3080;说明定义了一个可以存放30个字符串的字符串数组,每个串的最大长度为80个字符提示在 C语言中,一维字符数组的最普遍的用法是作为字符串使用数组处理字符串的另一种常见的形式是字符串数组,66,字符串数组,字符串数组引用访问字符串数组中一个单独的字符串只需要标明左下标即可例如gets(str_array0);数组 str_array中的第一个字符串为参数调用函数gets()实际上是将 str_array0作为指针处理的它指向字符数组元素str_array00的地址上述语句等价于gets(&str_array00);提示定义字符串数组时,数组的第二个下标应比实际字符串长度大1,以存放字符串的结束标志0,67,#include#define MAX 100#define LEN 80 char text MAXLEN;main()register int t,i,j;for(t=0;tMAX;t+)/*逐行输入字符串*/printf(“%d:”,t);gets(textt);if(!textt0)break;/*空行退出*/for(i=0;it;i+)for(j=0;textij;j+)putchar(textij);putchar(n);,该程序输入文本行直至遇到一个空行为止,而后每次一个字符地重新显示各行.,字符串数组,字符串数组引用例:以一个字符串数组为基础做简单的文本编辑处理,68,字符串应用,编程:将字符串S中所有的字符C删除,#includemain()int i,j;char s80;gets(s);for(i=j=0;si!=0;i+)if(si!=c)sj+=si;sj=0;puts(s);演示7CC。C,69,#include main()char prompt30=“What is yourpassword?:”;char password10;printf(“%sn”,prompt);gets(password);if(strcmp(password,“000”)=0)printf(“password is:%sn”,password);printf(“ok!n”);else printf(“password is:%sn”,password);printf(“Invalid password!”);,字符串应用,字符数组在人机交互系统中的应用。程序运行时要求用户输入口令并验证,若输入口令为“000”,则显示字符串“OK!”否则显示“Invalid password”,70,#include#include main()char s20,str320;int i;for(i=0;i3;i+)gets(stri);strcpy(s,(strcmp(str0,str1)0?str0:str1);if(strcmp(str2,s)0)strcpy(s,str2);printf(“%sn”,s);,字符串应用,编程:实现在三个字符串中找出最小的串,71,小测试,1.以下正确的数组定义语句是A、char a5=1,2,3,4,5,0;B、int b2=1,2;C、float c 3=1,2,3,4,5;D、char d5=CHINA;,2.判断字符串str1是否大于字符串str2,应当使用A、if(str1str2)B、if(strcmp(str1,str2)C、if(strcmp(str2,str1)0)D、if(strcmp(str1,str2)0),3.若有语句:char s110,s210=“books”,则能将字符串books赋给数组s1的正确语句是A、s1=books;B、strcpy(s1,s2);C、s1=s2;D、strcpy(s2,s1);,72,小测试,4.下面程序中有错误的行是1、main()2、3、int x3=1;4、int k;5、scanf(%d,9、A、3 B、6 C、7 D、5,73,小测试,5.下面程序的功能是输出两个字符串中较短串的长度。请填空。#include main()char str120,str220;int i,k,num;gets(str1);gets(str2);i=strlen(str1);k=strlen(str2);num=?:;printf(%dn,num);,