您好, 访客   登录/注册

C语言数组应用示例

来源:用户上传      作者: 李晓坚 于震

  摘要:本文着重研究C语言数组应用问题。
  关键词:C语言 数组应用 程序
  
  C语言是国内外广泛使用的结构化程序设计语言,它功能丰富、表达能力强、使用方便灵活、目标程序效率高、可移植性好,既具有高级语言的优点,又具有低级语言的许多优点。因此,C语言既可以用于开发系统软件,也可以用来开发应用软件,应用面非常广,许多大型的软件都是采用C语言开发的。
  目前多数高等院校不仅计算机专业开设C语言这门课,而且,非计算机专业也有很多开设了这门课。同时亦有很多学生选择了C语言作为参加全国计算机等级考试(二级)的考试科目。
  当然,近年来,许多其他大型化的软件百花齐放,C语言的地位也受到了很大冲击,但它在高等职业和中等职业的教学中仍然扮演着非常重要的角色。
  在C语言的许多实际应用中,需要存储与处理大量的数据,例如,在数值计算中、向量和矩阵的运算,它们不但有多个数据,而且各数据之间有一定的次序。再如,在数据处理中,一张表格也有多个数据和行列之间的顺序关系。诸如此类,数据量大,数据之间有一定的次序关系的问题,如果用简单的变量来表示,由于简单变量都是各自独立的,相互之间没有什么内在的联系,不仅十分繁琐,而且很难描述它们之间的顺序关系,当数据量很大时候,使用数量有限的简单变量是无法做到的。程序处理的对象是数据,数据的关系是多样化的,为了便于存储和处理大批量的或有一定内在联系的数据,需要将多个变量组织成一定的结构形式,这就是C语言中数组及数组元素。
  把数组简单理解为存储数据的一组变量,这样定义和理解数组应用是不够的,数组是一组有序的变量序列,可以用序列的逻辑关系来进行数值和信息的处理,构造新的算法,比如超大值的算法问题就可以用数组来完成,如:几十位、几百位数相加用普通的方法是不能够实现的,在这里,数组的每一个元素对应的是十进制的一位数字,数组每一位元素的取得可以由数组赋值语句取得也可以由十进制数取得,对于一组十进制数可以计算其长度然后除以它的位权再取整,将整数部分赋值给数组相对应的数组元素即可。
  例一:a{i}+x数组a{i}与十进制数x相加
  这里数组a[i]中每个数组元素代表一个十进制数字,a[0]代表个位,a[1]代表十位,a[i]就代表了一组十进制数。
  for(i=0;i<=x;i++)做 X次循环
  {a[0]++;X次循环每次a数组加1
  if (a[0]=10)当个位满10时
  {a[0]=0; 个位置0
  a[1]++; 进位
  for(k=1;k<=i-2;k++) 将数组个位以上各位处理进位
  {if(a[k]=10)
  {a[k]=0;
  a[k+1]++;
  }}}}
  这是比较简单的情形,还可以进一步考虑两个数组的加法,c[k]=a[i]+b[j],那样的算法要复杂些,先将数组对应位置的数据相加,然后处理结果中进位问题。
  例二:10位数组a[10]*x数组a{i}与十进制数x相乘
  i=2;
  while(i<=x) x次循环,每次循环a[10]自加一次
  {for(l=0;l<=9;l++)a[10]自身复制给b[10]
  b[l]=a[l];
  for(k=1;k<=i;k++)
  {for(j=0;j<=9;j++) 对a[10]数组每位进行进位处理
  {a[j]=a[j]+b[j];
  if (a[j]>=10)
  {a[j]=a[j]-10;
  a[j+1]++;
  }}}}
  减法的算法要复杂的多,数组形式的数与一个十进制数相减,减数每次循环自减1,至0为止,被减数每次自减1,不够减的时候进行借位处理,即:a[i+1]--,还得考虑重复借位,如果减数是数组形式那减数每次做减1操作时候要考虑借位及连续借位的为题,比较复杂。
  除法相对最为复杂,可将被减数减去减数(参照减法操作),累计次数,累计值即为商,如要考虑小数则更为复杂。
  例三:求100!
  100!的运算结果达到一百多位,这样超大值的计算,普通的方法是无法完成的,利用数组就可以比较方便地来实现100!的计算,将数组中的每一个元素作为100!计算中的一位数字,a[0]为个位,a[1]为十位,将乘法用加法来代替,例如a*3可以当做a自加三次,对这种数组形式的运算来说则要在每加一次以后进行进位处理,即数组中每个元素如果有进位则要进行进位处理。
  设置两个数组a、b,包含170个数组元素,即a[0]―a[169]、b[0]―b[169],其中b数组为中间数据处理数组,将a数组置初值1,当i值为 2、3、4……100时候做i次的循环,每次a数组自加i次,每加一次做一次进位处理,结束时,a数组的结果就是100!。
  main()
  {int a[170],b[170]; 定义数组
  int i,j,k,l; 设置变量
  for(i=0;i<=169;i++)置数组初值
  {a[i]=0;
  b[i]=0;}
  a[0]=1;a数组置1
  i=2;
  while(i<=100) i值在2----100时 进行循环
  {for(l=0;l<=169;l++)
  b[l]=a[l]; a数组中间结果存b数组
  for(k=1;k<=i;k++) a数组自加操作
  {for(j=0;j<=168;j++)
  {a[j]=a[j]+b[j];
  if (a[j]>=10)进位处理
  {a[j]=a[j]-10;
  a[j+1]++;
  }}}
  i++;}
  for(j=169;j>=0;j--)显示结果
  printf("%d",a[j]);}
  当前在高职高专计算机教学中,c语言教学更多是用来培养学生建立程序设计的理念,即:根据问题建立数据模型、通过编程解决数据模型,而在本例中,100!运算数据量大,普通变量难以承担这样的计算,通过对数组应用的学习,使学生了解数组的概念、特性,就可以通过数组建立超大数据模型来解决解决类似问题,数组每一个元素就是数据中的一位数字,这就解决了位数不够的问题。同时,还要解决运算方式的问题,数组每一个元素是代表一位数字,所以当然不能用常规的加、减、乘、除、乘方等现成的算法,而是要通过编程建立新的运算方法,通过调用这些程序实现数组形式的数据运算。


转载注明来源:https://www.xzbu.com/2/view-421751.htm