第六单元 应用数组的程序设计 从现在开始,将详细讲述C语言的方方面面。第一章中的所有疑惑,都将一一消灭。

Slides:



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


数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
只怕有心人只怕有心人 世上无难事世上无难事 浙江长征职业技术学院 — 计算机与信息技术系 — 相方莉制作.
电子成绩单项目实现.
C程序设计 第6章 数 组 主讲教师: 鲁 萍 西安建筑科技大学 理学院 任务:键盘输入整数,排序.
二级指针与二维数组.
第6章 数组 公共计算机基础教研部.
第九章 字串 (String).
一维数组 乾坤以有亲可久; 君子以厚德载物。.
C语言程序设计.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
字符串与二维数组.
第九章 字符串.
第5讲 数组 5.1 一维数组 5.2 二维数组 5.3 字符串数组 5.4 综合案例分析.
第六章 数 组 主讲教师 贾月乐 联系电话:
程序设计II 第三讲 字符串处理.
C语言高级编程(第四部分) 字符串 北京大学 信息科学技术学院.
第7章 构造数据类型 构造数据类型:数组、结构体、共用体、用户自定义类型 7.1 数组
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++语言程序设计.
第6章 数 组 本章要点: 数组的定义、初始化、数组元素的引用 字符数组的输入输出 字符串处理函数 数组的应用 学习方法建议:
第四章 数组 4.4.1一维数组的定义和初始化 一、一维数组的定义和初始化 1.一维数组定义 定义格式:类型 数组名[常量表达式];
第五章 习题课 电子信息与计算机科学系 曾庆尚.
第七章 操作符重载 胡昊 南京大学计算机系软件所.
数组 梁春燕 华电信息管理教研室.
第六章 数组 西安工程大学.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第5讲 数组 5.1 一维数组 5.2 二维数组 5.3 字符串数组 5.4 综合案例分析.
|09 陣列.
C语言概述 第一章.
第七章 数组.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第4章 数组 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)
C语言大学实用教程 第6章 数组 西南财经大学经济信息工程学院 刘家芬
第六章 数组.
C语言的特点 1. C程序由许多函数组成 2. C程序必须有且只有一个主函数main( ) 3. 函数用“{”和“}”表示起点和终点
请编写如下程序: 输入100名学生的成绩,要求输出高于平均分的成绩。
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第6章 数组.
第4章 Excel电子表格制作软件 4.4 函数(一).
5.4.1 二维数组 (一) 二维数组的定义 1. 二维数组定义的一般形式 类型说明符 数组名[常量表达式][ 常量表达式]
C qsort.
C程序设计.
第九节 赋值运算符和赋值表达式.
3.16 枚举算法及其程序实现 ——数组的作用.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
Introduction to the C Programming Language
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
插入排序的正确性证明 以及各种改进方法.
C 程式設計— 字元與字串 台大資訊工程學系 資訊系統訓練班.
字串 第10章 part I 8/30/2019.
陣列與檔案處理 授課:張朝麟 日期:2009/3/11.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
台大資訊工程學系 資料系統訓練班 第119期 吳晉賢
C语言基础学习 从外行到入门.
Presentation transcript:

晏文靖 yanwenjing@jscpu.com 第六单元 应用数组的程序设计 从现在开始,将详细讲述C语言的方方面面。第一章中的所有疑惑,都将一一消灭。 本章将讲述类型、变量、常量、数组等。这些概念的建立是进行进一步C语言学习的必要条件。同时,这些概念也是各种高级语言的共通概念。 晏文靖 yanwenjing@jscpu.com

内容提要 数组类型; 常用算法:查找、求最大最小值等; 用字符数组存取字符串; 使用字符串处理函数处理字符串 向函数传递一维数组和二维数组;

数组的用处 保存大量同类型的相关数据 如矩阵运算,表格数据等

现场编程 从键盘输入学生的成绩,求出成绩平均分并打印出所有学生的成绩。 打印出最高分的学生成绩。 打印出最高、最低分的学生成绩

a 数组(Array) 数组首地址 int score[10]; 定义一个有10个元素的数组,每个元素的类型均为int 使用score[0]、score[1]、score[2]、……、score[9]这样的形式访问每个元素。它们与普通变量没有任何区别 系统会在内存分配连续的10个int空间给此数组 数组下标可以是整型表达式 score[5] 数组首地址 score[4] score[3] score[1] a score[0]

数组的使用 数组的下标都是从0开始 对数组每个元素的使用与普通变量无异 可以用任意表达式作为下标,动态决定访问哪个元素 下标越界是大忌! for (i=0; i<SIZE; i++) a[i] = 2 * i; 下标越界是大忌! 使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,可能带来严重后果 sizeof可以用来获得数组大小

数组的定义与初始化 数组定义后的初值仍然是随机数,一般需要我们来初始化 int a[5] = { 12, 34, 56 ,78 ,9 }; 数组大小最好用符号常量来定义,以适应未来可能的变化 #define SIZE 10 int a[SIZE]; 数组大小定义好后,将永远不变

数组的特点 保存大量同类型的相关数据 快速地随机访问 一旦定义,不能改变大小

例 求Fibonacci数列前40项并输出

现场演示排序算法 排序的方法很多,主要有: 冒泡法 选择法 希尔法 插入法

应用举例(排序:冒泡法) 假定有5个无序的数 21,13,90,32,-1(从小到大) 第1轮比较4次:第1次 21 13 90 32 -1 进行交换 第2次 13 21 90 32 -1 不进行交换 第3次 13 21 90 32 -1 进行交换 第4次 13 21 32 90 -1 进行交换 第1轮比较结果: 13 21 32 -1 90 最大的数已排好

应用举例(排序:冒泡法)续 第2轮比较3次:第1次 13 21 32 -1 90 不进行交换 第2轮比较3次:第1次 13 21 32 -1 90 不进行交换 第2次 13 21 32 -1 90 不进行交换 第3次 13 21 32 -1 90 进行交换 第2轮比较结果: 13 21 -1 32 90 第3轮比较2次:第1次 13 21 -1 32 90 不进行交换 第2次 13 21 -1 32 90 进行交换 第3轮比较结果: 13 -1 21 32 90 第4轮比较1次:第1次 13 -1 21 32 90 进行交换 第4轮比较结果: -1 13 21 32 90

应用举例(排序:冒泡法)续 for(i=1;i<=N-1;i++) for(j=0;j<N-i;j++) if(a[j]>a[j+1]) {med=a[j]; a[j]=a[j+1]; a[j+1]=med;} 第j次比较 排序过程: (1)比较第一个数与第二个数,将小的调到前头;然后比较第二个数 与第三个数;依次类推,直至第n-1个数和第n个数比较为止— 第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上 (2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在 第n-1个元素位置 (3)重复上述过程,共经过n-1趟冒泡排序后,排序结束

例 用简单选择法对10个数排序 排序过程: (1)首先通过n-1次比较,从n个数中找出最小的, 将它与第一个数 例 用简单选择法对10个数排序 排序过程: (1)首先通过n-1次比较,从n个数中找出最小的, 将它与第一个数 交换—第一趟选择排序,结果最小的数被安置在第一个元素位置上 (2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录, 将它与第二个数交换—第二趟选择排序 (3)重复上述过程,共经过n-1趟排序后,排序结束

min min min 例 i=1 初始: [ 49 38 65 97 76 13 27 ] 13 49 j j j j j j min min i=2 一趟: 13 [38 65 97 76 49 27 ] 27 38 j j j j j 二趟: 13 27 [65 97 76 49 38 ] 三趟: 13 27 38 [97 76 49 65 ] 四趟: 13 27 38 49 [76 97 65 ] 五趟: 13 27 38 49 65 [97 76 ] 六趟: 13 27 38 49 65 76 [97 ]

#include <stdio.h> main() { int a[10],i,j,min,x; printf("Input 10 numbers:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(i=0;i<9;i++) { min=i; for(j=i+1;j<10;j++) if(a[j]<a[min]) min=j; if(i!=min) { x=a[i]; a[i]=a[min]; a[min]=x;} } printf("The sorted numbers:\n"); printf("%d ",a[i-1]);

二维数组的定义 格式: 数据类型 数组名[常量表达式][常量表达式] int b[2][3]; 格式: 数据类型 数组名[常量表达式][常量表达式] int b[2][3]; b为2×3(2行3列)的数组,注意下标范围 b[0] b[1] ---- b[0][0] b[0][1] b[0][2] b ---- b[1][0] b[1][1] b[1][2]

二维数组的存储结构 int b[2][3]; 存放顺序:按行存放,先顺序存放第一行的元素,再存放第二行的元素 b[0][2] b[0][1]

二维数组元素的引用 形式: 数组名[下标][下标] 二维数组元素的初始化 分行初始化: 形式: 数组名[下标][下标] 二维数组元素的初始化 分行初始化: 例 int a[2][3]={{1,2,3},{4,5,6}}; a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 1 2 3 4 5 6 全部初始化 例 int a[2][3]={{1,2},{4}}; a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 1 2 4 部分初始化 例 int a[][3]={{1},{4,5}}; a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 1 4 5 第一维长度省略初始化 例 int a[2][3]={1,2,4}; a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 1 2 4 部分初始化 按元素排列顺序初始化 例 int a[2][3]={1,2,3,4,5,6}; a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 1 2 3 4 5 6 全部初始化 例 int a[][3]={1,2,3,4,5}; a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 1 2 3 4 5 第一维长度省略初始化

二维数组的输入和输出 数组的输入和输出只能逐个对数组元素进行操作(字符数组例外) int b[2][3],i,j; 输出方法: 输入方法: scanf(“%d”,&a[i][j]); 输入整个数组元素: for (i=0;i<2;i++) for(j=0;j<3;j++) 输出方法: 输出第i行第j列元素: printf(“%d”,a[i][j]); 输出整个数组元素: for (i=0;i<2;i++) for(j=0;j<3;j++)

现场编程 二维数组中最大元素值及其行列号

例 计算总分和平均分 for (j=0; j<COURSE; j++) { sum[j] = 0; for (i=0; i<n; i++) sum[j] = sum[j] + score[i][j]; } aver[j] = (float) sum[j] / n;

字符串(String)与字符数组 字符串 字符数组 一串以'\0'结尾的字符在C语言中被看作字符串 每个元素都是字符类型的数组 char string[80];

字符数组的初始化 用字符型数据对数组进行初始化 用字符串常量直接对数组初始化 char str[6] = {'C','h','i','n','a','\0'}; 用字符串常量直接对数组初始化 char str[6] = { "China"}; char str[6] = "China"; char str[10] = "China"; char str[] = "China"; char str[] = {'C','h','i','n','a'};

字符数组的输入输出 逐个输入输出 一次性输入输出 char s[10]; scanf("%s",s); printf("%s",s); for (i=0; s[i]!='\0'; i++) { putchar(s[i]); } putchar('\n'); gets(s); puts(s);

scanf() int i; scanf("%d", &i); /* 假如不用&i,就用i,能达到效果吗?*/ char str[10]; scanf("%s", str); 不能读入带空格的字符串,gets()可以

gets puts 字符串的输入gets(字符数组) 字符串的输出 puts(字符数组) 格式:gets(ch) 功能:从终端输入一个字符串到字符数组ch中,输入回车键时结束,并将回车符‘\n’转换成 '\0' ,其中ch只能是一个字符数组名。 字符串的输出 puts(字符数组) 格式:puts(ch) 功能:向终端输出字符串,并将'\0'转换成'\n'输出,其中ch可以是某个字符数组名,也可以是一个字符串常量。

字符串处理函数(string.h) 字符串不能直接整体复制! 在<string.h>中定义了若干专门的字符串处理函数 strcpy: string copy char *strcpy(char *dest, const char *src); strlen: string length size_t strlen(const char *s); 返回字符串的实际长度,不包括'\0' strcat: string combination char *strcat(char *dest, const char *src); strcmp: string comparison int strcmp(const char *s1, const char *s2); 当出现第一对不相等的字符时,就由这两个字符决定所在字符串的大小 字符串不能直接整体复制! str1=str2 /*错误*/

‘\0’作为字符串结束符的天生缺陷 假若交给这些字符串处理函数的字符串没有'\0'会如何? '\0'很关键,如果没有,那么这些处理函数会一直进行处理直到遇到一个'\0'为止。此时可能已经把内存弄得乱七八糟 ANSI C定义了一些“n族”字符处理函数,包括strncpy、strncat、strncmp等,通过增加一个参数来限制处理的最大长度 char *strncpy(char *dest, const char *src, unsigned int count);

现场编程 输入一行文字,找出其中大写字母,小写字母,空格,数字及其它字符各有多少?

现场编程 从键盘任意输入5个学生的姓名,编程找出并输出按字典顺序排在最前面的学生姓名 等价于求最小字符串

#include <stdio.h> #include <string.h> #define ARRAY_SIZE 80 main() { int n, num; char str[ARRAY_SIZE], min[ARRAY_SIZE]; printf("Please enter five names:\n"); gets(str); strcpy(min, str); for (n=1; n<5; n++) if (strcmp(str, min) < 0) } printf("The min is:"); puts(min);

现场编程 将5个学生的姓名按字典顺序排列

二维字符数组 定义 引用 初始化 char str[3][6]; 相当于三个一维字符数组,可以存放三个字符串 可以单独输出某一个元素,也可以输出某一行的元素,即某一个字符串。如: printf(“%s”,str[2]); 初始化 char str[3][6]={”China”,”Japan”,”Korea”}; C h i n a \0 J a p a n \0 K o r e a \0