大工c语言第六章.ppt_第1页
大工c语言第六章.ppt_第2页
大工c语言第六章.ppt_第3页
大工c语言第六章.ppt_第4页
大工c语言第六章.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、掌握一维数组和多维数组的定义、 初始化和引用 掌握字符串与字符数组,第六章 数 组,6.1.1 一维数组的定义 格式: 类型说明符 数组名Size ; 如: float class130; 说明:(1)数组名同变量名命名规则相同。 (2)数组名后是用方括号而不是圆括号。,前面我们用到的是语言中的基本类型(整型、符型、实型)的数据,语言使用了构造类型(数组、结构体、共同体类型),本章首先介绍数组部分。,6.1 一维数组的定义和引用,(3) Size表示数组元素个数。 如:a3 表示a数组有个数组元素,即 :a0、a1、a2 ,下标从0开始,且数组元素不能有a3。 (4) Size为常量(包括符号

2、常量),不能为变量,语言中不允许对数组的大小作动态定义。如下是错误的。 int n; scanf(“%d” , ,下标可以为常量或变量,(1)把数组清0 for(i=0;i5;ii+) ai=0; (2)给数组输入值(数组元素只能逐个赋值) for(i=0;i5;i+) scanf(“%d”,6.1.3 一维数组的初始化 语言中允许对数组进行初始化,一维数组的初始化是在定义数组时,用 内的初始条件来表示初始化,和初始值之间用逗号隔开。 实现的方法: 对数组置初值。 如: Static int a5=3,5,6,4,8; 注意:C语言中只能对static(静态变量)、extern(外部变量)进行

3、初始化。但是在Turbo C中可以直接对数组赋初值,例 int a10=1,2; 只给数组中一部分元素初值。如:static int a9=1,2; 则a0= 1, a1= 2, a2a8值全为0。 若组数组元素全部清。 如:static int a5; 或 static int a5= 0, 0, 0, 0, 0 ; 注意:定义成static数组,系统会自动赋以0值。,若对全部数组元素赋值时,可以不指定数组长度。 如:static float array13= 1.2, 1.4, 2.5 等价于 static float array1 = 1.2, 1.4, 2.5 ,6.1.4 一维数组的

4、程序举例 例 用数组来处理求Fibonacci数列问题。 程序为:main( ) int i; static int f20= 1, 1 ; for( i=2; i20 ;i+) fi= fi-2+fi-1; for( i=0; i20; i+) if( i%5= = 0) printf(“n”); printf(“%12d” , fi ); ,运行结果如下: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765,例2 用冒泡法对10个数排序(由小到大)。 方法:将两个相临数比较,将小的调到前头。 9 8 8 8

5、8 8 8 9 5 5 5 5 5 5 9 4 4 4 4 4 4 9 2 2 2 2 2 2 9 0 0 0 0 0 0 9,由以上可推知:6 个数要比较5趟 第一趟中要进行两两比较5次 第二趟中比较 4次 若有n个数,则要进行n-1趟比较 第j趟比较中要进行n-j次两两比较。,main( ) int a11; int i, j, t ; printf(“input 10 numbers: n”); for( i=1; iai+1) t= ai; ai= ai+1;ai+1= t ; printf(“%the sorted numbers: n”); for( i= 1; i11; i+)

6、printf(“%d ”, ai); ,为什么用11,n个数比较n-1趟,第j趟比较n-j次,运行:屏幕显示:input 10 numbers: 键盘输入:6,4,-8,3,0,7,9,-2,1 屏幕显示:the sorted numbers: -8 -2 0 1 3 4 6 7 9,6.2 二维数组的定义,6.2.1 二维数组的定义 二维数组定义的一般形式为: 类型说明符 数组名常量表达式1常量表达式2 如: int stu32, ar24; float grade35; C语言中,二维数组中元素在内存排列顺序是: “按 行 存 放”。 如:a23在内存排列为: a00, a01, a02,

7、 a10, a11, a12。 同理,C允许定义多维数组。如:三维数组b234,6.2.2 二维数组的引用 二维数组元素表示形式:数组名下标1下标2 数组元素可以出现在表达式中,也可被赋值。 如:c12= a23+3*b31; 打印数组b的内容: for(i=0;i5;i+) for(j=0;j10;j+) printf(“%d”,bij); printf(“n”);,注意: 下标使用 的范围,6.2.3 二维数组的初始化 采用方法如下: 分行给二维数组赋初值。 如:int a23= 2,3,1,1,2,3; 或 int a23=2,3,1,1,2,3;,第1种 方法好些,可以对部分元素赋值。

8、 如:static int a33=1,0,1,0,0,1; 相当矩阵: 或 static int a33=1, ,0,0,1; 相当矩阵: 如果对全部元素赋初值,第一维元素可省,但第二维元素不可省。 如:a34=0,1,3,1,2,1,0,2,1,1,2,0; 可写成 a 4=0,1,3,1,2,1,0,2,1,1,2,0;,6.2.4 二维数组程序举例 例1 将一个二维数组行和列元素互换,存到另一个二维 数组中。,程序:#include main( ) static int a23=1,2,3,4,5,6; static int b32, i , j; printf(“array a: n

9、”); for( i=0; i=1; i+) for( j=0; j=2; j+),printf(“%5d”, aij); bji=aij; printf(“n”); for(i=0; i=2; i+) for( j=0; j=2; j+) printf(“%5d”, bij); printf(“n”); 本例中使用静态定义符号 static 是标准C 的写法,在TC中可以省略。,运行结果如下: array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6,例2 求34矩阵中值最大元素的值,及其所在行和列号。,程序: main( ) int i, j, row=0, co

10、lum=0, max; static int a34=1,2,3,4,9,7,4,6,-1,2,0,8; max=a00; for( i=0; imax) max=aij; row=i; colum=j; printf(“%max=%d,row=%d,colum=%dn”,max, row,colum); ,运行结果为: max=9,row=1, colum=1,6.3 字 符 数 组 4.3.1 字符数组的定义 char c5; 4.3.2 字符数组的初始化 static char c7=p,r,o,g,r,a,m; c0 c1 c2 c3 c4 c5 c6,p r o g r a m,g

11、r e e n 0,注意:大括号提供的初值不能超过字符数组的长度, 可以小于字符数组的长度,最后为空字串0。 如:static char c6=g,r,e,e,n; 内存分配为: c0 c1 c2 c3 c4 c5,或char c20=“I am a boy”; 或 char c = “I am a boy”;,6.3.3 字符数组的引用 例1 输出一个字符串。 程序:main( ) static char c10= I, ,a,m, ,a, ,b,o,y; int i; for( i=0; i10; i+) printf(“%c”, ci); printf(“n”); ,运行结果: I am

12、 boy,例2 输出一个钻石图形。 main( ) static char diamond 5= , , *, , *, , *, *, , , , *, , *, , *, , , *; int i, j; for( i=0; i5; i+) for( j=0; j5; j+) printf(“%c”, diamondij); , ,6.3.4 字符串和字符串结束标志 字符串具是由双引号引起来的串。 如:char c =“I am a boy”; 或 char c = “I am a boy”; 注意:每个字符串都有一串结束标志,用0表示;因此 a 表示 ? 个字符, “a” 表示有 ? 个

13、字符的字符串,a和0,如:“Hello”有 ?个字符,“Welcome”有?个字符。 (因为每个串后都自动加上结束符“0”。) 6.3.5 字符数组(字符串)的输入输出 在学习printf函数和scanf函数时,已学过两种方法: c 表示一次 IO 一个字符, s 表示一次 IO 一个字符串。 注意: 输出字符不包括0;,用S格输出时,输出项为数组名不能数组元素。 如: printf(“%s”, c); c是一个数组的名字。 数组长度大于字符串长度,遇到“0”结束; 如: char c5=“red”; 输出:red (后边两个“0”不输出) 数组的输入时,不要再加地址符“ 的输出为: book

14、,(2) gets(字符数组) 输入一个字符串到字符数组,该字符 数组的起始地址为该函数值。 (3)strcat(字符数组1,字符数组2) 连接两个字符串,把字符数组2连到字符数组1上,该数值为字符数组1的地址。 如:static char str1 = “C language”; static char str2 = “program”; printf(“%s”, strcat( str1, str2); 输出: C language program (4) strcpy(字符数组1,字符数组2) 将字符数组2拷贝到字符数组1中去。 如:static char str110, str2 =

15、“red flag”; strcpy(str1,str2); 不能用赋值形式 str1=str2,注意:不能用if(str1= = str2)形式进行比较,可以用 if( strcmp(str1,str2) = = 0)形式。 (6) strlen(字符数组) 测试字符数组的长度(不包括“0”); 如:static char str10= “yellow”; printf(“%d”, strlen(str); 结果: (7) strlwr(字符串) 将大写字符串变小写字符串。 (8) strupr(字符串) 将小写字符串变大写字符串。,(5) strcmp(字符串1,字符串2) 两个串的比较;

16、,6.3.7 字符数组应用举例 例1 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。 解题思路:用word作为是否为单词的标志, 若word=0,表示未出现单词,否则就置为1;,输入一个字符给string,i = 0;num=0,当 c= stringi != 0,C=空格?,T,F,T,F,word= 0?,word=0,num= num+1 word= 1,i= i + 1,输出: num,当前字符为空格,使word=0,根据word=0否,判断前一字符是否为空格,前一字符为空格,出现新单词,num加1,#include “stdio.h” main( ) char string81; int i, num=0, word=0; char c; gets(string); for( i=0; (c=stringi!= 0; i+) if( c= = ) word= 0; else if(word= =0) num+ ; word= 1; printf(“There are %d words in the linen”, num); ,结果: There are 4 words in the line,运行: 输入 I am a boy.,学习数组这一章要注意的几个问题: 1. 在C语言中数组的下标是从0开始; 2. C语言

温馨提示

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

评论

0/150

提交评论