c语言 第7章数组与字符串_第1页
c语言 第7章数组与字符串_第2页
c语言 第7章数组与字符串_第3页
c语言 第7章数组与字符串_第4页
c语言 第7章数组与字符串_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、一. 概念 C提供的数据类型有: 标准型和构造型。在遇到的大量编程问题中仅用标准型是解决不了的。如: 排序, 查询,统计,线性方程组求解,矩阵运算等需要用构造类型,数组是其中之一。 数组-具有相同类型数据的集合。数组中每一个数据称为元素,每一个元素均用统一的数组名和相应的下标确定。,数组定义 格式: 一维 类型说明符 数组名常量 二维 类型说明符 数组名常量 常量 例: int num10; float score34 ; 在程序中定义了一维数组和二维数组;编译时在内存开辟连续一批单元,存放数组各元素的值。,2 bytes,num0 num1 num2,num9,.,4 bytes,.,sco

2、re00 score01 score02,score23,功能: 定义数组名, 类型和大小。 num 整型 10个元素 score 实型 12个元素,数组元素赋初值 指在定义的同时可给数组各元素或部分元素赋初值,即初始化。在编译时除分配一定的单元,同时将初值赋给相应单元(元素), 否则是随机值。 如果给全部元素赋值,则在数组定义时,可以不给出数组长度,系统将根据初值的个数自动确定数组的长度。,num0 num1,.,0,1,9,static-表示静态存储; 若定义成: static int num10; 所有元素均赋 0;,部分元素赋初值: static int num10=0,1,2,3,4

3、; 其它元素均赋 0;,num9,一维数组: static int num10 = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ;,也可 static float score34=1,1,1,1,2,2,2,2,3,3,3,3; 也可 static float score 4=1,1,1,1,2,2,2,2,3,3,3,3; 而 static float score34; 则所有元素均赋 0; 部分元素赋初值: static float score34=1,2,3; 表示score00; score10; score20分别赋1,2,3,其它元素均为 0。 static floa

4、t score34=1,7,8; 表示score 00=1;score10=7,score11=8,其它元素均为 0;,二维数组 static float score34=1,1,1,1,2,2,2,2,3,3,3,3,;,对数组元素的操作 在C中,只能对已定义的数组元素逐个的操作(赋值、输出等),不可对整个数组一次进行赋值 , 输出等。凡是变量可出现的地方,数组元素也可出现。 数组元素引用格式: 一维 数组名 二维 数组名 ,一维数组各元素: 赋值, 输出 main( ) int num10, i; for (i=0; i10; i+) numi=i+1; for(i=0; i10; i+)

5、 numi *= 10; for (i=0; i10; i+) printf(num%d = %d n, i, numi ); ,main( ) int num10, i; for (i=0; i10; i+) scanf(%d, ,二维数组各元素: 赋值,输出 main( ) int score34; int i, j; for (i=0; i3; i+) for (j=0; j4; j+) scanf(%d, ,数组在编程中应用 例:某班3人, 2门课, 试编程: 1. 键盘输入每个人学号和2门课成绩; 2. 求出每人平均分和每门课的平均分。,变量设置: num3 存放每个人的学号 sco

6、re32 存放30人,每人9门课成绩aver3 存放每人平均成绩 aver12 存放每门课平均成绩,main () int i, j; int score32, num3, sum; float aver3, aver12; for (i=0; i3; i+) scanf (%d, /* 输入每人学号和2门课成绩 */,for (i=0; i3; i+) sum=0; for (j=0; j2; j+) sum+=scoreij; averi =sum/2; /* 求出每人平均分 */ for (i=0; i3; i+) printf (Student.%d t %f n, i+1, aver

7、i); /* 输出每门课平均分 */,for (i=0; i2; i+) sum=0; for (j=0; j3; j+ ) sum+=scoreji; aver1i =sum/3; /* 求每门课平均分 */ for (i=0; i2; i+) printf (Course.%d t %f n, i+1, aver1i); /* 输出每门课平均分 */ ,例:已知三行三列数组各元素值, 试分别求各行元素,各列元素和每个元素之和。 main() int i, j; static int a44=3,5,6,0, 2,1,4,0, 3,5,4,0, 0,0,0,0; for (i=0; i3;

8、i+) for (j=0; j3; j+) ai3+=aij; a3j+=aij; a33+=aij; for (i=0; i4; i+) for (j=0; j4; j+) printf (%5d, aij); printf(n); ,第0列各元素之和,所有元素之和,第 0 行各 元素之和,3 5 6 xx 2 1 4 xx 3 5 4 xx xx xx xx xx,例:矩阵相乘: C=A*B 条件: A阵的列数 = B阵的行数 乘积矩阵的行数为A阵行, 列为B阵列 main( ) static int a33=1,2,3 ,4,5,6, 7,8,9; static int b32=1,2,

9、 3,4, 5,6; static int c32; int i, j, k; for (i=0; i3; i+) for (j=0; j2; j+) for (k=0; k3; k+) cij+=aik * bkj; for (i=0; i3; i+) for (j=0; j2; j+) printf (%5d, cij); printf(n); ,main( ) int num10, i, j, k, tem; for (i=0; inumj) tem=numi; numi=numj; numj=tem; for (k=0;k10;k+) printf (%d ,numk); ,1 3 5

10、 7 9 2 4 6 8 0 0 3 5 7 9 2 4 6 8 1 0 1 5 7 9 3 4 6 8 2 0 1 2 7 9 5 4 6 8 3 0 1 2 3 9 7 5 6 8 4 0 1 2 3 4 9 7 6 8 5 0 1 2 3 4 5 9 7 8 6 0 1 2 3 4 5 6 9 8 7 0 1 2 3 4 5 6 7 9 8 0 1 2 3 4 5 6 7 8 9,main( ) int num10, i, j, k, tem; for (i=0; inumj+1) tem=numj; numj=numj+1; numj+1=tem; for (k=0;k10;k+) p

11、rintf (%d ,numk); ,1 3 5 7 9 2 4 6 8 0 1 3 5 7 2 4 6 8 0 9 1 3 5 2 4 6 7 0 8 9 1 3 2 4 5 6 0 7 8 9 1 2 3 4 5 0 6 7 8 9 1 2 3 4 0 5 6 7 8 9 1 2 3 0 4 5 6 7 8 9 1 2 0 3 4 5 6 7 8 9 1 0 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9,字符数组 C中无字符串变量, 字符串是用字符数组处理. 定义: 一维 char cn5 (常用来处理一个字符串) 二维 char name308 (常用来处理多个

12、字符串),赋初值: static char cn5=C,h,i,n,a; static char cn6=C,h,i,n,a,0; static char cn6=“China”; static char cn6=“China”; static char cn =“China”; 系统定义, 自动在串尾加0。 若提供的初值小于数组长度,则只将这些字符赋给数组中前面的元素,其余元素自动空字符0 若对全体元素赋初值,可省长度说明,均等价,cn0 cn1 cn2 cn3 cn4 cn5,C,h,i,n,a,0,字符串结束标志,输出时: printf(“%s n”, cn); cn 是字符数组名,当遇

13、到0输出结束 printf(“%c n”, cn0); cn0 是字符数组元素。,在内存存放:,可以用scanf对一个字符数组赋值,即输入一个字符串。但字符串中不能有空格,否则将以空格作为串结束符。 Char st20; scanf(“%s”,st); 注意,st是数组名而非变量名,故不可用 将结束标记转为 n; 可含转义字符. static char str =“BBI”; puts(str); static char str =“ n bbi” puts(str);,gets(str) 从键盘输入一个串给字符数组, 返回是该数组在内存的首地址; 字符串里可含空格 gets(str); 键入

14、: bbi strcat(str1,str2) 将串2接在串1后, 其结果放在字符数组中 static char c2 =“a boy” static char c1 =“I am”; printf(“%s”,strcat(c1,c2);,strcpy(str1,字串) 将字符串拷贝到字符数组里 strcpy(str1,”BBI”); static char str2 =“bbi”; strcpy(str2,str1) strcmp(str1,str2) 两串相同,返回值是0;串1串2,返回值是正整数;串1串2,返回值是负整数 strcmp(“CCTV”,”BTV”);,strlen(str)

15、 返回不包括0字符串的长度 printf(“%dn”,strlen(“bbi”); 注: str, str1, str2是字符数组名或字符型指针变量名,例:实现串拷贝 main( ) static char s2 =China; char s120; int i; for(i=0; s2i!=0; i+) s1i=s2i; s1i=0; printf (%sn, s1); ,例:实现串连接 #include main( ) char s130, s220; int i, j; gets(s1); gets(s2); i=0; while ( s1i ) i+; for (j=0; s2j; j

16、+, i+) s1i=s2j; s1i=0; printf(%s n, s1); ,例:字符串比较 #include main( ) char s120, s220; int i; gets(s1); gets(s2); for (i=0; s1i=s2i; i+) if (s1i=0) break; printf(%d n, s1i-s2i); ,例:输入一串字符, 统计该串里单词的个数 (单词间用空格分开), 串结束用回车.,Num:统计串的个数, Word:当遇到一个或多个空格, word=0; 当遇到第一个非空格, 若原word是0, 表示新词开始, num增1, 同时word=1;,

17、键入字符串,stri != 0,stri= ?,Y,word=0,Y,word=0?,num增1, word=1 N,输出num,N,#include string.h main( ) char str 20, c; int i, num=0, word=0; gets(str); for (i=0; (c=stri)!=0; i+) if (c= ) word=0; else if (word=0) word=1; num+; printf (num=%d n, num); ,二维字符数组运用, 常用来处理多个字符串. 例: char name308 该二维数组用来存放某班30个学生的名字.,30个人,每人的名字,其长度 =8,name308,例: 已知三个字符串, 挑出并输出最大串。,C C T V 0 .,B T V 0 .,N T V 0 .,c0是第一个串在内存存放首地址 c1是第二个串在内存存放首地址 c2是第三个串在内存存放首地址 str是字符串在内存存放首地址,# include main( ) char str20, c320; int i; for (i=0; i 0) strcpy(str, c0); else strcpy

温馨提示

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

评论

0/150

提交评论