崔C第5章数组教案学生-1(2009.3.23)
c程序第5章课件

28
5.2.2 二维数组的引用
二维数组地址的引用 :
元素a[i][j] 的地址是&a[i][j];
二维数组的数组名代表该数组的首地址;
比如 a,实际上就是&a[0][0]。
二维数组元素在内存中按行存放,第1行的首 地址为a[0] ,第2行的首地址为a[1] ,......, 第n行的首地址为a[n-1]。 &a[i][j]等价于a[i]+j。
例5-5 用冒泡法对数组中的数进行排序。(按 由小到大升序)
③
3 1 1 1 1 1 3 3 3 3
④
1 1 1 1 1 3 3 3 3 3
5 5 5 5 5
6 6 6 6 6 7 7 7 7 7
22
5 5 5 5 5
6 6 6 6 6 7 7 7 7 7
5.1.2 一维数组的引用
将N个数存入数组中
二维数组的定义形式为:
类型名 数组名[行下标长度][列下标长度];
如:int a[10][10];
它表示:
• 定义了一个数组,名字叫a;
• a数组的数据类型是int [10][10],表示存 储10*10个int型元素的数据类型;
• 这100个int型元素的名字分别是: a[0][0],a[0][1], ...... ,a[9][9]
row
①
5 6
1 6
1
1 3
1 3
row ② 3 row 1 row 7 row
17
row
3
3 row ③ 5 row 7 row
6 row 5 row ④
C电子教案第5章

第5章循环结构程序设计5.1 概述在C语言中,构成循环的语句有4种:1 用goto和if语句;2 用while语句;3 用do-while语句;4 用for语句。
5.2 goto语句以及用goto语句构成循环格式:goto 语句标号;功能:无条件转到语句标号指定的语句中去执行。
注意:(1)语句标号应是合法的标识符,可放在任何语句的前面。
(2)用goto语句构成循环不是一种很好的方法。
例5.1用if语句和goto语句构成循环,求∑100n=1n。
此问题的算法是比较简单的,可以直接写出程序:main( ){int i,sum=0;i=1;looP: if(i<=100){ sum=sum+i;i++;goto loop;}printf("%d",sum);}运行结果如下:5050这里用的是“当型”循环结构,当满足“i<=100”时执行花括弧内的循环体。
请学生自己画出流程图。
5.3 while语句格式:while (表达式)循环体;功能:当表达式为真时执行循环体的语句,直到表达式为假时退出循环。
例5.2求∑100n=1n。
用传统流程图和N S结构流程图表示算法,见图5.2(a)和图5.2(b)。
根据流程图写出程序:main(){int i,sum=0;i=1;while (i<=100){sum=sum+i;i++;}printf("%d",sum);}需要注意:(1) 循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。
如果不加花括弧,则while语句的范围只到while后面第一个分号处。
例如,本例中while语句中如无花括弧,则while语句范围只到“sum=sum+i;”。
(2) 在循环体中应有使循环趋向于结束的语句。
例如,在本例中循环结束的条件是“i>100”,因此在循环体中应该有使i增值以最终导致i>100的语句,今用“i++;”语句来达到此目的。
c1_5_3

cout << "出现在 << index << "位置 出现在" 位置"; 出现在 位置
}
ห้องสมุดไป่ตู้
else
{
cout << "未出现 未出现"; 未出现
}
从键盘输入2个字符串 个字符串, 例 : 从键盘输入 个字符串 , j = 0; 再把第2个字串接到第 个字串接到第1个字 再把第 个字串接到第 个字 while(q[j] != '\0') 串的后面。 串的后面。
p[0] p[1] p[2] p[3] p[4] p[5]
q[0] q[1] q[2] q[3]
a
b '\0'
c
d
e '\0'
a
b
c
d
e '\0'
char str1[80]; char str2[80]; int i, j; cin >> str1; cin >> str2; i = 0; while(str1[i] != '\0') { i ++; }
char p[80]; char q[80]; int i, j; cin >> p; //ab cin >> q; //cde i = 0; while(p[i] != '\0') i ++; //i=2
p[0] p[1] p[2]
{ p[i] = q[j]; i++; j++; } p[i] = '\0'; cout<< "拼接后字符串 " 拼接后字符串: 拼接后字符串 << p << "\n"; //abcde
C语言PPT(崔伍子)第5章上机、课堂练习、补充实验、习题

5-4 编写程序,数组中已存放若干身份证号码, 输入某年某月日期,自动给那天生日的人显 示贺词。日期按8位输入,如:19870109。 主要代码: for(i=0; i<5; i++) { strcpy(temp,card[i]+6); temp[8]='\0'; if(strcmp(temp,today)==0) { printf("Hello %s:\n",card[i]); printf("Happy birthday!\n"); } }
5-4 编写程序,输入一个字符串存放在数组 a中,把a数组中所有大小写字母存放在 数组b中构成新的字符串。 主要代码: while(a[i]!='\0') { if(a[i]>='A' && a[i]<='Z' || a[i]>='a' && a[i]<='z') { b[j]=a[i]; j++; } i++; } b[j]='\0';
5-5 编写程序,输入一个字符串,判断该字 符串中左括号“(”和右括号“)”的个 数是否相等。 主要代码: while(a[i]!='\0') { if(a[i]=='(') n++; if(a[i]==')') m++; i++; }
C程序设计教案(第5章第1次)

一、 章节内容:
第 5 章 数组
二、 教学目标:
通过本章的学习,要求能熟练掌握数组的基本概念,熟练掌握一维数组、二
维数组和字符数组的定义、赋值,熟练掌握数组的输入和输出方法,掌握字符串
和字符数组的不同特点,掌握数组的排序、查询等基本操作方法。学习数组知识
为后续章节做好准备,也为后续面向对象语言课程的学习打下基础 。
三、 教学重点:
1)一维数组的定义与应用 2)数组的排序
四、 教学难点:
1)一维数组的定义与应用 2)数组的排序
五、 教学方法和授课手段
多媒体教室,电子课件。
六、 教学过程:
一) 预备(复习):计算机开机步骤、计算机基本操作、WINDOWS 系统的基本操作。(5 分钟)
二) 课前提问(5 分钟) 三) 课程引入:介绍本课程的学习目的、主要学习内容和学习方法。(10 分钟) 四) 课程新授:(60 分钟) 5.1 数组的 C 程序实例
定义数组s[5],并且设置s[0]=’a’,s[1]=’b’,s[2]=’\0’,s[3]=’\0’,s[4]=’\0’,即后面没有赋
值的元素全部设置为0。
⑶定义时给所有的元素赋值,则可以不设置数组的大小,例如:
char s[]={ ’a’,’b’, ’c’,’d’,’e’} ;
与
char s[5]={ ’a’,’b’, ’c’,’d’,’e’} ;
} 程序运行后,屏幕显示:
/*定义s字符数组,它最多可以容纳20个字符*/ /*打印输出一串字符串*/ /*i为统计字符个数*/
/*键盘上输入字符*/ /*读取的字符存与s[0],s[1]…*/ /*超过20个字符或输入回车结束字符输入*/ /*打印输出一串字符串*/ /*反向输出这些字符*/
崔C第4章循环教案学生-1(2009.3.9).

第4章循环结构程序设计(P187~126)(一)教学(6学时)基本要求:1.熟练掌握for、while语句;了解do- while 语句和3种循环之间的转换方法。
2.学会使用break语句和continue语句控制循环提前结束。
3.了解循环嵌套。
4.熟练掌握累加、连乘、求平均值、求最大值、求素数等算法;了解输出斐波拉契(Fibonacci)级数、穷举法等算法。
重点:for、while语句;求累加、连乘、平均值、最大值、求素数等算法。
难点:循环嵌套;求素数算法。
进度:第1讲(3学时)▫ for 语句、while 语句、do- while 语句。
▫ 累加、连乘、求平均值、求最大最小值、输出斐波拉契(Fibonacci)级数算法。
第2讲(3学时)▫ break、continue语句和循环嵌套。
▫ 介绍求素数、求水仙花、猴子吃桃、最大公约等算法。
例题操作:进度例题知识点第1讲P88例4.1~4.13 for 、while 和do- while语句。
累加、连乘、平均值、最大最小值、斐波拉契(Fibonacci)级数算法。
第2讲P103例4.14~4.19介绍例4.20~4.24break、continue语句和循环嵌套。
求素数、水仙花、吃桃、最大公约等经典例题算法。
(二)实验(4学时)题目:循环结构目的:熟练掌握for 语句和while语句。
了解循环语句的嵌套。
重点:for语句。
难点:穷举法和素数算法。
内容:进度题目知识点文件名第1讲P120训练4.1及扩展for语句。
XL4-1、XL4-1-k P120训练4.2及扩展while语句。
XL4-2、XL4-2-k第2讲P125习题4基础部分16学习嵌套循环,了解百元穷举法。
XT4-16P125习题4基础部分20学习嵌套循环,了解素数算法。
XT4-20 P121训练4.3switch语句多选XL4-3 P122训练4.4do- while语句XL4-4(三)课后作业阅读教材第4章。
C语言程序设计教程CJ05数组潭浩强第3版精品PPT课件

Page 14
top
mid
bot
第3轮查找
10 11 12 13 23 25 26 27
bot=mid-1
top mid bot
第4轮查找 top=mid+1
12 13 26 27
top bot mid
折半查找中的三个临时变量间的迭代
1. 键盘接收10个数,按有小到 大排序,再输入一个数,插在 相应位置。
数组名[下标 ] 例:fstud[3]表示数组 fstud 中第四个元素。
说明: 先定义后使用; 下标从0开始;0,……,数组长度-1 C规定只能引用单个元素,不能一次引用整个数组。
例:
6
《程序设计》-2005秋
5.1.3 一维数组的初始化
1. 定义时赋初值
inum
(1) 对全部元素赋初值;
例: float fstud[100];
int inum[6];
char cname[9];
…..
说明: 数组名命名规则与变量名的命名规则相同; [ ]中的常量表达式的值是数组长度,即元素
个数; C规定,数组为静态存储(static),所以常量表
达式中不能含有变量。
5
《程序设计》-2005秋ຫໍສະໝຸດ 5.1.2 数组元素的引用
796 697
第四轮3个数比较2次
59762
29765
97
第二轮5个数比较4次
79
第五轮2个数比较1次
PNag个e 1数2 :比较N-1轮;第 j 轮,N-j+1 个数,比较N-j次
查找之折半查找法。
前提:数据已排序 思想:先检索序列1/2处的数据,看它是否为所需 的数据,若不是,则判断要找的数据是在当中数 的哪一边,下次就在这个范围内查找,… 。每次 将查找范围缩小一半,直到找到这个数或得出找 不到的结论为止。
C语言程序设计教学课件作者第2版乌云高娃课件源程序及习题答案第5章节数组课件

问题5.10
• 在程序中经常要涉及到字符串的输入输出 操作,从键盘输入“welcome”,再显示 到屏幕上。(字符数组的输入输出)
问题5.11
• 班级举行元旦晚会,要求每位嘉宾都在进 门时按任意键一次(回车键除外),终止 进场时输入回车键,晚会结束后,举办方 希望查看晚会参加人数,试编程实现(该 问题是求一个字符串中有多少个有效字 符)。
数值型数组不同的地方。整体输入可以使用gets()函数或 scanf()函数的%s格式 ,例如: • char chTest[10]; • scanf(“%s”, chTest);
问题5.8
• 新生入校参加军训,12名同学站成了3行4列,请编程序 帮助教官从键盘输出12名同学的身高,并且求出其中个 子最高的同学的身高。
流程图
问题5.9
• 看过电影黑客帝国(the Matrix)之后,有 12名同学排成3行4列准备进行演习,根据 他们自编的剧情需要,他们需要进行行列 交换,在另一个位置上站成4行3列,请编 写程序实现交换后的站位,每个同学的代 号由初始化数据给出。
学一学
字符串及其结束标志‘\0’:
• 字符串是用双引号括起来的若干有效字符序列。字符串可以包括字母、数
字、专用字符、转义字符等。如
“I am a student”, “Basic”,
“x+y=%d\n” 等都是合法的字符串。
• 一般来讲,字符串是利用字符数组存放的。在进行字符处理时,必须 事先知道字符数组中的字符个数,这在程序设计过程中是很麻烦的一 件事。
• 2.在问题5.7中,成绩表的数据是在定义 时初始化赋值的,但是现在又有一组比赛 数据要输入,请你将数据改由键盘输入 (提示:可参照输出采用双重循环进行)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第5章数组(P128~165)(一)教学(6学时)基本要求:1.掌握一维数组、字符串等概念、初始化和输入输出方法,了解二维数组的使用方法。
2.熟练掌握一维数组的逆置、移动、查找、插入、删除、排序、统计等算法。
3.熟练掌握字符串有关操作。
重点:一维数组的逆置、移动、查找、插入、删除、排序、统计等算法及字符串处理。
难点:一维数组有关算法;字符串有关操作;二维数组应用。
进度:●第1讲(3学时)⏹一维数组概念及数组元素的逆序存放、查找、删除、插入、排序等算法。
●第2讲(3学时)⏹字符数组和字符串概念及其使用。
⏹二维数组。
例题操作:(二)实验(4学时)题目:数组应用目的:●学习构建一维数组及数组中数据的移动、查找、插入、删除等算法。
●学习字符串有关操作。
●二维数组及其应用。
重点:一维数组的应用和字符串有关操作。
难点:一维数组中数据的移动、查找、插入、删除、排序等算法和字符串操作。
内容:(三)课后作业●阅读教材第5章。
其中例5.1~5.12中有关逆置、移动、查找、插入、删除、排序、统计等算法。
例5.13~5.18中有关字符串概念及其应用的例题。
例5.19~5.29中有关提高部分例题。
练习: P163习题5基础部分1~8(不交)。
上机题(交)第5章上机训练-1【补充题5.1(交)】一维数组的建立和查找操作。
(文件名BC5-1)(1)建立一维数组1)定义一个名为a的一维数组,含10个元素,每个元素都是整型。
2)从键盘输入10个互不相同的整数存放在该数组中。
3)输出该数组。
(2)查找相同值(参考教材P136【例5.8】)1)通过键盘给变量x输入值。
2)在数组中查找与x值相同的元素,若找到用k1记录该元素的下标。
3)如果找到输出下标值k1,否则输出没有找到的信息。
(3)查找最小值(参考教材P137【例5.9】)1)查找该数组中值最小的元素,并用k2记录最小值元素的下标。
2)输出最小值和最小值下标k2。
1.目标:(1)学习定义一维数组、给数组元素输入值和输出数组元素值的方法。
(2)掌握在数组中查找元素的方法。
2.步骤:(1)定义和建立一维数组1)定义含10个整型元素的一维数组a:int a[10];2)定义程序中用到的各整型变量:int i=0,x=0,k1=-1,k2=0;i :循环控制变量x :待查找值k1 :查找相同值信息的标志,初值为-1,如果找到则为找到元素的下标值。
k2 :查找到的最小值的下标3)通过键盘使数组每个元素得到值。
printf("输入10个不相同的整数: ");for ( i=0; i<10; i++ ) scanf("%d",&a[i]); /* 为每个元素输入值*/4)输出该数组。
for ( i=0; i<10; i++ ) printf ("%2d",a[i]); /* 输出每个元素值*/printf("\n");(2)查找相同值1)通过键盘键入需查找值x。
printf("输入查找值x: ");scanf("%d",&x); /* 输入需查找的值*/2)在数组中查找与x值相同的元素,若找到用k1记录该元素的下标值。
for( i=0; i<10; i++ ) /* 将x与数组元素依次比较 */if( x==a[i] ) k1=i; /* 如果找到值相同元素,用k1记录该元素下标值i */ 3)如果找到输出下标值k1,否则输出没有找到的信息。
if( k1!=-1 ) printf("找到! 下标值为:%d \n",k1); /* k1≠-1说明找到了值相同元素 */else printf("没找到%d! \n",x); /* k1为-1说明没有找到 */ (3)查找最小值1)查找该数组中值最小的元素,并用k2记录最小值的下标值。
k2=0; /* 假设0下标元素当前值最小,用k2记录其下标值 */for ( i=1; i<10; i++ ) /* 将当前值最小元素a[k2]与其余元素依次比较 */ if ( a[k2]>a[i]) k2=i; /* 只要找到小于a[k2]的元素,就用k2记录其下标值i */ 2)输出最小值和最小值下标k2。
printf ("最小值是:%d 下标为:%d\n",a[k2],k2); /* 输出最小值和最小值下标*/3.提示:(1)查找相同值:变量k1在此题中作为查找相同值信息的标志,查找有两种可能,如果没有找到,k1保持初值-1,如果找到,k1则为找到的数组元素的下标值。
(2)查找最小值:注意不必用min记录当前最小值元素,只要用k2记住当前最小值元素的下标就可以了。
运行结果:找到相同值【补充题5.2(交)】一维数组的建立和插入操作。
(文件名BC5-2)已有定义:int a[11]={1,2,3,4,5,6,7,8,9,10}; 要求在数组下标j (0≤j ≤10)处插入100,j 值通过键盘输入。
说明:(1)要完成插入操作,务必在定义数组时多开辟若干存储单元用于存放插入的数据。
(2)在做插入操作之前,应该先将插入点及其后各数组元素值向数组尾部方向移动一位。
移动必须从最后一个元素开始,依次向数组首部方向进行。
请看图示:例如:j=3为插入点1.目标:(1)熟悉一维数组的定义、学习数组初始化的方法。
(2)学习在一维数组中确定插入点和将数插入到数列中的方法。
2.步骤:(1)定义变量和一维数组1)定义和初始化一维数组a :int a[11]={1,2,3,4,5,6,7,8,9,10}; /* 定义并初始化 */说明:因为是插入操作,定义数组时要多开辟一个存储单元用于存放插入的数据。
因此这里定义一个含11个整型元素的一维数组a ,只给前10个元素设置了初值。
2)定义变量i 和j ,初值为0。
i :循环控制变量 j :插入点位置(2)输出插入操作前的数组a ,注意:只有前10个是有效数据printf("插入操作前的数组:\n"); for ( i=0; i<10; i++ ) printf("%4d",a[i]); printf("\n");(3)通过键盘输入j 值确定插入点插入前数组示意图a a[10]j=3 a ① 插入过程示意图插入后数组示意图 j=3 a a[0] a[10]printf("请输入j(0≤j≤10): " );scanf("%d",&j);(4)移动数据:将下标j(含j)及其后各数组元素值向数组尾部方向移动一位。
移动必须从最后一个元素开始,依次向数组首部方向进行。
for ( i=10; i>=j+1; i-- )a[i]=a[i-1];说明:1)当0≤j<10时,需要移动数据,执行for循环,从数组最后一个元素起至下标j元素止,将该区间的数据依次向右移动一位。
2)若j=10时,不需要移动数据,for循环一次都不执行。
(5)插入数据:在下标j位处插入100a[j]=100;(6)输出插入操作后的数组a(注意:插入100后数组a中已有11个有效数据)printf(" 插入操作后的数组:\n");for ( i=0; i<11; i++ ) printf("%4d",a[i]); /* 多输出一位*/3.提示:插入操作完成后,数组元素总个数将增加,输出数据时要注意。
运行结果:插在首部【P160 训练5.1】若已有按降序排列的数列20、18、16、14、12、10、8、6、4、2,现要求将键盘输入的一个数k ,插入到该数列中,要求按原来的排序规律插入。
(文件名XL5-1) 说明:(1)定义数组时必须多开辟存储单元用于存放插入的数据。
(2)若要保证插入后原数组仍按降序排列,应该先找到插入点。
(3)在做插入操作之前,应该先将插入点及其后各数组元素值向数组尾部方向移动一位。
移动必须从最后一个元素开始,依次向数组首部方向进行。
下图以k=15为数据插在数列当中的例子插入前数组示意图a a[0] a[10]j=3 a ① 插入过程示意图插入后数组示意图 j=3 a a[0] a[10]插在中间插在尾部1.目标:(1)熟悉一维数组的定义和初始化方法。
(2)掌握寻找插入点和将一个数插入到数列中的方法。
2.步骤:(1)定义变量和一维数组1)定义和初始化一维数组aint a[11]={20,18,16,14,12,10,8,6,4,2}; /* 定义并初始化*/说明:因为是插入操作,定义数组时要多开辟一个存储单元用于存放插入的数据。
因此这里定义一个含11个整型元素的一维数组a,只给前10个元素设置了初值。
2)定义整型变量i、j、k,初值均为0。
i :循环控制变量j :插入点下标值k :插入值(2)输出插入操作前的数组a(3)通过键盘输入插入值k(4)通过while循环查找插入点j说明:1)解释while循环的判断条件:a[j]>=k && j<10●当在数组a中没有找到比k小的元素同时查找还在数组的有效范围内(0<j<10),执行循环,继续查找。
●一旦找到一个比k小的元素(即a[j]<k)或者始终没有找到比k小的元素(即j =10),循环将终止。
2)举例说明:●若k为24:因a[0]值小于k,循环一次不执行,j=0为插入点,数据插在首部。
●若k为15:当j为0、1、2时,a[j]值都大于k,循环继续;a[3]小于k,循环终止,找到插入点j=3。
●若k为1:在原数列中始终没有找到比k小的元素,循环终止时j=10,数据直接插在尾部。
(5)移动数据:将下标j(含j)及其后各数组元素值向数组尾部方向移动一位。
移动必须从最后一个元素开始,依次向数组首部方向进行。
说明:1)当0≤j<10时,为了将数据插在数列当中,需要向右移动数据。
执行for循环,可从数组最后一个元素起至下标j元素止,将该区间的数据依次向右移动一位。
2)若j=10时,不需要移动数据,for循环一次都不执行,数据直接插在尾部。
(6)插入数据:在下标j位处插入k(7)输出插入操作后的数组a3.提示(1)while后的表达式a[j]>=k && j<10 不能只写a[j]>k,因为结束while循环的条件有两个:当找到第一个比k小的元素或者没有找到比k小的元素。
(2)插入操作完成后,数组元素总个数将增加,输出操作要注意。