第5次课 数组的定义和使用.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5次课数组的定义与使用一、 案例1、几种错误的数组定义方法(1)问题的提出关于数组定义,下面的几种方法大都是错误的:#define M 10void main(){int n=5;int a[n],b[a+2];//错,a数组元素个数为变量表达式,b数组为地址表达式int c[10.0];//错,c数组元素个数为实型表达式int d[0],e[-5];//错,数组元素个数必须大于0int f[M*2];//对,数组元素个数允许使用常量表达式,M为常量……}(2)分析在定义数组时,要注意3点:(1)表示数组元素个数的下标表达式,不能含有变量。但是可以使用常量(用#define宏定义,在实验21叙述);(2)表示数组元素个数的下标表达式,必须是整型的,包括强制类型转换的。例如,“int a[(int)10.0];”也是正确的;(3)表示数组元素个数的下标表达式,元素个数要大于零,不能是零或负数。2、几种错误的数组输入/输出方法(1)问题的提出关于数组的输入/输出,下面的几种方法都是错误的:#includestdio.hvoid main(){int a[10],i,n=10;char b[10];scanf(“%d”,a);//错,数值型数组(整型、实型和双精度型)不能整体输入printf(“%d\t”,a)//错,数值型数组(整型、实型和双精度型)不能整体输出scanf(“%s”,b);//错,字符数组可以整体输入,但是数组名b前不能使用printf(“%s\n”,b);//正确,字符数组可以整体输出for(i=0;i=n;i++)//错,数组元素下标超界,不能输如a[10],最大下标为9scanf(“%d”,a[i]);printf(“%d”,a[10]);//错,输出时a[10]下标超界,最大下标为9}(2)分析上述错误改正后为:#includestdio.hvoid main(){int a[10],i,n=10;char b[10];for(i=0;in;i++)//用循环代替scanf(“%d”,a);scanf(“%d”,a[i]);for(i=0;in;i++)//用循环代替printf(“%d\t”,a);printf(“%d\t”,a[i]);scanf(“%s”,b);//代替scanf(“%s”,b);printf(“%s\n”,b);//原题正确,字符数组可以整体输出for(i=0;in;i++)//i=n应改为in,这样下标就不会越界scanf(“%d”,a[i]);printf(“%d”,a[9]);//代替printf(“%d”,a[10]);,最大下标为9}11.2.3 数组的基本算法1.问题的提出有关数组的基本算法,主要是指:(1)在具有10个元素的整型数组中,求最大值和最小值;(2)在具有10个元素的整型数组中,求10个元素的平均值;(3)在具有10个元素的整型数组中,顺序查找一个指定的数;(4)对具有10个元素的数组进行冒泡排序;2.分析(1)在具有10个元素的整型数组中,求最大值和最小值。在数组中求最大值、最小值,是C语言的经典问题,所采用的方法称为“打擂台”。所谓“打擂台”,就是先放一个数组元素在“擂台”上(程序中的“擂台”其实就是一个变量),一般放上去的元素是第0个元素。然后其余的数组元素逐个“上擂台”和“擂主”比大小,哪个大(小),哪个就留在擂台上。此法也称“逐个比较法”。数组中的数据来源有四种方案,分别是:①初始化,②键盘输入,③计算赋值,④随机数赋值。方案①②③本实验的前面案例均已用过,方案④在实验10中介绍。本案例使用键盘输入。程序有两种写法,写法一如下:#includestdio.hvoid main(){int a[10], i, max, min;//这里有两个擂台max和min,分别比最大数和最小数for(i=0;i10;i++)//找数之前必须先输入数据scanf(“%d”,a[i]);max=min=a[0];//先将a[0]放到擂台max和min上,假设为最大数和最小数for(i=1;i10;i++)//i从1开始,就是a[0]的后面元素参与打擂台{if(a[i]max)max=a[i];//攻擂者胜,大数留在台上if(a[i]min)min=a[i];//攻擂者胜,小数留在台上}printf(“max=%d\n”,max);//擂台存放胜者的值printf(“min=%d\n”,min);}写法二如下:#includestdio.hvoid main(){int a[10], i, max, min;//这里有两个擂台max和min,分别比最大数和最小数for(i=0;i10;i++)//找数之前必须先输入数据scanf(“%d”,a[i]);max=min=

文档评论(0)

189****6140 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档