C语言利用数组处理数据.ppt_第1页
C语言利用数组处理数据.ppt_第2页
C语言利用数组处理数据.ppt_第3页
C语言利用数组处理数据.ppt_第4页
C语言利用数组处理数据.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

第6章 利用数组 处理批量数据,数学科学学院:汪小平 ,一维数组概述,C语言简单变量无法表示下标,当要表示数学中一系列数:a0,a1,a2,an时,就无能为力,如果用单个变量表示,很难简便的表达算法。,#include int main() int i,a1,a2,a3,sum=0; scanf(“%d%d%d“, ,一维数组概述-数组的声明与引用,C语言的数组弥补了这一点。下面是改写后的程序:,#include int main() int i,a3,sum=0; scanf(“%d%d%d“, ,特别注意:C语言数组下标都是从0开始,因此定义为a3,只能取a0、a1、a2。,一维数组概述-数组的声明与引用,利用数组下标的变化,可以使表达形式不变,但运算内容变化,所以数组通常与循环联系,以构造简便有效的算法。 从存储上讲,数组就是在内存分配了一连续空间,存储数组元素。其中数组名即是所分配内存的首地址。 当访问数组元素ai时,编译器通过运算得出第i个元素的地址,再访问其中的元素,计算方式如下: a+i*sizeof(数组类型) -第i个元素在内存中地址 特别注意,ai相当于是一个变量,使用方式与一般变量完全一样。,在C程序中不用加,C语言会根据声明中a的类型自动乘上,一维数组概述-数组的声明与引用,整数、浮点数、字符三种类型,都可以声明对应的数组,访问方式完全一样,float f10,sum=0.0; f9=3.14156; printf(“%f”,f9);,#include int main() int i; char a10; for(i=0;i=0;i-) printf(“%c“,ai); return 0; ,一维数组的初始化,三种数组的初始化非常相似。数组在定义时就可以初始化元素,格式为: 数组类型 数组名常量表达式=对应类型元素列表 例如:int a4=1,2,3,4; 数组元素如果没有初始化,其值是不定的。 初始化规则有下面几条: 列表元素个数可以少于数组元素个数,这时剩下元素初始化为0(字符类型相当于0)。切记不能多于定义的元素个数,否则编译会报错 例:int a10=0;,一维数组的初始化,利用初始化,也可以不定义数组长度,通过初值列表确定元素的个数。 例:char ch=C,h,i,n,a;,一维数组应用举例,例1 输出以下的杨辉三角形(要求为12行),一维数组应用举例,#include #define N 12 int main(void) int i,j; int aN=1;/第一个元素为1,其余元素为0 printf(“%-5dn“,a0); for(i=1;i0;j-) aj+=aj-1; for(j=0;j=i;j+) printf(“%-5d“,aj); putchar(n); return 0; ,一维数组应用举例,例2 从外界读入一个整数,编程显示该数的32位补码。,一维数组应用举例,#include int main(void) int k,i=0; unsigned kk; char ch32=0; scanf(“%d“, ,scanf (“%d“,一维数组应用举例,例3 输入10个数,进行排序,升序输出。,分析:排序方法很多,简单的有:直接插入排序、冒泡法、简单选择排序。这里用简单选择排序。,一维数组应用举例,#define N 10 #include int main(void) int i,j,k,t,aN; for(i=0;iN;i+) scanf(“%d“, ,二维数组概述,在数学中,经常用到矩阵,对应到C语言,用二维数组表达矩阵。例如:int a43;声明了一个四行三列的一个矩阵。若要访问二维数组的第i行第j列元素,用aij 一维数组的使用,通常用单重循环,对应的,二维数组的使用,通常使用二重循环,for(i=0;iM;i+) for(j=0;jN;j+) scanf(“%d“,二维数组概述,若有定义:int aMN;。数组中的元素C语言是按行存储在一片连续的内存内。a是数组在内存中首地址。同时,M行的二维数组在C语言中可以看作M个一维数组,其中a0是第一行的数组首地址,a1是第二行的首地址, 由于数组元素在内存是连续存放,所以元素aij在内存中的地址为(N是列数): a+i*N+j 二维数组在定义时也可以初始化 int a23=1,2,3,4;,二维数组举例,例4 完成矩阵的行列互换。,#include int main(void) int i,j,t,a33=8,1,6,3,5,7,4,9,2; for(i=0;i3;i+) for(j=i+1;j3;j+)/针对右上角 t=aij;aij=aji;aji=t; for(i=0;i3;i+) for(j=0;j3;j+) printf(“%3d“,aij); printf(“n“); return 0; ,二维数组举例,#include int main(void) int i,j,t,a33=8,1,6,3,5,7,4,9,2; for(i=0;i3;i+) for(j=0;j3;j+) printf(“%3d“,aji); printf(“n“); return 0; ,也可以进行形式上的行列互换:,二维数组举例,例5 完成两个矩阵的乘法。,#include int main(void) int i,j,k,a44,b44,c44=0; for(i=0;i10); aij=k; while(k=rand()10); bij=k; ,二维数组举例,for(i=0;i4;i+) for(j=0;j4;j+) for(k=0;k4;k+) cij+=aik*bkj; for(i=0;i4;i+) for(j=0;j4;j+) printf(“%-6d“,aij); printf(“|“); for(j=0;j4;j+) printf(“%-6d“,bij); printf(“|“); for(j=0;j4;j+) printf(“%6d“,cij); putchar(n); return 0; ,二维数组举例,例6 输出奇数阶魔方矩阵。规律如下: 首先,将数1置于第一行中间的方格里,然后将相继的数按自然顺序置入右上角的方格内 当前行若是第一行,下一个数应置入最下行右邻列的方格里,就像把最下行移到了第一行的上边似的 当前列是最右列时,下一个数应置入第一列的上邻行的方格里,就像把第一列移到最右列的右边似的 当右上方格已经填有数字或者当前方格在正方形的右上角时,下一个数应置入该方格正下方的相邻方格内,二维数组举例,二维数组举例,#define N 5 #include int main(void) int i,j,row=0,col=N/2,dataNN=0; for(i=1;i=N)/*已在右上角*/ row=1; col=N-1; else/*只在第0行上*/ row=N-1; ,二维数组举例,else if(col=N)/*只可能在右列外*/ col=0; if(datarowcol0)/*如果当前位置已填充*/ row+=2; col-; /*到此已找到正确的填充位置row和col*/ datarow-col+=i; for(i=0;iN;i+)/*打印结果*/ for(j=0;jN;j+) printf(“%6d“,dataij); putchar(n); return 0; ,字符串及其使用,C语言中,字符串是作为字符数组来处理的,可以认为,字符串的每个字符,是顺序存储在字符数组中,但一定注意,最后一个元素是0,这是字符串的识别标志 字符串的长度是指字符数组中0之前的元素个数 字符串不是一种数据类型,不能进行赋值操作,字符串整体的操作,只能通过多条语句实现,char ch10=C,h,i,n,a,0; char ch=C,h,i,n,a,0; char ch=“China“; char ch=“China“; ch=“China“;,字符串及其使用,例7 从键盘读入一个字符串保存入数组,原样输出;把该字符串反向复制入另一个字符数组,并输出。,字符串及其使用,#include int main(void) char str20,newstr20; int i,k; printf(“Please input a string:“); scanf(“%s“,str); printf(“%s“,str); for(k=0;strk!=0;k+); for(k-,i=0;k=0;k-,i+) newstri=strk; newstri=0; printf(“n%sn“,newstr); return 0; ,字符串及其使用,#include int main(void) char str20; int i; printf(“Please input a string:“); scanf(“%s“,str); for(i=0;i20;i+) printf(“%3c“,stri);putchar(n); for(i=0;i20;i+) printf(“%3d“,stri);putchar(n); printf(“%sn“,str); printf(“Please input a string:“); scanf(“%s“,str); for(i=0;i20;i+) printf(“%3c“,stri);putchar(n); for(i=0;i20;i+) printf(“%3d“,stri);putchar(n); printf(“%sn“,str); return 0; ,第一次输入:1234567890 第二次输入:12345 ,常用的字符串处理函数,puts(char *str):输出一个字符串,并换行 字符串可以包含转义字符 例:puts(“Chinan Bei jing”);,char* gets(char *str):读入一个以n结束的字符串,并返回字符串的首地址 读入的字符串必须以回车结束,而不是以空格 注意与scanf读入字符串的区别,char ch81; gets(ch); printf(“%s“,ch);,常用的字符串处理函数,char* strcat(char* desc, char* src):连接两个字符串,并放入desc中 字符数组desc的长度要足够长,char* strcpy(char* desc, char* src):将字符串src 复制到desc中 字符串间的赋值用此函数 字符数组desc的元素个数应不小于字符串src的长度加1,char ch81=“select * from stu “; strcat(ch,“where name=John“); puts(ch);,常用的字符串处理函数,int strcmp(char* s1, char* s2):按各字符的ASCII码比较字符串s1和s2,若s1s2,返回一个大于0的数,若s1s2,返回一个小于0的数,否则返回0 数字字符大写字母小字字母,size_t strlen(cha

温馨提示

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

最新文档

评论

0/150

提交评论