第6章 数组.

Slides:



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

只怕有心人只怕有心人 世上无难事世上无难事 浙江长征职业技术学院 — 计算机与信息技术系 — 相方莉制作.
《C语言程序设计》复习
C程序设计 第6章 数 组 主讲教师: 鲁 萍 西安建筑科技大学 理学院 任务:键盘输入整数,排序.
二级指针与二维数组.
第6章 数组 公共计算机基础教研部.
第一章 C语言概述 计算机公共教学部.
一维数组 乾坤以有亲可久; 君子以厚德载物。.
C语言程序设计.
4.3 使用二维数组 P 求两个矩阵的和 求方阵对角线上元素之和 显示算术题和学生答题信息
C语言实验 第一课 标题:学号+姓名.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
字符串与二维数组.
第4章 选择结构程序设计 在现实生活中,需要进行判断和选择的情况是很多的 如果你在家,我去拜访你 如果考试不及格,要补考
C语言程序设计 第十二章 位运算.
复习与总结.
第六章 数 组 主讲教师 贾月乐 联系电话:
高级语言程序设计 主讲人:陈玉华.
循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
项目六 用指针优化学生成绩排名 项目要求 项目分析
C程序设计.
C语言高级编程(第四部分) 字符串 北京大学 信息科学技术学院.
第7章 构造数据类型 构造数据类型:数组、结构体、共用体、用户自定义类型 7.1 数组
目录 第八章 数组 1 简单学生成绩管理系统的开发 2 一维数组 3 多维数组 4 字符数组 5 数组作函数参数.
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
第6章 利用数组处理批量数据.
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
C语言 程序设计基础与试验 刘新国、2012年秋.
第六单元 应用数组的程序设计 从现在开始,将详细讲述C语言的方方面面。第一章中的所有疑惑,都将一一消灭。
第6章 数 组 本章要点: 数组的定义、初始化、数组元素的引用 字符数组的输入输出 字符串处理函数 数组的应用 学习方法建议:
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
第八章 使用指针.
計數式重複敘述 for 迴圈 P
第五章 习题课 电子信息与计算机科学系 曾庆尚.
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
数组 梁春燕 华电信息管理教研室.
第六章 数组 西安工程大学.
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
C语言概述 第一章.
第七章 数组.
C语言大学实用教程 第5章 函数与程序结构 西南财经大学经济信息工程学院 刘家芬
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C语言复习3----指针.
第4章 数组 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)
C语言大学实用教程 第6章 数组 西南财经大学经济信息工程学院 刘家芬
请编写程序在屏幕上打印出一个“*”? printf(”*\n”); 请编写程序在屏幕上打印四行,每行一个“*”?
第六章 数组.
C语言的特点 1. C程序由许多函数组成 2. C程序必须有且只有一个主函数main( ) 3. 函数用“{”和“}”表示起点和终点
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
C程序设计.
C qsort.
C程序设计.
第4章 数 组.
資料結構與C++程式設計進階 遞迴(Recursion) 講師:林業峻 CSIE, NTU 6/ 17, 2010.
第九章 指针.
第九节 赋值运算符和赋值表达式.
3.16 枚举算法及其程序实现 ——数组的作用.
第二章 类型、对象、运算符和表达式.
实验七 数 组 第21讲 C程序设计 Main() { int x,y; X=10; y=x*x+1;
单片机原理及应用 实践部分 主讲人:刘 强 四川工商学院单片机教学团队 单片机原理及应用 实践部分 主讲人:刘 强
本节内容 指针类型.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
第七章  数 组.
Chap 7 数 组 7.1 排序问题 7.2 找出矩阵中最大值所在的位置 7.3 进制转换.
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C语言基础学习 从外行到入门.
Presentation transcript:

第6章 数组

主要内容 一、一维数组 二、二维数组 三、字符数组

一、一维数组 一组编了号的变量。 1、定义 格式: 类型名 数组名[常量表达式]; int a[5]; float b[3*2]; 1 2 格式: 类型名 数组名[常量表达式]; int a[5]; float b[3*2]; 1 2 3 4 5 6 7 8 9 a 12 5 7 9 24 15 36 27 10 19

一、一维数组 2、数组元素的引用 格式: 数组名[下标] 下标:从0开始 如:a[1]

一、一维数组 3、数组元素的赋值 (1)定义时赋值 int a[3]={1,2,3},b[4]={0},c[]={1,2,3,4}; (2)程序运行中赋值 a[0]=1; for(i=0;i<=2;i++) scanf("%d",&a[i]); //从键盘上输入3个数

一、一维数组 4、实例 例1 从十个数中查找最大数。 1 2 3 4 5 6 7 8 9 a 12 5 7 9 24 15 36 27 10 例1 从十个数中查找最大数。 1 2 3 4 5 6 7 8 9 a 12 5 7 9 24 15 36 27 10 19

一、一维数组 max=a[0]; if (max<a[1]) max=a[1]; if (max<a[2]) max=a[2]; 1 2 3 4 5 6 7 8 9 a 12 5 7 9 24 15 36 27 10 19 max=a[0]; if (max<a[1]) max=a[1]; if (max<a[2]) max=a[2]; if (max<a[3]) max=a[3]; if (max<a[4]) max=a[4]; if (max<a[5]) max=a[5]; if (max<a[6]) max=a[6]; if (max<a[7]) max=a[7]; if (max<a[8]) max=a[8]; if (max<a[9]) max=a[9]; max=a[0]; for(i=1;i<=9;i++) if (max<a[i]) max=a[i];

一、一维数组 #include <stdio.h> void main() { int i, max,a[10]; for(i=0;i<=9;i++) scanf(“%d”,&a[i]); max=a[0]; for(i=1;i<=9;i++) if (max<a[i]) max=a[i]; printf(“MAX is %d”,max); }

一、一维数组 例2 对n个数按从小到大的顺序排列。 起泡排序法:将相邻两个数比较,将小的数调到前头。 1 2 3 4 5 a 9 8 5 4 1 2 3 4 5 a 9 8 5 4 2 8 9 5 4 2 8 5 9 4 2 第一趟:最大的数调到了最后 8 5 4 9 2 8 5 4 9 2 8 5 4 2 9

一、一维数组 例2 对n个数按从小到大的顺序排列。 if (a[0]>a[1]) a[0]<->a[1] ; 起泡排序法:将相邻两个数比较,将小的数调到前头。 1 2 3 4 5 a 9 8 5 4 2 if (a[0]>a[1]) a[0]<->a[1] ; if (a[1]>a[2]) a[1]<->a[2] ; if (a[2]>a[3]) a[2]<->a[3] ; if (a[3]>a[4]) a[3]<->a[4] ; if (a[4]>a[5]) a[4]<->a[5] ; for(j=0;j<5;i++) if (a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; }

一、一维数组 for(j=0;j<5;i++) if (a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t;} for(j=0;j<4;i++) if (a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t;} for(i=0; i<5; i++) for(j=0; j<5-i; i++) if (a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t;} for(j=0;j<3;i++) if (a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t;} for(j=0;j<2;i++) if (a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t;}

一、一维数组 #include <stdio.h> void main() { int i, max,a[10]; for(i=0;i<=9;i++) scanf(“%d”,&a[i]); for(i=0; i<9; i++) for(j=0; j<9-i; i++) if (a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t;} printf(“the sorted numbers:\n”); printf(“%d ”, a[i]); }

一、一维数组 例3 在n个数中查找是否存在一个数 x 。 折半查找法: x=45 1 2 3 4 5 6 7 8 9 a 12 45 48 1 2 3 4 5 6 7 8 9 a 12 45 48 51 57 68 89 90 95 98 i j mid x=a[mid]?

一、一维数组 思路: 给数组a[15]赋值 ; 读入x的值; i=0; j=14; while (i<j) { mid=(i+j)/2; if ( x==a[mid] ) {printf("%d在第%d位",a[mid],mid); break;} else if (x>a[mid]) i=mid+1; else j=mid-1; } if (i>j) printf("无此元素");

一、一维数组 #include<stdio.h> void main() { int a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; int i,j,x,mid; scanf("%d",&x); i=0;j=14; while(i<=j) { mid=(i+j)/2; if (x==a[mid]) { printf("%d在第%d位",a[mid],mid); break; } else if (x>a[mid]) i=mid+1; else j=mid-1; } if(i>j) printf("无此元素");

二、二维数组 1、定义 格式: 类型 数组名[常量表达式][常量表达式]; int a[3][3];

二、二维数组 2、数组元素的引用 int a[3][2]; a[0][1]=8; 1 1 2 a[0][0] a[0][1] a[1][0] 1 1 2 a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]

二、二维数组 3、赋值 int a[2][2]={{1,2},{3,4}}; a[0][0]=1; for(i=0;i<=1;i++) for(j=0;j<=1;j++) a[i][j]=i+j; 1 2

二、二维数组 4、实例 例4 查找矩阵中的最大数。 max=-1,r=0,c=0 if (max<a[0][0]) 例4 查找矩阵中的最大数。 max=-1,r=0,c=0 if (max<a[0][0]) max=a[0][0]; for(i=0;i<=2;i++) a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[2][0] a[2][1] a[2][2] for(j=0;j<=2;j++) if (max<a[0][j]) {max=a[0][j]; r=0; c=j; } for(j=0;j<=2;j++) if (max<a[i][j]) {max=a[i][j]; r=i; c=j; } if (max<a[0][1]) max=a[0][1]; if (max<a[0][2]) max=a[0][2]; .......... if (max<a[2][2]) max=a[2][2];

二、二维数组 例5 矩阵的加法。 for(i=0;i<=2;i++) for(j=0;j<=2;j++) 例5 矩阵的加法。 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[2][0] a[2][1] a[2][2] b[0][0] b[0][1] b[0][2] b[1][0] b[1][1] b[1][2] b[2][0] b[2][1] b[2][2] for(i=0;i<=2;i++) for(j=0;j<=2;j++) a[i][j]+=b[i][j];

二、二维数组 练习: 矩阵的各元素之和。 for(i=0;i<=2;i++) for(j=0;j<=2;j++) ? 练习: 矩阵的各元素之和。 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[2][0] a[2][1] a[2][2] for(i=0;i<=2;i++) for(j=0;j<=2;j++) ?

三、字符数组 1、定义 char c1[5]; int c2[5]; c1[0]='a'; c2[0]='a';

三、字符数组 2、字符数组的初始化 char c[10]={'I','a','m','a','b','o','y'}; for(i=0;i<=9;i++) scanf("%c",&c[i]);

三、字符数组 3、字符串和字符串结束标志 字符串用字符数组来表示,字符串标志为'\0' char c[10]="I am a boy"; 等价于 char c[10]={'I','a','m','a','b','o','y','\0'};

三、字符数组 4、字符数组的输入和输出 char c[10]; scanf("%s",c); printf("%s",c);

三、字符数组 5、字符串处理函数 (1) puts(str) :输出字符串 (2) gets(str) : 输入字符串 (3) strcat(str1,str2) : 连接字符串 (4) strcpy(str1,str2)、strncpy(str1,str2) : 字符串复制 (5) strcmp(str1,str2) : 比较字符串 (6) strlen(str) : 测字符串长度 (7) strlwr(str) : 转换为小写 (8) strupr(str) : 转换为大写

三、字符数组 6、实例 例6 输入一行字符,统计其中有多少个单词,单词间用空格相隔。 word: 0--未出现新词,1--新词开始 I a 例6 输入一行字符,统计其中有多少个单词,单词间用空格相隔。 word: 0--未出现新词,1--新词开始 I a m b o y . word=0 word=1 num++; word=0 直到遇到'\0'结束

三、字符数组 #include<stdio.h> void main() { char string[81],c; int i,num,word=0; gets(string); for(i=0;(c=string[i])!='\0';i++) if (c==' ') word=0; else if (word==0) {word=1; num++;} printf("单词总数为%d",num); }

三、字符数组 例7 从键盘上输入身份证号,截取出生年月并输出。 4 2 3 6 1 9 8 5 X

三、字符数组 #include<stdio.h> void main() { char string[25]; int i; gets(string); for(i=6;i<=13;i++) c[i-6]=string[i]; c[8]='\0'; printf("出生年月为%s",c); }

习题1 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。 四、综合实例 习题1 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。 1 2 3 4 5 6 7 8 9 a 12 45 48 51 57 68 89 90 95 98 x=87 89 90 95 98 a[10]=a[9] a[i+1]=a[i] a[9]=a[8] i: 6~9 a[8]=a[7] a[6]=x a[7]=a[6] a[6]=x

四、综合实例 习题2 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。 a[3][3]: 8 1 6 习题2 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。 a[3][3]: 8 1 6 3 5 7 4 9 2 k=0,h=0 对第一行:k=0,h=0 for(i=0;i<3;i++) if a[k][h]<a[0][1] h=1; {for(j=1;j<3;j++) if (a[k][h]<a[i][j]) h=j; for(j=1;j<3;j++) if (a[k][h]<a[0][j]) h=j; if a[k][h]<a[0][2] h=2; if a[k][h]>a[0][h] break; j=0; while (a[k][h]<a[j][h] && j<3) j++; if a[k][h]>a[1][h] break; if (j>3) a[k][h]是鞍点; if a[k][h]>a[2][h] break; } if (i>3 && j>3) 没有鞍点;

四、综合实例 习题3 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数。 a[3][80]: lsff UYIJ n IUJ ;k;sdf gets(a[0]); ABCFD fgthhy uh8ghj* 9 for(i=0;(c=a[0][i])!='\0';i++); dffd56678 768 ,;.k { if c是大写字母 个数+1; if c是小写字母 个数+1; if c是.....................; }