《计算机程序设计基础精多练CC》由会员分享,可在线阅读,更多相关《计算机程序设计基础精多练CC(36页珍藏版)》请在金锄头文库上搜索。
1、1第四章 数组和字符串2教学目标l(1) 掌握数组的定义、初始化和引用方法;l(2) 了解数组在数值计算、数据统计、排序和数据检索方面的应用;l(3) 了解字符串与字符数组的概念,会对于字符串进行整体输入输出。3基本内容 l4.1 数组l4.1.1 一维数组l4.1.2 二维数组l4.2 字符数组l4.2.1 字符数组的定义、初始化和输入与输出l4.2.2 字符串处理函数4构造数据类型l问题的引出:l实际应用的程序设计中,只用几个变量的情况是极少 的;更多的情况是处理大批量的相同类型或不同类型的数 据。相同类型数据举例:统计全校15,000学生英语4级统考 成绩;不同类型数据举例:管理全校15
2、,000学生学籍信息记录 ,每条记录信息包括:姓名、学号、出生日期、班级、各科成绩 等。l用什么样的数据结构来描述这类应用更简洁?54.1 数组l数组: 具有相同类型的数据的集合。l数组用数组名来标识。l其中的每个变量(数组元素)通过该变量在数组中的相对位置(下标)来引用。l特点:l常用于处理大批量数据;l数据特点:存在内在联系;l数组具有相同数据类型的变量集合;l这些变量都有相同名字,但下标不同;l称这些变量为数组元素;l只有一个下标一维数组;l有两个下标二维数组。6数组说明l与变量相同。 数据类型 数组名整型常数表达式,l例:lint array10; / 说明了一个有10个元素的整型数组
3、ldouble matrix2020; / 说明了一个20行20列的浮点型矩 阵l特点:l数组名定名规则和变量名相同,遵循标识符定名规则。l数组名后是用方括号起来的常量表达式,不能用圆括号l错误用法:int a(10);l方括号中的下标表示元素在数组中的位置。下标从0开始,必 须是整型常量。7(1)一维数组存储结构l逻辑结构:l由一串数据构成的向量表,每个元素的下标值确定了各元素在此数据表中的位置。lA5排序次序为: A0,A1,A2,A3,A4l存贮结构:l数组元素存放为一片连续的存储单元,其元素在内存中的存放顺 序与逻辑结构是一致的;即所谓“逻辑上相邻,物理上也相邻”。lA5的存储结构为:
4、A0A1A2A3 A48一维数组的初始化l 在定义数组时对数组元素赋以初值。l例如: int a10=0,1,2,3,4,5,6,7,8,9;l如果想使一个数组中全部元素值为0,可以写成 int a10=0,0,0,0,0,0,0,0,0,0;l不能写成int a10=0*10; 即不能给数组整体赋初值(C+不允许对一个数组进行聚 集操作 )。 l 在对全部数组元素赋初值时,可以不指定数组长度。l例如: int a5=1,2,3,4,5;l可以写成int a=1,2,3,4,5;l在第二种写法中,花括号中有5个数,系统会据此自动定义a数组 的长度为5。9例:找出一维数组中的最大数。l算法分析:
5、假设数组中第1个元素最大,令big =array0将array i(0 using namespace std; int main() int array7; coutarrayi; int big = array0; for(int j=0; jbig) big = arrayj; coutmax14#include using namespace std; int main() int i, j, row=0, colum=0, max; int a34=1,2,3,4, 9,8,7,6, -10,10,-5,2; max=a00; for (i=0;imax) max=aij; row=
6、i; colum=j; coutname;l字符串的输出coutlstpcpy(): 字符串拷贝;lstrcat(): 字符串连接;lstrchr(): 在字符串中查找字符;lstrcmp(): 字符串比较;lstrlen(): 求字符串长度;lstrlwr(): 将字符串中的大写字母转换为小写字母;lstrrev(): 反转字符串;lstrstr(): 在字符串中查找另一个字符串;lstrupr(): 将字符串中的小写字母转换为大写字母;l 20字符串处理函数l(1) 求字符串的长度: int strlen(char s ); 例如: len = strlen(“This is a samp
7、le.“); 执行后,变量len会被赋值17。l(2) 字符串连接函数 strcat(char destin , char source );l(3) 复制字符串 strcpy(char destin , char source ); 例如: char weekday11; strcpy(weekday, “MONDAY“);l(4) 字符串比较 int strcmp(char string1 , char string2 );21例4-2:字符串复制函数和连接函数的用法#include #include using namespace std; int main() char s80; st
8、rcpy( s, “Hello world from “ ); strcat( s, “strcpy “ ); strcat( s, “and “ ); strcat( s, “strcat!“ ); cout #include using namespace std; int main() char pwd50; while(1) coutpwd; if(strcmp(pwd, “welcome“) cout。l使用与基本数据类型int、char等类似,定义格式为 : string 对象1, 对象2, ;l例如: string s1, s2;/定义对象s1和s2 string s3(“Mon
9、day“);/定义s3同时初始化24/ 例 4-4 字符串类的运算符操作#include #include using namespace std;int main() string str1(“Zhang3“); string str2(“Li4“); string str3=“Wang5“; string str4; / 字符串赋值 str4 = str1; cout = str1) cout = str1“ str5; cout using namespace std; int main() int i, f24; f0=1; f1=1; / 构造斐波那契数列 for(i=2; i us
10、ing namespace std; int main() int i, j, tmp; int list10; cout listi; for(i=0; ii; j-)/ 每次都从最后一个元素开始比较 if(listj-1listj)/ 如果前后顺序不符,则交换位置 tmp = listj-1; listj-1 = listj; listj = tmp; / 输出排序后的数组 cout using namespace std; int main() const int M=3; const int N=4; double aMN= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11、 11,12 ; double bMN= 1, 4, 7,10, 2, 5, 8, 11, 3, 6, 9,12 ; double cMN;/ 结果矩阵 cout #include using namespace std; int main() char destination81 = “abcdefghijklmnopqrstuvwxyz“; char source = “ABCDEFGHIJKLMNOPQRSTUVWXYZ“; strcat(destination, source); / 直接调用字符串连接 函数 cout #include using namespace std; int
12、 main() char destination81 = “abcdefghijklmnopqrstuvwxyz“; char source = “ABCDEFGHIJKLMNOPQRSTUVWXYZ“; int i = strlen(destination);/ 求出目标字符串长度,以确定复 制位置 int j = 0; while(sourcej!=0)/ 在未达到源字符串尾部前逐个字 符复制 destinationi+ = sourcej+; destinationi = 0;/ 在目标字符串的结尾处添加结束 标志 cout #include using namespace std; int main() char str50 = “I love you“; cout= a / 按凯撒加密法替 换字母 i+; cout“加密后的字符串是:“strendl; return 0; 35学好程序设计语言的唯一途径是你的编程能力与你在计算机上投入的时间成结 束 语36