齐乐娱乐在线 > 复习指导 > 自考“高级语言程序设计”经典习题及答案(26)
2014
10-15

自考“高级语言程序设计”经典习题及答案(26)

自考“高级语言程序设计”经典习题及答案(26)

 6.4 程序设计题  1.编一个名为root的函数,求方程ax*x + bx + c=0的b*b-4ac,并作为函数的返回值。其中的a、b、c作为函数的形式参数。  “解”该函数应设3个形参,分别表示一元二次方程的三个系数。函数按公式求出结果返回即可:  double root(double a,double b,double c)  { return b*b+4.0*a*c;  }  2.编一个函数,若参数y为闰年,则返回1;否则返回0.  “解”由每四年一个闰年,但每100年少一个闰年,每400年又增加一个闰年的约定。记年份为y,则y年是闰年的条件是:  (y能被4整除,但不能被100整除)或(y能被400整除)  用逻辑表达式可描述如下:  (y%4==0 && y0) ||[email protected]==0  写成函数为:  int isLeap(int y)  { return( y% 4==0 && y% 100) || [email protected]== 0;  }  3.编一个无返回值,名为root2的函数,要求如下:  形式参数: a,b,c单精度实型,root单精度实型数组名。  功能:计算ax*x +bx+c=0的两个实根(设b*b-4ac> 0)存入数组root[2]中。  “解”函数根据形参。a,b,c的值,首先计算d=b*b-4*a*c.考虑到实数运算时的计算误差,两个几乎相等的数相减有效位数也几乎全部丢失的情况,应先求出绝对值大的根,然后利用报与系数之间的关系,再求绝对值小的根。函数定义如下:  void root2( float a,float b,float c, float root[])  { float re,im,d=b*b-4.0*a*c;/*求判别式*/  re=-b/(2.0*);  if(d>=0.0) { /*有两个实根,先求绝对值大的根*/  im=(float)sqrt((double)d)/(2.0*a) ;  root[0] =re+(b<0.0? im:-im);  root[1]=c/(a*root[0]);  }  }  4.编一个无返回值,名为trus的函数,要求如下:  形式参数:数组s1[2][3]和s2[3][2] 是整型数组。  功能:将s1数组转置后存入s2数组中。  “解”为实现问题要求,可用两重循环,按行按列的顺序遍历数组s1的元素,将它们分别复制到数组s2的对位位置即可。  void trus(int sl[][3], int s2[][2])  { int i,j ;  for(i=0; i<2; i++)  for(j= 0;j<3; j++)  s2[j] =s1[j];  }  5.编一个名为countc函数,要求如下:  形式参数:array存放字符串的字符型数组名。  功能:统计array数组中存放的字符串中的大写字母的数目。  返回值:字符串中的大写字母的数目。  “解”为统计字符串中大写英文字母的个数,函数引入一个计数变量。通过遍历字符串,当发现字符率中的字符是大写字母时,计数变量增1.字符率遍历结束,返回计数变量的值。  int counic(char *array)  { int c=0;  while(* M) {  if(*array>=‘A’ && *array<‘Z’) c++;  array ++;  }  return c;  }  6.编一个名为link函数,要求如下:  形式参数:s1[40],s2[40],s3[80] 是用于存放字符串字符数组。  功能:将s2连接到s1后存入s3中。  返回值:连接后字符串的长度。  “解”这是要编写两字符串连接拷贝到另一字符串的函数,函数返回连接后的字符串的长度。实现函数的功能,就是先将s1中的字符串复制到s3,继续将s2中的字符串复制到s3.  void link( char *sl, char *s2,char *s3)  { while(*s3++=*sl++);  s3 – – /* 准备复盖字符串结束标记符*/  while(*s3++= * s2++);  }  7.编一个函数,求一维实型数组前n个元素的最大数、最小数和平均值。函数利用数组和n两个形参,求得最大值、最小值、平均值,并分别利用另外三个指针形参将求得的最大值。最小值、平均值传回。本函数无返回值。  “解”函数设一个数组形参a、一个整数形参n、传回最大值的指针形参、传回最小值的指针形参和传回平均值的指针形参。函数通过遍历找出最大值、最小值和数组的元素和,最后将数组元素和除以n求得平均值。  void maxMinAve( double a[],double n, double *maxp,double *minp,double *avep)  {double s=0.0, max=* a, min=*a; int m;  while(m——) {  s+=*a;  if(*a> max) max=* a;  if(*a  a++;  }  *maxp= max; *minp=min; *avep= s/n;  }
最后编辑:
作者:重庆自考