简答题

以下是一个C语言程序,用来计算一个数组a中每个元素的和。当参数len为0时,返回值应该是0,但是在机器上执行时,却发生了存储器访问异常。请问这是什么原因造成的,并说明程序应该如何修改。

正确答案

参数len的类型是unsigned,所以,当len=0时,执行len-1的结果为11…1,是最大可表示的无符号数,因而,任何无符号数都比它小,使得循环体被不断执行,引起数组元素的访问越界,发生存储器访问异常。只要将len声明为int型,或循环的测试条件改为i

答案解析

相似试题
  • 编制一个计算数组中所有负数之和的子程序。并利用此子程序分别计算A数组和B数组中的负数之和,结果分别放在SUM1和SUM2单元中。

    简答题查看答案

  • 在C语言中,符号A与a可以用来表示同一个变量。

    判断题查看答案

  • 编一个程序,定义一个类,该类中定义二个非静态方法,一个方法用来求出这个三角形的周长,另一个方法用来求出这个三角形的面积。已知三角形三条边a,b,c,计算其面积可以用Math类中的Sqrt()方法,有表达式Math.Sqrt(s*(s-a)*(s-b)*(s-c)),可以利用它计算指定数的开方,其中s=(a+b+c)/2。在主方法中输入一个三角形三条边a,b,c,要求调用这二个非静态方法计算三角形的周长和面积。注意:在输入三角形三条边时,必须检查它们的数据合法性。

    简答题查看答案

  • 若有数组定义语句:int a[3]={6};float b[3];double c[3]={1.2,-56.7,38};则以下判断哪一个不成立()

    单选题查看答案

  • 设有一个数组存放学生的成绩(0~100),编制一个子程序统计0~59分、60~69分、70~ 9分、80~89分、90~100分的人数,并分别存放到scoreE、scoreD、score C、score B及score A单元中。编写一个主程序与之配合使用。

    简答题查看答案

  • 15个数按由从小到大顺序存放在一个数组A[15]中,输入一个数,要求用二分折半查找法找出该数是数组中的第几个元素的值。如果该数不在数组中,则打印出“无此数”。假设inputdata()和sort()函数已存在,用来输入数据和排序用的。请完成该程序。

    简答题查看答案

  • 为某研究所编写一个通用程序,用来计算每一种交通工具运行1000公里所需的时间,已知每种交通工具的参数都是3个整数A、B、C的表达式。现有两种工具:Car和Plane,其中Car的速度运算公式为:A*B/C,Plane 的速度运算公式为:A+B+C。  要求在未来如果增加第3种交通工具的时候,不必修改以前的任何程序,只需要编写新的交通工具的程序。

    简答题查看答案

  • 某班学生的记录由学号和成绩组成。编写一个C程序,将指定分数范围内的学生数据放在另一个数组中。

    简答题查看答案

  • 设有二维数组a[5][6],每个元素占相邻的8个字节,存储器按字节编址,已知a的起始地址是1000,试计算数组a的最后一个元素起始地址。

    简答题查看答案