c语言大学实用教程-第6章-数组-新课件

PPT
  • 阅读 33 次
  • 下载 0 次
  • 页数 89 页
  • 大小 1.387 MB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
c语言大学实用教程-第6章-数组-新课件
可在后台配置第一页与第二页中间广告代码
c语言大学实用教程-第6章-数组-新课件
可在后台配置第二页与第三页中间广告代码
c语言大学实用教程-第6章-数组-新课件
可在后台配置第三页与第四页中间广告代码
c语言大学实用教程-第6章-数组-新课件
c语言大学实用教程-第6章-数组-新课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 89
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】c语言大学实用教程-第6章-数组-新课件.ppt,共(89)页,1.387 MB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44548.html

以下为本文档部分文字说明:

第6章数组2022/11/242如何计算一个班级学生的平均分数??如何记录直线上的整数点?比如(0,0)、(1、1)、(2、2)、(3、3)、(4、4)、(5、5)。。。数组2022/11/243问

题:给一组数排序,这组数该如何存放呢???这些数据如何存放才便于排序82945637617188888888881111111111111118888888888这便是本章所要解决的问题第6章数组数组2022/11/244内容提要数组类型;向

函数传递一维数组和二维数组;常用算法:排序、查找、求最大最小值等;用字符数组存取字符串;使用字符串处理函数处理字符串2022/11/245数组的用处保存大量同类型的相关数据–如矩阵运算,表格数据等构造数据类型之一数组:有序数据的集合,用数组名标识元素:属同一数据类型,用

数组名和下标确定2022/11/246§6.1一维数组一维数组的定义:数据类型数组名[常量或常量表达式];合法标识符表示元素个数下标从0开始例inta[6];编译时分配连续内存内存字节数=数组定义的元素个数*sizeof(元素数据类型

)数组名表示内存首地址,是地址常量a014523a[0]0145a[1]a[2]a[3]a[4]a[5]23a2022/11/247一维数组的引用数组必须先定义,后使用只能逐个引用数组元素,不能一次引用整个数组数组元素表示

形式:数组名[下标]其中:下标可以是整型常量或整型表达式以0开始,到n-1结束例inta[10];printf(“%d”,a);()必须for(j=0;j<10;j++)printf(“%d\t”,a[j]);(

)例intdata[5];data[5]=10;//C语言对数组不作越界检查,使用时要注意下标越界是大忌!使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,可能带来严重后果2022/11/248数组的定义与初始化数组

定义后的初值仍然是随机数,一般需要我们来初始化inta[5]={12,34,56,78,9};inta[5]={0};inta[]={11,22,33,44,55};数组大小最好用宏来定义,以适应未来可能的变化–

#defineSIZE10inta[SIZE];数组大小定义好后,将永远不变2022/11/249一维数组的初始化初始化方式在定义数组时,为数组元素赋初值(在编译阶段使之得到初值)inta[5]={1,2,3,4,5};等价于:a[0]=1;a[1]=2;a[2]=3;a[3]=4;

a[4]=5;说明:数组不初始化,其元素值为随机数对static数组元素不赋初值,系统会自动赋以0值当全部数组元素赋初值时,可不指定数组长度如inta[5]={6,2,3};等价于:a[0]=6;a[

1]=2;a[2]=3;a[3]=0;a[4]=0;如inta[3]={6,2,3,5,1};()staticinta[5];等价于:a[0]=0;a[1]=0;a[2]=0;a[3]=0;a[4]=0;只给部分数组元素赋初值inta

[]={1,2,3,4,5,6};编译系统根据初值个数确定数组元素个数2022/11/2410①floata[0];/*数组大小为0没有意义*/②intb(2)(3);/*不能使用圆括号*/③intk,a[k];/*不能用变量说明数组大小*/

数组说明中其他常见的错误2022/11/2411数组的特点快速地随机访问一旦定义,不能改变大小2022/11/2412只能逐个对数组元素进行操作(字符数组例外)输入方法:inta[10],i;输入第i个数组元素:

scanf("%d",&a[i]);输入整个数组元素:for(i=0;i<10;i++)scanf("%d",&a[i]);输出方法:输出第i个数组元素:printf("%d",a[i]);输出整个数组元素:for(i=0;i<10;i++)printf("%d",a[i]);一维数组的

输入和输出2022/11/2413程序举例例将10个整数存入数组,并打印输出。#include<stdio.h>#defineSIZE10main(){intx[SIZE]={0,1,2,3,4,5,6,7,8,9};inti;for(i=0;i<S

IZE;i++)printf("%d",x[i]);}#include<stdio.h>#defineSIZE10main(){intx[SIZE],i;printf("Enter10integers:\n");for(i=0;i<SIZE;i++)scanf("%d",&x[i]);for

(i=1;i<SIZE;i++)printf("%d",x[i]);}2022/11/2414程序举例例读10个整数存入数组,找出其中最大值和最小值步骤:1.输入:for循环输入10个整数2.处理:(a)先令max=min=x[0](b)依次用x[i]和max

,min比较(循环)若max<x[i],令max=x[i]若min>x[i],令min=x[i]3.输出:max和min#include<stdio.h>#defineSIZE10main(){intx[SIZE],i,max,min;pr

intf("Enter10integers:\n");for(i=0;i<SIZE;i++)scanf("%d",&x[i]);max=min=x[0];for(i=1;i<SIZE;i++){if(max<x[i])max=x[i];if(min>x[i])min=x[i];}printf(

"Maximumvalueis%d\n",max);printf("Minimumvalueis%d\n",min);}2022/11/2421例6.1兔子繁殖问题打印每个月和年底时的总的兔子对数Fibonacc

i数列–1–2–3–5–8–13–21–34–55–89–144–233–,…12121(1)2(2)(3)nnnfnfnfffn总兔子对数2022/11/2422例6.1#include<stdio.h>#defineYEAR_MONTH12main(){i

ntf[YEAR_MONTH+1]={0,1,2};intmonth;for(month=3;month<=YEAR_MONTH;month++){f[month]=f[month-1]+f[month-2];}for(month=1;mo

nth<=YEAR_MONTH;month++){printf("%d\t",f[month]);}printf("\nsum=%d\n",f[YEAR_MONTH]);}12121(1)2(2)(3)nnnfnfnfffn总兔子对数2022/11/2

423例6.2—打印出最高分及其学生序号从键盘输入信管1班学生高数成绩(每班最多不超过45人,具体人数由键盘输入),试编程输出最高分及其学生序号。2022/11/2424max(i=0)max(i=2)max(i=3)计算最大值算法2022/11/2

425Step1从键盘输入学生人数n;Step2从键盘输入所有学生的学号和成绩分别存入数组num和scoreStep3假设其中的一个学生成绩为最高,同时记录其学号,即令maxScore=score[0]maxNum=num[0];Step4对所有学生成绩进行比较,即for(i=0;i<

n;i++){若score[i]>maxScore,则修改maxScore值为score[i],并记录其学号maxNum=num[i];}Step5打印最高分maxScore及其学号maxNum。例6.2—算法2022/11/2426......main(){......for(i=0;i<n

;i++){scanf("%ld%f",&num[i],&score[i]);}maxScore=score[0];for(i=1;i<n;i++){if(score[i]>maxScore){maxScore=score[i];}}printf("maxScore=%.0f

\n",maxScore);}例6.2—打印最高分2022/11/2427......main(){......for(i=0;i<n;i++){scanf("%ld%f",&num[i],&score[i]);}maxScore=score

[0];maxNum=num[0];for(i=1;i<n;i++){if(score[i]>maxScore){maxScore=score[i];maxNum=num[i];}}printf("maxSco

re=%.0f,maxNum=%ld\n",maxScore,maxNum);}例6.2—打印最高分及其学生序号用函数实现?同时输出最高分和最低分及其学生序号,该如何改写程序呢?2022/11/2428#in

clude<stdio.h>#defineARR_SIZE40floatFindMax(floatarr[],intn);main(){floatscore[ARR_SIZE],maxScore;intn,i;pr

intf("Pleaseentertotalnumber:");scanf("%d",&n);printf("Pleaseenterthescore:\n");for(i=0;i<n;i++){scanf("%f",&score[i]);}maxScore=FindMax(sc

ore,n);printf("maxScore=%.0f\n",maxScore);}floatFindMax(floatarr[],intn){floatmax;inti;max=arr[0];for(i=1;i<n;i++

){if(arr[i]>max){max=arr[i];}}returnmax;}现场编程用函数实现打印最高分2022/11/2429数组名作函数参数P174-6.3传递整个数组到另一个函数内,可以将数组的首地址作为参数传过去–用数组名作为函数参数–只拷贝一个地址自然比拷贝全部数

据效率高–由于首地址相同,故实参数组与形参数组占用同一段内存–在该函数内,不仅可以读这个数组的元素,还可以修改它们2022/11/2430简单变量和数组作函数参数的区别实参实参实参主调函数被调函数形参形参形参调用时执行被调函数从被

调函数返回地址值地址值地址值地址值……地址值地址值…修改已改变数组实参实参实参主调函数被调函数形参形参形参调用时执行被调函数从被调函数返回变量值变量值变量值变量值变量值变量值修改未变化2022/11/2431用数组名作函数参数时,此时形参应当用数组名或用指针变量。例-L函数地址传递.c有一

个一维数组score,内放3个学生成绩,求平均成绩。2022/11/2432#include<stdio.h>floataverage(floatarray[3]);/*函数声明*/voidmain(){floatscore[3],aver;inti;pri

ntf("input3scores:\n");for(i=0;i<3;i++)scanf("%f",&score[i]);printf("\n");aver=average(score);printf("averagescoreis%5.2f\

n",aver);}2022/11/2433floataverage(floatarray[3]){inti;floataver,sum=0;for(i=0;i<3;i++)sum=sum+array[i];aver=sum/3.

0;returnaver;}运行情况如下:长度可以不声明吗?P174-1752022/11/2434作业P1986.42022/11/2435现场演示排序算法交换法排序选择法排序2022/11/2436交换法排序第一轮后2022/11/2437交换法排序第

二轮后第三轮后2022/11/2438交换法排序交换法排序for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if(score[j]>score[i])"交换成绩score[j]和score[i]","交换学号num[j]和num[i]";}}

2022/11/2439选择法排序k=1k=2k=0k=12022/11/2440选择法排序k=3k=4k=3k=42022/11/2441选择法排序选择法排序for(i=0;i<n-1;i++){k=

i;for(j=i+1;j<n;j++){if(score[j]>score[k])记录此轮比较中最高分的元素下标k=j;}若k中记录的最大数不在位置i,则"交换成绩score[k]和score[i]","交换学号num[k]和num[i]";}202

2/11/2442现场演示查找算法顺序查找折半查找2022/11/2443顺序查找intSearch(longa[],intn,longx){inti;for(i=0;i<n;i++){if(a[i]==x){return(i);}}return(-

1);}哈,找到了!2022/11/2444折半查找数组下标0123456第一次循环:9901199013990159901799019①查找值x=99017lowmidhighx>a[mid],low=mid

+1第二次循环:9901199013990159901799019low=midhighx=a[mid],找到哈,找到了!2022/11/2445折半查找数组下标0123456第一次循环:9901199013990159901799019②查找值x=99016

lowmidhighx>a[mid],low=mid+1第二次循环:9901199013990159901799019low=midhighx<a[mid],high=mid-1第三次循环:9901199013990159901799019highl

ow不满足low<=high,循环结束,未找到唉,没找到!2022/11/2446intBinSearch(longa[],intn,longx){intlow,high,mid;low=0;high=n-1;while(l

ow<=high){mid=(high+low)/2;if(x>a[mid]){low=mid+1;}elseif(x<a[mid]){high=mid-1;}else{return(mid);}}return(-1);}2022/11/2447排序&查找作业作业:1.请

将从键盘输入的5个整数,从大到小排列后输出到屏幕。2.从键盘随便输入的5个整数存储到数组a中,将这5个数中最大数的下标输出到屏幕。2022/11/2448二维数组的定义和引用二维数组定义的一般形式为类型说明符数组名[

常量表达式][常量表达式];例如:定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组。如下:floata[3][4],b[5][10];不能写成floata[3,4],b[5,10];2022/11/2449

注意我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。例如,可以把a看作是一个一维数组,它有3个元素:a[0]、a[1]、a[2],每个元素又是一个包含4个元素的一维数组。2022/11/2450二维数组的定义二

维数组中的元素在内存中的排列顺序是:按行存放,即先顺序存放第一行的元素,再存放第二行的元素…一维数组在内存中的存放下图表示对a[3][4]数组存放的顺序2022/11/2451地址值数组元素b[0][0]b

[0][1]b[0][2]b[1][0]b[1][1]b[1][2]b[2][0]b[2][1]b[2][2]3000H3002H3004H3006H3008H300AH300CH300EH3010H例如:整型数组b[3][3]={{1,2,3},{4,5,6},{7,

8,9}};1234567891234567892022/11/2452二维数组元素的表示形式为:数组名[下标][下标]例如:a[2][3]下标可以是整型表达式,如a[2-1][2*2-1]数组元素可以出现在表达

式中,也可以被赋值,例如:b[1][2]=a[2][3]/2注意不要写成a[2,3],a[2-1,2*2-1]形式二维数组的引用2022/11/2453常出现的错误有:inta[3][4];/*定义a为3×4的数组*/┆a[3][4]=3;在使用

数组元素时,应该注意下标值应在已定义的数组大小的范围内。2022/11/2454可以用下面4种方法对二维数组初始化数据类型数组名[常量表达式1][常量表达式2]={初始化数据};(1)分行给二维数组赋初值。如:

inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};(2)可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};二维数组的引用2022/11/2455(3)可

以对部分元素赋初值。如inta[3][4]={{1},{5},{9}};100050009000也可以对各行中的某一元素赋初值,如inta[3][4]={{1},{0,6},{0,0,0,11}};10000

60000011100056000000也可以只对某几行元素赋初值。如:inta[3][4]={{1},{5,6}};2022/11/2456(4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。如:i

nta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};它等价于:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};在定义时也可以只对部分元素赋初值而省略第一维的长度,但应

分行赋初值。如:inta[][4]={{0,0,3},{},{0,10}};0030000001000§7.2.3二维数组的引用2022/11/2457二维数组的输入和输出数组的输入和输出只能逐个对数组元素进行操作(字符数组例外)intb[2][3],i,j;输入方

法:输入第i行第j列元素:scanf(“%d”,&a[i][j]);输入整个数组元素:for(i=0;i<2;i++)for(j=0;j<3;j++)scanf(“%d”,&a[i][j]);输出方法:输出第i行第j列元素:printf(“%d”,a[i][j]);输出整个数组元素:for(

i=0;i<2;i++)for(j=0;j<3;j++)printf(“%d”,a[i][j]);2022/11/2458二维数组程序举例例kw1将一个二维数组行和列元素互换,存到另一个二维数组中。#incl

ude<stdio.h>voidmain(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf("arraya:\n");for(i=0;i<=1;i++){for(j=0;j<=2;j+

+){printf("%5d",a[i][j]);/*打印输出矩阵a的元素,先行后列*/b[j][i]=a[i][j];/*给矩阵b赋值*/}printf("\n");/*下一行输出前,先换行*/}例如:a=12314456b=25362022/11/2459printf

("arrayb:\n");for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf("%5d",b[i][j]);/*打印输出矩阵b的元素,先行后列*/printf("\n");}}/*程序结束*/运行结果如下:arraya:12

3456arrayb:1425362022/11/2460例kw2:有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。先用N-S流程图表示算法,如下:二维数组程序举例+1+12022/11/2461#inclu

de<stdio.h>voidmain(){inti,j,row=0,colum=0,max;inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};max=a[0][0];

for(i=0;i<=2;i++)for(j=0;j<=3;j++)if(a[i][j]>max){max=a[i][j];/*最大值为当前值*/row=i+1;/*记录行、列号*/colum=j+1;}printf("max=%d,row=%d,colum

=%d\n",max,row,colum);}/*程序结束*/2022/11/24626.4向函数传递二维数组实际传送的是指向数组第一个元素的地址在声明二维数组形参时,不能省略数组第二维的长度,为什么?a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a

[1][2]a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]2022/11/2463例6.8计算每门课程的总分和平均分voidTotal(intscore[][COURSE],intsum[]

,floataver[],intn){inti,j;for(j=0;j<COURSE;j++){sum[j]=0;for(i=0;i<n;i++){sum[j]=sum[j]+score[i][j];}aver[j]=(float)sum[j]/n;}}可以省略数组第一维的长度不能省略数组

第二维的长度2022/11/24646.5字符数组字符char字符串2022/11/2465字符串(String)与字符数组字符串–一串以'\0'结尾的字符在C语言中被看作字符串–用双引号括起的一串字符是字符串常量,C语言自动为其添加'\0'终

结符–C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理字符数组–每个元素都是字符类型的数组charstring[80];2022/11/2466字符数组的初始化P188用字符型数据对数

组进行初始化–charstr[6]={'C','h','i','n','a','\0'};字符数组长度为6,但字符串实际长度为5charstr[6]={'C','h','i','n','a'};用字符串常量直接对数组初始化–charstr[6]={"China"};–c

harstr[6]="China";–charstr[]={"China"};–charstr[]="China";–charstr[5]="China";长度不够,无法按照字符串来处理结尾不是’\0’不是字符串!2022/11/2467‘\0’作为字符串结束符的天生缺

陷假若交给这些字符串处理函数的字符串没有'\0'会如何?–„\0‟很关键,如果没有,那么这些处理函数会一直进行处理直到遇到一个„\0‟为止。此时可能已经把内存弄得乱七八糟ANSIC定义了一些“n族”字符处理函数,包括strncpy、strncat、strncmp

等,通过增加一个参数来限制处理的最大长度2022/11/2468例kw3字符数组的输出#include<stdio.h>#include<string.h>#defineARRA_SIZE4/*字符串最大长度*/

main(void){intn;charstr[ARRA_SIZE]={'a','b','c'},min[ARRA_SIZE];printf(“%s\n",str);for(n=0;str[n]!='\0'

;n++){printf(“%c”,str[n]);/*每次输出一个字符串*/}printf("\n");}把4改成3看看输出结果2022/11/2469§字符数组§字符数组的输入输出字符数组的输入输出可以有两种方法:•逐个字符输入输出。用格式符“%c”输入或输出一个字符。•将整

个字符串一次输入或输出。用“%s”格式符,意思是对字符串的输入输出。2022/11/2470charc[]={″China″};printf(″%s″,c);例如在内存中数组c的状态2022/11/2471逐个输入输出for(i=0;s[i]!='\0';i++){putchar

(s[i]);}putchar('\n');一次性输入输出scanf("%s",s);printf("%s",s);chars[10];字符数组的输入输出gets("%s",s);puts("%s",s);2022/11/2472如果利用一个sc

anf函数输入多个字符串,则在输入时以空格分隔(scanf函数遇空格、回车、制表符结束)。例如:charstr1[5],str2[5],str3[5];scanf(″%s%s%s″,str1,str2,str3);输入数据:Howar

eyou?数组中未被赋值的元素的值自动置′\0′。scanf(″%s″,str1);输入:Howareyou?数组str1中的字符串为“how”,而不是“Howareyou?”str1:str2:str3:2022/11/2473puts()/gets(

)字符串处理函数2022/11/2474在C的函数库中提供了一些用来处理字符串的函数,使用方便。几乎所有版本的C编译系统都提供这些函数。下面介绍几种常用的函数。1.puts函数其一般形式为:puts(字符数组)•其作用是将一个字符串(以′\0′结束的字符序列)输出到

终端。假如已定义str是一个字符数组名,且该数组已被初始化为"China"。则执行puts(str);其结果是在终端上输出China。由于可以用printf函数输出字符串,因此puts函数用的不多。2022

/11/2475用puts函数输出的字符串中可以包含转义字符。例如:charstr[]={″China\nBeijing″};puts(str);输出结果:ChinaBeijing同时,在输出时,将字符串结束标志′\0

′转换成′\n′,即输出完字符串后换行。2022/11/24762.gets函数其一般形式为:gets(字符数组)其作用是从终端输入一个字符串到字符数组,函数值返回值为字符串的首地址。该函数值是字符数组的起始地址。如执行下面的函数:g

ets(str);可以输入空格!!从键盘输入:Computer↙2022/11/2477将输入的字符串"Computer"送给字符数组str(请注意送给数组的共有9个字符,而不是8个字符。注意:用puts和gets函数只能输入或输出一个字符串,不能写成puts(str1,st

r2)或gets(str1,str2)2022/11/2478scanf()inti;scanf("%d",&i);/*假如不用&i,就用i,能达到效果吗?*/charstr[10];scanf("%s",str);–不能读入带空格的字符串

,gets()可以–这种用法很不安全。当用户的输入多于10个(含10个),str数组将越界–scanf被公认为最易遭到黑客攻击的函数之一2022/11/2479gets()字符串输入函数gets()也没有提供限制输入字符串长度的方法,容易引起缓冲区溢出,给黑客攻击以可乘之机对输入字符

串长度有限制的函数调用–fgets(buf,sizeof(buf),stdin);2022/11/2480字符串处理函数在<string.h>中定义了若干专门的字符串处理函数strcpy:stringcopy–字符串

2复制到字符数组1中,应确保字符串数组1足够大strlen:stringlength–返回字符串的实际长度,不包括'\0„strcat:stringcombination–字符串2连接到字符数组1的字符串后面,结果存在字符串数组1中strcmp:stringcomparison–当出现第

一对不相等的字符时,就由这两个字符决定所在字符串的大小赋值运算符“=”不能用于字符串赋值!str1=str2/*错误*/str1=str2/*错误*/字符串不能用关系运算符比较大小!if(str1<str2)/*错误*/2022/11/24811.strcat函数其一般形式为:st

rcat(字符数组1,字符数组2)Strcat的作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。2022/11/2482例如:charstr1[30]={″People′sRepublicof″};charstr

2[]={″China″};printf(″%s″,strcat(str1,str2));或printf(″%s″,str1);输出:People′sRepublicofChina2022/11/24832.strcpy函数其一般形式为:str

cpy(字符数组1,字符串2)strcpy是“字符串复制函数”。作用是将字符串2复制到字符数组1中去。例如:charstr1[10],str2[]={″China″};strcpy(str1,str2);str1:2022/11/24841.字

符数组1必须定义得足够大,以便容纳被复制的字符串。字符数组1的长度不应小于字符串2的长度。2.―字符数组1‖必须写成数组名形式(如str1),“字符串2‖可以是字符数组名,也可以是一个字符串常量。如strcpy(str1,″C

hina″);3.复制时连同字符串后面的′\0′一起复制到字符数组1中。4.可以用strcpy函数将字符串2中前面若干个字符复制到字符数组1中去。例如:strcpy(str1,str2,2);作用是将str2中前面2

个字符复制到str1中去,然后再加一个‘\0’。2022/11/24855.不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如下面两行都是不合法的:str1=″China″;str1=str2;而只能用strcpy函数将一个字符串复制

到另一个字符数组中去。用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。如下面是合法的:chara[5],c1,c2;c1=′A′;c2=′B′;a[0]=′C′;a[1]=′h′;a[2]=′i′;a[3]=′n′;a[4]=′a′;2022/1

1/24863.strcmp函数其一般形式为:strcmp(字符串1,字符串2)strcmp的作用是比较字符串1和字符串2。例如:strcmp(str1,str2);strcmp(″China″,″Korea″);strcmp(str1,″Bei

jing″);2022/11/2487"A"<"B","a">"A","computer">"compare","36+54">"!$&#","CHINA">"CANADA","DOG"<"cat"字符串比较的规则与其他语言中的规则相同,即对两个字符串自左至右逐个字符相比(按ASCII码值

大小比较),直到出现不同的字符或遇到′\0′为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。例如2022/11/2488比较的结果由函数值带回(1)如果字符串1=字符串2,函数值为0。(2)如果字符串1>字

符串2,函数值为一正整数。(3)如果字符串1<字符串2,函数值为一负整数。注意:对两个字符串比较,不能用以下形式:if(str1>str2)printf(″yes″);而只能用if(strcmp(str1,str2)>0)printf(″yes″);2022/11/24894.s

trlen函数其一般形式为:strlen(字符数组)strlen是测试字符串长度的函数。函数的值为字符串中的实际长度(不包括′\0′在内)。如:charstr[10]={″China″};printf(″%d″,strlen(str));输出结果不是10,也不是6,而是5。也可以直接测试字符串常量

的长度,如strlen(″China″);2022/11/2490例kw4有3个字符串,要求找出其中最大者#include<stdio.h>#include<string.h>voidmain(){charstr

ing[20];charstr[3][20];inti;for(i=0;i<3;i++)gets(str[i]);/*每一个字符串输入以回车结束,若用scanf函数呢?*/if(strcmp(str[0],str[1])>0)/*str[0

]比str[1]大*/strcpy(string,str[0]);/*把str[0]赋值个字符串string大*/elsestrcpy(string,str[1]);if(strcmp(str[2],string)>0)strcpy(string

,str[2]);printf("\nthelargeststringis:%s\n",string);}2022/11/2491运行结果如下:CHINA↙HOLLAND↙AMERICA↙thelarg

eststringis∶HOLLAND2022/11/2492例6.9从键盘任意输入5个学生的姓名,编程找出并输出按字典顺序排在最前面的学生姓名等价于求最小字符串2022/11/2493#include<stdio.h>#include<string.h>#defineARRA_SIZE

80main(){intn,num;charstr[ARRA_SIZE],min[ARRA_SIZE];printf("Pleaseenterfivenames:\n");gets(str);strcpy(min,str);for(n=1;n<5;n++){gets(str);if(str

cmp(str,min)<0){strcpy(min,str);}}printf("Theminis:");puts(min);}2022/11/2494这一章我们学习了了解了在什么情况下使用数组这种数据类型向函数传递一维数组和二维数组的方法用数组名作为函数

参数和用简单变量作为函数参数的不同之处常用算法:求最大值,排序,查找2022/11/2495作业P194~1996.1~6.3写在书上6.11~6.12

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?