首页 第6章 利用数组处理批量数据

第6章 利用数组处理批量数据

举报
开通vip

第6章 利用数组处理批量数据null第6章 利用数组处理批量数据一维数组的定义和引用 二维数组的定义和引用 字符数组第6章 利用数组处理批量数据一维数组的定义和引用一维数组的定义和引用在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。 按数组元素的类型不同,数组可分为数值数组、字符数组、指针数组、结构数组等各种类别;按维数可分为一维数组、二维数组、···等等 一维数组的定义 类型说明符 数组名[常量表达式]; 常量...

第6章 利用数组处理批量数据
null第6章 利用数组处理批量数据一维数组的定义和引用 二维数组的定义和引用 字符数组第6章 利用数组处理批量数据一维数组的定义和引用一维数组的定义和引用在程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。 按数组元素的类型不同,数组可分为数值数组、字符数组、指针数组、结构数组等各种类别;按维数可分为一维数组、二维数组、···等等 一维数组的定义 类型说明符 数组名[常量 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式]; 常量表达式表示元素的个数,即数组长度。 例如:int a[10]; 它表示数组名为a,此数组有10个元素。下标从0开始, 即a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。 注意:不能使用数组元素a[10]。一维数组的定义和引用一维数组的定义和引用一维数组输入和输出 #include〈stdio.h〉 void main( ) { int i,a[10]; for(i=0;i<=9;i++) scanf(“%d”,&a[i]); for(i=0;i<=9;i++) printf("%d ",a[i]); } 定义数组时,中括号中可以包括常量和符号常量,不能包含变量。即c不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。例如,下面这样定义数组是不行的: int n; scanf("%d",&n); int a[n];一维数组的定义和引用一维数组的定义和引用数组中的每个元素在功能上等价于一个一般的变量。 例如:输入100个学生成绩,并求出总成绩。 不用数组:float x, sum=0; for(i=0; i<100; i++) { scanf( “%f”, &x ); sum += x; } printf(“%.1f”,sum); 使用数组:float mark[100],sum; for(i=0; i<100; i++) scanf( “%f”, &mark[i] ); for(sum=0,i=0; i<100; i++) sum += mark[i]; printf(“%.1f”,sum);null例:#include〈stdio.h〉 void main( ) { int i,a[10]; for(i=0;i<=9;i++) a[i]=i; for(i=9;i>=0;i--) printf("%d ",a[i]); } 注意:输入和输出数值型数组元素必须使用循环语句逐个输入输出各下标变量,而不能用一个语句输出整个数组。下面的写法是错误的: scanf("%d",a); printf("%d",a); a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]一维数组的定义和引用null一维数组的初始化 (1) 在定义数组时对数组元素赋以初值。例如: int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; (2) 也可以对部分数组元素赋值 int a[10]={ 0,1,2,3,4 }; (前5个元素赋初值,后5个元素值为0) (3) 如果想使一个数组中全部元素值为1,可以写成   int a[10]={ 1,1,1,1,1,1,1,1,1,1 };  不能写成:  int a[10]={1*10}; 也不能写成: int a[10]=1 ; (4) 如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。 例如: int a[5]={1,2,3,4,5}; 可写为: int a[ ]={1,2,3,4,5};一维数组的初始化null一维数组程序举例例:输入20个数,输出其中的最大数。 #include int main( ) { int i,max,a[20]; printf("input 20 numbers:\n"); for(i=0;i<20;i++) scanf(“%d”,&a[i]); /*输入20个数*/ max=a[0]; /*先把第一个数作为最大数*/ for(i=1;i<20;i++) if(a[i]>max) max=a[i]; /*max中存放当前最大数*/ printf("maxmum=%d\n",max); return 0; }null例:求Fibonacci数列的前N项的值。 a1=a2=1 an=an-1+an-2 #include #define NUM 20 int main( ) { int a[NUM]={ 1, 1 }; int j; for (j=2; j int main( ) { int i,j,temp,a[10]; printf("\n input 10 numbers:\n"); for(i=0;i<10;i++) scanf(“%d”,&a[i]); /*输入无序的10个数*/ for(i=0;i<9;i++) /*选择排序*/ for(j=i+1;j<10;j++) if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } for(i=0;i<10;i++) /*输出有序的10个数*/ printf("%d",a[i]); return 0 }一维数组程序举例null改进的选择排序: #include int main ( ) { int i,j,t,p, a[10]; for (i=0; i<10; i++) { printf("Enter No.%2d:", i+1); scanf ("%d", &a[i]); /*输入无序的10个数*/ } for ( i=0; i<9; i++ ) /* 进行9次比较 */ { p=i; /* p为排序过程中最小元素的下标 */ for (j=i+1; j<10; j++) if (a[p]>a[j]) p = j; /* 若有更小的数则记录下标 */ if ( p != i ) { t=a[p]; a[p]=a[i]; a[i]=t; } /* 一次交换到位 */ } for (i=0; i<10; i++) /* 输出排序后的结果 */ printf ("%d ", a[i]); return 0; }null冒泡排序法的基本思想:将一堆无序的数据进行从小到大的排序,分若干次的排序,每一趟的排序都是将相邻两个数比较,将小的调到前头,即实现小的数“上升”,大的数“下沉”。且每趟“下沉”到最后的数即该趟比较的数据的最大的数。 例如:9,8,5,4,2,0(共6个数据) 第一趟:(共5次比较)一维数组程序举例null第二趟:(共4次比较) 如此进行下去。可以推知,对6个数要比较5趟,才能使6个数按大小顺序排列。在第一趟中要进行两个数之间的比较共5次,在第二趟中比4次……第5趟比1次。如果有 n 个数,则要进行 n-1 趟比较。在第 1 趟比较中要进行n-1次两两比较,在第 j 趟比较中要进行 n-j 次两两比较。 一维数组程序举例null #include int main ( ) /* 冒泡排序 */ { int i, j, t, a[11]; for (i=1; i<=10; i++) /* 输入10个整数 */ { printf("Enter No.%2d:", i); scanf ("%d", &a[i]); } for (i=1; i<=9; i++) /* 进行9趟比较 */ for (j=1; j<=10-i; j++) /*比较数组中相邻两个元素*/ if ( a[j] > a[j+1] ) {t=a[j]; a[j]=a[j+1]; a[j+1]=t; } for (i=1; i<=10; i++) /* 输出排序结果 */ printf("%d ", a[i]); return 0; }一维数组程序举例null冒泡排序 …… for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } …… 比较选择排序和冒泡排序 选择排序 …… for(i=0;i<9;i++) for(j=i+1;j<10;j++) if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } ……选择排序(从小到大):第一趟从a[0]到a[9]中找到最小数放在a[0]中,第二趟从a[1]到a[9]中找到次小数放在a[1]中,……以此类推。 冒泡排序(从小到大):第一趟从a[0]到a[9]中找到最大数放在a[9]中,第二趟从a[0]到a[8]中找到次大数放在a[8]中,……以此类推。null二维数组的定义和引用C语言允许构造多维数组。多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量。本小节只介绍二维数组,多维数组可由二维数组类推而得到。 二维数组定义的一般形式是: 类型说明符 数组名[常量表达式1][常量表达式2] 例如: int a[3][4]; /* 不能写成 a[3,4] */ 说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,即: a[0][0],a[0][1],a[0][2],a[0][3] a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3] 在C语言中,二维数组是按行排列的。 null二维数组的定义和引用二维数组的元素也称为双下标变量,其表示的形式为: 数组名[下标][下标] 其中下标应为整型常量或整型表达式。 二维数组的初始化可按行分段赋值,也可按行连续赋值。 例如对数组a[3][3]: int a[3][3]={ {80,75,92},{61,65,71},{59,63,70} }; 或:int a[3][3]={ 80,75,92,61,65,71,59,63,70 }; 也可以对数组中的部分元素进行初始化,未赋初值的元素自动取0值。如: int a[2][3] = { {1}, {4} }; int a[3][3] = { {1,2}, { }, {4,5,6} }; null对多维数组全部元素进行初始化时,可省略数组说明中第一维的大小。例如: int a[ ][3] = {1, 2, 3, 4, 5, 6}; 注意:此时只能省略第1维的值。C根据初始化数据的数量,自动确定第1维的大小。 二维数组可以看作是由一维数组的嵌套而构成的。设一维数组的每个元素都又是一个数组,就组成了二维数组。根据这样的分析,一个二维数组也可以分解为多个一维数组。 如二维数组a[3][4],可分解为三个一维数组,其数组名分别为: a[0] 、a[1]、a[2]。这三个一维数组都有4个元素,例如:一维数组a[0]的元素为a[0][0],a[0][1],a[0][2],a[0][3]。 二维数组的定义和引用null例:求矩阵A(2×3)的转置矩阵B(3×2)。 ┏ 1 2 3 ┓   ┏ 1 4 ┓ A= ┃ ┃ B= ┃ 2 5 ┃ ┗ 4 5 6 ┛ ┗ 3 6 ┛ 矩阵转置算法:在原来矩阵A中的元素a[i][j],应是转置后矩阵B中的元素b[j][i]。 #include void main( ) { int i, j, b[3][2], a[2][3] = { {1,2,3}, {4,5,6} }; for (i=0; i<=1; i++) for (j=0; j<=2; j++) b[j][i] = a[i][j]; /* 进行数组转置 */ for (i=0; i<=2; i++) { for (j=0; j<=1; j++) printf("%d ", b[i][j]); printf(“\n”); } /* 输出完一行换行*/ }二维数组程序举例null例:有一个3*4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。 #include int main() { int i,j,row=0,colum=0,max; int a[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; colum=j; } printf(“max=%d,row=%d,colum=%d\n”,max,row,colum); return 0; }二维数组程序举例字符数组字符数组字符数组的定义 如 char c[10]; 字符数组的初始化 char c[10]={‘c’,‘ ’,‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,‘m’}; 多余元素自动定为空字符(即‘\0’)当省略数组长度,系统会自动根据初值个数确定数组长度。 char c[]={‘c’,‘ ’,‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,‘m’}; (长度自动为9)null字符数组的输入和输出 输入: for(i=0; i<10; i++) scanf("%c",&a[i]); 输出: for (i=0; i<10; i++) printf("%c",a[i]); 字符串 在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。前面介绍字符串常量时,已说明字符串总是以‘\0’作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符‘\0'存入数组,并以此作为该字符串是否结束的标志。 字符数组null字符数组的初始化——用字符串的方式 char c[]={“I am happy”}; 或 char c[]="I am happy"; 等价于 char c[]={ ' I ',' ','a','m',' ','h','a','p','p','y','\0' }; 定义的数组长度大于实际字符串长度时,多余的以‘\0’补。字符数组的输入和输出 1)用循环语句逐个输入输出:用格式符“%c”进行输入或输出 2)整个字符串一次性输入输出:用格式符“%s” 例如: scanf( "%s",c ); printf( "%s",c ); 注意:用“%s”格式符输出字符串时,scanf、printf 函数 excel方差函数excelsd函数已知函数     2 f x m x mx m      2 1 4 2拉格朗日函数pdf函数公式下载 中的输出项是字符数组名,而不是数组元素名。写成下面这样是不对的:printf("%s",c[0]);字符数组null字符数组在前面介绍过,scanf的各输入项必须以地址方式出现,如 &a,&b 等。但在前例中却是以数组名方式出现的,这是为什么呢? 这是由于在C语言中规定,数组名就代表了该数组的首地址。整个数组是以首地址开头的一块连续的内存单元。 如有字符数组 char c[10];占用内存可表示为:设数组c的首地址为2000,也就是说c[0]单元地址为2000。则数组名c就代表这个首地址。因此在c前面不能再加地址运算符&。如写作 scanf(“%s”,&c);则是错误的。 在执行函数 printf(“%s”,c);时,按数组名c找到首地址,然后逐个输出数组中各个字符直到遇到字符串终止标志‘\0’为止。null如果利用一个scanf函数输入多个字符串,则以空格分隔。例如: char strl[5],str2[5],str3[5]; scanf("%s%s%s",str1,str2,str3); 输入数据: How are you? 输入后 str1、str2、str3 数组状态若改为 char str[13]; scanf("%s",str); 如果输入以下12个字符:How are you? str数组状态字符数组null字符串处理函数C语言提供了丰富的字符串处理函数,使用这些函数可大大减轻编程的负担。用于输入输出的字符串函数,在使用前应包含头文件"stdio.h",使用其它字符串函数则应包含头文件"string.h"。 1、字符串输出函数 puts 格式: puts(字符数组名) 功能:把字符数组中的字符串输出到显示器,即在屏幕上显示该字符串。 例:char c[]="BASIC\ndBASE"; puts(c); puts函数完全可以由printf函数取代,当需要按一定格式输出时,通常使用printf函数。 null字符串处理函数2、字符串输入函数gets 格式: gets(字符数组名) 功能:从 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 输入设备键盘上输入一个字符串。 gets函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束。这是与scanf函数不同的。 3、字符串连接函数strcat 格式: strcat(字符数组名1,字符数组名2) 功能:把字符数组2中的字符串连接到字符数组1中字符串的后面,并覆盖字符串1后的串标志‘\0’。本函数返回值是字符数组1的首地址。 null字符串处理函数例如: #include #include int main() { char st1[30]="My name is ",st2[10]; printf("input your name:\n"); gets(st2); strcat(st1,st2); puts(st1); return 0; } 本程序把初始化赋值的字符数组与动态赋值的字符串连接起来。要注意的是,字符数组1应定义足够的长度,否则不能全部装入被连接的字符串。 null注意:以下不合法 str1=str2;字符串处理函数4、字符串拷贝函数strcpy 格式: strcpy(字符数组名1,字符数组名2) 功能:把字符数组2中的字符串拷贝到字符数组1中,串结束标志‘\0’也一同拷贝。字符数组名2也可以是一个字符串常量,这时相当于把一个字符串赋予一个字符数组。 例如:char st1[15],st2[]="C Language"; strcpy(st1,st2); puts(st1); 本函数要求字符数组1应有足够的长度,否则不能全部装入所拷贝的字符串。 null字符串处理函数5、字符串比较函数strcmp 格式: strcmp(字符数组名1,字符数组名2) 功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。 字符串1 = 字符串2,返回值 =0; 字符串1 > 字符串2,返回值 >0; 字符串1 < 字符串2,返回值 <0。 本函数也可用于比较两个字符串常量,或比较数组和字符串常量。如:k=strcmp(“China”,“CHINA”); 注意:对两个字符串比较,不能用以下形式: if(str1==str2) printf(“yes”); 而只能用 if(strcmp(str1,str2)==0) printf(“yes”);null6、测字符串长度函数strlen 格式: strlen(字符数组名) 功能:测字符串的实际长度(不含字符串结束标志‘\0’) 并作为函数返回值。 如:char st[]="C language"; k=strlen(st); 7、字符串大小写转换函数strlwr,strupr strlwr(str) 将字符串中大写字母换成小写字母 strupr(str) 将字符串中小写字母换成大写字母 函数的返回值为字符串的首地址。字符串处理函数null例:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。 解 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 思路:#include void main() { char string[81], c; int i,num=0,word=0; gets(string); for(i=0;(c=string[i])!=‘\0’;i++) if(c==‘ ’) word=0; else if(word==0) { word=1; num++;} printf(“There are %d words in the line.\n”,num); }字符数组应用举例null例:有3个字符串,要求找出其中最大者。 思路:设一个二维字符数组str[3][20],每一行可以容纳 20个字符。 #include #include int main() { char string[20], str[3][20]; int i; for(i=0;i<3;i++) gets(str[i]); if(strcmp(str[0],str[1])>0) strcpy(string,str[0]); else strcpy(string,str[1]); if(strcmp(str[2],string)>0) strcpy(string,str[2]); printf(“\nthe largest string is:\n %s \n”,string); return 0; }字符数组应用举例null #include int main( ) { char str1[100],str2[100]; int i, j; printf (”Enter string 1:”); gets (str1); printf (”Enter string 2:”); gets (str2); for ( i=0; str1[i]!=’\0’; i++ ) ; /* 确定\0位置 */ for ( j=0; (str1[i]=str2[j]) != ’\0’; i++, j++ ) ; printf(”Output string 1:%s\n”, str1); return 0; }例:字符串连接:将串str2连接到串str1之后。 关键:要用str2的第1个字符覆盖str1的串结束标记\0。abcdefg\0str2str1.........算法: 1、查找str1的串结束标记\0 2、从str1的\0开始,将str2复制到str1。字符数组应用举例null例:输入一行字符串,将其反序后再输出。 #include int main ( ) { char str[80], c; int i, j, n; printf ("Enter string:"); gets ( str ); n = strlen(str); for ( i=0, j=n-1; i
本文档为【第6章 利用数组处理批量数据】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_596908
暂无简介~
格式:ppt
大小:585KB
软件:PowerPoint
页数:0
分类:工学
上传时间:2012-12-28
浏览量:17