【文档说明】c语言第7章数组与字符串课件.ppt,共(35)页,291.012 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-7138.html
以下为本文档部分文字说明:
一.概念C提供的数据类型有:标准型和构造型。在遇到的大量编程问题中仅用标准型是解决不了的。如:排序,查询,统计,线性方程组求解,矩阵运算等需要用构造类型,数组是其中之一。数组---具有相同类型数据的集合。数组中每一个
数据称为元素,每一个元素均用统一的数组名和相应的下标确定。数组定义格式:一维类型说明符数组名[常量]二维类型说明符数组名[常量][常量]例:intnum[10];floatscore[3][4];在程序中定义了一维数组和二维数组;编
译时在内存开辟连续一批单元,存放数组各元素的值。2bytesnum[0]num[1]num[2]num[9]….4bytes...score[0][0]score[0][1]score[0][2]score[2][3]功能:定义数组名,类型和大小。num整型10个元
素score实型12个元素数组元素赋初值指在定义的同时可给数组各元素或部分元素赋初值,即初始化。在编译时除分配一定的单元,同时将初值赋给相应单元(元素),否则是随机值。如果给全部元素赋值,则在数组定义时
,可以不给出数组长度,系统将根据初值的个数自动确定数组的长度。num[0]num[1]…...019static---表示静态存储;若定义成:staticintnum[10];所有元素均赋0;部分元素赋初值
:staticintnum[10]={0,1,2,3,4};其它元素均赋0;num[9]一维数组:staticintnum[10]={0,1,2,3,4,5,6,7,8,9};也可staticfloatscore[3][
4]={1,1,1,1,2,2,2,2,3,3,3,3};也可staticfloatscore[][4]={1,1,1,1,2,2,2,2,3,3,3,3};而staticfloatscore[3][4];则所有元素均赋0;部分元素赋初值:staticfl
oatscore[3][4]={{1},{2},{3}};表示score[0][0];score[1][0];score[2][0]分别赋1,2,3,其它元素均为0。staticfloatscore[3][4]={{1},{7,8}};表示score[0][0]=1;sc
ore[1][0]=7,score[1][1]=8,其它元素均为0;二维数组staticfloatscore[3][4]={{1,1,1,1},{2,2,2,2,},{3,3,3,3,}};对数组元素的操作在C中,只能对已定义的数组元素逐个的操作(赋值、输出等
),不可对整个数组一次进行赋值,输出等。凡是变量可出现的地方,数组元素也可出现。数组元素引用格式:一维数组名[<表达式>]二维数组名[<表达式1>][<表达式2>]一维数组各元素:赋值,输出main(){intnum[10],i;for(i=0;i<10;i++)num[i]=i+1;fo
r(i=0;i<10;i++)num[i]*=10;for(i=0;i<10;i++)printf("num[%d]=%d\n",i,num[i]);}main(){intnum[10],i;for(i=0;i<10;i++)scanf("%d",&num[i]);for(i=0;i<1
0;i++)printf("num[%d]=%d\n",i,num[i]);}二维数组各元素:赋值,输出main(){intscore[3][4];inti,j;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&score[i][j]);for(i=0;i<
3;i++){for(j=0;j<4;j++)printf("score[%d][%d]=%d",i,j,score[i][j]);printf("\n");}}数组在编程中应用例:某班3人,2门课,试编程:1.键盘输入每个人学号和2门课成绩;2.求
出每人平均分和每门课的平均分。变量设置:num[3]存放每个人的学号score[3][2]存放30人,每人9门课成绩aver[3]存放每人平均成绩aver1[2]存放每门课平均成绩main(){inti,j;intscore[3][2],num[3],sum;float
aver[3],aver1[2];for(i=0;i<3;i++){scanf("%d",&num[i]);for(j=0;j<2;j++)scanf("%d",&score[i][j]);}/*输入每人学号和2门课成绩*/for(i=0;i<3;i++){sum=0;f
or(j=0;j<2;j++)sum+=score[i][j];aver[i]=sum/2;}/*求出每人平均分*/for(i=0;i<3;i++)printf("Student.%d\t%f\n",i+
1,aver[i]);/*输出每门课平均分*/for(i=0;i<2;i++){sum=0;for(j=0;j<3;j++)sum+=score[j][i];aver1[i]=sum/3;}/*求每门课平均分*/for(i=0;i<2;i++)printf("Course.%d
\t%f\n",i+1,aver1[i]);/*输出每门课平均分*/}例:已知三行三列数组各元素值,试分别求各行元素,各列元素和每个元素之和。main(){inti,j;staticinta[4][4]={{3,5,6,0},{2,1,4,0},{3,5,4,0},{0,0,0,0}}
;for(i=0;i<3;i++)for(j=0;j<3;j++){a[i][3]+=a[i][j];a[3][j]+=a[i][j];a[3][3]+=a[i][j];}for(i=0;i<4;i++){for(j=0;j<4;j++)printf("%5d",a[i
][j]);printf("\n");}}第0列各元素之和所有元素之和第0行各元素之和356xx214xx354xxxxxxxxxx例:矩阵相乘:C=A*B条件:A阵的列数=B阵的行数乘积矩阵的行数为A阵行,列为B阵列
main(){staticinta[3][3]={{1,2,3},{4,5,6},{7,8,9}};staticintb[3][2]={{1,2},{3,4},{5,6}};staticintc[3][2];inti,j,k;for(i=0;i
<3;i++)for(j=0;j<2;j++)for(k=0;k<3;k++)c[i][j]+=a[i][k]*b[k][j];for(i=0;i<3;i++){for(j=0;j<2;j++)printf("%5d",c[i][j]);printf("\n");}}main(){intn
um[10],i,j,k,tem;for(i=0;i<10;i++)scanf("%d",&num[i]);for(i=0;i<9;i++){for(j=i+1;j<10;j++)if(num[i]>num[j]){tem=num[i];num[i]=num[j];num[j]=tem;}}for
(k=0;k<10;k++)printf("%d",num[k]);}1357924680035792468101579346820127954683012397568401234976850123459786012345698701234567980123456789main(){in
tnum[10],i,j,k,tem;for(i=0;i<10;i++)scanf("%d",&num[i]);for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(num[j]>num[j+1]){tem
=num[j];num[j]=num[j+1];num[j+1]=tem;}for(k=0;k<10;k++)printf("%d",num[k]);}1357924680135724680913524670891324560789123450678
912340567891230456789120345678910234567890123456789字符数组C中无字符串变量,字符串是用字符数组处理.定义:一维charcn[5](常用来处理一个字符串)二维charname[30][8](常用来处理多个字符串)赋初值:s
taticcharcn[5]={„C‟,‟h‟,‟i‟,‟n‟,‟a‟};staticcharcn[6]={„C‟,‟h‟,‟i‟,‟n‟,‟a‟,‟\0‟};staticcharcn[6]={“China”};staticcharcn[6]=“China”
;staticcharcn[]=“China”;系统定义,自动在串尾加‘\0。若提供的初值小于数组长度,则只将这些字符赋给数组中前面的元素,其余元素自动空字符’\0‟若对全体元素赋初值,可省长度说明均等价cn[0]cn[1]cn[2]cn[3]cn[4]cn
[5]China\0字符串结束标志输出时:printf(“%s\n”,cn);cn是字符数组名,当遇到‘\0‟输出结束.printf(“%c\n”,cn[0]);cn[0]是字符数组元素。在内存存放:可以用sca
nf对一个字符数组赋值,即输入一个字符串。但字符串中不能有空格,否则将以空格作为串结束符。Charst[20];scanf(“%s”,st);注意,st是数组名而非变量名,故不可用&st数组名代表了数组的首地址,整个数组存放在以首地址开始的一块连续内存单元中
字符串处理函数:头文件是<string.h>puts(str或字串)在屏幕上显示一个字符串(以‘\0‟结束);将结束标记转为‘\n‟;可含转义字符.staticcharstr[]=“BBI”;puts(st
r);staticcharstr[]=“\nbbi”puts(str);gets(str)从键盘输入一个串给字符数组,返回是该数组在内存的首地址;字符串里可含空格gets(str);键入:bbistrcat(str1,str2)将串2接在串1后,其结果放在字符
数组中staticcharc2[]=“aboy”staticcharc1[]=“Iam”;printf(“%s”,strcat(c1,c2));strcpy(str1,字串)将字符串拷贝到字符数组里strcpy(str1,”BBI”);staticcharstr2[]=“bbi”;st
rcpy(str2,str1)strcmp(str1,str2)两串相同,返回值是0;串1>串2,返回值是正整数;串1<串2,返回值是负整数strcmp(“CCTV”,”BTV”);strlen(str)返回不包括‘\0‟字符
串的长度printf(“%d\n”,strlen(“bbi”));注:str,str1,str2是字符数组名或字符型指针变量名例:实现串拷贝main(){staticchars2[]="China";chars1[20
];inti;for(i=0;s2[i]!='\0';i++)s1[i]=s2[i];s1[i]='\0';printf("%s\n",s1);}例:实现串连接#include<string.h>main(){chars1[30],s2[20]
;inti,j;gets(s1);gets(s2);i=0;while(s1[i])i++;for(j=0;s2[j];j++,i++)s1[i]=s2[j];s1[i]='\0';printf("%s\n",s
1);}例:字符串比较#include<string.h>main(){chars1[20],s2[20];inti;gets(s1);gets(s2);for(i=0;s1[i]==s2[i];i++)if(s1[i]=='\0')break;pri
ntf("%d\n",s1[i]-s2[i]);}例:输入一串字符,统计该串里单词的个数(单词间用空格分开),串结束用回车.Num:统计串的个数,Word:当遇到一个或多个空格,word=0;当遇到第一个非空
格,若原word是0,表示新词开始,num增1,同时word=1;键入字符串str[i]!=„\0‟str[i]==„‟?Yword=0Yword==0?num增1,word=1N输出numN#include"string.h"main(){charstr[20],c;in
ti,num=0,word=0;gets(str);for(i=0;(c=str[i])!='\0';i++)if(c=='')word=0;elseif(word==0){word=1;num++;}printf("num
=%d\n",num);}二维字符数组运用,常用来处理多个字符串.例:charname[30][8]该二维数组用来存放某班30个学生的名字.30个人每人的名字,其长度<=8name[30][8]例:已知三个字符串,挑出并输出最大串。CCTV‟\0‟....BTV‟\0
‟...NTV‟\0‟...c[0]是第一个串在内存存放首地址c[1]是第二个串在内存存放首地址c[2]是第三个串在内存存放首地址str是字符串在内存存放首地址#include<string.h>main(){charstr[20],c[3][20];in
ti;for(i=0;i<3;i++)gets(c[i]);if(strcmp(c[0],c[1])>0)strcpy(str,c[0]);elsestrcpy(str,c[1]);if(strcmp(c[2],str)>0)strcpy(str,c[2]);p
rintf("max=%s\n",str);}例:键入一个数字串,将其转为相应的整数.如:“-1234”转为-1234;“1234”转为1234.main(){chars[20];inti,n,sign;scan
f("%s",s);for(i=0;s[i]==''||s[i]=='\t'||s[i]=='\n';i++);sign=(s[i]==„-')?-1:1;if(s[i]=='+'||s[i]=='-')i++;for(n=0
;s[i]>='0'&&s[i]<='9';i++)n=10*n+s[i]-'0';printf("Resultis%d\n",n*sign);}