c语言程序设计4(数组、字符串).ppt

c语言程序设计4(数组、字符串).ppt

ID:48183293

大小:337.50 KB

页数:59页

时间:2020-01-18

上传者:U-4623
c语言程序设计4(数组、字符串).ppt_第1页
c语言程序设计4(数组、字符串).ppt_第2页
c语言程序设计4(数组、字符串).ppt_第3页
c语言程序设计4(数组、字符串).ppt_第4页
c语言程序设计4(数组、字符串).ppt_第5页
资源描述:

《c语言程序设计4(数组、字符串).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

第4章数据的组织结构(一)4.3字符串的组织4.2利用一维数组组织数据的应用实例4.1数组类型4.4常用的字符串标准函数及应用实例 4.1数组类型数组——名字相同、类型相同的一组数据(1)同时存在若干个用来描述同一性质且不同个体的数据。(2)只有将这些数据组织在一起形成批量数据,共同参与处理,很多操作才具有实际意义。一维数组类型的定义定义格式:元素类型数组名[元素个数];整型常量例如:intvote[10];下标从0开始,因此,表示这10个数据的下标为09,这10个元素是:vote[0],…,vote[9] 变量一经定义,系统就要为它分配相应的存储空间。在C程序中,系统将为每个数组分配一段连续的存储空间,所需要分配的存储空间总数将取决于包含的元素个数和每个元素需要的存储空间大小。数组中的各个元素将按照下标从小到大的顺序依次连续的存储在该存储空间中。score[0]=9.2,score[1]=9.1,score[2]=8.7,score[3]=9.1score[4]=8.5一维数组的初始化元素类型数组名[元素个数]={初值1,初值2,......,初值n};例如:floatscore[5]={9.2,9.1,8.7,9.1,8.5}; 说明:1)对数组全部元素赋初值时,可以省略方括号内的数组元素数量。元素个数由初值个数自动确定。例如:floatscore[]={9.2,9.1,8.7,9.1,8.5};2)可以只给前面若干个元素赋予初值,未赋初值的元素自动赋缺省值。如:inta[5]={1,3,5};相当于:a[0]=1a[1]=3a[2]=5a[3]=0a[4]=03)使数组的全部元素赋予初值0。此时,可以使用下面这种简化的书写形式:intvote[10]={0}; 数组元素的引用数组变量名[下标表达式]注意:下标不能越界,逐个引用数组的赋值利用赋值语句为数组赋值for(i=0;i<10;i++){vote[i]=0;}调用标准输入函数为数组赋值for(i=0;i<13;i++){scanf(“%f”,&score[i]);}数组的输出for(i=0;i<10;i++){printf(“%5d”,vote[i]);}一维数组元素的引用及基本操作 例如:main(){inti,a[10];for(i=0;i<=9;i++)a[i]=i;for(i=9;i>=0;i--)printf(“%d”,a[i]);}结果:9876543210 按照条件对数据进行筛选在遇到的许多问题中,经常需要从众多的数据中挑选出来满足一定条件的数据,这就是数据的筛选操作。在C程序中,参与筛选操作的批量数据可以采用一个一维数组型变量组织,筛选的条件用逻辑表达式表示。4.2利用一维数组组织数据的应用实例 P85例1:在某个公司中,计划由职工们推选一名办公室主任。假设有10名候选人准备参与竞选。希望编写一个程序,输入一组选举人的投票信息,统计每个候选人的得票数目及选举结果。问题分析用一维数组记录每位候选人的得票数量,数组下标09分别对应10位候选人。投票通过循环输入介于1~10之间的整型数值来模拟。例如,输入3代表编码为3(下标为2)的候选人得票。0作为输入的结束标志。找出最多的得票数量之后,从所有的候选人中筛选出得票数量与最高得票数量相同的人。显示每位候选人的得票数量。 算法描述 #include#defineNUM10/*候选人人数*/main(){intvote[NUM]={0};intcode,i,winner;/*职工投票*/printf(" Enteryourselection<0end>: ");do{scanf("%d",&code);if(code<0||code>NUM){/*检验输入的编码是否有效*/printf(" Invalidvote.");}else{if(code!=0)vote[code-1]=vote[code-1]+1;/*累加票数*/}}while(code!=0);程序代码 /*输出选票*/printf(" Theamountofvotesis:");for(i=0;ivote[winner])winner=i;}/*输出得票最高的所有候选人*/printf(" Thewinner:");for(i=winner;i#defineNUM26main(){intletter[NUM]={0};/*对应26个字母计数器的一维数组,初值为0*/charch;inti;printf(" Entertextline ");while((ch=getchar())!=' '){if('A'<=ch&&ch<='Z'){/*检测是否为大写字母*/letter[ch-'A']=letter[ch-'A']+1;}else{if('a'<=ch&&ch<='z')/*检测是否为小写字母*/letter[ch-'a']=letter[ch-'a']+1;}}for(i=0;i#defineNUM13main(){floatscore[NUM];/*保存13位评委给分的一维数组*/inti,minValue,maxValue;floatsum;printf(" Enter13score:");/*输入13位评委给出的分数*/for(i=0;imaxValue)maxValue=score[i];sum=sum+score[i];}sum=(sum-minValue-maxValue)/(NUM-2);/*计算并输出歌手的最终得分*/printf(" Finalscoreis%6.2f",sum);} 所谓查找是指根据某个给定的条件,在一组数据中搜索是否存在满足该条件的数据的过程。如果存在,则表示查找成功,给出成功的标志;否则表示查找不成功,给出失败的标志。在程序中,查找操作的结果经常被用来作为是否执行某项后续操作的决策依据。查找问题 P91例4:已知某个班级35名学生的某门课程的考试成绩。请编写一个程序,查看在这个班级中是否存在不及格的学生。问题分析用一维数组记录每位学生的考试成绩,下标表示每个学生的编号,元素内容表示考试成绩。查找可以通过从前往后依次查看每个元素内容的过程实现。——顺序查找 开始结束顺序查找不及格的学生显示35名学生的成绩存在不及格学生输出Notallpass输出Allpass随机产生35名学生的成绩YN算法描述 程序代码#include#include/*含random()的原型声明*/#defineNUM35/*学生人数*/main(){intscore[NUM];inti;/*随机产生35个考试成绩*/randomize();/*随机数种子发生器*/for(i=0;i#defineNUM10main(){intvalue[NUM]={12,23,30,45,48,50,67,82,91,103};/*递增数列*/intlow,high,mid,key;printf(" Enterakey:");/*输入查找的数值*/scanf("%d",&key);low=0;high=NUM-1;while(low<=high){mid=(low+high)/2;if(value[mid]==key)break;if(value[mid]#defineNUM10/*参与排序的数据个数*/main(){intdata[NUM];/*存放参与排序的所有整数*/inti,j,minValue,temp;/*通过键盘输入待排序的整型数列*/printf(" Enter%dintegers.",NUM);for(i=0;i#includemain(){charnum1[20],num2[20];doubled1,d2,sum;printf(" Enterthefirstnumber:");gets(num1);/*输入第1个用字符串表示的实型数值*/printf("Enterthssecondnumber:");gets(num2);/*输入第2个用字符串表示的实型数值*/d1=atof(num1);/*将第1个字符串转换成double类型*/d2=atof(num2);/*将第2个字符串转换成double类型*/sum=d1+d2;/*将2个double类型数值相加*/printf(" %s+%s=%.3lf",num1,num2,sum);/*显示结果*/}程序代码 例8:标准函数ltoa()的应用将用户输入的长整型(long类型)数值转换成以字符串形式表示的十六进制、八进制和二进制数值,并显示输出。2.数值类型转换成字符串itoa(num,str,radix);将数值num转换成radix进制的字符串存于str中。ltoa(num,str,radix);其中str用于存放结果的字符串,radix是用户指定的进制数,它的取值必须介于2~36之间。在itoa()函数中的num是一个int类型的数值;在ltoa()函数中的num是一个long类型的数值。 #include#includemain(){charstr[33];longvalue;printf(" Enteralongnumber:");scanf("%ld",&value);/*输入一个long类型的数值*/ltoa(value,str,16);/*转换成用字符串形式表示的十六进制数值*/printf(" Thehexadecimalof%ldis%s",value,str);ltoa(value,str,8);/*转换成用字符串形式表示的八进制数值*/printf(" Theoctadecimalof%ldis%s",value,str);ltoa(value,str,2);/*转换成用字符串形式表示的二进制数值*/printf(" Thebinaryof%ldis%s",value,str);}程序代码 strlwr(str);将字符串str中出现的所有大写字母转换成小写字母strupr(str);将字符串str中出现的所有小写字母转换成大写字母P103例9:统计一段文本中每个英文字母出现的次数。3.大小写转换 #include#include#include#defineNUM26main(){intletter[NUM]={0};/*用于存放统计结果的一维数组*/charstr[80];/*存放以字符串形式输入的文本*/inti;printf(" Enteratextline");gets(str);/*输入文本*/strupr(str);/*将文本中的所有小写字母转换成大写字母*/for(i=0;str[i]!=‘';i++){/*统计每个字母出现的次数*/if(isalpha(str[i])){letter[str[i]-‘A']=letter[str[i]-‘A']+1;}}for(i=0;i字符串2,函数值为一正整数若字符串1<字符串2,函数值为一负整数P105例10:假设用户的密码是“administrators”,下面这个程序将用于检测用户输入的密码是否正确。如果不正确,给出相应的提示信息,并请求用户重新输入。5.字符串比较例:“A”<“B”“Computer”>“Compare”strcmp(str1,str2);两个字符串进行比较时,将依据两个字符串对应位置的字符的ASCII编码决定其大小。 #include#includemain(){charpassword[20];/*存放用户输入的密码*/printf(" Enterpassword:");gets(password);/*输入密码*//*检测用户输入的密码,如果不正确,给出提示,并请求重新输入*/while(strcmp(password,"administrators")!=0){printf(" Invalidpassword ");printf("Enterpassword,again:");gets(password);}printf("OK");/*输入正确,显示"OK"*/}程序代码 6.字符串拷贝strcpy(str1,str2);将str2中的字符串拷贝复制到str1代表的存储区域中。例:charstr[80];strcpy(str,“0123456789”);不能:str=“0123456789”;7.字符串连接strcat(str1,str2);其中str1和str2是两个字符串。这个函数的功能是:将str2连接在str1之后,并在结束处添加一个字符串结束符‘’。str1要足够大。P106例11:根据用户的选择输出相应的字符串。 #include#includemain(){charstr1[80]="Thisisa";charstr2[]="program.";charstr3[]="Java";charstr4[]="Pascal";charstr5[]="C";charstr6[]="C++";intchoice;printf(" ===MENU== ");/*菜单*/printf(" Java..............1");printf(" Pascal.............2");printf(" C.................3");printf(" C++................4");printf(" choice:");scanf("%d",&choice);/*用户做出选择*/程序代码该程序将显示一个简易的菜单,根据用户的选择,拼接不同的字符串显示输出。 switch(choice){/*根据用户的选择拼接字符串*/case1:strcat(str1,str3);strcat(str1,str2);break;case2:strcat(str1,str4);strcat(str1,str2);break;case3:strcat(str1,str5);strcat(str1,str2);break;case4:strcat(str1,str6);strcat(str1,str2);break;default:strcpy(str1,"Error");break;}printf(" %s",str1);/*显示字符串*/} 8.求子串strstr(str1,str2);其中str1是主串,str2是子串。如果在主串str1中存在子串str2,函数将返回子串str2在主串中第一次出现的、第一个字符的存储位置;否则返回空。功能:检测在主串中是否存在给定子串。9.确定某个字符在字符串中出现的位置strchr(str1,ch);其中str1是一个给定的字符串,ch是所要查找的字符。如果在str1中存在字符ch,函数返回ch在字符串str1中第一次出现的存储位置;否则返回空。例:charstr[]=“1236.87”;strchr(str,‘.’)-str+1的值为5 #include#include#includemain(){inti;chartext[1000];gets(text);/*输入文本内容*/for(i=0;text[i]!='';i++){if(isalnum(text[i]))text[i]=text[i]+5;/*变换*/}puts(text);for(i=0;text[i]!='';i++){if(isalnum(text[i]))text[i]=text[i]-5;/*还原*/}puts(text);}程序代码P108例12:文本变换。 4.5二维数组二维数组的定义定义格式:<元素类型><数组变量名>[<元素数量1>][<元素数量2>];例如:intvalue[5][4];value数组的每个元素类型为int,包含5行4列共20个元素一旦定义了一个二维数组型变量,系统就会立即为其分配相应的存储空间用于存放数组中的每个元素。存储空间的数量取决于数组元素的类型和所定义的行数、列数,即存储空间数量=每个元素所占用的字节数量行数列数,并按照行列顺序依次排列。 二维数组的初始化inta[4][3]={{12,11,10},{9,8,7},{6,5,4},{3,2,1}};inta[4][3]={12,11,10,9,8,7,6,5,4,3,2,1};inta[][3]={12,11,10,9,8,7,6,5,4,3,2,1};如果只对二维数组变量中的部分元素进行初始化,可以使用下面两种形式。intarray1[4][3]={{},{1},{1,2},{1,2,3}};intarray2[4][3]={10,9,8,7,6,5}; 二维数组元素的引用及基本操作数组元素的引用<数组变量名>[<下标表达式1>][<下标表达式2>]数组的赋值for(i=0;i#defineNUM5矩阵行列数main(){intm[NUM][NUM];/*定义二维数组变量*/inti,j;/*输入矩阵*/printf("Enter%drows%dcolsdatasforthemaxtrix: ",NUM,NUM);for(i=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭