C语言程序设计:第六章 数组_第1页
C语言程序设计:第六章 数组_第2页
C语言程序设计:第六章 数组_第3页
C语言程序设计:第六章 数组_第4页
C语言程序设计:第六章 数组_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

C程序设计

第六章数组本章的重点数组的概念数组的定义和引用数组元素在内存中的排列情况字符数组和字符串的概念字符串的操作数组的概念数组:相同类型数据的、有序数据的集合。是构造类型。特点:数组中所有数据类型相同。具有相同的变量名。每个元素有一个唯一的下标。用下标访问元素。6.1一维数组的定义和引用定义:类型数组名[常量];例如:

intgrade[100];符合标识符的规定一定是方括号“[]”必须是常量、常量表达式、符号常量。不能是变量。如intn;scanf(“%d”,&n);intd[n];下标从0开始:grade[0],grade[1],grade[2],……,grade[99]数组的引用:格式:数组名[下标]例如(ex6-1):main(){inti,a[10];for(i=0;1<10;i++)a[i]=i;for(i=0;i<10;i++)printf(“%d“,a[i]);}定义一个10个元素、名字为a的int型数组。引用定义好的数组:可以对数组元素进行赋值可以引用某个数组元素的值下标可以是:整型的变量、常量、表达式,如

a[i*3]、a[3*2]、……但不能超出有效范围。下标越界的处理C编译系统对下标越界不做判断,不报错!编程人员要慎重对待。如果越界,由于使用的是数组以外的某一存储单元,会产生不可预料的错误!一维数组初始化在定义赋初值

staticintk[10]={1,2,3,4,5,6,7,8,9,10};可以给一部分元素赋初值

staticintk[10]={1,2,3,4,5};可以全部元素初始化为0staticintk[10]={0,0,0,0,0,0,0,0,0,0};staticintk[10];可以不指定数组长度:

staticintk[]={1,2,3,4,5,6,7};结果:k[0]=1,k[1]=2,k[2]=3,k[3]=4,k[4]=5,k[5]=0,k[6]=0,k[7]=0,k[8]=0,k[9]=0结果:k[0]=0,k[1]=0,k[2]=0,k[3]=0,k[4]=0,k[5]=0,k[6]=0,k[7]=0,k[8]=0,k[9]=0结果:定义7个元素的数组k[0]=1,k[1]=2,k[2]=3,k[3]=4,k[4]=5,k[5]=0,k[6]=7静态存储数组才能初始化举例:例6.2Fibonacci数列。main(){inti;staticintf[20]={1,1};for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%5==0)printf(“\n”);printf(“%12d”,f[i]);}定义一个20个元素的数组把数组前两个元素初始化为1,1。形成Fibonacci数列:1,1,2,3,5,8,13,21,34,55,……每输出五个换一行。按每个数据占12列的宽度、右对齐的方式输出举例:起泡法排序:985103-1895103-1比较相邻两个数859103-1859103-1859310-18593-110第一轮把最大的数换到最后一个8593-1105893-1105893-1105839-110583-1910583-1910538-191053-1891053-1891035-189103-158910-1358910第二轮把最大的数换到倒数第2个第三轮把最大的数换到倒数第3个起泡法程序框图

输入n个数,给a[1]到a[n]forj=1ton-1fori=1ton-ja[i]>a[i+1]

假t=a[i]a[i+1]=a[i]a[i]=t

输出a[1]到a[n]main(){inta[10];inti,j,t;printf(“Inputnumbers:”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);printf(“\n”);for(j=0;j<9;j++)for(i=0;i<=9-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}

printf(“Thesortedmumbers:”);for(i=0;i<10;i++)printf(“%d“,a[i]);}从键盘输入10个整数,并把它存放在数组a中。整个排序过程!输出6.2二维数组定义:类型数组名[常量表达式][常量表达式]例如:floatk[4][5],h[3][4];在内存中的排列

k[0][0]k[0][1]k[0][2]k[0][3]k[0][4]k[1][0]k[1][1]k[1][2]k[1][3]k[1][4]k[2][0]k[2][1]k[2][2]k[2][3]k[2][4]k[3][0]k[3][1]k[3][2]k[3][3]k[3][4]引用:数组名[下标][下标]例如:

inta[3][4],b[2][3];……a[2][3]=90;b[1][3]=a[2][3]/3;可以对数组的某个元素赋值。元素可以出现在表达式中。注意:数组定义中常量表达式与数组引用中的下标的区别。二维数组的初始化分行给数组赋值:

staticinta[3][3]={{1,2,3},{3,2,5},{3,5,7}};对整个数组赋值

staticinta[3][3]={1,2,3,3,2,5,3,5,7};对部分元素赋值

staticinta[3][3]={{1,2},{5},{7}};staticintb[3][3]={{1,2},{},{7,8}};可以缺省第一维的长度

staticintb[][3]={1,2,3,4,5,6,7,8,9};staticinta[][4]={{3,0,0},{},{1,10}};这时C编译系统可以计算出第一维的长度。例6.4把矩阵转置。main(){staticinta[2][3]={{1,2,3},{4,5,6}};staticintb[3][2],j,i;printf("arraya:\n");for(i=0;i<=1;i++){for(j=0;j<=2;j++){printf("%5d",a[i][j]);b[j][i]=a[i][j];}printf("\n");}printf("Arrayb:\n");for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf("%5d",b[i][j]);printf("\n");}}把数组a初始化成:123456把数组a中的i行j列赋给数组b中j行i列进行数组转置。例6.5求最大值main(){inti,j,row=0,column=0,max;staticinta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};max=a[0][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;column=j;}printf("maxis%datrow%dcolumn%d\n",max,row,column);}如果找到一个比当前保存在max中的值大的,则保存其值、所在位置。fori=0to2forj=0to3a[i][j]>max

假max=a[i][j]row=icolumn=j6.3字符数组字符数组定义:

charc[13];c[0]='I';c[1]='';c[2]='a';c[3]='m';c[4]='';c[5]='a';c[6]='s';c[7]='t';c[8]='u';c[9]='d';c[10]='e';c[11]='n';c[12]='t';Iamastudent因为字符存储的是ASCII值,字符与整数是互通的,因此也可以定义成int存储字符型。字符数组的初始化在定义时用字符进行初始化

staticcharc[13]={'I','','a','m','','a','s','t','u','d','e','n','t'};定义时初始化可以缺省数组长度:

staticcharc[]={'I','','a','m','','a','s','t','u','d','e','n','t'};同样,字符可以定义二维数组、并初始化:

staticcharpd[][5]={{'','','*'},{'','*','','*'},{'*','','','','*'},{'','*','','*'},{'','','*'}};字符数组的引用例6.6main(){charcp[10];inti;for(i=0;i<10;i++)scanf("%c",&cp[i]);for(i=0;i<10;i++)printf("%c",cp[i]);printf("\n");}逐个字符输入,输入10个结束。逐个字符输出。字符串和字符串结束标志“Cprogramming”为一个字符串,C语言在存放字符串时,在字符串结束时自动加上一个结束符'\0',即:CProgram\0

其中,‘\0’表示空(ASCII值为0)输出时,遇到'\0'表示字符串结束。

'\0'在内存中占一个字节。用字符串对字符数组进行初始化staticcharc[10]={"Cprogram"};staticcharc[]={"Cprogram"};staticcharc[]="Cprogram";注意用字符串对字符数组进行初始化与用字符直接进行初始化的区别。用字符进行初始化时,为了和串一致,通常在后面加上'\0',如:

staticcharc[10]={'C','','p','r','o','g','r','a','m','\0'}字符数组的输入输出逐个输出输入:用格式符%c进行逐个输出输入。整串输出:用格式符%sstaticc1[]="Cprogramming";printf("%s\n",c1);输出项用数组名。输出时,遇到\0认为串结束。输出时不含\0,它是不可显示的字符。

整串输入:

charc1[20];scanf("%s",c1);变量列表中,给出c1数组名,且不加&符!输入后,系统自动在输入的串后加上\0。可以在一个scanf()中同时输入几个串,如:

charc1[20],c2[15],c3[10];scanf("%s%s%s",c1,c2,c3);输入:

Howareyou?则分别把How送给c1、把are送给c2、把you?送给c3。

在scanf()中,用%s输入时,用空格作分隔符。思考:中间含有空格的字符串能用scanf()输入吗?字符处理函数:puts(str)

把字符串str的内容显示在显示器上。gets(str)

从键盘输入一个字符串。并存放在字符数组str中,以回车结束。strcat(str1,str2)

把串str1和str2连接起来,并存放在串str1中。strcpy(str1,str2)

把串str2的内容拷贝到str1串中,如:

staticcharstr1[10],str2[]="China";strcpy(str1,str2);

不能用str1=str2赋值;str1要足够的空间;不够大时会怎样?连同‘\0’一起拷贝到str1;

可以拷贝str2中的前几个字符,如:strcpy(str1,str2,4);tc,vc都报错!strcmp(str1,str2)比较两个串中字符ASCII值的大小。如果:两个字符串中的字符完全一致,则相等。否则,根据第一个不同来判断字符大小。比较结果:

str1=str2返回0str1>str2返回一个正数

str1<str2返回一个负数。如:strcmp(“abcd”,”abce”)-1strcmp(“abcf”,”adcf”)

温馨提示

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

评论

0/150

提交评论