C程序设计 第6章 数 组 主讲教师: 鲁 萍 西安建筑科技大学 理学院 任务:键盘输入整数,排序.

Slides:



Advertisements
Similar presentations
第 8 章 数组 计算机科学学院 李淮 Tel QQ
Advertisements

数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
只怕有心人只怕有心人 世上无难事世上无难事 浙江长征职业技术学院 — 计算机与信息技术系 — 相方莉制作.
电子成绩单项目实现.
二级指针与二维数组.
第6章 数组 公共计算机基础教研部.
第九章 字串 (String).
一维数组 乾坤以有亲可久; 君子以厚德载物。.
C语言程序设计.
C语言实验 第一课 标题:学号+姓名.
程序设计基础 杨圣洪 ( since ) 群号: QQ:
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
字符串与二维数组.
第5讲 数组 5.1 一维数组 5.2 二维数组 5.3 字符串数组 5.4 综合案例分析.
第六章 数 组 主讲教师 贾月乐 联系电话:
C程序设计 第9章 自定义数据类型 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
VB程序设计语言 主讲教师:王 杨.
C语言高级编程(第四部分) 字符串 北京大学 信息科学技术学院.
第7章 构造数据类型 构造数据类型:数组、结构体、共用体、用户自定义类型 7.1 数组
Introduction to the C Programming Language
Introduction to the C Programming Language
目录 第八章 数组 1 简单学生成绩管理系统的开发 2 一维数组 3 多维数组 4 字符数组 5 数组作函数参数.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
第6章 利用数组处理批量数据.
Introduction to the C Programming Language
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。
主要内容: ◆ 一维数组 ◆二维数组 ◆ 字符数组
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第六单元 应用数组的程序设计 从现在开始,将详细讲述C语言的方方面面。第一章中的所有疑惑,都将一一消灭。
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第二章 Java语言基础.
第6章 数 组 本章要点: 数组的定义、初始化、数组元素的引用 字符数组的输入输出 字符串处理函数 数组的应用 学习方法建议:
函 数 实验八 第24讲 C程序设计 Main() { int x,y; X=10; y=x*x+1;
第四章 数组 4.4.1一维数组的定义和初始化 一、一维数组的定义和初始化 1.一维数组定义 定义格式:类型 数组名[常量表达式];
第五章 习题课 电子信息与计算机科学系 曾庆尚.
数组 梁春燕 华电信息管理教研室.
第六章 数组 西安工程大学.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第5讲 数组 5.1 一维数组 5.2 二维数组 5.3 字符串数组 5.4 综合案例分析.
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
C语言概述 第一章.
第七章 数组.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第4章 数组 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)
C语言大学实用教程 第6章 数组 西南财经大学经济信息工程学院 刘家芬
函式庫補充資料.
第六章 数组.
C语言的特点 1. C程序由许多函数组成 2. C程序必须有且只有一个主函数main( ) 3. 函数用“{”和“}”表示起点和终点
请编写如下程序: 输入100名学生的成绩,要求输出高于平均分的成绩。
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
第6章 数组.
第4章 Excel电子表格制作软件 4.4 函数(一).
5.4.1 二维数组 (一) 二维数组的定义 1. 二维数组定义的一般形式 类型说明符 数组名[常量表达式][ 常量表达式]
C程序设计.
第4章 数 组.
第九节 赋值运算符和赋值表达式.
3.16 枚举算法及其程序实现 ——数组的作用.
实验七 数 组 第21讲 C程序设计 Main() { int x,y; X=10; y=x*x+1;
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第二章 Java基本语法 讲师:复凡.
Chap 7 数 组 7.1 排序问题 7.2 找出矩阵中最大值所在的位置 7.3 进制转换.
Introduction to the C Programming Language
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
台大資訊工程學系 資料系統訓練班 第119期 吳晉賢
C语言基础学习 从外行到入门.
Presentation transcript:

C程序设计 第6章 数 组 主讲教师: 鲁 萍 西安建筑科技大学 理学院 任务:键盘输入整数,排序

第6章 数组 1 一维数组 2 二维数组 3 字符数组与字符串 小 结 习 题 游 戏

任务 若干个同一个数据类型数据的集合 —— 一维数组 用一个统一的数组名和下标确定数组中的元素。 例:整形数组 a[0]=2 a[1]=4 a[2]=6 定义 输入输出 使用/处理 1.对某班学生成绩进行排序 例7-3: 冒泡排序。对10个整形从小到大排序 2.对某班c语言成绩,找出最高成绩和最低成绩 例7-4:键盘输入10个数,找最大数、最小数

一维数组的定义 1.定义: 类型 数组名[常量表达式]; int a[10]; 例:int a[10]; 1.定义: 类型 数组名[常量表达式]; 例:int a[10]; float b[20],c[15]; 2.存储 在内存分配若干连续空间给数组 数组元素个数,即数组长度 (不能用变量) 数组中每一个元素的类型 数组名代表数组的首地址,是地址常量 地址 1000 1002 … 1018 例如: /*以下是一个典型的错误定义方式!*/ int n; scanf("%d",&n); int a[n]; a[0] a[1] … a[9] a int a[10]; 分配内存

一维数组的引用 引用方法: 数组名[下标] 整型常量或整型表达式 取值:0~数组长度-1 引用方法: 数组名[下标] 整型常量或整型表达式 取值:0~数组长度-1 例如: 定义 int a[10]; /*可引用元素从a[0]~a[9]*/ a[5]=6; /*正确*/ a[3+4]=a[5]++; /*正确*/ a=a+5 /*错误*/ 数组作为一个整体,不能参加数据运算,只能对单个的元素进行处理

一维数组的引用 A0601 对数组赋值0~9, 并逆序输出 从键盘输入10个数 #include <stdio.h> void main() { int i,a[10]; for(i=0;i<10;i++) a[i]=i; for(i=9;i>=0;i--) printf("%d ",a[i]); } 输入数据之间用空格间隔! 定义数组 必须是常量 引用数组元素 可以是变量 输入 输出 scanf("%d",&a[i]); C1:例7-1 程序的运行情况: 9 8 7 6 5 4 3 2 1 0

一维数组的初始化 1. 初始化--在定义数组时对数组元素赋初值; 2. 初始化方法: 数组类型 数组名 [数组长度]={数组元素值}; 数组类型 数组名 [数组长度]={数组元素值}; ① 给全部元素赋初值 int a[5]={0,1,2,3,4}; ② 可以只给一部分元素赋初值; float b[5]={ , ,1.4,7.2}; ③ 在对全部数组元素赋初值时,可以不指定数组长度 int a[]={1,2,3};

一维数组举例 A0602 键盘输入10个数,将最大的数置于最后 void main() { int a[10], i,t; for(i=0;i<10;i++) /*键盘输入10个数 */ scanf("%d",&a[i]); for(i=0;i<9;i++) /* 将最大数置于最后 */ if(a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } for(i=0;i<=9;i++) /* 输出10个数*/ printf("%d ",a[i]); } 输入 处理核心 输出 依次比较相邻的2个数将较大数换到后面 运行结果 输入: 3 7 6 8 9 2 1 5 4 0 输出: 3 6 7 8 2 1 5 4 0 9

一维数组举例 A0603 : 冒泡排序。对10个整形从小到大排序 输入: 3 7 6 8 9 2 1 5 4 0 第0趟 3 6 7 8 2 1 5 4 0 9 第1趟 3 6 7 2 1 5 4 0 8 9 第2趟 3 6 2 1 5 4 0 7 8 9 第3趟 3 2 1 5 4 0 6 7 8 9 ……….. 第8趟 0 1 2 3 4 5 6 7 8 9 共进行 9趟找最大数 对第j趟,该趟比较9-j次 例7.3 for(j=0;j<9;j++) /* 9趟*/ for( i=0;i<9-j;i++) /*每趟比较9-j次*/ if(a[i]>a[i+1]) { 交换 }

一维数组举例 A0603: 冒泡排序。对10个整形从小到大排序 #include <stdio.h> void main() { int i,j,a[10],t; printf("input 10 numbers:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(j=0;j<9;j++) for(i=0;i<9-j;i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1]; a[i+1]=t;} printf("%d ",a[i]); } 输入 处理核心 输出 程序的运行情况: input 10 numbers: 2 6 1 4 5 10 9 8 3 7↙ 1 2 3 4 5 6 7 8 9 10

一维数组练习 A0604 键盘输入10个数,找最大数、最小数 及所在位置 #define N 10 void main() 分析: { int i,a[N],max,min; for(i=0;i<N;i++) scanf("%d",&a[i]); max=min=a[0]; for(i=1;i<N;i++) { if(a[i]>max) max=a[i]; if(a[i]<min) min=a[i]; } printf("\nmax=%d, min=%d\n",max,min); 分析: 输入:循环结构 变量定义:整形数组,最大数,最小数 ,max_i,min_i; 输入 处理核心 输出 max_i= min_i=0; { max_i=i; min_i=i; } printf("\nmax=%d, %d , min=%d,%d\n",max, max_i,min, min_i); 一维数组小结

思考 1. 有4个班所有学生的C语言成绩,找出最高成绩,并显示该学生学号和班级 例7-7 有一个3*4矩阵,找出最大的元素及其所在的行、列 数据是二维组织,需要"行、列"来控制数据 —— 二维数组 1. 有4个班所有学生的C语言成绩,找出最高成绩,并显示该学生学号和班级 例7-7 有一个3*4矩阵,找出最大的元素及其所在的行、列 定义 输入输出 使用/处理 1班 2班 3班 4班 学生1 80 85 78 90 学生2 75 80 76 83 学生3 90 92 85 87

二维数组的定义 a00 a01 a02 a03 a10 a11 a12 a13 a[3][4] a20 a21 a22 a23 1.定义: 类型 数组名[表达式1][表达式2]; 行数 列数 常量 例:float a[3][4], b[5][10]; int i=10; int b[i][3]; 错,不能用变量 例:二维数组int a[3][4] a可以看作一个一维数组,包含三个元素a[0]、a[1]、a[2] 每个元素如a[0]也是一个一维数组,包含4个元素 a[0] a[1] a[2] a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 a[3][4]

二维数组的定义 2.存储:元素在内存排列顺序为按行存放 可看作特殊的一维数组 例: int a[3][4]; a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] ……… a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 存储

二维数组的引用 输入 输出 引用:数组名[行下标] [列下标]; 例:a[2][3] A0605 二维数组输入与输出(二重循环) #include <stdio.h> void main() { int i,j,a[3][4]; for(i=0;i<3;i++) // 行 for(j=0;j<4;j++) //列 scanf("%d",&a[i][j]); for(i=0;i<3;i++) for(j=0;j<4;j++) printf("%d",a[i][j]); } 程序输入: 1 2 3 4↙ 5 6 7 8↙ 9 10 11 12↙ 习惯上:i 行 j 列 输入 输出 程序输出: 123456789101112 演示同行输出,讲解分行输出 程序输出: 1 2 3 4↙ 5 6 7 8↙ 9 10 11 12↙ { for(j=0;j<4;j++) printf("%4d",&a[i][j]); printf("\n"); }

二维数组的初始化 ⒈分行初始化 int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; ⒊ 部分元素初始化 int a[3][4]={{0,1},{0,6},{0,0,11}}; ⒋ 如果对全部元素都赋初值,则定义数组时可以不指定第一维的长度,但二维的长度不能省略。如: int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

二维数组举例 A0606 有一个3*4矩阵,找出最大的元素及其所在的行、列 int a[3][4] ={{80,85,78,90}, {75,80,76,83} , {90,92,85,87}}; int max,row=0,colum=0; 1班 2班 3班 4班 学生1 80 85 78 90 学生2 75 80 76 83 学生3 90 92 85 87 max=a[0][0]; for(i=0;i<3;i++) for(j=0;j<4;j++) if (a[i][j]>max) { max=a[i][j]; row=i; colum=j; } printf(" ", max, row, colum); 1 80 85 78 90 75 80 76 83 90 92 85 87 a= 2

二维数组举例 A0606有一个3*4矩阵,找出最大的元素及其所在的行、列 void main() { int a[3][4] ={{80,85,78,90}, {75,80,76,83} , {90,92,85,87}}; int max,row=0,colum=0,i,j; max=a[0][0]; for(i=0;i<3;i++) /*查找最大元素*/ for(j=0;j<4;j++) if (a[i][j]>max) { max=a[i][j]; row=i; colum=j; } for(i=0;i<3;i++) /*输出二维数组*/ { for(j=0;j<4;j++) printf("%3d",a[i][j]); printf("\n"); } printf("\nmax=%d,row=%d,colum=%d", max, row, colum); 核心 输出 1 80 85 78 90 75 80 76 83 90 92 85 87 a= 2

二维数组举例 A0607 有某班学生各门课的成绩单,求 (1)每个学生的平均成绩(2)每门课程的平均成绩 例7-8 有一个3*4矩阵,求行平均和列平均,并显示 语 数 外 C 学生1 80 85 78 90 学生2 75 80 76 83 学生3 90 92 85 87 平均 83.25 78.5 88.5 80 85 78 90 0 75 80 76 83 0 90 92 85 87 0 0 0 0 0 0 a= 83.25 333 314 354 78.5 88.5 平均 81.7 85.7 79.7 86.7 float a[4][5] ={{80,85,78,90,0}, {75,80,76,83,0} , {90,92,85,87,0},{0,0,0,0,0}};

二维数组举例 列位置为4, 固定不变a[i][4] A0607 有一个3*4矩阵,求行平均和列平均,并显示 /*行平均*/ for(i=0;i<3;i++) /*3行*/ { for(j=0;j<4;j++) /*4列*/ a[i][4] += a[i][j]; /*累加和 */ a[i][4] = a[i][4]/4; /*求平均 */ } 80 85 78 90 0 75 80 76 83 0 90 92 85 87 0 0 0 0 0 0 a= 83.25 333 314 354 78.5 88.5 80 85 78 90 0 75 80 76 83 0 90 92 85 87 0 0 0 0 0 0 a= /*列平均*/ for(j=0;j<4;j++) /*4列*/ { for(i=0;i<3;i++) /*3行/ a[3][j] += a[i][j]; /*累加和 */ a[3][j] = a[3][j]/3; /*求平均 */ } C3:实验六 2 245 81.7 行位置为3, 固定不变a[3][j] 二维数组小结

一维二维数组练习 1. 要说明一个有10个整型元素的数组,应当选择( ) A) int a[10]; B) int a[2,5]; 1. 要说明一个有10个整型元素的数组,应当选择( ) A) int a[10]; B) int a[2,5]; C) int a[]; D) int *a[10]; 2. 若说明有int a[10];则对数组元素引用正确的是( ) A) a[10] B) a[3-5] C) a(5) D) a[10-10] 3. int a[][3]={1,3,6,2,8,9,10,13};数组行数为 ( ) A) 2 B) 4 C)5 D)3

一维二维数组练习 (2) 有以下程序  main()  { int m[][3]={1,4,7,2,5,8,3,6,9};  int i,j,k=2;  for(i=0; i<3; i++)  { printf("%d ",m[k][i]); }  }  执行后输出结果是  A) 4 5 6  B) 2 5 8  C) 3 6 9  D) 7 8 9  1 4 7 2 5 8 3 6 9

思考 A0608:键盘输入一串字符,将其中的小写字母转换成大写字母后输出 A0609 :键盘输入一行字符,统计有多少个单词 字符数组的定义,输入,输出 A0609 :键盘输入一行字符,统计有多少个单词 单词统计方法 A0610:有三个字符串,找出其中最大者。例输入"Zhang" "Li" "Zhao",输出其中最大的 Li. 比较字符串大小 字符数组的整体赋值 if (x>y) max=x; else max=y;

字符数组的定义 定义: char 数组名[常量表达式]; 例: char a[5]; a[0]=‘A’; a[1]=' '; a[2]=‘B’; a[3]='o'; a[4]='y'; 则数组a在内存存储为 A B o y a[0] a[1] a[2] a[4] a[3]

字符数组的初始化 1. 逐个元素初始化 例如:char c[10]={'h','a','p','p','y'}; 有效字符结束标记 1. 逐个元素初始化 例如:char c[10]={'h','a','p','p','y'}; 将字符赋给数组中前面元素,其余元素自动定为空字符('\0') char c[]={'h','a','p','p','y'}; h a p y \0 数组长度 初值个数 > h a p y 长度省略,则 数组个数=初值个数 字符串常量自动 添加结束标记 2. 用字符串常量初始化字符数组 例如:char a[10] = {“happy”}; char a[] = {"happy"}; h a p y \0 h a p y \0

字符数组的输入输出1 例:char a[10]; 1.用格式符"%c"逐个字符输入输出: for(i=0;i<10;i++) a[i]=getchar(); for(i=0;i<10;i++) scanf("%c",&a[i]); 输入 输出 for(i=0;i<10;i++) putchar(a[i]); for(i=0;i<10;i++) printf("%c",a[i]); 输入:C programm↙ 输出:C programm 优点:可以输入任何字符,包括 空格、回车等特殊字符 缺点:必须指明输入字符的个数(灵活性差)

字符数组的输入输出2 2. 用格式符"%s"输入输出整个字符串 scanf("%s",a); /*数组名a前面没有&*/ printf("%s",a); /*注意: 用数组名a*/ 优点:输入字符的个数不限定,灵活 缺点:输入的字符中不能有空格(否则结束输入) 例:char s1[20]; scanf ("%s",s1); printf("%s",s1); 例:char s1[5],s2[5]; scanf ("%s%s",s1,s2); printf("%s %s",s1,s2); 输入:C prog↙ 输出:C prog 输入:C prog↙ 输出:C C \0 P r o g \0 S1 S2 空格 或 回车 标识一个 %s 输入结束 输入时,末尾自动添加\0 输出时,遇'\0'结束

字符数组的输入输出3 3.字符串输入函数gets、输出函数puts 输入:gets(字符数组) /*输入一串字符,以回车结束*/ 例: char str[20]; gets(str); puts(str); #include <stdio.h> C p r o g \0 … 输入:C prog↙ 输出:C prog 优点:输入字符的个数不限定,灵活   :输入的字符中可以有空格

字符串的 结束标记 '\0' 是判断字符串结束的标记 何时自动添加'\0' 1) 以字符串初始化时 2) 以%s输入字符串时 如: char c[ ]={"I am happy"}; 或: char c[ ]="I am happy"; 2) 以%s输入字符串时 scanf("%s",c); 3) 用gets接收字符串时 char str[20]; gets(str);

字符数组例题 A0608 :键盘输入一串字符,将其中的大写字母转换成小写字母后输出 数据结构: char str[80] 1. 输入字符串 (长度不确定) 2. 依次考察每个字符,将大写转换为小写 3. 输出 #include<stdio.h> void main() { char str[80]; int i; printf("input string:\n"); gets(str); for(i=0;str[i]!='\0';i++) if( str[i]>='A' && str[i] <='Z') str[i] += 32; puts(str); } gets(str) 循环:str[i]!='\0' puts(str) i=0; while(str[i]!='\0') { if( str[i]>='A' && str[i]<='Z') str[i] += 32; i++; } 输入:Hello World!↙ 输出:hello world!↙

字符数组例题 A0609 :键盘输入一行字符,统计有多少个单词 输入: Hello world! Everyone! ↙ 输出: 3 words 2 words 1. 输入 2. 判断单词 3. 输出 while 逐个输入并统计字符个数num if (str[0]!=' ' && str[0]!='\n') count++; 段首 for(i=0~num-1) puts str[i]==' ' && str[i+1]!=' ' 段首无空格则少统计一个单词!

字符数组例题 A0609 :键盘输入一行字符,统计有多少个单词 #include<stdio.h> void main() { char str[81]; int num=0,count=0,i; printf("input string:\n"); while((str[num]=getchar())!='\n') //逐个输入并统计字符个数num num++; if (str[0]!=' ' && str[0]!='\n') count++; //段首无空格单词数+1 for(i=0;i<num-1;i++) //判断并统计单词数量 if (str[i]==' ' && str[i+1]!=' ') count++; printf("\n %d words\n",count); //输出 } gets(str); num=strlen(str);

字符串处理函数 strlen 计算字符串长度的函数 函数原型: int strlen(s); 函数功能:求出字符串或字符数组中实际字符个数(不包括'\0')。 例:char st[20]={"hello\0abce\0abc\0"}; printf("%d\n",strlen(st)); 程序运行结果: 5

字符数组应用举例 A0610 有三个字符串,找出其中最大者。例输入"Zhang" "Li" "Zhao",输出其中最大的 Zhao. #include <stdio.h> void main() { char s1[10], s2[10], s3[10], max[10]; gets(s1); gets(s2); gets(s3); max=s1; if (s2>max) max=s2; if (s3>max) max=s3; puts(max); } 分析: 定义3+1个字符串 输入3个字符串 比较,找出最大值 输出最大值 错! 不允许数组 整体赋值、 整体比较! 可以用字符串处理函数

字符串比较函数 strcmp 函数原型:int strcmp(s1,s2); 函数功能: 从左到右逐个比较s1、s2中各个字符的ASCII码,直到出现不同字符或遇到结束标记为止。 0 当s1=s2 函数值= 负整数 当s1<s2 正整数 当s1>s2 此处在黑板上举例:关于字典序的问题 例1: strcmp(" d ", " abc ") strcmp(" dog ", " door ") 例2:如果字符串s1大于s2,则输出提示信息“s1>s2” if (strcmp(s1,s2)>0) printf("s1>s2"); 结果为正整数 结果为负整数

字符串拷贝函数 strcpy 函数: strcpy(s1,s2); //字符串拷贝函数 功能:将字符串s2复制到字符数组s1中,返回s1。 例如: static char a[10]="abcdefghi",b[]="happy"; strcpy(a,b); a数组内存原始情况: a b c d e f g h i \0 函数调用后a、b数组内存情况: h a p p y \0 g h i \0

字符数组应用举例 A0610有三个字符串,找出其中最大者。例输入"Zhang" "Li" "Zhao",输出其中最大的 Zhao. 有10个字符串 #include <stdio.h> void main() { char s1[10], s2[10], s3[10], max[10]; gets(s1); gets(s2); gets(s3); max=s1; if (s2>max) max=s2; if (s3>max) max=s3; puts(max); } 分析: 定义3+1个字符串 输入3个字符串 比较,找出最大值 输出最大值 strcpy(max,s1); if (strcmp(s2,max)>0) strcpy(max,s2); if (strcmp(s3,max)>0) strcpy(max,s3);

字符数组应用举例 #define N 3 void main() { char s [3][10],max[10] ; int i ; 0 1 2 3 4 5 6 7 8 9 #define N 3 void main() { char s [3][10],max[10] ; int i ; printf("input %d strings:\n",N); gets(s[0]); strcpy(max,s[0]); for( i=1;i< 2 ;i++) { gets(s[i]); if (strcmp(s[i],max)>0) strcpy(max,s[i]); } puts(max); } S[0] S[1] S[2] S[3][10] z h a n g \0 l i o N S[i]>max 输入字符串s[i] 输入字符串S[0] Max=s[i] Max=S[0] i++ 真 假 N 字符数组小结

字符串处理函数 使用字符串函数需包含头文件 #include <string.h> strlen 返回字符串长度 strcmp 字符串比较 strcpy 字符串拷贝 strcat 字符串连接

字符串连接函数 strcat 字符串连接函数 函数:strcat(S1,S2); 功能: 删去s1的'\0',将s2连接到s1尾部,返回连接以后的字符串。 例: char a[20]="My name is ",b[10]="Li ming"; strcat(a,b); 执行 strcat(a,b); 后数组a M y n a m e i s L g \0 二维数组小结

字符数组练习 1.合法的数组定义是( ) A) int a[]="string"; B)int a[5]={0,1,2,3,4,5}; 1.合法的数组定义是( ) A) int a[]="string"; B)int a[5]={0,1,2,3,4,5}; C) char a="string"; D)char a[]={0,1,2,3,4,5}; 2. 函数strlen("abcd\0ef\0g")的结果值为( ) A) 2 B)3 C)4 D)5 3.Char s[5],c;int b;以下正确的调用语句是 ( )。 A)scanf("%s%c",s,c); B)scanf("%%d%c",&b,&c); C)scanf("%d%%c",b,&c); D)scanf("%s%c",s,&c); 4、判断字符串s1是否大于字符串s2,应当使用 ( ) A) if(s1>s2) B) if(strcmp(s1,s2)) C) if(strcmp(s1,s2)>0) D) if(strcmp(s2,s1)>0)

数组定义及初始化练习 定义如下数据 1. 某学生5门课成绩 75,80,83,91,78 2. 字符串 I'm a good student! 3. 矩阵 4. 学生姓名数组 zhang3, li4, wang5 5. 由键盘输入3个学生5门课成绩 1 2 3 4 5 6 7 8 9 10 11 12

数组定义及初始化练习解答 1.某学生5门课成绩 75,80,83,91,78 int score[5]={75,80,83,91,78}; 2.字符串 I am a good student! char str[]={"I am a good student!"}; char str[]="I am a good student!"; char str[]={'I',' ','a','m',……}; 3. 矩阵 int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 1 2 3 4 5 6 7 8 9 10 11 12

数组定义及初始化练习解答 4.学生姓名数组 zhang3, li4, wang5 char name[][10]={"zhang3","li4","wang5"} char name[3][10]={"zhang3","li4","wang5"} 5.由键盘输入3个学生5门课成绩 int score[3][5],i,j; for(i=0;i<3;i++) for(j=0;j<5;j++) scanf("%d",&score[i][j]);

小结 —— 一维数组 数组定义 数组的引用 数组初始化 类型 数组名[常量表达式]-----int a[10] 数组连续存放 小结 —— 一维数组 数组定义 类型 数组名[常量表达式]-----int a[10] 数组连续存放 数组名代表数组存储的首地址 数组的引用 a[i], 数组引用 a[0]…..a[N-1] 常用for循环配合访问数组元素 数组初始化 int a[5]={0,1,2,3,4}; 常用于程序测试阶段

小结 —— 二维数组 二维数组定义 a00 a01 a02 a03 a10 a11 a12 a13 二维数组初始化 a[3][4] 小结 —— 二维数组 二维数组定义 类型 数组名[行] [列] (常量) 数组按行连续存放 数组名代表数组首地址 二维数组初始化 int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 二维数组的引用 a[i][j], 数组引用 a[0][0]…..a[M-1][N-1] 常用二重for循环配合访问数组元素 a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 a[0] a[1] a[2] a[3][4]

小结 —— 字符数组 字符数组定义 字符数组输入、输出 字符串函数 类型 数组名[行] [列] (常量) 小结 —— 字符数组 字符数组定义 类型 数组名[行] [列] (常量) 初始化: char a[] = {“happy”}; ‘\0’ :判断字符串结束的标记 字符数组输入、输出 gets(str) puts(str) 字符串函数 求长度 strlen 字符串比较 strcmp 字符串赋值 strcpy 0 1 2 3 4 5 6 7 8 9 S[0] S[1] S[2] S[3][10] z h a n g \0 l i o

数组---习题 B0601(习题6.4)把一个整数x按大小顺序插入已排好序(从大到小)的数组a中。假设数组a中有10个数。 B0602: 判断一个字符串是否为回文串(回文串指正读反读都一样的字符串,如:字符串“abc121cba”) B0603:对若干姓名进行排序并显示。

游戏扩展 C0601 数组小游戏:连连看。请找出和给定坐标有相同图案的另一个坐标。(给定坐标是随机生成)